diff --git a/maven-plugin-annotations/src/main/java/org/apache/maven/plugins/annotations/Parameter.java b/maven-plugin-annotations/src/main/java/org/apache/maven/plugins/annotations/Parameter.java index 1acd632..b9eb61b 100644 --- a/maven-plugin-annotations/src/main/java/org/apache/maven/plugins/annotations/Parameter.java +++ b/maven-plugin-annotations/src/main/java/org/apache/maven/plugins/annotations/Parameter.java @@ -48,7 +48,7 @@ public @interface Parameter * Property to use to retrieve a value. Can come from -D execution, setting properties or pom properties. * @return property name */ - String expression() default ""; + String property() default ""; /** * parameter default value, eventually containing ${...} expressions which will be interpreted at inject time. diff --git a/maven-plugin-plugin/src/it/annotation-with-inheritance-reactor/module-abstract-mojo/src/main/java/org/apache/maven/plugins/AbstractFirstMojo.java b/maven-plugin-plugin/src/it/annotation-with-inheritance-reactor/module-abstract-mojo/src/main/java/org/apache/maven/plugins/AbstractFirstMojo.java index 8cd2e64..87ad0dc 100644 --- a/maven-plugin-plugin/src/it/annotation-with-inheritance-reactor/module-abstract-mojo/src/main/java/org/apache/maven/plugins/AbstractFirstMojo.java +++ b/maven-plugin-plugin/src/it/annotation-with-inheritance-reactor/module-abstract-mojo/src/main/java/org/apache/maven/plugins/AbstractFirstMojo.java @@ -45,7 +45,7 @@ public abstract class AbstractFirstMojo @Parameter( defaultValue = "${basedir}", readonly = true ) protected File basedir; - @Parameter( expression = "${first.touchFile}", defaultValue = "${project.build.directory}/touch.txt", + @Parameter( property = "first.touchFile", defaultValue = "${project.build.directory}/touch.txt", required = true ) protected File touchFile; @@ -61,6 +61,4 @@ public abstract class AbstractFirstMojo @Component( role = "org.apache.maven.artifact.metadata.ArtifactMetadataSource", roleHint = "maven" ) protected ArtifactMetadataSource artifactMetadataSource; - - } diff --git a/maven-plugin-plugin/src/it/annotation-with-inheritance-reactor/module-mojo/src/main/java/org/apache/maven/plugin/coreit/CoreIt0014Mojo.java b/maven-plugin-plugin/src/it/annotation-with-inheritance-reactor/module-mojo/src/main/java/org/apache/maven/plugin/coreit/CoreIt0014Mojo.java index 55be47c..26b9ce6 100644 --- a/maven-plugin-plugin/src/it/annotation-with-inheritance-reactor/module-mojo/src/main/java/org/apache/maven/plugin/coreit/CoreIt0014Mojo.java +++ b/maven-plugin-plugin/src/it/annotation-with-inheritance-reactor/module-mojo/src/main/java/org/apache/maven/plugin/coreit/CoreIt0014Mojo.java @@ -36,7 +36,7 @@ public class CoreIt0014Mojo extends AbstractMojo { - @Parameter( expression = "${project.build.directory}", required = true ) + @Parameter( property = "project.build.directory", required = true ) private String outputDirectory; public void execute() diff --git a/maven-plugin-plugin/src/it/annotation-with-inheritance/src/main/java/org/apache/maven/plugin/coreit/AbstractFirstMojo.java b/maven-plugin-plugin/src/it/annotation-with-inheritance/src/main/java/org/apache/maven/plugin/coreit/AbstractFirstMojo.java index 6dcf140..f0a1263 100644 --- a/maven-plugin-plugin/src/it/annotation-with-inheritance/src/main/java/org/apache/maven/plugin/coreit/AbstractFirstMojo.java +++ b/maven-plugin-plugin/src/it/annotation-with-inheritance/src/main/java/org/apache/maven/plugin/coreit/AbstractFirstMojo.java @@ -45,7 +45,7 @@ public abstract class AbstractFirstMojo @Parameter( defaultValue = "${basedir}", readonly = true ) protected File basedir; - @Parameter( expression = "${first.touchFile}", defaultValue = "${project.build.directory}/touch.txt", + @Parameter( property = "first.touchFile", defaultValue = "${project.build.directory}/touch.txt", required = true ) protected File touchFile; @@ -58,9 +58,7 @@ public abstract class AbstractFirstMojo /** * */ - @Component(role = "org.apache.maven.artifact.metadata.ArtifactMetadataSource", roleHint = "maven") + @Component( role = "org.apache.maven.artifact.metadata.ArtifactMetadataSource", roleHint = "maven" ) protected ArtifactMetadataSource artifactMetadataSource; - - } diff --git a/maven-plugin-plugin/src/it/annotation-with-inheritance/src/main/java/org/apache/maven/plugin/coreit/CoreIt0014Mojo.java b/maven-plugin-plugin/src/it/annotation-with-inheritance/src/main/java/org/apache/maven/plugin/coreit/CoreIt0014Mojo.java index 55be47c..26b9ce6 100644 --- a/maven-plugin-plugin/src/it/annotation-with-inheritance/src/main/java/org/apache/maven/plugin/coreit/CoreIt0014Mojo.java +++ b/maven-plugin-plugin/src/it/annotation-with-inheritance/src/main/java/org/apache/maven/plugin/coreit/CoreIt0014Mojo.java @@ -36,7 +36,7 @@ public class CoreIt0014Mojo extends AbstractMojo { - @Parameter( expression = "${project.build.directory}", required = true ) + @Parameter( property = "project.build.directory", required = true ) private String outputDirectory; public void execute() diff --git a/maven-plugin-plugin/src/it/java-basic-annotations/src/main/java/org/apache/maven/plugin/coreit/CoreIt0014Mojo.java b/maven-plugin-plugin/src/it/java-basic-annotations/src/main/java/org/apache/maven/plugin/coreit/CoreIt0014Mojo.java index 55be47c..26b9ce6 100644 --- a/maven-plugin-plugin/src/it/java-basic-annotations/src/main/java/org/apache/maven/plugin/coreit/CoreIt0014Mojo.java +++ b/maven-plugin-plugin/src/it/java-basic-annotations/src/main/java/org/apache/maven/plugin/coreit/CoreIt0014Mojo.java @@ -36,7 +36,7 @@ public class CoreIt0014Mojo extends AbstractMojo { - @Parameter( expression = "${project.build.directory}", required = true ) + @Parameter( property = "project.build.directory", required = true ) private String outputDirectory; public void execute() diff --git a/maven-plugin-plugin/src/it/java-basic-annotations/src/main/java/org/apache/maven/plugin/coreit/FirstMojo.java b/maven-plugin-plugin/src/it/java-basic-annotations/src/main/java/org/apache/maven/plugin/coreit/FirstMojo.java index 70b2ef2..f5814a3 100644 --- a/maven-plugin-plugin/src/it/java-basic-annotations/src/main/java/org/apache/maven/plugin/coreit/FirstMojo.java +++ b/maven-plugin-plugin/src/it/java-basic-annotations/src/main/java/org/apache/maven/plugin/coreit/FirstMojo.java @@ -48,7 +48,7 @@ public class FirstMojo @Parameter( defaultValue = "${basedir}", readonly = true ) private File basedir; - @Parameter( expression = "first.touchFile", defaultValue = "${project.build.directory}/touch.txt", + @Parameter( property = "first.touchFile", defaultValue = "${project.build.directory}/touch.txt", required = true ) private File touchFile; diff --git a/maven-plugin-plugin/src/it/plugin-report-annotations/src/main/java/org/DummyReport.java b/maven-plugin-plugin/src/it/plugin-report-annotations/src/main/java/org/DummyReport.java index f7ed0c5..9eabcd5 100644 --- a/maven-plugin-plugin/src/it/plugin-report-annotations/src/main/java/org/DummyReport.java +++ b/maven-plugin-plugin/src/it/plugin-report-annotations/src/main/java/org/DummyReport.java @@ -58,7 +58,7 @@ public class DummyReport /** * The Maven Project. */ - @Parameter( expression = "${project}", readonly = true, required = true ) + @Parameter( property = "project", readonly = true, required = true ) private MavenProject project; @@ -67,7 +67,7 @@ public class DummyReport * * @since 2.4 */ - @Parameter( expression = "${goalPrefix}" ) + @Parameter( property = "goalPrefix" ) protected String goalPrefix; /** @@ -75,7 +75,7 @@ public class DummyReport * * @since 2.8 */ - @Parameter( defaultValue = "false", expression = "${maven.plugin.skip}" ) + @Parameter( defaultValue = "false", property = "maven.plugin.skip" ) private boolean skip; /** @@ -83,7 +83,7 @@ public class DummyReport * * @since 2.8 */ - @Parameter( defaultValue = "false", expression = "${maven.plugin.report.skip}" ) + @Parameter( defaultValue = "false", property = "maven.plugin.report.skip" ) private boolean skipReport; /** diff --git a/maven-plugin-plugin/src/it/plugin-report-annotations/src/main/java/org/MyMojo.java b/maven-plugin-plugin/src/it/plugin-report-annotations/src/main/java/org/MyMojo.java index 88e3f64..82a95ab 100644 --- a/maven-plugin-plugin/src/it/plugin-report-annotations/src/main/java/org/MyMojo.java +++ b/maven-plugin-plugin/src/it/plugin-report-annotations/src/main/java/org/MyMojo.java @@ -54,7 +54,7 @@ public class MyMojo * @deprecated Just testing. */ @SuppressWarnings( "unused" ) - @Parameter( expression = "${string}", defaultValue = "${project.version}/" ) + @Parameter( property = "string", defaultValue = "${project.version}/" ) private String string; public void execute() diff --git a/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/annotations/JavaAnnotationsMojoDescriptorExtractor.java b/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/annotations/JavaAnnotationsMojoDescriptorExtractor.java index 73fdb1d..fdc8fb0 100644 --- a/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/annotations/JavaAnnotationsMojoDescriptorExtractor.java +++ b/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/annotations/JavaAnnotationsMojoDescriptorExtractor.java @@ -29,6 +29,7 @@ import org.apache.maven.artifact.resolver.ArtifactNotFoundException; import org.apache.maven.artifact.resolver.ArtifactResolutionException; import org.apache.maven.artifact.resolver.ArtifactResolver; import org.apache.maven.plugin.descriptor.DuplicateParameterException; +import org.apache.maven.plugin.descriptor.InvalidParameterException; import org.apache.maven.plugin.descriptor.InvalidPluginDescriptorException; import org.apache.maven.plugin.descriptor.MojoDescriptor; import org.apache.maven.plugin.descriptor.PluginDescriptor; @@ -426,7 +427,7 @@ public class JavaAnnotationsMojoDescriptorExtractor private List toMojoDescriptors( Map mojoAnnotatedClasses, PluginToolsRequest request, Map javaClassesMap ) - throws DuplicateParameterException + throws DuplicateParameterException, InvalidParameterException { List mojoDescriptors = new ArrayList( mojoAnnotatedClasses.size() ); for ( MojoAnnotatedClass mojoAnnotatedClass : mojoAnnotatedClasses.values() ) @@ -490,7 +491,14 @@ public class JavaAnnotationsMojoDescriptorExtractor parameter.setDeprecated( parameterAnnotationContent.getDeprecated() ); parameter.setDescription( parameterAnnotationContent.getDescription() ); parameter.setEditable( !parameterAnnotationContent.readonly() ); - parameter.setExpression( parameterAnnotationContent.expression() ); + 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( StringUtils.isEmpty( property ) ? "" : "${" + property + "}" ); parameter.setType( parameterAnnotationContent.getClassName() ); parameter.setSince( parameterAnnotationContent.getSince() ); parameter.setRequired( parameterAnnotationContent.required() ); diff --git a/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/annotations/datamodel/ParameterAnnotationContent.java b/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/annotations/datamodel/ParameterAnnotationContent.java index f734339..a095858 100644 --- a/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/annotations/datamodel/ParameterAnnotationContent.java +++ b/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/annotations/datamodel/ParameterAnnotationContent.java @@ -34,7 +34,7 @@ public class ParameterAnnotationContent private String alias; - private String expression; + private String property; private String defaultValue; @@ -50,12 +50,12 @@ public class ParameterAnnotationContent this.className = className; } - public ParameterAnnotationContent( String fieldName, String alias, String expression, String defaultValue, + public ParameterAnnotationContent( String fieldName, String alias, String property, String defaultValue, boolean required, boolean readonly, String className ) { this( fieldName, className ); this.alias = alias; - this.expression = expression; + this.property = property; this.defaultValue = defaultValue; this.required = required; this.readonly = readonly; @@ -71,14 +71,14 @@ public class ParameterAnnotationContent this.alias = alias; } - public String expression() + public String property() { - return expression; + return property; } - public void expression( String expression ) + public void property( String property ) { - this.expression = expression; + this.property = property; } public String defaultValue() @@ -133,7 +133,7 @@ public class ParameterAnnotationContent sb.append( super.toString() ); sb.append( "ParameterAnnotationContent" ); sb.append( "{alias='" ).append( alias ).append( '\'' ); - sb.append( ", expression='" ).append( expression ).append( '\'' ); + sb.append( ", property='" ).append( property ).append( '\'' ); sb.append( ", defaultValue='" ).append( defaultValue ).append( '\'' ); sb.append( ", required=" ).append( required ); sb.append( ", readonly=" ).append( readonly ); @@ -177,7 +177,7 @@ public class ParameterAnnotationContent { return false; } - if ( expression != null ? !expression.equals( that.expression ) : that.expression != null ) + if ( property != null ? !property.equals( that.property ) : that.property != null ) { return false; } @@ -190,7 +190,7 @@ public class ParameterAnnotationContent { int result = alias != null ? alias.hashCode() : 0; result = 31 * result + ( getFieldName() != null ? getFieldName().hashCode() : 0 ); - result = 31 * result + ( expression != null ? expression.hashCode() : 0 ); + result = 31 * result + ( property != null ? property.hashCode() : 0 ); result = 31 * result + ( defaultValue != null ? defaultValue.hashCode() : 0 ); result = 31 * result + ( required ? 1 : 0 ); result = 31 * result + ( readonly ? 1 : 0 ); diff --git a/maven-plugin-tools-annotations/src/test/java/org/apache/maven/tools/plugin/annotations/FooMojo.java b/maven-plugin-tools-annotations/src/test/java/org/apache/maven/tools/plugin/annotations/FooMojo.java index f44409c..15b0add 100644 --- a/maven-plugin-tools-annotations/src/test/java/org/apache/maven/tools/plugin/annotations/FooMojo.java +++ b/maven-plugin-tools-annotations/src/test/java/org/apache/maven/tools/plugin/annotations/FooMojo.java @@ -42,14 +42,14 @@ public class FooMojo * the cool bar to go * @since 1.0 */ - @Parameter( expression = "${thebar}", required = true, defaultValue = "coolbar" ) + @Parameter( property = "thebar", required = true, defaultValue = "coolbar" ) protected String bar; /** * beer for non french folks * @deprecated wine is better */ - @Parameter( expression = "${thebeer}", defaultValue = "coolbeer" ) + @Parameter( property = "thebeer", defaultValue = "coolbeer" ) protected String beer; /** diff --git a/maven-plugin-tools-annotations/src/test/java/org/apache/maven/tools/plugin/annotations/TestAnnotationsReader.java b/maven-plugin-tools-annotations/src/test/java/org/apache/maven/tools/plugin/annotations/TestAnnotationsReader.java index 3344417..a4738bd 100644 --- a/maven-plugin-tools-annotations/src/test/java/org/apache/maven/tools/plugin/annotations/TestAnnotationsReader.java +++ b/maven-plugin-tools-annotations/src/test/java/org/apache/maven/tools/plugin/annotations/TestAnnotationsReader.java @@ -83,8 +83,8 @@ public class TestAnnotationsReader Collection parameters = mojoAnnotatedClass.getParameters().values(); Assertions.assertThat( parameters ).isNotNull().isNotEmpty().hasSize( 2 ).contains( - new ParameterAnnotationContent( "bar", null, "${thebar}", "coolbar", true, false, String.class.getName() ), - new ParameterAnnotationContent( "beer", null, "${thebeer}", "coolbeer", false, false, + new ParameterAnnotationContent( "bar", null, "thebar", "coolbar", true, false, String.class.getName() ), + new ParameterAnnotationContent( "beer", null, "thebeer", "coolbeer", false, false, String.class.getName() ) ); } }