下面列出了org.apache.maven.plugins.annotations.Mojo#org.apache.maven.plugins.annotations.Component 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
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());
}