public static ExecutableElement getOverrider(TypeElement element, ExecutableElement method, ProcessingEnvironment processingEnv) { List<ExecutableElement> methods = ElementFilter.methodsIn(element.getEnclosedElements()); for (ExecutableElement classMethod : methods) { if (processingEnv.getElementUtils().overrides(classMethod, method, element)) { return classMethod; } } if (element.getSuperclass().getKind().equals(TypeKind.DECLARED)) { return getOverrider((TypeElement)((DeclaredType)element.getSuperclass()).asElement(), method, processingEnv); } return method; } }
private void processProperty(Element element, AccessType accessType) { boolean interfaceGenerated = false; if (!cache.isProcessed(context, MetaElementType.TYPE)) { if (element.asType().getKind().equals(TypeKind.DECLARED) && accessType.equals(AccessType.PROPERTY)) { interfaceGenerated = processProperty((DeclaredType) element.asType()); } else if (element.asType().getKind().equals(TypeKind.EXECUTABLE) && accessType.equals(AccessType.METHOD)) { final TypeMirror returnTypeElement = ProcessorUtils.getOverrider(context.getProcessingElement(), ((ExecutableElement) element), processingEnv).getReturnType(); if (returnTypeElement != null && returnTypeElement.getKind() == TypeKind.DECLARED) { interfaceGenerated = processProperty((DeclaredType) returnTypeElement); } } } if (!interfaceGenerated && accessType.supports(context.getConverter()) && !cache.isProcessed(context, MetaElementType.PROPERTY)) { cache.setProcessed(context); printerProvider.getConstantsPrinter().print(context); } }
ExecutableElement overriderMethod = ProcessorUtils.getOverrider(serviceTypeElement.asElement(), method, processingEnv);
private TransferObjectContext createTOContext(ExecutableElement method, DomainDeclaredType domainTypeElement, boolean superClassMethod, ConfigurationTypeElement configurationTypeElement, List<String> generated) { String fieldName = TransferObjectHelper.getFieldPath(method); if (contains(generated, fieldName)) { return null; } TypeElement domainElement = environmentContext.getProcessingEnv().getElementUtils().getTypeElement(domainTypeElement.getCanonicalName()); ExecutableElement overrider = ProcessorUtils.getOverrider(domainElement, method, processingEnv); if (overrider != null) { method = overrider; } TransferObjectContext context = transferObjectContextProvider.get(configurationTypeElement, Modifier.PUBLIC, method, method, superClassMethod); if (context == null) { return null; } generated.add(fieldName); return context; }