public AbstractKeyEventHandler(Class<?> targetClass, AndroidAnnotationsEnvironment environment) { super(targetClass, environment); this.annotationHelper = new KeyCodeHelper(environment, getTarget()); }
public int[] extractKeyCode(Element element) { int[] value = extractAnnotationValueParameter(element); if (value.length == 0) { Matcher matcher = METHOD_NAME_PATTERN.matcher(element.getSimpleName()); if (matcher.matches()) { String extractedKeyName = matcher.group(2).toLowerCase(); String constantName = CaseHelper.camelCaseToUpperSnakeCase(KEYCODE_PREFIX, extractedKeyName, ""); int keyCode = getKeyCodeForName(constantName); if (keyCode == KEYCODE_NOT_FOUND) { return value; } else { value = new int[] { keyCode }; } } } return value; }
@Override public void process(Element element, HasKeyEventCallbackMethods holder) throws Exception { String methodName = element.getSimpleName().toString(); ExecutableElement executableElement = (ExecutableElement) element; TypeMirror returnType = executableElement.getReturnType(); boolean returnMethodResult = returnType.getKind() != TypeKind.VOID; JSwitch switchBody = getSwitchBody(holder); int[] keyCodes = annotationHelper.extractKeyCode(element); for (int keyCode : keyCodes) { String keyCodeFieldName = annotationHelper.getFieldNameForKeyCode(keyCode); JBlock switchCaseBody = switchBody._case(getClasses().KEY_EVENT.staticRef(keyCodeFieldName)).body(); JInvocation methodCall = invoke(methodName); if (returnMethodResult) { switchCaseBody._return(methodCall); } else { switchCaseBody.add(methodCall); switchCaseBody._return(TRUE); } passParametersToMethodCall(element, holder, methodCall); } }
public String getFieldNameForKeyCode(int keyCode) { if (keyNamesByCode == null) { keyNamesByCode = new HashMap<>(); List<VariableElement> keyEventEnclosedFieldElements = getKeyEventEnclosedFieldElements(); for (VariableElement element : keyEventEnclosedFieldElements) { if (element.getSimpleName().toString().contains(KEYCODE_PREFIX)) { keyNamesByCode.put((Integer) element.getConstantValue(), element.getSimpleName().toString()); } } } return keyNamesByCode.get(keyCode); }
private List<VariableElement> getKeyEventEnclosedFieldElements() { TypeElement keyEventElement = getElementUtils().getTypeElement(CanonicalNameConstants.KEY_EVENT); return ElementFilter.fieldsIn(keyEventElement.getEnclosedElements()); }
@Override protected void validate(Element element, ElementValidation validation) { coreValidatorHelper.enclosingElementExtendsKeyEventCallback(element, validation); validatorHelper.isNotPrivate(element, validation); validatorHelper.doesntThrowException(element, validation); if (!annotationHelper.uniqueKeyCode(element, getTarget())) { validation.addError(element, "%s " + element.getSimpleName() + " keyCode is not unique"); } ExecutableElement executableElement = (ExecutableElement) element; validatorHelper.returnTypeIsVoidOrBoolean(executableElement, validation); String[] paramTypes = getParamTypes(); ValidatorParameterHelper.AnyOrderParamValidator param = validatorHelper.param.anyOrder(); if (paramTypes.length > 0) { for (String paramType : paramTypes) { param.type(paramType).optional(); } param.validate(executableElement, validation); } }
public boolean uniqueKeyCode(Element element, String targetAnnotationClass) { int[] elementsKeyCodes = extractKeyCode(element); if (elementsKeyCodes.length == 0) { return false; for (AnnotationMirror annotationMirror : annotationMirrors) { if (annotationMirror.getAnnotationType().asElement().toString().equals(targetAnnotationClass)) { int[] keyCodes = extractKeyCode(oneEnclosedElement); for (int keyCode : keyCodes) { if (uniqueKeyCodes.contains(keyCode)) {
public int getKeyCodeForName(String fieldName) { if (keyCodesByName == null) { keyCodesByName = new HashMap<>(); List<VariableElement> keyEventEnclosedFieldElements = getKeyEventEnclosedFieldElements(); for (VariableElement element : keyEventEnclosedFieldElements) { if (element.getSimpleName().toString().contains(KEYCODE_PREFIX)) { keyCodesByName.put(element.getSimpleName().toString(), (Integer) element.getConstantValue()); } } } Integer keyCode = keyCodesByName.get(fieldName); return keyCode != null ? keyCode : KEYCODE_NOT_FOUND; }
private List<VariableElement> getKeyEventEnclosedFieldElements() { TypeElement keyEventElement = getElementUtils().getTypeElement(CanonicalNameConstants.KEY_EVENT); return ElementFilter.fieldsIn(keyEventElement.getEnclosedElements()); }
@Override protected void validate(Element element, ElementValidation validation) { coreValidatorHelper.enclosingElementExtendsKeyEventCallback(element, validation); validatorHelper.isNotPrivate(element, validation); validatorHelper.doesntThrowException(element, validation); if (!annotationHelper.uniqueKeyCode(element, getTarget())) { validation.addError(element, "%s " + element.getSimpleName() + " keyCode is not unique"); } ExecutableElement executableElement = (ExecutableElement) element; validatorHelper.returnTypeIsVoidOrBoolean(executableElement, validation); String[] paramTypes = getParamTypes(); ValidatorParameterHelper.AnyOrderParamValidator param = validatorHelper.param.anyOrder(); if (paramTypes.length > 0) { for (String paramType : paramTypes) { param.type(paramType).optional(); } param.validate(executableElement, validation); } }
public boolean uniqueKeyCode(Element element, String targetAnnotationClass) { int[] elementsKeyCodes = extractKeyCode(element); if (elementsKeyCodes.length == 0) { return false; for (AnnotationMirror annotationMirror : annotationMirrors) { if (annotationMirror.getAnnotationType().asElement().toString().equals(targetAnnotationClass)) { int[] keyCodes = extractKeyCode(oneEnclosedElement); for (int keyCode : keyCodes) { if (uniqueKeyCodes.contains(keyCode)) {
public int[] extractKeyCode(Element element) { int[] value = extractAnnotationValueParameter(element); if (value.length == 0) { Matcher matcher = METHOD_NAME_PATTERN.matcher(element.getSimpleName()); if (matcher.matches()) { String extractedKeyName = matcher.group(2).toLowerCase(); String constantName = CaseHelper.camelCaseToUpperSnakeCase(KEYCODE_PREFIX, extractedKeyName, ""); int keyCode = getKeyCodeForName(constantName); if (keyCode == KEYCODE_NOT_FOUND) { return value; } else { value = new int[] { keyCode }; } } } return value; }
@Override public void process(Element element, HasKeyEventCallbackMethods holder) throws Exception { String methodName = element.getSimpleName().toString(); ExecutableElement executableElement = (ExecutableElement) element; TypeMirror returnType = executableElement.getReturnType(); boolean returnMethodResult = returnType.getKind() != TypeKind.VOID; JSwitch switchBody = getSwitchBody(holder); int[] keyCodes = annotationHelper.extractKeyCode(element); for (int keyCode : keyCodes) { String keyCodeFieldName = annotationHelper.getFieldNameForKeyCode(keyCode); JBlock switchCaseBody = switchBody._case(getClasses().KEY_EVENT.staticRef(keyCodeFieldName)).body(); JInvocation methodCall = invoke(methodName); if (returnMethodResult) { switchCaseBody._return(methodCall); } else { switchCaseBody.add(methodCall); switchCaseBody._return(TRUE); } passParametersToMethodCall(element, holder, methodCall); } }
public int getKeyCodeForName(String fieldName) { if (keyCodesByName == null) { keyCodesByName = new HashMap<>(); List<VariableElement> keyEventEnclosedFieldElements = getKeyEventEnclosedFieldElements(); for (VariableElement element : keyEventEnclosedFieldElements) { if (element.getSimpleName().toString().contains(KEYCODE_PREFIX)) { keyCodesByName.put(element.getSimpleName().toString(), (Integer) element.getConstantValue()); } } } Integer keyCode = keyCodesByName.get(fieldName); return keyCode != null ? keyCode : KEYCODE_NOT_FOUND; }
public AbstractKeyEventHandler(Class<?> targetClass, AndroidAnnotationsEnvironment environment) { super(targetClass, environment); this.annotationHelper = new KeyCodeHelper(environment, getTarget()); }
public String getFieldNameForKeyCode(int keyCode) { if (keyNamesByCode == null) { keyNamesByCode = new HashMap<>(); List<VariableElement> keyEventEnclosedFieldElements = getKeyEventEnclosedFieldElements(); for (VariableElement element : keyEventEnclosedFieldElements) { if (element.getSimpleName().toString().contains(KEYCODE_PREFIX)) { keyNamesByCode.put((Integer) element.getConstantValue(), element.getSimpleName().toString()); } } } return keyNamesByCode.get(keyCode); }