From 07bf6c1878f04691234d189f75dbbf41b2564ede Mon Sep 17 00:00:00 2001 From: Godin Date: Mon, 15 Nov 2010 23:22:48 +0000 Subject: [PATCH] SONAR-1977: Ignore violations from findbugs report, if rule not activated in Sonar --- .../plugins/findbugs/FindbugsSensor.java | 18 +++++---- .../plugins/findbugs/FindbugsSensorTest.java | 26 +++++++++++-- .../findbugs/FindbugsXmlReportParserTest.java | 2 +- .../{findbugsXml.xml => findbugsReport.xml} | 6 +-- .../findbugsReportWithUnknownRule.xml | 39 +++++++++++++++++++ 5 files changed, 76 insertions(+), 15 deletions(-) rename plugins/sonar-findbugs-plugin/src/test/resources/org/sonar/plugins/findbugs/{findbugsXml.xml => findbugsReport.xml} (98%) create mode 100644 plugins/sonar-findbugs-plugin/src/test/resources/org/sonar/plugins/findbugs/findbugsReportWithUnknownRule.xml diff --git a/plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsSensor.java b/plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsSensor.java index 24350cb61ee..01b649544e5 100644 --- a/plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsSensor.java +++ b/plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsSensor.java @@ -19,6 +19,9 @@ */ package org.sonar.plugins.findbugs; +import java.io.File; +import java.util.List; + import org.apache.commons.lang.StringUtils; import org.sonar.api.CoreProperties; import org.sonar.api.batch.Sensor; @@ -31,9 +34,6 @@ import org.sonar.api.rules.RuleFinder; import org.sonar.api.rules.Violation; import org.sonar.api.utils.Logs; -import java.io.File; -import java.util.List; - public class FindbugsSensor implements Sensor { private RulesProfile profile; private RuleFinder ruleFinder; @@ -63,10 +63,14 @@ public class FindbugsSensor implements Sensor { List fbViolations = reportParser.getViolations(); for (FindbugsXmlReportParser.Violation fbViolation : fbViolations) { Rule rule = ruleFinder.findByKey(FindbugsConstants.REPOSITORY_KEY, fbViolation.getType()); - JavaFile resource = new JavaFile(fbViolation.getSonarJavaFileKey()); - if (context.getResource(resource) != null) { - Violation violation = Violation.create(rule, resource).setLineId(fbViolation.getStart()).setMessage(fbViolation.getLongMessage()); - context.saveViolation(violation); + if (rule != null) { // ignore violations from report, if rule not activated in Sonar + JavaFile resource = new JavaFile(fbViolation.getSonarJavaFileKey()); + if (context.getResource(resource) != null) { + Violation violation = Violation.create(rule, resource).setLineId(fbViolation.getStart()).setMessage(fbViolation.getLongMessage()); + context.saveViolation(violation); + } + } else { + Logs.INFO.debug("Findbugs rule '{}' not active in Sonar", fbViolation.getType()); } } } diff --git a/plugins/sonar-findbugs-plugin/src/test/java/org/sonar/plugins/findbugs/FindbugsSensorTest.java b/plugins/sonar-findbugs-plugin/src/test/java/org/sonar/plugins/findbugs/FindbugsSensorTest.java index fb4bac2ebf7..d5124bf0f1a 100644 --- a/plugins/sonar-findbugs-plugin/src/test/java/org/sonar/plugins/findbugs/FindbugsSensorTest.java +++ b/plugins/sonar-findbugs-plugin/src/test/java/org/sonar/plugins/findbugs/FindbugsSensorTest.java @@ -29,6 +29,8 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import java.io.File; + import org.apache.commons.configuration.Configuration; import org.apache.maven.project.MavenProject; import org.junit.Test; @@ -42,8 +44,6 @@ import org.sonar.api.resources.Resource; import org.sonar.api.rules.Violation; import org.sonar.api.test.IsViolation; -import java.io.File; - public class FindbugsSensorTest extends FindbugsTests { @Test @@ -82,7 +82,8 @@ public class FindbugsSensorTest extends FindbugsTests { FindbugsExecutor executor = mock(FindbugsExecutor.class); SensorContext context = mock(SensorContext.class); Configuration conf = mock(Configuration.class); - File xmlFile = new File(getClass().getResource("/org/sonar/plugins/findbugs/findbugsXml.xml").toURI()); + // We assume that this report was generated during findbugs execution + File xmlFile = new File(getClass().getResource("/org/sonar/plugins/findbugs/findbugsReport.xml").toURI()); when(project.getConfiguration()).thenReturn(conf); when(executor.execute()).thenReturn(xmlFile); when(context.getResource(any(Resource.class))).thenReturn(new JavaFile("org.sonar.MyClass")); @@ -110,7 +111,7 @@ public class FindbugsSensorTest extends FindbugsTests { FindbugsExecutor executor = mock(FindbugsExecutor.class); SensorContext context = mock(SensorContext.class); Configuration conf = mock(Configuration.class); - File xmlFile = new File(getClass().getResource("/org/sonar/plugins/findbugs/findbugsXml.xml").toURI()); + File xmlFile = new File(getClass().getResource("/org/sonar/plugins/findbugs/findbugsReport.xml").toURI()); when(conf.getString(CoreProperties.FINDBUGS_REPORT_PATH)).thenReturn(xmlFile.getAbsolutePath()); when(project.getConfiguration()).thenReturn(conf); when(context.getResource(any(Resource.class))).thenReturn(new JavaFile("org.sonar.MyClass")); @@ -132,6 +133,23 @@ public class FindbugsSensorTest extends FindbugsTests { verify(context).saveViolation(argThat(new IsViolation(wanted))); } + @Test + public void shouldIgnoreNotActiveViolations() throws Exception { + Project project = createProject(); + FindbugsExecutor executor = mock(FindbugsExecutor.class); + SensorContext context = mock(SensorContext.class); + Configuration conf = mock(Configuration.class); + File xmlFile = new File(getClass().getResource("/org/sonar/plugins/findbugs/findbugsReportWithUnknownRule.xml").toURI()); + when(conf.getString(CoreProperties.FINDBUGS_REPORT_PATH)).thenReturn(xmlFile.getAbsolutePath()); + when(project.getConfiguration()).thenReturn(conf); + when(context.getResource(any(Resource.class))).thenReturn(new JavaFile("org.sonar.MyClass")); + + FindbugsSensor analyser = new FindbugsSensor(createRulesProfileWithActiveRules(), new FindbugsRuleFinder(), executor); + analyser.analyse(project, context); + + verify(context, never()).saveViolation(any(Violation.class)); + } + private Project createProject() { DefaultProjectFileSystem fileSystem = mock(DefaultProjectFileSystem.class); when(fileSystem.hasJavaSourceFiles()).thenReturn(Boolean.TRUE); diff --git a/plugins/sonar-findbugs-plugin/src/test/java/org/sonar/plugins/findbugs/FindbugsXmlReportParserTest.java b/plugins/sonar-findbugs-plugin/src/test/java/org/sonar/plugins/findbugs/FindbugsXmlReportParserTest.java index ca6073ffdae..35511b8cd3f 100644 --- a/plugins/sonar-findbugs-plugin/src/test/java/org/sonar/plugins/findbugs/FindbugsXmlReportParserTest.java +++ b/plugins/sonar-findbugs-plugin/src/test/java/org/sonar/plugins/findbugs/FindbugsXmlReportParserTest.java @@ -36,7 +36,7 @@ public class FindbugsXmlReportParserTest { @Before public void init() { - File findbugsXmlReport = getFile("/org/sonar/plugins/findbugs/findbugsXml.xml"); + File findbugsXmlReport = getFile("/org/sonar/plugins/findbugs/findbugsReport.xml"); FindbugsXmlReportParser xmlParser = new FindbugsXmlReportParser(findbugsXmlReport); violations = xmlParser.getViolations(); } diff --git a/plugins/sonar-findbugs-plugin/src/test/resources/org/sonar/plugins/findbugs/findbugsXml.xml b/plugins/sonar-findbugs-plugin/src/test/resources/org/sonar/plugins/findbugs/findbugsReport.xml similarity index 98% rename from plugins/sonar-findbugs-plugin/src/test/resources/org/sonar/plugins/findbugs/findbugsXml.xml rename to plugins/sonar-findbugs-plugin/src/test/resources/org/sonar/plugins/findbugs/findbugsReport.xml index d5d47cf39b7..c4485350c6b 100644 --- a/plugins/sonar-findbugs-plugin/src/test/resources/org/sonar/plugins/findbugs/findbugsXml.xml +++ b/plugins/sonar-findbugs-plugin/src/test/resources/org/sonar/plugins/findbugs/findbugsReport.xml @@ -23,7 +23,7 @@ At ZipUtils.java:[line 107] - + Could be refactored into a named static inner class @@ -37,7 +37,7 @@ At MeasuresDao.java:[lines 56-57] - + @@ -45,4 +45,4 @@ - \ No newline at end of file + diff --git a/plugins/sonar-findbugs-plugin/src/test/resources/org/sonar/plugins/findbugs/findbugsReportWithUnknownRule.xml b/plugins/sonar-findbugs-plugin/src/test/resources/org/sonar/plugins/findbugs/findbugsReportWithUnknownRule.xml new file mode 100644 index 00000000000..0b19ae4d818 --- /dev/null +++ b/plugins/sonar-findbugs-plugin/src/test/resources/org/sonar/plugins/findbugs/findbugsReportWithUnknownRule.xml @@ -0,0 +1,39 @@ + + + + + Method may fail to clean up stream or resource + Method com.exedio.csvtools.DBTool.executeUpdate(String) may fail to clean up java.sql.Statement + + + At DBTool.java:[lines 55-338] + + In class com.exedio.csvtools.DBTool + + + + In method com.exedio.csvtools.DBTool.executeUpdate(String) + + + + In Statement.java + + Reference type java.sql.Statement + + + 1 instances of obligation remaining + + + Obligation to clean up resource created at DBTool.java:[line 302] is not discharged + + + Path continues at DBTool.java:[line 303] + + + Path continues at DBTool.java:[line 313] + + + Remaining obligations: {Statement x 1} + + + -- 2.39.5