]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-1587 Fix inter module dependencies when sonar.branch is used
authorJulien HENRY <julien.henry@sonarsource.com>
Wed, 8 Oct 2014 14:29:21 +0000 (16:29 +0200)
committerJulien HENRY <julien.henry@sonarsource.com>
Wed, 8 Oct 2014 14:29:21 +0000 (16:29 +0200)
plugins/sonar-design-plugin/src/main/java/org/sonar/plugins/design/batch/MavenDependenciesSensor.java
sonar-plugin-api/src/main/java/org/sonar/api/resources/Library.java
sonar-plugin-api/src/main/java/org/sonar/api/resources/Project.java

index 088b3d182b7b730487dc4e329ba8f853e008f107..ce900fd67c8a99288355624c29b4e12a32a4c109 100644 (file)
@@ -34,10 +34,10 @@ import org.apache.maven.shared.dependency.tree.traversal.BuildingDependencyNodeV
 import org.apache.maven.shared.dependency.tree.traversal.CollectingDependencyNodeVisitor;
 import org.apache.maven.shared.dependency.tree.traversal.DependencyNodeVisitor;
 import org.apache.maven.shared.dependency.tree.traversal.FilteringDependencyNodeVisitor;
-import org.sonar.api.batch.SupportedEnvironment;
 import org.sonar.api.batch.Sensor;
 import org.sonar.api.batch.SensorContext;
 import org.sonar.api.batch.SonarIndex;
+import org.sonar.api.batch.SupportedEnvironment;
 import org.sonar.api.design.Dependency;
 import org.sonar.api.resources.Library;
 import org.sonar.api.resources.Project;
@@ -55,7 +55,7 @@ public class MavenDependenciesSensor implements Sensor {
   private SonarIndex index;
 
   public MavenDependenciesSensor(ArtifactRepository localRepository, ArtifactFactory artifactFactory, ArtifactMetadataSource artifactMetadataSource,
-                                 ArtifactCollector artifactCollector, DependencyTreeBuilder treeBuilder, SonarIndex index) {
+    ArtifactCollector artifactCollector, DependencyTreeBuilder treeBuilder, SonarIndex index) {
     this.localRepository = localRepository;
     this.artifactFactory = artifactFactory;
     this.artifactMetadataSource = artifactMetadataSource;
@@ -79,7 +79,7 @@ public class MavenDependenciesSensor implements Sensor {
 
         public boolean endVisit(DependencyNode node) {
           if (node.getParent() != null && node.getParent() != node) {
-            saveDependency(node, context);
+            saveDependency(project, node, context);
           }
           return true;
         }
@@ -102,20 +102,20 @@ public class MavenDependenciesSensor implements Sensor {
     }
   }
 
-  protected void saveDependency(DependencyNode node, SensorContext context) {
-    Resource from = (node.getParent().getParent() == null) ? index.getProject() : toResource(node.getParent().getArtifact(), context);
-    Resource to = toResource(node.getArtifact(), context);
+  protected void saveDependency(final Project project, DependencyNode node, SensorContext context) {
+    Resource from = (node.getParent().getParent() == null) ? index.getProject() : toResource(project, node.getParent().getArtifact(), context);
+    Resource to = toResource(project, node.getArtifact(), context);
     Dependency dependency = new Dependency(from, to);
     dependency.setUsage(node.getArtifact().getScope());
     dependency.setWeight(1);
     context.saveDependency(dependency);
   }
 
-  protected static Resource toResource(Artifact artifact, SensorContext context) {
-    Project project = Project.createFromMavenIds(artifact.getGroupId(), artifact.getArtifactId());
-    Resource result = context.getResource(project);
+  protected static Resource toResource(final Project project, Artifact artifact, SensorContext context) {
+    Project depWithBranch = Project.createFromMavenIds(artifact.getGroupId(), artifact.getArtifactId(), project.getBranch());
+    Resource result = context.getResource(depWithBranch);
     if (result == null || !((Project) result).getAnalysisVersion().equals(artifact.getBaseVersion())) {
-      Library lib = new Library(project.getKey(), artifact.getBaseVersion());
+      Library lib = Library.createFromMavenIds(artifact.getGroupId(), artifact.getArtifactId(), artifact.getBaseVersion());
       context.saveResource(lib);
       result = context.getResource(lib);
     }
index 785937126fc673408353e8c24c0a7649ec48357b..da5cc35681bfac7a3567b9ee3d6a0ab228ba3b08 100644 (file)
@@ -87,6 +87,10 @@ public final class Library extends Resource {
     return false;
   }
 
+  public static Library createFromMavenIds(String groupId, String artifactId, String version) {
+    return new Library(String.format(Project.MAVEN_KEY_FORMAT, groupId, artifactId), version);
+  }
+
   @Override
   public boolean equals(Object o) {
     if (this == o) {
index 4355838c9e856ec761b89b1ad0c9248ddcf91a30..64be7f80a54d25a7aef618703ad9108fb4a16035 100644 (file)
@@ -28,6 +28,8 @@ import org.apache.maven.project.MavenProject;
 import org.sonar.api.CoreProperties;
 import org.sonar.api.component.Component;
 
+import javax.annotation.Nullable;
+
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -49,7 +51,7 @@ public class Project extends Resource implements Component {
     }
   };
 
-  private static final String MAVEN_KEY_FORMAT = "%s:%s";
+  static final String MAVEN_KEY_FORMAT = "%s:%s";
   private static final String BRANCH_KEY_FORMAT = "%s:%s";
 
   public static final String SCOPE = Scopes.PROJECT;
@@ -481,7 +483,11 @@ public class Project extends Resource implements Component {
   }
 
   public static Project createFromMavenIds(String groupId, String artifactId) {
-    return new Project(String.format(MAVEN_KEY_FORMAT, groupId, artifactId));
+    return createFromMavenIds(groupId, artifactId, null);
+  }
+
+  public static Project createFromMavenIds(String groupId, String artifactId, @Nullable String branch) {
+    return new Project(String.format(MAVEN_KEY_FORMAT, groupId, artifactId), branch, "");
   }
 
   @Override