use of net.sourceforge.pmd.util.datasource.DataSource in project maven-plugins by apache.
the class PmdReport method executePmd.
private void executePmd() throws MavenReportException {
if (renderer != null) {
// PMD has already been run
getLog().debug("PMD has already been run - skipping redundant execution.");
return;
}
try {
excludeFromFile.loadExcludeFromFailuresData(excludeFromFailureFile);
} catch (MojoExecutionException e) {
throw new MavenReportException("Unable to load exclusions", e);
}
// configure ResourceManager
locator.addSearchPath(FileResourceLoader.ID, project.getFile().getParentFile().getAbsolutePath());
locator.addSearchPath("url", "");
locator.setOutputDirectory(targetDirectory);
renderer = new PmdCollectingRenderer();
PMDConfiguration pmdConfiguration = getPMDConfiguration();
String[] sets = new String[rulesets.length];
try {
for (int idx = 0; idx < rulesets.length; idx++) {
String set = rulesets[idx];
getLog().debug("Preparing ruleset: " + set);
RuleSetReferenceId id = new RuleSetReferenceId(set);
File ruleset = locator.getResourceAsFile(id.getRuleSetFileName(), getLocationTemp(set));
if (null == ruleset) {
throw new MavenReportException("Could not resolve " + set);
}
sets[idx] = ruleset.getAbsolutePath();
}
} catch (ResourceNotFoundException e) {
throw new MavenReportException(e.getMessage(), e);
} catch (FileResourceCreationException e) {
throw new MavenReportException(e.getMessage(), e);
}
pmdConfiguration.setRuleSets(StringUtils.join(sets, ","));
try {
if (filesToProcess == null) {
filesToProcess = getFilesToProcess();
}
if (filesToProcess.isEmpty() && !"java".equals(language)) {
getLog().warn("No files found to process. Did you add your additional source folders like javascript?" + " (see also build-helper-maven-plugin)");
}
} catch (IOException e) {
throw new MavenReportException("Can't get file list", e);
}
String encoding = getSourceEncoding();
if (StringUtils.isEmpty(encoding) && !filesToProcess.isEmpty()) {
getLog().warn("File encoding has not been set, using platform encoding " + ReaderFactory.FILE_ENCODING + ", i.e. build is platform dependent!");
encoding = ReaderFactory.FILE_ENCODING;
}
pmdConfiguration.setSourceEncoding(encoding);
List<DataSource> dataSources = new ArrayList<>(filesToProcess.size());
for (File f : filesToProcess.keySet()) {
dataSources.add(new FileDataSource(f));
}
if (sets.length > 0) {
processFilesWithPMD(pmdConfiguration, dataSources);
} else {
getLog().debug("Skipping PMD execution as no rulesets are defined.");
}
if (renderer.hasErrors()) {
if (!skipPmdError) {
getLog().error("PMD processing errors:");
getLog().error(renderer.getErrorsAsString());
throw new MavenReportException("Found " + renderer.getErrors().size() + " PMD processing errors");
}
getLog().warn("There are " + renderer.getErrors().size() + " PMD processing errors:");
getLog().warn(renderer.getErrorsAsString());
}
removeExcludedViolations(renderer.getViolations());
// so the "check" goals can check for violations
if (isXml() && renderer != null) {
writeNonHtml(renderer.asReport());
}
if (benchmark) {
try (PrintStream benchmarkFileStream = new PrintStream(benchmarkOutputFilename)) {
(new TextReport()).generate(Benchmarker.values(), benchmarkFileStream);
} catch (FileNotFoundException fnfe) {
getLog().error("Unable to generate benchmark file: " + benchmarkOutputFilename, fnfe);
}
}
}
use of net.sourceforge.pmd.util.datasource.DataSource in project Gargoyle by callakrsos.
the class PMDGargoyleThreadProcessor method processFiles.
public void processFiles(RuleSetFactory ruleSetFactory, List<DataSource> files, RuleContext ctx, List<Renderer> renderers) {
// single threaded execution
RuleSets rs = createRuleSets(ruleSetFactory);
SourceCodeProcessor processor = new SourceCodeProcessor(configuration);
for (DataSource dataSource : files) {
String niceFileName = filenameFrom(dataSource);
Report report = PMD.setupReport(rs, ctx, niceFileName);
// overtake the listener
//bug fix 2016-10-05 by kyj. 결과가 중복되서 출력됨.
// report.addSynchronizedListeners(ctx.getReport().getSynchronizedListeners());
// ctx.setReport(report);
// ctx.setSourceCodeFilename(niceFileName);
// if (LOG.isLoggable(Level.FINE)) {
// LOG.fine("Processing " + ctx.getSourceCodeFilename());
// }
rs.start(ctx);
for (Renderer r : renderers) {
r.startFileAnalysis(dataSource);
}
try {
InputStream stream = new BufferedInputStream(dataSource.getInputStream());
// ctx.setLanguageVersion(null);
processor.processSourceCode(stream, rs, ctx);
} catch (PMDException pmde) {
// LOGGER.error(ValueUtil.toString(pmde));
// if (LOG.isLoggable(Level.FINE)) {
// LOG.log(Level.FINE, "Error while processing file: " + niceFileName, pmde.getCause());
// }
report.addError(new Report.ProcessingError(pmde.getMessage(), niceFileName));
} catch (IOException ioe) {
// LOGGER.error(ValueUtil.toString(ioe));
// unexpected exception: log and stop executor service
addError(report, "Unable to read source file", ioe, niceFileName);
} catch (RuntimeException re) {
// LOGGER.error(ValueUtil.toString(re));
// unexpected exception: log and stop executor service
addError(report, "RuntimeException while processing file", re, niceFileName);
} catch (Exception e) {
LOGGER.error(ValueUtil.toString(e));
}
rs.end(ctx);
super.renderReports(renderers, ctx.getReport());
}
}
use of net.sourceforge.pmd.util.datasource.DataSource in project Gargoyle by callakrsos.
the class DoPMD method doPMD.
public int doPMD(GargoylePMDConfiguration configuration, List<ReportListener> listeners) {
renerderWriter = RendererWriterFactory.get(WRITER_TYPE.StringWriter);
// Load the RuleSets
RuleSetFactory ruleSetFactory = RulesetsFactoryUtils.getRulesetFactory(configuration);
RuleSets ruleSets = RulesetsFactoryUtils.getRuleSetsWithBenchmark(configuration.getRuleSets(), ruleSetFactory);
if (ruleSets == null) {
return 0;
}
Set<Language> languages = getApplicableLanguages(configuration, ruleSets);
List<DataSource> files = getApplicableFiles(configuration, languages);
long reportStart = System.nanoTime();
try {
// Renderer renderer = RendererFactory.createRenderer(configuration.getReportFormat(), configuration.getReportProperties()); //configuration.createRenderer();//createDefaultRenderer();
List<Renderer> renderers = new LinkedList<>();
//configuration.createRenderer();
Renderer renderer = new DatabaseXmlRenderer();
renderer.setWriter(renerderWriter.getWriter());
renderer.start();
renderers.add(renderer);
Benchmarker.mark(Benchmark.Reporting, System.nanoTime() - reportStart, 0);
RuleContext ctx = new RuleContext();
final AtomicInteger violations = new AtomicInteger(0);
ctx.getReport().addListener(new ReportListener() {
@Override
public void ruleViolationAdded(RuleViolation ruleViolation) {
violations.incrementAndGet();
}
@Override
public void metricAdded(Metric metric) {
}
});
if (listeners != null && !listeners.isEmpty()) {
for (ReportListener l : listeners) ctx.getReport().addListener(l);
}
processFiles(configuration, ruleSetFactory, files, ctx, renderers);
reportStart = System.nanoTime();
// renderer.renderFileReport();
renderer.end();
renderer.flush();
return violations.get();
} catch (Exception e) {
LOGGER.error(ValueUtil.toString(e));
return 0;
} finally {
Benchmarker.mark(Benchmark.Reporting, System.nanoTime() - reportStart, 0);
try {
close();
} catch (IOException e) {
LOGGER.error(ValueUtil.toString(e));
}
}
}
use of net.sourceforge.pmd.util.datasource.DataSource in project Gargoyle by callakrsos.
the class DoPMD method internalGetApplicableFiles.
private List<DataSource> internalGetApplicableFiles(GargoylePMDConfiguration configuration, Set<Language> languages) {
List<DataSource> files = new ArrayList<>();
LanguageFilenameFilter fileSelector = new LanguageFilenameFilter(languages);
if (null != configuration.getInputPaths()) {
files.addAll(FileUtil.collectFiles(configuration.getInputPaths(), fileSelector));
}
if (null != configuration.getSourceText()) {
String filePaths = "SourceBase";
if (null != configuration.getSourceFileName()) {
filePaths = configuration.getSourceFileName();
}
filePaths = filePaths.replaceAll("\\r?\\n", ",");
filePaths = filePaths.replaceAll(",+", ",");
String sourceText = configuration.getSourceText();
try {
Reader reader = new StringReader(sourceText);
files.addAll(Arrays.asList(new ReaderDataSource(reader, filePaths)));
} catch (Exception e) {
LOGGER.error(ValueUtil.toString(e));
}
}
return files;
}
Aggregations