private boolean isJsonBeanGetter(ExecutableElement executableElement) { if (executableElement.getKind() != ElementKind.METHOD) { return false; } if (executableElement.getReturnType().getKind() == TypeKind.NULL) { return false; } if (!(executableElement.getSimpleName().toString().startsWith("get") || executableElement.getSimpleName().toString().startsWith("is"))) { return false; } if (executableElement.getParameters().size() > 0) { return false; } return executableElement.getAnnotation(JsonIgnore.class) == null; }
@Override public boolean process(Set<? extends TypeElement> elements, RoundEnvironment env) { System.out.println("processing: " + env.toString()); List<MethodToLog> methodToLogs = new ArrayList<>(); List<String> classNames = new ArrayList<>(); for (Element element : env.getElementsAnnotatedWith(XLog.class)) { if (element.getKind() != ElementKind.METHOD && element.getKind() != ElementKind.CONSTRUCTOR && element.getKind() != ElementKind.CLASS) { throw new IllegalStateException( String.format( "@%s annotation must be on as method, constructor or class.", element.getSimpleName())); } if (element instanceof TypeElement) { // class String pkgName = ((TypeElement) element).getQualifiedName().toString(); if (!classNames.contains(pkgName)) { classNames.add(pkgName); } } else if (element instanceof ExecutableElement) { // method or constructor ExecutableElement e = (ExecutableElement) element; int type = XLogUtils.TYPE_METHOD; if (e.getKind() == ElementKind.METHOD) { type = XLogUtils.TYPE_METHOD; } else if (e.getKind() == ElementKind.CONSTRUCTOR) { type = XLogUtils.TYPE_CONSTRUCTOR; } TypeElement te = findEnclosingTypeElement(e); System.out.println(te.getQualifiedName().toString() + "." + e.getSimpleName()); System.out.println(e.getReturnType()); List<String> parameters = new ArrayList<>(); List<String> parameterNames = new ArrayList<>(); for (VariableElement ve : e.getParameters()) { System.out.println(ve.asType()); System.out.println(ve.getSimpleName()); parameters.add(ve.asType().toString()); parameterNames.add(ve.getSimpleName().toString()); } MethodToLog methodToLog = new MethodToLog( type, te.getQualifiedName().toString(), e.getSimpleName().toString(), parameters, parameterNames); methodToLogs.add(methodToLog); if (!classNames.contains(methodToLog.getClassName())) { classNames.add(methodToLog.getClassName()); } } } if (methodToLogs.size() > 0) { generateXLogProcessor("_" + MD5(env.toString()), methodToLogs, classNames); } return true; }