private void processTypeFields(TypeElement type, MojoDescriptor descriptor) { // non-static fields for (Element member : type.getEnclosedElements()) { if (member instanceof VariableElement) { Parameter parameter = member.getAnnotation(Parameter.class); Component component = member.getAnnotation(Component.class); if (parameter != null && component != null) { // TODO error marker } if (parameter != null) { descriptor.addParameter(toParameterDescriptor((VariableElement) member, parameter)); } else if (component != null) { descriptor.addRequirement(toComponentDescriptor((VariableElement) member, component)); } } } }
private Set<TypeElement> getAnnotatedTypes(RoundEnvironment roundEnv) { Set<TypeElement> types = new HashSet<>(); roundEnv.getElementsAnnotatedWith(Mojo.class).forEach(type -> types.add((TypeElement) type)); addAnnotatedMembers(types, roundEnv, Parameter.class); addAnnotatedMembers(types, roundEnv, Component.class); return types; }
@Override public Set<String> getSupportedAnnotationTypes() { Set<String> types = new HashSet<>(); types.add(Mojo.class.getName()); types.add(Parameter.class.getName()); types.add(Component.class.getName()); return types; }
private MojoRequirement toComponentDescriptor(VariableElement field, Component component) { MojoRequirement result = new MojoRequirement(); result.setFieldName(field.getSimpleName().toString()); result.setRole(getComponentRole(field, component)); result.setRoleHint(component.hint()); return result; }
private String getComponentRole(VariableElement field, Component component) { String role; try { role = component.role().getName(); } catch (MirroredTypeException e) { role = e.getTypeMirror().toString(); } if (!Object.class.getName().equals(role)) { return role; } return getTypeString(field.asType()); }