From fa1b8382d36c931be2cc5dcbfb62062d458c4308 Mon Sep 17 00:00:00 2001 From: Evgeny Mandrikov Date: Wed, 12 Oct 2011 13:50:41 +0400 Subject: [PATCH] SONAR-2896 Fix ability to configure Maven plugins under Maven 2.x --- .../sonar/batch/MavenProjectConverter.java | 7 ++++-- .../batch/bootstrap/ProjectDefinition.java | 22 +++++++++++++++---- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/sonar-batch/src/main/java/org/sonar/batch/MavenProjectConverter.java b/sonar-batch/src/main/java/org/sonar/batch/MavenProjectConverter.java index e4381e89b95..c9c56384afe 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/MavenProjectConverter.java +++ b/sonar-batch/src/main/java/org/sonar/batch/MavenProjectConverter.java @@ -84,8 +84,11 @@ public final class MavenProjectConverter { */ static ProjectDefinition convert(MavenProject pom) { String key = new StringBuilder().append(pom.getGroupId()).append(":").append(pom.getArtifactId()).toString(); - ProjectDefinition definition = ProjectDefinition.create(pom.getModel().getProperties()); - definition.setKey(key) + ProjectDefinition definition = ProjectDefinition.create(); + // IMPORTANT NOTE : reference on properties from POM model must not be saved, instead they should be copied explicitly - see SONAR-2896 + definition + .setProperties(pom.getModel().getProperties()) + .setKey(key) .setVersion(pom.getVersion()) .setName(pom.getName()) .setDescription(pom.getDescription()) diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/bootstrap/ProjectDefinition.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/bootstrap/ProjectDefinition.java index bc0e9163fcf..4a5264a33e1 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/bootstrap/ProjectDefinition.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/bootstrap/ProjectDefinition.java @@ -58,6 +58,13 @@ public final class ProjectDefinition implements BatchComponent { this.properties = p; } + /** + * @deprecated in 2.12, because it uses external object to represent internal state. + * To ensure backward-compatibility with Ant task this method cannot clone properties, + * so other callers must explicitly make clone of properties before passing into this method. + * Thus better to use {@link #create()} with combination of other methods like {@link #setProperties(Properties)} and {@link #setProperty(String, String)}. + */ + @Deprecated public static ProjectDefinition create(Properties properties) { return new ProjectDefinition(properties); } @@ -74,6 +81,7 @@ public final class ProjectDefinition implements BatchComponent { public File getBaseDir() { return baseDir; } + public ProjectDefinition setWorkDir(File workDir) { this.workDir = workDir; return this; @@ -87,6 +95,16 @@ public final class ProjectDefinition implements BatchComponent { return properties; } + /** + * Copies specified properties into this object. + * + * @since 2.12 + */ + public ProjectDefinition setProperties(Properties properties) { + properties.putAll(properties); + return this; + } + public ProjectDefinition setProperty(String key, String value) { properties.setProperty(key, value); return this; @@ -204,7 +222,6 @@ public final class ProjectDefinition implements BatchComponent { return Arrays.asList(StringUtils.split(sources, SEPARATOR)); } - public List getTestDirs() { String sources = properties.getProperty(TEST_DIRS_PROPERTY, ""); return Arrays.asList(StringUtils.split(sources, SEPARATOR)); @@ -246,7 +263,6 @@ public final class ProjectDefinition implements BatchComponent { return this; } - /** * Adding source files is possible only if no source directories have been set. * Absolute path or relative path from project base dir. @@ -273,7 +289,6 @@ public final class ProjectDefinition implements BatchComponent { return Arrays.asList(StringUtils.split(sources, SEPARATOR)); } - public List getBinaries() { String sources = properties.getProperty(BINARIES_PROPERTY, ""); return Arrays.asList(StringUtils.split(sources, SEPARATOR)); @@ -293,7 +308,6 @@ public final class ProjectDefinition implements BatchComponent { return addBinaryDir(f.getAbsolutePath()); } - public List getLibraries() { String sources = properties.getProperty(LIBRARIES_PROPERTY, ""); return Arrays.asList(StringUtils.split(sources, SEPARATOR)); -- 2.39.5