]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-3823 Don't activate Findbugs extensions on non-Java projects
authorFabrice Bellingard <fabrice.bellingard@sonarsource.com>
Mon, 24 Sep 2012 08:27:30 +0000 (10:27 +0200)
committerFabrice Bellingard <fabrice.bellingard@sonarsource.com>
Mon, 24 Sep 2012 08:27:30 +0000 (10:27 +0200)
plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsMavenInitializer.java
plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsSensor.java
plugins/sonar-findbugs-plugin/src/test/java/org/sonar/plugins/findbugs/FindbugsMavenInitializerTest.java
plugins/sonar-findbugs-plugin/src/test/java/org/sonar/plugins/findbugs/FindbugsSensorTest.java

index 86bbd8b5eaa7707e88d8293c86f31ca0b895af93..76116116e6c18d5ed8e7fca80e8986c368fb22f4 100644 (file)
@@ -24,6 +24,7 @@ import org.sonar.api.batch.Initializer;
 import org.sonar.api.batch.SupportedEnvironment;
 import org.sonar.api.batch.maven.MavenPlugin;
 import org.sonar.api.batch.maven.MavenUtils;
+import org.sonar.api.resources.Java;
 import org.sonar.api.resources.Project;
 
 /**
@@ -38,6 +39,12 @@ public class FindbugsMavenInitializer extends Initializer {
   private static final String FINDBUGS_GROUP_ID = MavenUtils.GROUP_ID_CODEHAUS_MOJO;
   private static final String FINDBUGS_ARTIFACT_ID = "findbugs-maven-plugin";
 
+  @Override
+  public boolean shouldExecuteOnProject(Project project) {
+    return Java.KEY.equals(project.getLanguageKey())
+      && !project.getFileSystem().mainFiles(Java.KEY).isEmpty();
+  }
+
   @Override
   public void execute(Project project) {
     Configuration conf = project.getConfiguration();
index ca3d55b4990ad2fb8ee4d0277569989d3a2818c7..d9ca6cecfe380fa0c6bbb8df3de5114f13204588 100644 (file)
@@ -25,6 +25,7 @@ import org.sonar.api.CoreProperties;
 import org.sonar.api.batch.Sensor;
 import org.sonar.api.batch.SensorContext;
 import org.sonar.api.profiles.RulesProfile;
+import org.sonar.api.resources.Java;
 import org.sonar.api.resources.JavaFile;
 import org.sonar.api.resources.Project;
 import org.sonar.api.rules.Rule;
@@ -49,8 +50,9 @@ public class FindbugsSensor implements Sensor {
   }
 
   public boolean shouldExecuteOnProject(Project project) {
-    return project.getFileSystem().hasJavaSourceFiles()
-        && !profile.getActiveRulesByRepository(FindbugsConstants.REPOSITORY_KEY).isEmpty();
+    return Java.KEY.equals(project.getLanguageKey())
+      && !project.getFileSystem().mainFiles(Java.KEY).isEmpty()
+      && !profile.getActiveRulesByRepository(FindbugsConstants.REPOSITORY_KEY).isEmpty();
   }
 
   public void analyse(Project project, SensorContext context) {
index a5faba2481d7e9116cd4b28f257721318938aee2..c7219e182b77b79b5719c855f1d5805247e026a0 100644 (file)
  */
 package org.sonar.plugins.findbugs;
 
+import com.google.common.collect.Lists;
 import org.apache.commons.configuration.Configuration;
 import org.junit.Before;
 import org.junit.Test;
+import org.sonar.api.resources.InputFile;
+import org.sonar.api.resources.InputFileUtils;
 import org.sonar.api.resources.Project;
+import org.sonar.api.resources.ProjectFileSystem;
 import org.sonar.api.test.MavenTestUtils;
 
+import java.util.ArrayList;
+
 import static org.fest.assertions.Assertions.assertThat;
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Matchers.eq;
@@ -44,6 +50,34 @@ public class FindbugsMavenInitializerTest {
     initializer = new FindbugsMavenInitializer();
   }
 
