]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-3885 Prepare Findbugs configuration for inclusions
authorDavid Gageot <david@gageot.net>
Tue, 6 Nov 2012 12:01:10 +0000 (13:01 +0100)
committerDavid Gageot <david@gageot.net>
Tue, 6 Nov 2012 12:01:10 +0000 (13:01 +0100)
plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsConfiguration.java
plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsProfileExporter.java

index ad24fa026ae1afeb04cf94066c89dad9136352be..5d19d7de7946c497c904765c244b000348e41857 100644 (file)
@@ -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
index d735e5ebfb44eee98a65f1fcd46ec699e8c87b68..bc1e11f879386501776eb1197a09f9070fb8becd 100644 (file)
  */
 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<ActiveRule> 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("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!-- Generated by Sonar -->\n".concat(xstream.toXML(filter)));
+      writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
+      writer.write("<!-- Generated by Sonar -->\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<ActiveRule> 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;
   }
 }