Skip to content

Commit 1212fb7

Browse files
committed
Determine file extensions of the active rule's languages
Skip analysis if extension doesn't match.
1 parent 98dafb1 commit 1212fb7

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import java.util.HashSet;
1616
import java.util.Iterator;
1717
import java.util.List;
18+
import java.util.Locale;
1819
import java.util.Map;
1920
import java.util.Set;
2021
import java.util.Stack;
@@ -72,6 +73,7 @@ public class BaseVisitor {
7273
private Map<IFile, Set<MarkerInfo2>> accumulator;
7374
// private PMDEngine pmdEngine;
7475
private RuleSets ruleSets;
76+
private Set<String> fileExtensions;
7577
private int fileCount;
7678
private long pmdDuration;
7779
private IProjectProperties projectProperties;
@@ -225,6 +227,10 @@ public void setRuleSets(final RuleSets ruleSets) {
225227
this.ruleSets = ruleSets;
226228
}
227229

230+
public void setFileExtensions(Set<String> fileExtensions) {
231+
this.fileExtensions = fileExtensions;
232+
}
233+
228234
/**
229235
* @return the number of files that has been processed
230236
*/
@@ -264,6 +270,18 @@ protected final void reviewResource(IResource resource) {
264270
return;
265271
}
266272

273+
if (PMDPlugin.getDefault().loadPreferences().isDetermineFiletypesAutomatically()) {
274+
if (fileExtensions != null) {
275+
if (!fileExtensions.contains(file.getFileExtension().toLowerCase(Locale.ROOT))) {
276+
PMDPlugin.getDefault().logInformation("Skipping file " + file.getName() + " based on file extension");
277+
LOG.debug("Skipping file " + file.getName() + " based on file extension");
278+
return;
279+
}
280+
} else {
281+
LOG.warn("Can't check for file extensions.");
282+
}
283+
}
284+
267285
Reader input = null;
268286
try {
269287
boolean included = isIncluded(file);

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.util.HashMap;
1010
import java.util.HashSet;
1111
import java.util.List;
12+
import java.util.Locale;
1213
import java.util.Map;
1314
import java.util.Set;
1415

@@ -49,6 +50,7 @@
4950
import net.sourceforge.pmd.eclipse.runtime.properties.IProjectProperties;
5051
import net.sourceforge.pmd.eclipse.runtime.properties.PropertiesException;
5152
import net.sourceforge.pmd.eclipse.ui.actions.RuleSetUtil;
53+
import net.sourceforge.pmd.lang.Language;
5254
import net.sourceforge.pmd.util.StringUtil;
5355

5456
/**
@@ -419,6 +421,7 @@ private void processResource(IResource resource) {
419421
}
420422

421423
RuleSets ruleSets = rulesetsFrom(resource);
424+
Set<String> fileExtensions = determineFileExtensions(ruleSets);
422425
// final PMDEngine pmdEngine = getPmdEngineForProject(project);
423426
int targetCount = 0;
424427
if (resource.exists()) {
@@ -432,6 +435,7 @@ private void processResource(IResource resource) {
432435
final ResourceVisitor visitor = new ResourceVisitor();
433436
visitor.setMonitor(getMonitor());
434437
visitor.setRuleSets(ruleSets);
438+
visitor.setFileExtensions(fileExtensions);
435439
// visitor.setPmdEngine(pmdEngine);
436440
visitor.setAccumulator(markersByFile);
437441
visitor.setUseTaskMarker(taskMarker);
@@ -459,6 +463,22 @@ private void processResource(IResource resource) {
459463
}
460464
}
461465

466+
private Set<String> determineFileExtensions(RuleSets ruleSets) {
467+
Set<Language> languages = new HashSet<Language>();
468+
for (Rule rule : ruleSets.getAllRules()) {
469+
languages.add(rule.getLanguage());
470+
}
471+
Set<String> fileExtensions = new HashSet<String>();
472+
for (Language language : languages) {
473+
for (String extension : language.getExtensions()) {
474+
fileExtensions.add(extension.toLowerCase(Locale.ROOT));
475+
}
476+
}
477+
logInfo("Determined applicable file extensions: " + fileExtensions);
478+
LOG.debug("Determined applicable file extensions: " + fileExtensions);
479+
return fileExtensions;
480+
}
481+
462482
/**
463483
* Review an entire project
464484
*/
@@ -576,6 +596,7 @@ private void processResourceDelta() {
576596
+ project.getName());
577597

578598
final RuleSets ruleSets = rulesetsFromResourceDelta();
599+
Set<String> fileExtensions = determineFileExtensions(ruleSets);
579600

580601
// PMDEngine pmdEngine = getPmdEngineForProject(project);
581602
int targetCount = countDeltaElement(resourceDelta);
@@ -587,6 +608,7 @@ private void processResourceDelta() {
587608
DeltaVisitor visitor = new DeltaVisitor();
588609
visitor.setMonitor(getMonitor());
589610
visitor.setRuleSets(ruleSets);
611+
visitor.setFileExtensions(fileExtensions);
590612
// visitor.setPmdEngine(pmdEngine);
591613
visitor.setAccumulator(markersByFile);
592614
visitor.setUseTaskMarker(taskMarker);

0 commit comments

Comments
 (0)