From 07bf6c1878f04691234d189f75dbbf41b2564ede Mon Sep 17 00:00:00 2001 From: Godin Date: Mon, 15 Nov 2010 23:22:48 +0000 Subject: SONAR-1977: Ignore violations from findbugs report, if rule not activated in Sonar --- .../org/sonar/plugins/findbugs/FindbugsSensor.java | 18 ++++---- .../sonar/plugins/findbugs/FindbugsSensorTest.java | 26 ++++++++++-- .../findbugs/FindbugsXmlReportParserTest.java | 2 +- .../org/sonar/plugins/findbugs/findbugsReport.xml | 48 ++++++++++++++++++++++ .../findbugs/findbugsReportWithUnknownRule.xml | 39 ++++++++++++++++++ .../org/sonar/plugins/findbugs/findbugsXml.xml | 48 ---------------------- 6 files changed, 121 insertions(+), 60 deletions(-) create mode 100644 plugins/sonar-findbugs-plugin/src/test/resources/org/sonar/plugins/findbugs/findbugsReport.xml create mode 100644 plugins/sonar-findbugs-plugin/src/test/resources/org/sonar/plugins/findbugs/findbugsReportWithUnknownRule.xml delete mode 100644 plugins/sonar-findbugs-plugin/src/test/resources/org/sonar/plugins/findbugs/findbugsXml.xml (limited to 'plugins') 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/findbugsReport.xml b/plugins/sonar-findbugs-plugin/src/test/resources/org/sonar/plugins/findbugs/findbugsReport.xml new file mode 100644 index 00000000000..c4485350c6b --- /dev/null +++ b/plugins/sonar-findbugs-plugin/src/test/resources/org/sonar/plugins/findbugs/findbugsReport.xml @@ -0,0 +1,48 @@ + + + /Users/freddy/Documents/sonar_projects/sonar/sonar-commons/target/classes + /Users/freddy/.m2/repository/org/apache/maven/reporting/maven-reporting-impl/2.0/maven-reporting-impl-2.0.jar + /Users/freddy/Documents/sonar_projects/sonar/sonar-commons/src/main/java + /Users/freddy/Documents/sonar_projects/sonar/sonar-commons/target + + + Creates an empty zip file entry + Empty zip file entry created in org.sonar.commons.ZipUtils._zip(String, File, ZipOutputStream) + + + At ZipUtils.java:[lines 33-139] + + In class org.sonar.commons.ZipUtils + + + + In method org.sonar.commons.ZipUtils._zip(String, File, ZipOutputStream) + + + At ZipUtils.java:[line 107] + + + At ZipUtils.java:[line 107] + + + + Could be refactored into a named static inner class + The class org.sonar.commons.resources.MeasuresDao$1 could be refactored into a named _static_ inner class + + + At MeasuresDao.java:[lines 56-57] + + In class org.sonar.commons.resources.MeasuresDao$1 + + + At MeasuresDao.java:[lines 56-57] + + + + + + + + + + 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} + + + 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/findbugsXml.xml deleted file mode 100644 index d5d47cf39b7..00000000000 --- a/plugins/sonar-findbugs-plugin/src/test/resources/org/sonar/plugins/findbugs/findbugsXml.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - /Users/freddy/Documents/sonar_projects/sonar/sonar-commons/target/classes - /Users/freddy/.m2/repository/org/apache/maven/reporting/maven-reporting-impl/2.0/maven-reporting-impl-2.0.jar - /Users/freddy/Documents/sonar_projects/sonar/sonar-commons/src/main/java - /Users/freddy/Documents/sonar_projects/sonar/sonar-commons/target - - - Creates an empty zip file entry - Empty zip file entry created in org.sonar.commons.ZipUtils._zip(String, File, ZipOutputStream) - - - At ZipUtils.java:[lines 33-139] - - In class org.sonar.commons.ZipUtils - - - - In method org.sonar.commons.ZipUtils._zip(String, File, ZipOutputStream) - - - At ZipUtils.java:[line 107] - - - At ZipUtils.java:[line 107] - - - - Could be refactored into a named static inner class - The class org.sonar.commons.resources.MeasuresDao$1 could be refactored into a named _static_ inner class - - - At MeasuresDao.java:[lines 56-57] - - In class org.sonar.commons.resources.MeasuresDao$1 - - - At MeasuresDao.java:[lines 56-57] - - - - - - - - - - \ No newline at end of file -- cgit v1.2.3