in maven-plugin-tools-generators/src/main/java/org/apache/maven/tools/plugin/generator/PluginDescriptorFilesGenerator.java [230:617]
protected void processMojoDescriptor(
MojoDescriptor mojoDescriptor,
XMLWriter w,
DescriptorType type,
JavadocLinkGenerator javadocLinkGenerator,
boolean isV4) {
boolean containsXhtmlTextValues = mojoDescriptor instanceof ExtendedMojoDescriptor
&& ((ExtendedMojoDescriptor) mojoDescriptor).containsXhtmlTextValues();
w.startElement("mojo");
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
w.startElement("goal");
w.writeText(mojoDescriptor.getGoal());
w.endElement();
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
String description = mojoDescriptor.getDescription();
if (description != null && !description.isEmpty()) {
w.startElement("description");
w.writeText(getTextValue(type, containsXhtmlTextValues, mojoDescriptor.getDescription()));
w.endElement();
}
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
if (StringUtils.isNotEmpty(mojoDescriptor.getDependencyResolutionRequired())) {
GeneratorUtils.element(
w,
isV4 ? "dependencyResolution" : "requiresDependencyResolution",
mojoDescriptor.getDependencyResolutionRequired());
}
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
GeneratorUtils.element(
w,
isV4 ? "directInvocationOnly" : "requiresDirectInvocation",
String.valueOf(mojoDescriptor.isDirectInvocationOnly()));
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
GeneratorUtils.element(
w, isV4 ? "projectRequired" : "requiresProject", String.valueOf(mojoDescriptor.isProjectRequired()));
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
if (!isV4) {
GeneratorUtils.element(w, "requiresReports", String.valueOf(mojoDescriptor.isRequiresReports()));
}
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
GeneratorUtils.element(w, "aggregator", String.valueOf(mojoDescriptor.isAggregator()));
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
GeneratorUtils.element(
w, isV4 ? "onlineRequired" : "requiresOnline", String.valueOf(mojoDescriptor.isOnlineRequired()));
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
GeneratorUtils.element(w, "inheritedByDefault", String.valueOf(mojoDescriptor.isInheritedByDefault()));
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
if (StringUtils.isNotEmpty(mojoDescriptor.getPhase())) {
GeneratorUtils.element(w, "phase", mojoDescriptor.getPhase());
}
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
if (StringUtils.isNotEmpty(mojoDescriptor.getExecutePhase())) {
GeneratorUtils.element(w, "executePhase", mojoDescriptor.getExecutePhase());
}
if (StringUtils.isNotEmpty(mojoDescriptor.getExecuteGoal())) {
GeneratorUtils.element(w, "executeGoal", mojoDescriptor.getExecuteGoal());
}
if (StringUtils.isNotEmpty(mojoDescriptor.getExecuteLifecycle())) {
GeneratorUtils.element(w, "executeLifecycle", mojoDescriptor.getExecuteLifecycle());
}
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
w.startElement("implementation");
w.writeText(mojoDescriptor.getImplementation());
w.endElement();
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
w.startElement("language");
w.writeText(mojoDescriptor.getLanguage());
w.endElement();
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
if (StringUtils.isNotEmpty(mojoDescriptor.getComponentConfigurator())) {
w.startElement("configurator");
w.writeText(mojoDescriptor.getComponentConfigurator());
w.endElement();
}
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
if (!isV4 && StringUtils.isNotEmpty(mojoDescriptor.getComponentComposer())) {
w.startElement("composer");
w.writeText(mojoDescriptor.getComponentComposer());
w.endElement();
}
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
if (!isV4) {
w.startElement("instantiationStrategy");
w.writeText(mojoDescriptor.getInstantiationStrategy());
w.endElement();
}
// ----------------------------------------------------------------------
// Strategy for handling repeated reference to mojo in
// the calculated (decorated, resolved) execution stack
// ----------------------------------------------------------------------
if (!isV4) {
w.startElement("executionStrategy");
w.writeText(mojoDescriptor.getExecutionStrategy());
w.endElement();
}
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
if (mojoDescriptor.getSince() != null) {
w.startElement("since");
if (StringUtils.isEmpty(mojoDescriptor.getSince())) {
w.writeText("No version given");
} else {
w.writeText(mojoDescriptor.getSince());
}
w.endElement();
}
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
if (mojoDescriptor.getDeprecated() != null) {
w.startElement("deprecated");
if (StringUtils.isEmpty(mojoDescriptor.getDeprecated())) {
w.writeText("No reason given");
} else {
w.writeText(getTextValue(type, containsXhtmlTextValues, mojoDescriptor.getDeprecated()));
}
w.endElement();
}
// ----------------------------------------------------------------------
// Extended (3.0) descriptor
// ----------------------------------------------------------------------
if (mojoDescriptor instanceof ExtendedMojoDescriptor) {
ExtendedMojoDescriptor extendedMojoDescriptor = (ExtendedMojoDescriptor) mojoDescriptor;
if (extendedMojoDescriptor.getDependencyCollectionRequired() != null) {
GeneratorUtils.element(
w,
isV4 ? "dependencyCollection" : "requiresDependencyCollection",
extendedMojoDescriptor.getDependencyCollectionRequired());
}
if (!isV4) {
GeneratorUtils.element(w, "threadSafe", String.valueOf(extendedMojoDescriptor.isThreadSafe()));
}
}
// ----------------------------------------------------------------------
// Parameters
// ----------------------------------------------------------------------
List<Parameter> parameters = mojoDescriptor.getParameters();
w.startElement("parameters");
Map<String, Requirement> requirements = new LinkedHashMap<>();
Set<Parameter> configuration = new LinkedHashSet<>();
if (parameters != null) {
if (type == DescriptorType.LIMITED_FOR_HELP_MOJO) {
PluginUtils.sortMojoParameters(parameters);
}
for (Parameter parameter : parameters) {
String expression = getExpression(parameter);
if ((expression != null && !expression.isEmpty()) && expression.startsWith("${component.")) {
// treat it as a component...a requirement, in other words.
// remove "component." plus expression delimiters
String role = expression.substring("${component.".length(), expression.length() - 1);
String roleHint = null;
int posRoleHintSeparator = role.indexOf('#');
if (posRoleHintSeparator > 0) {
roleHint = role.substring(posRoleHintSeparator + 1);
role = role.substring(0, posRoleHintSeparator);
}
// TODO: remove deprecated expression
requirements.put(parameter.getName(), new Requirement(role, roleHint));
} else if (parameter.getRequirement() != null) {
requirements.put(parameter.getName(), parameter.getRequirement());
}
// don't show readonly parameters in help
else if (type != DescriptorType.LIMITED_FOR_HELP_MOJO || parameter.isEditable()) {
// treat it as a normal parameter.
w.startElement("parameter");
GeneratorUtils.element(w, "name", parameter.getName());
if (parameter.getAlias() != null) {
GeneratorUtils.element(w, "alias", parameter.getAlias());
}
writeParameterType(w, type, javadocLinkGenerator, parameter, mojoDescriptor.getGoal());
if (parameter.getSince() != null) {
w.startElement("since");
if (StringUtils.isEmpty(parameter.getSince())) {
w.writeText("No version given");
} else {
w.writeText(parameter.getSince());
}
w.endElement();
}
if (parameter.getDeprecated() != null) {
if (StringUtils.isEmpty(parameter.getDeprecated())) {
GeneratorUtils.element(w, "deprecated", "No reason given");
} else {
GeneratorUtils.element(
w,
"deprecated",
getTextValue(type, containsXhtmlTextValues, parameter.getDeprecated()));
}
}
if (!isV4 && parameter.getImplementation() != null) {
GeneratorUtils.element(w, "implementation", parameter.getImplementation());
}
GeneratorUtils.element(w, "required", Boolean.toString(parameter.isRequired()));
GeneratorUtils.element(w, "editable", Boolean.toString(parameter.isEditable()));
GeneratorUtils.element(
w, "description", getTextValue(type, containsXhtmlTextValues, parameter.getDescription()));
if (isV4) {
if (StringUtils.isNotEmpty(parameter.getExpression())) {
GeneratorUtils.element(w, "expression", parameter.getExpression());
}
if (StringUtils.isNotEmpty(parameter.getDefaultValue())) {
GeneratorUtils.element(w, "defaultValue", parameter.getDefaultValue());
}
} else {
if (StringUtils.isNotEmpty(parameter.getDefaultValue())
|| StringUtils.isNotEmpty(parameter.getExpression())) {
configuration.add(parameter);
}
}
w.endElement();
}
}
}
w.endElement();
// ----------------------------------------------------------------------
// Configuration
// ----------------------------------------------------------------------
if (!configuration.isEmpty()) {
w.startElement("configuration");
for (Parameter parameter : configuration) {
if (type == DescriptorType.LIMITED_FOR_HELP_MOJO && !parameter.isEditable()) {
// don't show readonly parameters in help
continue;
}
w.startElement(parameter.getName());
// strip type by parameter type (generics) information
String parameterType = StringUtils.chomp(parameter.getType(), "<");
if (parameterType != null && !parameterType.isEmpty()) {
w.addAttribute("implementation", parameterType);
}
if (parameter.getDefaultValue() != null) {
w.addAttribute("default-value", parameter.getDefaultValue());
}
if (StringUtils.isNotEmpty(parameter.getExpression())) {
w.writeText(parameter.getExpression());
}
w.endElement();
}
w.endElement();
}
// ----------------------------------------------------------------------
// Requirements
// ----------------------------------------------------------------------
if (!requirements.isEmpty() && type != DescriptorType.LIMITED_FOR_HELP_MOJO) {
w.startElement("requirements");
for (Map.Entry<String, Requirement> entry : requirements.entrySet()) {
String key = entry.getKey();
Requirement requirement = entry.getValue();
w.startElement("requirement");
GeneratorUtils.element(w, "role", requirement.getRole());
if (StringUtils.isNotEmpty(requirement.getRoleHint())) {
GeneratorUtils.element(w, "role-hint", requirement.getRoleHint());
}
GeneratorUtils.element(w, "field-name", key);
w.endElement();
}
w.endElement();
}
w.endElement();
}