diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java b/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java index 728b8f164a..0f7c658f16 100644 --- a/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java +++ b/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java @@ -104,12 +104,23 @@ public abstract class AbstractStringBasedModelInterpolator recursionInterceptor = new PrefixAwareRecursionInterceptor( PROJECT_PREFIXES ); } - protected List createValueSources( final Model model, final File projectDir, final ModelBuildingRequest config ) + protected List createValueSources( final Model model, final File projectDir, + final ModelBuildingRequest config, + final ModelProblemCollector problems ) { Properties modelProperties = model.getProperties(); ValueSource modelValueSource1 = new PrefixedObjectValueSource( PROJECT_PREFIXES, model, false ); + if ( config.getValidationLevel() >= ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_2_0 ) + { + modelValueSource1 = new ProblemDetectingValueSource( modelValueSource1, "pom.", "project.", problems ); + } + ValueSource modelValueSource2 = new ObjectBasedValueSource( model ); + if ( config.getValidationLevel() >= ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_2_0 ) + { + modelValueSource2 = new ProblemDetectingValueSource( modelValueSource2, "", "project.", problems ); + } // NOTE: Order counts here! List valueSources = new ArrayList( 9 ); diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/ProblemDetectingValueSource.java b/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/ProblemDetectingValueSource.java new file mode 100644 index 0000000000..ad500fbb6d --- /dev/null +++ b/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/ProblemDetectingValueSource.java @@ -0,0 +1,80 @@ +package org.apache.maven.model.interpolation; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.util.List; + +import org.apache.maven.model.building.ModelProblemCollector; +import org.codehaus.plexus.interpolation.ValueSource; + +/** + * Wraps another value source and intercepts interpolated expressions, checking for problems. + * + * @author Benjamin Bentmann + */ +class ProblemDetectingValueSource + implements ValueSource +{ + + private final ValueSource valueSource; + + private final String bannedPrefix; + + private final String newPrefix; + + private final ModelProblemCollector problems; + + public ProblemDetectingValueSource( ValueSource valueSource, String bannedPrefix, String newPrefix, + ModelProblemCollector problems ) + { + this.valueSource = valueSource; + this.bannedPrefix = bannedPrefix; + this.newPrefix = newPrefix; + this.problems = problems; + } + + public Object getValue( String expression ) + { + Object value = valueSource.getValue( expression ); + + if ( value != null && expression.startsWith( bannedPrefix ) ) + { + String msg = "The expression ${" + expression + "} is deprecated."; + if ( newPrefix != null && newPrefix.length() > 0 ) + { + msg += " Please use ${" + newPrefix + expression.substring( bannedPrefix.length() ) + "} instead."; + } + problems.addWarning( msg ); + } + + return value; + } + + public List getFeedback() + { + return valueSource.getFeedback(); + } + + public void clearFeedback() + { + valueSource.clearFeedback(); + } + +} diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringSearchModelInterpolator.java b/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringSearchModelInterpolator.java index fc1014eec1..511787aa4e 100644 --- a/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringSearchModelInterpolator.java +++ b/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringSearchModelInterpolator.java @@ -60,7 +60,7 @@ public class StringSearchModelInterpolator { try { - List valueSources = createValueSources( model, projectDir, config ); + List valueSources = createValueSources( model, projectDir, config, problems ); List postProcessors = createPostProcessors( model, projectDir, config ); InterpolateObjectAction action =