Skip to content

Commit 38711df

Browse files
committed
Fix how eclipse plugin gathers the violations from PMD - now using a report
1 parent aa3dc62 commit 38711df

File tree

1 file changed

+57
-9
lines changed
  • net.sourceforge.pmd.eclipse.plugin/src/main/java/net/sourceforge/pmd/eclipse/runtime/cmd

1 file changed

+57
-9
lines changed

net.sourceforge.pmd.eclipse.plugin/src/main/java/net/sourceforge/pmd/eclipse/runtime/cmd/BaseVisitor.java

Lines changed: 57 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import java.io.IOException;
2828
import java.io.InputStreamReader;
2929
import java.io.Reader;
30+
import java.io.Writer;
3031
import java.util.ArrayList;
3132
import java.util.Arrays;
3233
import java.util.Collections;
@@ -47,19 +48,20 @@
4748
import org.eclipse.ui.IWorkingSet;
4849
import org.eclipse.ui.ResourceWorkingSetFilter;
4950

50-
import name.herlin.command.Timer;
5151
import net.sourceforge.pmd.PMD;
5252
import net.sourceforge.pmd.PMDConfiguration;
5353
import net.sourceforge.pmd.PMDException;
54+
import net.sourceforge.pmd.PropertyDescriptor;
55+
import net.sourceforge.pmd.Report;
5456
import net.sourceforge.pmd.Report.ProcessingError;
57+
import net.sourceforge.pmd.Report.RuleConfigurationError;
5558
import net.sourceforge.pmd.Rule;
5659
import net.sourceforge.pmd.RuleContext;
5760
import net.sourceforge.pmd.RuleSet;
5861
import net.sourceforge.pmd.RuleSetFactory;
5962
import net.sourceforge.pmd.RuleSetNotFoundException;
6063
import net.sourceforge.pmd.RuleSets;
6164
import net.sourceforge.pmd.RuleViolation;
62-
import net.sourceforge.pmd.SourceCodeProcessor;
6365
import net.sourceforge.pmd.eclipse.plugin.PMDPlugin;
6466
import net.sourceforge.pmd.eclipse.runtime.PMDRuntimeConstants;
6567
import net.sourceforge.pmd.eclipse.runtime.properties.IProjectProperties;
@@ -69,12 +71,15 @@
6971
import net.sourceforge.pmd.lang.LanguageVersion;
7072
import net.sourceforge.pmd.lang.LanguageVersionDiscoverer;
7173
import net.sourceforge.pmd.lang.java.JavaLanguageModule;
74+
import net.sourceforge.pmd.renderers.AbstractRenderer;
7275
import net.sourceforge.pmd.renderers.Renderer;
7376
import net.sourceforge.pmd.util.NumericConstants;
7477
import net.sourceforge.pmd.util.StringUtil;
7578
import net.sourceforge.pmd.util.datasource.DataSource;
7679
import net.sourceforge.pmd.util.datasource.ReaderDataSource;
7780

81+
import name.herlin.command.Timer;
82+
7883
/**
7984
* Factor some useful features for visitors
8085
*
@@ -307,12 +312,56 @@ public synchronized RuleSets createRuleSets(String referenceString)
307312
};
308313
configuration().setThreads(0); // need to disable multi threading, as the ruleset is not recreated and shared between threads...
309314
// but as we anyway have only one file to process, it won't hurt here.
310-
PMD.processFiles(configuration(), ruleSetFactory, Arrays.asList(dataSource), context, Collections.<Renderer>emptyList());
315+
log.debug("PMD running on file " + file.getName());
316+
final Report collectingReport = new Report();
317+
Renderer collectingRenderer = new AbstractRenderer("collectingRenderer", "Renderer that collect violations") {
318+
@Override
319+
public void startFileAnalysis(DataSource dataSource) {
320+
// TODO Auto-generated method stub
321+
322+
}
323+
324+
@Override
325+
public void start() throws IOException {
326+
// TODO Auto-generated method stub
327+
328+
}
329+
330+
@Override
331+
public void renderFileReport(Report report) throws IOException {
332+
for (RuleViolation v : report) {
333+
collectingReport.addRuleViolation(v);
334+
}
335+
for (Iterator<ProcessingError> it = report.errors(); it.hasNext(); ) {
336+
collectingReport.addError(it.next());
337+
}
338+
for (Iterator<RuleConfigurationError> it = report.configErrors(); it.hasNext(); ) {
339+
collectingReport.addConfigError(it.next());
340+
}
341+
}
342+
343+
@Override
344+
public void end() throws IOException {
345+
// TODO Auto-generated method stub
346+
347+
}
348+
349+
@Override
350+
public String defaultFileExtension() {
351+
// TODO Auto-generated method stub
352+
return null;
353+
}
354+
};
355+
356+
PMD.processFiles(configuration(), ruleSetFactory, Arrays.asList(dataSource), context, Arrays.asList(collectingRenderer));
357+
log.debug("PMD run finished.");
311358

312359
timer.stop();
313360
pmdDuration += timer.getDuration();
314361

315-
if (context.getReport().hasErrors()) {
362+
log.debug("PMD found " + collectingReport.size() + " violations for file " + file.getName());
363+
364+
if (collectingReport.hasErrors()) {
316365
StringBuilder message = new StringBuilder("There were processing errors!\n");
317366
Iterator<ProcessingError> errors = context.getReport().errors();
318367
while (errors.hasNext()) {
@@ -323,7 +372,7 @@ public synchronized RuleSets createRuleSets(String referenceString)
323372
throw new PMDException(message.toString());
324373
}
325374

326-
updateMarkers(file, context, isUseTaskMarker());
375+
updateMarkers(file, collectingReport.iterator(), isUseTaskMarker());
327376

328377
worked(1);
329378
fileCount++;
@@ -406,21 +455,20 @@ private void prepareMarkerAccumulator(IFile file) {
406455
}
407456
}
408457

409-
private void updateMarkers(IFile file, RuleContext context, boolean fTask)
458+
private void updateMarkers(IFile file, Iterator<RuleViolation> violations, boolean fTask)
410459
throws CoreException, PropertiesException {
411460

412461
Map<IFile, Set<MarkerInfo2>> accumulator = getAccumulator();
413462
Set<MarkerInfo2> markerSet = new HashSet<MarkerInfo2>();
414463
List<Review> reviewsList = findReviewedViolations(file);
415464
Review review = new Review();
416-
Iterator<RuleViolation> iter = context.getReport().iterator();
417465
// final IPreferences preferences = PMDPlugin.getDefault().loadPreferences();
418466
// final int maxViolationsPerFilePerRule = preferences.getMaxViolationsPerFilePerRule();
419467
Map<Rule, Integer> violationsByRule = new HashMap<Rule, Integer>();
420468

421469
Rule rule;
422-
while (iter.hasNext()) {
423-
RuleViolation violation = iter.next();
470+
while (violations.hasNext()) {
471+
RuleViolation violation = violations.next();
424472
rule = violation.getRule();
425473
review.ruleName = rule.getName();
426474
review.lineNumber = violation.getBeginLine();

0 commit comments

Comments
 (0)