public static boolean hasMethod(String name, Element element) { return hasMethod(name, element, true); }
public static boolean hasMethod(ProcessingEnvironment processingEnv, Class<?> clazz, ExecutableElement method) { TypeElement typeElement = processingEnv.getElementUtils().getTypeElement(clazz.getCanonicalName()); if (typeElement == null) { //unknown class, probably generated and still not compiled return false; } return hasMethod(processingEnv, typeElement, method); }
public void iterateFields(ElementHandler handler) { List<? extends Element> fields = ElementFilter.fieldsIn(element.getEnclosedElements()); Collections.sort(fields, new Comparator<Element>() { @Override public int compare(Element o1, Element o2) { return o1.getSimpleName().toString().compareTo(o2.getSimpleName().toString()); } }); for (Element field : fields) { if (field.getModifiers().contains(Modifier.STATIC) || field.getModifiers().contains(Modifier.PRIVATE) || field.getModifiers().contains(Modifier.PROTECTED) || field.getModifiers().contains(Modifier.FINAL)) { continue; } String fieldName = field.getSimpleName().toString(); String getter = MethodHelper.toGetter(fieldName); if (ProcessorUtils.hasMethod(getter, element)) { processingEnv.getMessager().printMessage(Kind.WARNING, "Field " + fieldName + " is accessible by public modifier and also using the " + getter + " method.", element); continue; } handler.handle(field, fieldName); } }
public static String toGetterMethod(TypeElement typeElement, String fieldName) { if (typeElement != null && ProcessorUtils.hasMethod(toMethod(MethodHelper.GETTER_IS_PREFIX, fieldName), typeElement)) { return toIsGetter(fieldName); } return toGetter(fieldName); }
private boolean hasAbstractMethod(TypeElement processingElement) { List<ExecutableElement> methods = ElementFilter.methodsIn(processingElement.getEnclosedElements()); ElementSorter.sort(methods); for (ExecutableElement method: methods) { if (!MethodHelper.isGetterMethod(method) && !MethodHelper.isSetterMethod(method) && !isObjectMethod(method)) { return true; } if (MethodHelper.isGetterMethod(method) && !ProcessorUtils.hasMethod(MethodHelper.toSetter(method), domainDataType.asElement(), true)) { return true; } } for (TypeMirror interfaceType: processingElement.getInterfaces()) { TypeElement interfaceTypeElement = (TypeElement)((DeclaredType)interfaceType).asElement(); if (hasAbstractMethod(interfaceTypeElement)) { return true; } } return false; } }
protected void printDomainInstancer(FormattedPrintWriter pw, DomainDeclaredType domainTypeElement) { if (!entityResolver.shouldHaveIdMethod(domainTypeElement)) { pw.println(" return new ", domainTypeElement, "();"); } else { pw.println(domainTypeElement, " " + RESULT_NAME, " = new ", domainTypeElement, "();"); String setterMethod = MethodHelper.toSetter(domainTypeElement.getIdMethod(entityResolver)); if (ProcessorUtils.hasMethod(setterMethod, domainTypeElement.asElement())) { pw.println(RESULT_NAME + "." + MethodHelper.toSetter(domainTypeElement.getIdMethod(entityResolver)) + "((", domainTypeElement.getId(entityResolver), ")" + "id);"); } else { pw.println("if (id != null) {"); pw.println("throw new ", RuntimeException.class, "(\"Unable to define ID for imutable entity. Please define " + setterMethod + " method for ", domainTypeElement, "!\");"); pw.println("}"); } pw.println("return " + RESULT_NAME + ";"); } } }
ExecutableElement domainGetterMethod; if (domainTypeElement.asElement() != null && ProcessorUtils.hasMethod(MethodHelper.toMethod(MethodHelper.GETTER_IS_PREFIX, domainPathResolver.getCurrent()), domainTypeElement.asElement())) { isMethod = true;