From 5373972668420eaadb5f95715286f508c1928d99 Mon Sep 17 00:00:00 2001 From: Fabrice Bellingard Date: Thu, 13 Sep 2012 17:57:59 +0200 Subject: [PATCH] SONARPLUGINS-2202 Work dir of modules are located in root project --- .../internal/batch/SonarProjectBuilder.java | 24 ++++++++--- .../batch/SonarProjectBuilderTest.java | 41 +++++++++++++------ 2 files changed, 47 insertions(+), 18 deletions(-) diff --git a/src/main/java/org/sonar/runner/internal/batch/SonarProjectBuilder.java b/src/main/java/org/sonar/runner/internal/batch/SonarProjectBuilder.java index 93a5d81..c748fa9 100644 --- a/src/main/java/org/sonar/runner/internal/batch/SonarProjectBuilder.java +++ b/src/main/java/org/sonar/runner/internal/batch/SonarProjectBuilder.java @@ -107,6 +107,7 @@ public final class SonarProjectBuilder { private static final List NON_HERITED_PROPERTIES_FOR_CHILD = Lists.newArrayList(PROPERTY_PROJECT_BASEDIR, PROPERTY_MODULES, PROPERTY_PROJECT_DESCRIPTION); private Properties properties; + private File rootProjectWorkDir; private SonarProjectBuilder(Properties properties) { this.properties = properties; @@ -117,23 +118,31 @@ public final class SonarProjectBuilder { } public ProjectDefinition generateProjectDefinition() { - ProjectDefinition rootProject = defineProject(properties); + ProjectDefinition rootProject = defineProject(properties, null); + rootProjectWorkDir = rootProject.getWorkDir(); defineChildren(rootProject); cleanAndCheckProjectDefinitions(rootProject); return rootProject; } - private ProjectDefinition defineProject(Properties properties) { + private ProjectDefinition defineProject(Properties properties, ProjectDefinition parent) { checkMandatoryProperties(properties, MANDATORY_PROPERTIES_FOR_PROJECT); File baseDir = new File(properties.getProperty(PROPERTY_PROJECT_BASEDIR)); + File workDir = null; + if (parent == null) { + workDir = initRootProjectWorkDir(baseDir); + } else { + workDir = initModuleWorkDir(properties); + } + ProjectDefinition definition = ProjectDefinition.create((Properties) properties.clone()) .setBaseDir(baseDir) - .setWorkDir(initWorkDir(baseDir)); + .setWorkDir(workDir); return definition; } @VisibleForTesting - protected File initWorkDir(File baseDir) { + protected File initRootProjectWorkDir(File baseDir) { String workDir = properties.getProperty(PROPERTY_WORK_DIRECTORY); if (StringUtils.isBlank(workDir)) { return new File(baseDir, DEF_VALUE_WORK_DIRECTORY); @@ -146,6 +155,11 @@ public final class SonarProjectBuilder { return new File(baseDir, customWorkDir.getPath()); } + @VisibleForTesting + protected File initModuleWorkDir(Properties properties) { + return new File(rootProjectWorkDir, properties.getProperty(PROPERTY_PROJECT_KEY)); + } + private void defineChildren(ProjectDefinition parentProject) { Properties parentProps = parentProject.getProperties(); if (parentProps.containsKey(PROPERTY_MODULES)) { @@ -183,7 +197,7 @@ public final class SonarProjectBuilder { prefixProjectKeyWithParentKey(moduleProps, parentProject.getKey()); - return defineProject(moduleProps); + return defineProject(moduleProps, parentProject); } protected void loadPropsFile(ProjectDefinition parentProject, Properties moduleProps, String moduleId) { diff --git a/src/test/java/org/sonar/runner/internal/batch/SonarProjectBuilderTest.java b/src/test/java/org/sonar/runner/internal/batch/SonarProjectBuilderTest.java index d7a2164..93e12a6 100644 --- a/src/test/java/org/sonar/runner/internal/batch/SonarProjectBuilderTest.java +++ b/src/test/java/org/sonar/runner/internal/batch/SonarProjectBuilderTest.java @@ -91,6 +91,11 @@ public class SonarProjectBuilderTest { // and module properties must have been cleaned assertThat(rootProject.getProperties().getProperty("module1.sonar.projectKey")).isNull(); assertThat(rootProject.getProperties().getProperty("module2.sonar.projectKey")).isNull(); + // Check baseDir and workDir + assertThat(rootProject.getBaseDir().getCanonicalFile()) + .isEqualTo(TestUtils.getResource(this.getClass(), "multi-module-definitions-all-in-root")); + assertThat(rootProject.getWorkDir().getCanonicalFile()) + .isEqualTo(new File(TestUtils.getResource(this.getClass(), "multi-module-definitions-all-in-root"), ".sonar")); // CHECK MODULES List modules = rootProject.getSubProjects(); @@ -108,8 +113,13 @@ public class SonarProjectBuilderTest { assertThat(module1.getTestDirs()).contains("tests"); assertThat(module1.getBinaries()).contains("target/classes"); // and module properties must have been cleaned - assertThat(rootProject.getProperties().getProperty("module1.sonar.projectKey")).isNull(); - assertThat(rootProject.getProperties().getProperty("module2.sonar.projectKey")).isNull(); + assertThat(module1.getProperties().getProperty("module1.sonar.projectKey")).isNull(); + assertThat(module1.getProperties().getProperty("module2.sonar.projectKey")).isNull(); + // Check baseDir and workDir + assertThat(module1.getBaseDir().getCanonicalFile()) + .isEqualTo(TestUtils.getResource(this.getClass(), "multi-module-definitions-all-in-root/module1")); + assertThat(module1.getWorkDir().getCanonicalFile()) + .isEqualTo(new File(TestUtils.getResource(this.getClass(), "multi-module-definitions-all-in-root"), ".sonar/com.foo.project:module1")); // Module 2 ProjectDefinition module2 = modules.get(1); @@ -122,8 +132,13 @@ public class SonarProjectBuilderTest { assertThat(module2.getTestDirs()).contains("tests"); assertThat(module2.getBinaries()).contains("target/classes"); // and module properties must have been cleaned - assertThat(rootProject.getProperties().getProperty("module1.sonar.projectKey")).isNull(); - assertThat(rootProject.getProperties().getProperty("module2.sonar.projectKey")).isNull(); + assertThat(module2.getProperties().getProperty("module1.sonar.projectKey")).isNull(); + assertThat(module2.getProperties().getProperty("module2.sonar.projectKey")).isNull(); + // Check baseDir and workDir + assertThat(module2.getBaseDir().getCanonicalFile()) + .isEqualTo(TestUtils.getResource(this.getClass(), "multi-module-definitions-all-in-root/module2")); + assertThat(module2.getWorkDir().getCanonicalFile()) + .isEqualTo(new File(TestUtils.getResource(this.getClass(), "multi-module-definitions-all-in-root"), ".sonar/com.foo.project:com.foo.project.module2")); } @Test @@ -159,8 +174,8 @@ public class SonarProjectBuilderTest { assertThat(module1.getTestDirs()).contains("tests"); assertThat(module1.getBinaries()).contains("target/classes"); // and module properties must have been cleaned - assertThat(rootProject.getProperties().getProperty("module1.sonar.projectKey")).isNull(); - assertThat(rootProject.getProperties().getProperty("module2.sonar.projectKey")).isNull(); + assertThat(module1.getProperties().getProperty("module1.sonar.projectKey")).isNull(); + assertThat(module1.getProperties().getProperty("module2.sonar.projectKey")).isNull(); // Module 2 ProjectDefinition module2 = modules.get(1); @@ -173,8 +188,8 @@ public class SonarProjectBuilderTest { assertThat(module2.getTestDirs()).contains("tests"); assertThat(module2.getBinaries()).contains("target/classes"); // and module properties must have been cleaned - assertThat(rootProject.getProperties().getProperty("module1.sonar.projectKey")).isNull(); - assertThat(rootProject.getProperties().getProperty("module2.sonar.projectKey")).isNull(); + assertThat(module2.getProperties().getProperty("module1.sonar.projectKey")).isNull(); + assertThat(module2.getProperties().getProperty("module2.sonar.projectKey")).isNull(); } @Test @@ -350,11 +365,11 @@ public class SonarProjectBuilderTest { } @Test - public void shouldInitWorkDir() { + public void shouldInitRootWorkDir() { SonarProjectBuilder builder = SonarProjectBuilder.create(new Properties()); File baseDir = new File("target/tmp/baseDir"); - File workDir = builder.initWorkDir(baseDir); + File workDir = builder.initRootProjectWorkDir(baseDir); assertThat(workDir).isEqualTo(new File(baseDir, ".sonar")); } @@ -366,19 +381,19 @@ public class SonarProjectBuilderTest { SonarProjectBuilder builder = SonarProjectBuilder.create(properties); File baseDir = new File("target/tmp/baseDir"); - File workDir = builder.initWorkDir(baseDir); + File workDir = builder.initRootProjectWorkDir(baseDir); assertThat(workDir).isEqualTo(new File(baseDir, ".foo")); } @Test - public void shouldInitWorkDirWithCustomAbsoluteFolder() { + public void shouldInitRootWorkDirWithCustomAbsoluteFolder() { Properties properties = new Properties(); properties.put("sonar.working.directory", new File("src").getAbsolutePath()); SonarProjectBuilder builder = SonarProjectBuilder.create(properties); File baseDir = new File("target/tmp/baseDir"); - File workDir = builder.initWorkDir(baseDir); + File workDir = builder.initRootProjectWorkDir(baseDir); assertThat(workDir).isEqualTo(new File("src").getAbsoluteFile()); } -- 2.39.5