in maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/extractor/annotations/JavaAnnotationsMojoDescriptorExtractor.java [664:801]
private List<MojoDescriptor> toMojoDescriptors(
Map<String, MojoAnnotatedClass> mojoAnnotatedClasses, PluginDescriptor pluginDescriptor)
throws InvalidPluginDescriptorException {
List<MojoDescriptor> mojoDescriptors = new ArrayList<>(mojoAnnotatedClasses.size());
for (MojoAnnotatedClass mojoAnnotatedClass : mojoAnnotatedClasses.values()) {
// no mojo so skip it
if (mojoAnnotatedClass.getMojo() == null) {
continue;
}
ExtendedMojoDescriptor mojoDescriptor = new ExtendedMojoDescriptor(true);
// mojoDescriptor.setRole( mojoAnnotatedClass.getClassName() );
// mojoDescriptor.setRoleHint( "default" );
mojoDescriptor.setImplementation(mojoAnnotatedClass.getClassName());
mojoDescriptor.setLanguage("java");
mojoDescriptor.setV4Api(mojoAnnotatedClass.isV4Api());
MojoAnnotationContent mojo = mojoAnnotatedClass.getMojo();
mojoDescriptor.setDescription(mojo.getDescription());
mojoDescriptor.setSince(mojo.getSince());
mojo.setDeprecated(mojo.getDeprecated());
mojoDescriptor.setProjectRequired(mojo.requiresProject());
mojoDescriptor.setRequiresReports(mojo.requiresReports());
mojoDescriptor.setComponentConfigurator(mojo.configurator());
mojoDescriptor.setInheritedByDefault(mojo.inheritByDefault());
mojoDescriptor.setInstantiationStrategy(mojo.instantiationStrategy().id());
mojoDescriptor.setAggregator(mojo.aggregator());
mojoDescriptor.setDependencyResolutionRequired(
mojo.requiresDependencyResolution().id());
mojoDescriptor.setDependencyCollectionRequired(
mojo.requiresDependencyCollection().id());
mojoDescriptor.setDirectInvocationOnly(mojo.requiresDirectInvocation());
mojoDescriptor.setDeprecated(mojo.getDeprecated());
mojoDescriptor.setThreadSafe(mojo.threadSafe());
MojoAnnotatedClass mojoAnnotatedClassWithExecute =
findClassWithExecuteAnnotationInParentHierarchy(mojoAnnotatedClass, mojoAnnotatedClasses);
if (mojoAnnotatedClassWithExecute != null && mojoAnnotatedClassWithExecute.getExecute() != null) {
ExecuteAnnotationContent execute = mojoAnnotatedClassWithExecute.getExecute();
mojoDescriptor.setExecuteGoal(execute.goal());
mojoDescriptor.setExecuteLifecycle(execute.lifecycle());
if (execute.phase() != null) {
mojoDescriptor.setExecutePhase(execute.phase().id());
if (StringUtils.isNotEmpty(execute.customPhase())) {
throw new InvalidPluginDescriptorException(
"@Execute annotation must only use either 'phase' "
+ "or 'customPhase' but not both. Both are used though on "
+ mojoAnnotatedClassWithExecute.getClassName(),
null);
}
} else if (StringUtils.isNotEmpty(execute.customPhase())) {
mojoDescriptor.setExecutePhase(execute.customPhase());
}
}
mojoDescriptor.setExecutionStrategy(mojo.executionStrategy());
// ???
// mojoDescriptor.alwaysExecute(mojo.a)
mojoDescriptor.setGoal(mojo.name());
mojoDescriptor.setOnlineRequired(mojo.requiresOnline());
mojoDescriptor.setPhase(mojo.defaultPhase().id());
// Parameter annotations
Map<String, ParameterAnnotationContent> parameters =
getParametersParentHierarchy(mojoAnnotatedClass, mojoAnnotatedClasses);
for (ParameterAnnotationContent parameterAnnotationContent : new TreeSet<>(parameters.values())) {
org.apache.maven.plugin.descriptor.Parameter parameter =
new org.apache.maven.plugin.descriptor.Parameter();
String name = StringUtils.isEmpty(parameterAnnotationContent.name())
? parameterAnnotationContent.getFieldName()
: parameterAnnotationContent.name();
parameter.setName(name);
parameter.setAlias(parameterAnnotationContent.alias());
parameter.setDefaultValue(parameterAnnotationContent.defaultValue());
parameter.setDeprecated(parameterAnnotationContent.getDeprecated());
parameter.setDescription(parameterAnnotationContent.getDescription());
parameter.setEditable(!parameterAnnotationContent.readonly());
String property = parameterAnnotationContent.property();
if (StringUtils.contains(property, '$')
|| StringUtils.contains(property, '{')
|| StringUtils.contains(property, '}')) {
throw new InvalidParameterException(
"Invalid property for parameter '" + parameter.getName() + "', "
+ "forbidden characters ${}: " + property,
null);
}
parameter.setExpression((property == null || property.isEmpty()) ? "" : "${" + property + "}");
StringBuilder type = new StringBuilder(parameterAnnotationContent.getClassName());
if (!parameterAnnotationContent.getTypeParameters().isEmpty()) {
type.append(parameterAnnotationContent.getTypeParameters().stream()
.collect(Collectors.joining(", ", "<", ">")));
}
parameter.setType(type.toString());
parameter.setSince(parameterAnnotationContent.getSince());
parameter.setRequired(parameterAnnotationContent.required());
mojoDescriptor.addParameter(parameter);
}
// Component annotations
Map<String, ComponentAnnotationContent> components =
getComponentsParentHierarchy(mojoAnnotatedClass, mojoAnnotatedClasses);
for (ComponentAnnotationContent componentAnnotationContent : new TreeSet<>(components.values())) {
org.apache.maven.plugin.descriptor.Parameter parameter =
new org.apache.maven.plugin.descriptor.Parameter();
parameter.setName(componentAnnotationContent.getFieldName());
parameter.setRequirement(new Requirement(
componentAnnotationContent.getRoleClassName(), componentAnnotationContent.hint()));
parameter.setDeprecated(componentAnnotationContent.getDeprecated());
parameter.setSince(componentAnnotationContent.getSince());
// same behaviour as JavaJavadocMojoDescriptorExtractor
parameter.setEditable(false);
mojoDescriptor.addParameter(parameter);
}
mojoDescriptor.setPluginDescriptor(pluginDescriptor);
mojoDescriptors.add(mojoDescriptor);
}
return mojoDescriptors;
}