From 123ef89aa488f906363d5fba90951be7d430756a Mon Sep 17 00:00:00 2001 From: David Gageot Date: Tue, 6 Nov 2012 13:01:10 +0100 Subject: [PATCH] SONAR-3885 Prepare Findbugs configuration for inclusions --- .../findbugs/FindbugsConfiguration.java | 24 +++++------- .../findbugs/FindbugsProfileExporter.java | 39 ++++++++++++++----- 2 files changed, 40 insertions(+), 23 deletions(-) diff --git a/plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsConfiguration.java b/plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsConfiguration.java index ad24fa026ae..5d19d7de794 100644 --- a/plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsConfiguration.java +++ b/plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsConfiguration.java @@ -30,9 +30,6 @@ import org.sonar.api.config.Settings; import org.sonar.api.profiles.RulesProfile; import org.sonar.api.resources.Project; import org.sonar.api.utils.SonarException; -import org.sonar.plugins.findbugs.xml.ClassFilter; -import org.sonar.plugins.findbugs.xml.FindBugsFilter; -import org.sonar.plugins.findbugs.xml.Match; import java.io.File; import java.io.IOException; @@ -91,21 +88,20 @@ public class FindbugsConfiguration implements BatchExtension { @VisibleForTesting File saveIncludeConfigXml() throws IOException { - StringWriter conf = new StringWriter(); - exporter.exportProfile(profile, conf); - return project.getFileSystem().writeToWorkingDirectory(conf.toString(), "findbugs-include.xml"); + StringWriter xml = new StringWriter(); + + exporter.exportProfile(profile, xml); + + return project.getFileSystem().writeToWorkingDirectory(xml.toString(), "findbugs-include.xml"); } @VisibleForTesting File saveExcludeConfigXml() throws IOException { - FindBugsFilter findBugsFilter = new FindBugsFilter(); - if (project.getExclusionPatterns() != null) { - for (String exclusion : project.getExclusionPatterns()) { - ClassFilter classFilter = new ClassFilter(FindbugsAntConverter.antToJavaRegexpConvertor(exclusion)); - findBugsFilter.addMatch(new Match(classFilter)); - } - } - return project.getFileSystem().writeToWorkingDirectory(findBugsFilter.toXml(), "findbugs-exclude.xml"); + StringWriter xml = new StringWriter(); + + exporter.exportExclusions(project.getExclusionPatterns(), xml); + + return project.getFileSystem().writeToWorkingDirectory(xml.toString(), "findbugs-exclude.xml"); } @VisibleForTesting diff --git a/plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsProfileExporter.java b/plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsProfileExporter.java index d735e5ebfb4..bc1e11f8793 100644 --- a/plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsProfileExporter.java +++ b/plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsProfileExporter.java @@ -19,42 +19,62 @@ */ package org.sonar.plugins.findbugs; -import java.io.IOException; -import java.io.Writer; -import java.util.List; - import org.sonar.api.profiles.ProfileExporter; import org.sonar.api.profiles.RulesProfile; import org.sonar.api.resources.Java; import org.sonar.api.rules.ActiveRule; import org.sonar.api.utils.SonarException; import org.sonar.plugins.findbugs.xml.Bug; +import org.sonar.plugins.findbugs.xml.ClassFilter; import org.sonar.plugins.findbugs.xml.FindBugsFilter; import org.sonar.plugins.findbugs.xml.Match; -import com.thoughtworks.xstream.XStream; +import java.io.IOException; +import java.io.Writer; +import java.util.List; public class FindbugsProfileExporter extends ProfileExporter { public FindbugsProfileExporter() { super(FindbugsConstants.REPOSITORY_KEY, FindbugsConstants.PLUGIN_NAME); + setSupportedLanguages(Java.KEY); setMimeType("application/xml"); } @Override public void exportProfile(RulesProfile profile, Writer writer) { + List activeRulesByRepository = profile.getActiveRulesByRepository(FindbugsConstants.REPOSITORY_KEY); + FindBugsFilter filter = buildFindbugsFilter(activeRulesByRepository); + + writeXml(filter, writer); + } + + public void exportExclusions(String[] exclusions, Writer writer) { + FindBugsFilter filter = new FindBugsFilter(); + if (exclusions != null) { + for (String exclusion : exclusions) { + ClassFilter classFilter = new ClassFilter(FindbugsAntConverter.antToJavaRegexpConvertor(exclusion)); + filter.addMatch(new Match(classFilter)); + } + } + + writeXml(filter, writer); + } + + private static void writeXml(FindBugsFilter filter, Writer writer) { try { - FindBugsFilter filter = buildFindbugsFilter(profile.getActiveRulesByRepository(FindbugsConstants.REPOSITORY_KEY)); - XStream xstream = FindBugsFilter.createXStream(); - writer.append("\n\n".concat(xstream.toXML(filter))); + writer.write("\n"); + writer.write("\n"); + writer.write(filter.toXml()); } catch (IOException e) { - throw new SonarException("Fail to export the Findbugs profile : " + profile, e); + throw new SonarException("Fail to export Findbugs configuration", e); } } protected static FindBugsFilter buildFindbugsFilter(List activeRules) { FindBugsFilter root = new FindBugsFilter(); + for (ActiveRule activeRule : activeRules) { if (FindbugsConstants.REPOSITORY_KEY.equals(activeRule.getRepositoryKey())) { Match child = new Match(); @@ -62,6 +82,7 @@ public class FindbugsProfileExporter extends ProfileExporter { root.addMatch(child); } } + return root; } } -- 2.39.5