]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-3543 Display sources folder in error message
authorFabrice Bellingard <bellingard@gmail.com>
Wed, 11 Jul 2012 14:57:27 +0000 (16:57 +0200)
committerFabrice Bellingard <bellingard@gmail.com>
Thu, 12 Jul 2012 08:33:31 +0000 (10:33 +0200)
plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/sensors/FilesDecorator.java
plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/sensors/FilesDecoratorTest.java

index 7f3b1097cdd7452406447aa88ff00f501312d065..d03878878a7a1a65b661f488f09b4771c32a83b9 100644 (file)
@@ -31,6 +31,7 @@ import org.sonar.api.resources.Resource;
 import org.sonar.api.resources.ResourceUtils;
 import org.sonar.api.utils.SonarException;
 
+import java.io.File;
 import java.util.Collection;
 
 /**
@@ -70,7 +71,19 @@ public final class FilesDecorator implements Decorator {
   @SuppressWarnings("rawtypes")
   private void checkRootProjectHasFiles(Resource resource, Double sum) {
     if (ResourceUtils.isRootProject(resource) && (sum == null || sum.doubleValue() == 0)) {
-      throw new SonarException("Project \"" + resource.getName() + "\" does not contain any file. Please check your project configuration.");
+      String sourceFoldersList = printSourceFoldersList((Project) resource);
+      throw new SonarException("Project \"" + resource.getName() + "\" does not contain any file in its source folders:\n" +
+        sourceFoldersList + "\nPlease check your project configuration.");
     }
   }
+
+  private String printSourceFoldersList(Project project) {
+    StringBuilder result = new StringBuilder();
+    for (File sourceDir : project.getFileSystem().getSourceDirs()) {
+      result.append("   - ");
+      result.append(sourceDir.getAbsolutePath());
+      result.append("\n");
+    }
+    return result.toString();
+  }
 }
index c6bfd2bde3f57b2c277c8705c22fd12dba52bb59..ba14e46d2922ed2f709cf6417530a4dd0174422b 100644 (file)
@@ -19,6 +19,7 @@
  */
 package org.sonar.plugins.core.sensors;
 
+import com.google.common.collect.Lists;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -29,10 +30,12 @@ import org.sonar.api.batch.DecoratorContext;
 import org.sonar.api.measures.CoreMetrics;
 import org.sonar.api.measures.Measure;
 import org.sonar.api.resources.Project;
+import org.sonar.api.resources.ProjectFileSystem;
 import org.sonar.api.resources.Qualifiers;
 import org.sonar.api.resources.Resource;
 import org.sonar.api.utils.SonarException;
 
+import java.io.File;
 import java.util.Arrays;
 
 import static org.fest.assertions.Assertions.assertThat;
@@ -112,25 +115,35 @@ public class FilesDecoratorTest {
 
   @Test
   public void shouldFailOnRootProjectIfNoFile() {
-    when(resource.getQualifier()).thenReturn(Qualifiers.PROJECT);
-    when(resource.getName()).thenReturn("Foo");
+    Project project = createMockProject();
     when(context.getChildrenMeasures(CoreMetrics.FILES)).thenReturn(Arrays.asList(new Measure(CoreMetrics.FILES, 0.0)));
 
     thrown.expect(SonarException.class);
-    thrown.expectMessage("Project \"Foo\" does not contain any file. Please check your project configuration.");
+    thrown.expectMessage("Project \"Foo\" does not contain any file in its source folders:\n");
+    thrown.expectMessage("- " + new File("target/temp").getAbsolutePath() + "\n");
+    thrown.expectMessage("\nPlease check your project configuration.");
 
-    decorator.decorate(resource, context);
+    decorator.decorate(project, context);
   }
 
   @Test
   public void shouldFailOnRootProjectIfNoFileMeasure() {
-    when(resource.getQualifier()).thenReturn(Qualifiers.PROJECT);
-    when(resource.getName()).thenReturn("Foo");
+    Project project = createMockProject();
 
     thrown.expect(SonarException.class);
-    thrown.expectMessage("Project \"Foo\" does not contain any file. Please check your project configuration.");
+    thrown.expectMessage("Project \"Foo\" does not contain any file in its source folders");
 
-    decorator.decorate(resource, context);
+    decorator.decorate(project, context);
+  }
+
+  private Project createMockProject() {
+    Project project = mock(Project.class);
+    when(project.getQualifier()).thenReturn(Qualifiers.PROJECT);
+    when(project.getName()).thenReturn("Foo");
+    ProjectFileSystem fileSystem = mock(ProjectFileSystem.class);
+    when(fileSystem.getSourceDirs()).thenReturn(Lists.newArrayList(new File("target/temp")));
+    when(project.getFileSystem()).thenReturn(fileSystem);
+    return project;
   }
 
   @Test