Browse Source

SONAR-3885 Prepare Findbugs configuration for inclusions

tags/3.4
David Gageot 11 years ago
parent
commit
123ef89aa4

+ 10
- 14
plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsConfiguration.java View 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

+ 30
- 9
plugins/sonar-findbugs-plugin/src/main/java/org/sonar/plugins/findbugs/FindbugsProfileExporter.java View File

@@ -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<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;
}
}

Loading…
Cancel
Save