]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-2735 Fix handling of different ways to declare Maven modules
authorEvgeny Mandrikov <mandrikov@gmail.com>
Fri, 30 Sep 2011 14:37:56 +0000 (18:37 +0400)
committerEvgeny Mandrikov <mandrikov@gmail.com>
Fri, 30 Sep 2011 16:14:28 +0000 (20:14 +0400)
sonar-batch/src/main/java/org/sonar/batch/MavenProjectConverter.java
sonar-batch/src/test/java/org/sonar/batch/MavenProjectConverterTest.java

index 5c35f335a1d0de2a9e9d1111ff73010024a24573..e4381e89b95a4e78b78303dc7217b53af00d2ba0 100644 (file)
  */
 package org.sonar.batch;
 
-import com.google.common.collect.Maps;
-import org.apache.maven.project.MavenProject;
-import org.sonar.api.batch.bootstrap.ProjectDefinition;
-import org.sonar.api.utils.SonarException;
-
 import java.io.File;
 import java.io.IOException;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.maven.project.MavenProject;
+import org.sonar.api.batch.bootstrap.ProjectDefinition;
+import org.sonar.api.utils.SonarException;
+
+import com.google.common.collect.Maps;
+
 public final class MavenProjectConverter {
 
   private MavenProjectConverter() {
@@ -36,29 +37,46 @@ public final class MavenProjectConverter {
   }
 
   public static ProjectDefinition convert(List<MavenProject> poms, MavenProject root) {
-    Map<String, MavenProject> paths = Maps.newHashMap(); // projects by canonical path
+    Map<String, MavenProject> paths = Maps.newHashMap(); // projects by canonical path to pom.xml
     Map<MavenProject, ProjectDefinition> defs = Maps.newHashMap();
 
     try {
       for (MavenProject pom : poms) {
-        String basedir = pom.getBasedir().getCanonicalPath();
-        paths.put(basedir, pom);
+        paths.put(pom.getFile().getCanonicalPath(), pom);
         defs.put(pom, convert(pom));
       }
 
       for (Map.Entry<String, MavenProject> entry : paths.entrySet()) {
         MavenProject pom = entry.getValue();
-        for (Object moduleId : pom.getModules()) {
-          File modulePath = new File(pom.getBasedir(), (String) moduleId);
+        for (Object m : pom.getModules()) {
+          String moduleId = (String) m;
+          File modulePath = new File(pom.getBasedir(), moduleId);
+          if (modulePath.exists() && modulePath.isDirectory()) {
+            modulePath = new File(modulePath, "pom.xml");
+          }
           MavenProject module = paths.get(modulePath.getCanonicalPath());
-          defs.get(pom).addSubProject(defs.get(module));
+
+          ProjectDefinition parentProject = defs.get(pom);
+          ProjectDefinition subProject = defs.get(module);
+          if (parentProject == null) {
+            throw new IllegalStateException();
+          }
+          if (subProject == null) {
+            throw new IllegalStateException();
+          }
+          parentProject.addSubProject(subProject);
         }
       }
     } catch (IOException e) {
       throw new SonarException(e);
     }
 
-    return defs.get(root);
+    ProjectDefinition rootProject = defs.get(root);
+    if (rootProject == null) {
+      throw new IllegalStateException();
+    }
+
+    return rootProject;
   }
 
   /**
index 7077ddde5287394c5baba01548932536d30afc21..872de93fed8901ebbf7151af865bb76115185220 100644 (file)
@@ -46,7 +46,7 @@ public class MavenProjectConverterTest {
     MavenProject root = new MavenProject();
     root.setFile(new File("/foo/pom.xml"));
     root.getBuild().setDirectory("target");
-    root.getModules().add("module");
+    root.getModules().add("module/pom.xml");
     MavenProject module = new MavenProject();
     module.setFile(new File("/foo/module/pom.xml"));
     module.getBuild().setDirectory("target");