+  @Test
+  public void shouldNotAnalyseIfNoJavaProject() {
+    Project project = mock(Project.class);
+    when(project.getLanguageKey()).thenReturn("php");
+    assertThat(initializer.shouldExecuteOnProject(project)).isFalse();
+  }
+
+  @Test
+  public void shouldNotAnalyseIfJavaProjectButNoSource() {
+    Project project = mock(Project.class);
+    ProjectFileSystem fs = mock(ProjectFileSystem.class);
+    when(fs.mainFiles("java")).thenReturn(new ArrayList<InputFile>());
+    when(project.getFileSystem()).thenReturn(fs);
+    when(project.getLanguageKey()).thenReturn("java");
+    assertThat(initializer.shouldExecuteOnProject(project)).isFalse();
+  }
+
+  @Test
+  public void shouldAnalyse() {
+    Project project = mock(Project.class);
+    ProjectFileSystem fs = mock(ProjectFileSystem.class);
+    when(fs.mainFiles("java")).thenReturn(Lists.newArrayList(InputFileUtils.create(null, "")));
+    when(project.getFileSystem()).thenReturn(fs);
+    when(project.getLanguageKey()).thenReturn("java");
+    when(project.getAnalysisType()).thenReturn(Project.AnalysisType.DYNAMIC);
+    assertThat(initializer.shouldExecuteOnProject(project)).isTrue();
+  }
+
   @Test
   public void doNotSetExcludesFiltersIfAlreadyConfigured() {
     Configuration configuration = mock(Configuration.class);
index f1932c410d3e711a59bc0ca0e1cbe6d51c1021ca..317b72e46d619c1d938741e17c9c6158bb357291 100644 (file)
  */
 package org.sonar.plugins.findbugs;
 
+import com.google.common.collect.Lists;
 import org.apache.commons.configuration.Configuration;
 import org.junit.Test;
 import org.sonar.api.CoreProperties;
 import org.sonar.api.batch.SensorContext;
 import org.sonar.api.profiles.RulesProfile;
+import org.sonar.api.resources.InputFile;
+import org.sonar.api.resources.InputFileUtils;
 import org.sonar.api.resources.JavaFile;
 import org.sonar.api.resources.Project;
 import org.sonar.api.resources.ProjectFileSystem;
@@ -33,9 +36,9 @@ import org.sonar.api.rules.Violation;
 import org.sonar.api.test.IsViolation;
 
 import java.io.File;
+import java.util.ArrayList;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.fest.assertions.Assertions.assertThat;
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.argThat;
 import static org.mockito.Mockito.mock;
@@ -47,17 +50,48 @@ import static org.mockito.Mockito.when;
 public class FindbugsSensorTest extends FindbugsTests {
 
   @Test
-  public void shouldExecuteWhenSomeRulesAreActive() throws Exception {
-    FindbugsSensor sensor = new FindbugsSensor(createRulesProfileWithActiveRules(), new FakeRuleFinder(), null);
-    Project project = createProject();
-    assertTrue(sensor.shouldExecuteOnProject(project));
+  public void shouldNotAnalyseIfNoJavaProject() {
+    Project project = mock(Project.class);
+    when(project.getLanguageKey()).thenReturn("php");
+
+    FindbugsSensor sensor = new FindbugsSensor(null, null, null);
+    assertThat(sensor.shouldExecuteOnProject(project)).isFalse();
   }
 
   @Test
-  public void shouldNotExecuteWhenNoRulesAreActive() throws Exception {
-    FindbugsSensor analyser = new FindbugsSensor(RulesProfile.create(), new FakeRuleFinder(), null);
-    Project project = createProject();
-    assertFalse(analyser.shouldExecuteOnProject(project));
+  public void shouldNotAnalyseIfJavaProjectButNoSource() {
+    Project project = mock(Project.class);
+    ProjectFileSystem fs = mock(ProjectFileSystem.class);
+    when(fs.mainFiles("java")).thenReturn(new ArrayList<InputFile>());
+    when(project.getFileSystem()).thenReturn(fs);
+    when(project.getLanguageKey()).thenReturn("java");
+
+    FindbugsSensor sensor = new FindbugsSensor(null, null, null);
+    assertThat(sensor.shouldExecuteOnProject(project)).isFalse();
+  }
+
+  @Test
+  public void shouldNotAnalyseIfJavaProjectButNoRules() {
+    Project project = mock(Project.class);
+    ProjectFileSystem fs = mock(ProjectFileSystem.class);
+    when(fs.mainFiles("java")).thenReturn(Lists.newArrayList(InputFileUtils.create(null, "")));
+    when(project.getFileSystem()).thenReturn(fs);
+    when(project.getLanguageKey()).thenReturn("java");
+
+    FindbugsSensor sensor = new FindbugsSensor(RulesProfile.create(), null, null);
+    assertThat(sensor.shouldExecuteOnProject(project)).isFalse();
+  }
+
+  @Test
+  public void shouldAnalyse() {
+    Project project = mock(Project.class);
+    ProjectFileSystem fs = mock(ProjectFileSystem.class);
+    when(fs.mainFiles("java")).thenReturn(Lists.newArrayList(InputFileUtils.create(null, "")));
+    when(project.getFileSystem()).thenReturn(fs);
+    when(project.getLanguageKey()).thenReturn("java");
+
+    FindbugsSensor sensor = new FindbugsSensor(createRulesProfileWithActiveRules(), null, null);
+    assertThat(sensor.shouldExecuteOnProject(project)).isTrue();
   }
 
   @Test