Skip to content

Commit 32840c9

Browse files
committed
Use List<RuleSet> instead of RuleSets
1 parent 3645ef0 commit 32840c9

File tree

19 files changed

+248
-122
lines changed

19 files changed

+248
-122
lines changed

ReleaseNotes.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,17 @@ This is a minor release.
3333
* `net.sourceforge.pmd.eclipse.runtime.preferences.IPreferences.setMaxViolationsPerFilePerRule(int)`
3434
* `net.sourceforge.pmd.eclipse.runtime.preferences.IPreferences.MAX_VIOLATIONS_PFPR_DEFAULT`
3535
* `net.sourceforge.pmd.eclipse.runtime.cmd.DetectCutAndPasteCmd.setRenderer(Renderer)` is deprecated.
36-
36+
* Removed usages of deprecated class `net.sourceforge.pmd.RuleSets`. Therefore the following methods are
37+
deprecated now:
38+
* `net.sourceforge.pmd.eclipse.runtime.cmd.BaseVisitor.getRuleSets()`
39+
* `net.sourceforge.pmd.eclipse.runtime.cmd.BaseVisitor.setRuleSets(RuleSets)`
40+
* `net.sourceforge.pmd.eclipse.runtime.properties.IProjectProperties.getProjectRuleSets()`
41+
* `net.sourceforge.pmd.eclipse.runtime.properties.IProjectProperties.setProjectRuleSets(RuleSets)`
42+
* `net.sourceforge.pmd.eclipse.runtime.properties.impl.ProjectPropertiesImpl.getProjectRuleSets()`
43+
* `net.sourceforge.pmd.eclipse.runtime.properties.impl.ProjectPropertiesImpl.setProjectRuleSets(RuleSets)`
44+
* `net.sourceforge.pmd.eclipse.ui.properties.PMDPropertyPageBean.getProjectRuleSets()`
45+
* `net.sourceforge.pmd.eclipse.ui.properties.PMDPropertyPageBean.setProjectRuleSets(RuleSets)`
46+
* `net.sourceforge.pmd.eclipse.ui.properties.UpdateProjectPropertiesCmd.setProjectRuleSets(RuleSets)`
3747

3848
### External Contributions
3949

net.sourceforge.pmd.eclipse.plugin.test/src/main/java/net/sourceforge/pmd/eclipse/runtime/properties/ProjectPropertiesModelTest.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import java.nio.charset.StandardCharsets;
1212
import java.util.Collection;
1313
import java.util.Iterator;
14+
import java.util.List;
1415

1516
import org.eclipse.core.resources.IFile;
1617
import org.eclipse.core.resources.IProject;
@@ -26,7 +27,6 @@
2627
import net.sourceforge.pmd.RuleSet;
2728
import net.sourceforge.pmd.RuleSetFactory;
2829
import net.sourceforge.pmd.RuleSetNotFoundException;
29-
import net.sourceforge.pmd.RuleSets;
3030
import net.sourceforge.pmd.RulesetsFactoryUtils;
3131
import net.sourceforge.pmd.eclipse.EclipseUtils;
3232
import net.sourceforge.pmd.eclipse.plugin.PMDPlugin;
@@ -121,8 +121,8 @@ public void testBug() throws PropertiesException, RuleSetNotFoundException, Core
121121
final IProjectPropertiesManager mgr = PMDPlugin.getDefault().getPropertiesManager();
122122
final IProjectProperties model = mgr.loadProjectProperties(this.testProject);
123123

124-
RuleSets projectRuleSets = model.getProjectRuleSets();
125-
if (projectRuleSets.getAllRuleSets().length != 1) {
124+
List<RuleSet> projectRuleSets = model.getProjectRuleSetList();
125+
if (projectRuleSets.size() != 1) {
126126
Assert.fail("More than one ruleset configured - wrong test case setup");
127127
}
128128

@@ -309,7 +309,7 @@ public void testProjectRuleSetNull() throws PropertiesException {
309309
final IProjectProperties model = mgr.loadProjectProperties(this.testProject);
310310

311311
try {
312-
model.setProjectRuleSets(null);
312+
model.setProjectRuleSetList(null);
313313
Assert.fail("A ModelException must be raised when setting a project ruleset to null");
314314
} catch (final PropertiesException e) {
315315
// OK that's correct
@@ -466,10 +466,10 @@ public void testNoRulesInProperties() throws PropertiesException, RuleSetNotFoun
466466
// reload the project properties
467467
model = mgr.loadProjectProperties(this.testProject);
468468
Assert.assertFalse(model.isRuleSetStoredInProject());
469-
RuleSets projectRuleSets = model.getProjectRuleSets();
469+
List<RuleSet> projectRuleSets = model.getProjectRuleSetList();
470470
Assert.assertNotNull(projectRuleSets);
471-
Assert.assertEquals(1, projectRuleSets.getAllRuleSets().length);
472-
Assert.assertEquals(0, projectRuleSets.getAllRules().size());
471+
Assert.assertEquals(1, projectRuleSets.size());
472+
Assert.assertEquals(0, projectRuleSets.get(0).size());
473473
}
474474

475475
/**

net.sourceforge.pmd.eclipse.plugin.test/src/main/java/net/sourceforge/pmd/eclipse/ui/properties/ExternalRuleSetFileTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import java.io.File;
88
import java.io.InputStream;
9+
import java.util.Collections;
910

1011
import org.eclipse.core.resources.IFile;
1112
import org.eclipse.core.resources.IProject;
@@ -17,7 +18,6 @@
1718
import org.slf4j.LoggerFactory;
1819

1920
import net.sourceforge.pmd.RuleSet;
20-
import net.sourceforge.pmd.RuleSets;
2121
import net.sourceforge.pmd.eclipse.EclipseUtils;
2222
import net.sourceforge.pmd.eclipse.internal.ResourceUtil;
2323
import net.sourceforge.pmd.eclipse.plugin.PMDPlugin;
@@ -82,7 +82,7 @@ public void changedExternalRulesetShouldBeReloaded() throws Exception {
8282
cmd.setPmdEnabled(true);
8383
cmd.setProject(this.testProject);
8484
cmd.setProjectWorkingSet(null);
85-
cmd.setProjectRuleSets(new RuleSets(RuleSetUtil.newEmpty("empty", "empty")));
85+
cmd.setProjectRuleSetList(Collections.singletonList((RuleSetUtil.newEmpty("empty", "empty"))));
8686
cmd.setRuleSetStoredInProject(true);
8787
cmd.setRuleSetFile(PROJECT_RULESET_FILENAME);
8888
cmd.execute();
@@ -158,8 +158,8 @@ public void externallyChangedProjectPropertiesShouldBeReloaded() throws Exceptio
158158
cmd.setPmdEnabled(true);
159159
cmd.setProject(this.testProject);
160160
cmd.setProjectWorkingSet(null);
161-
RuleSets rulesets = new RuleSets(PMDPlugin.getDefault().getPreferencesManager().getRuleSet());
162-
cmd.setProjectRuleSets(rulesets);
161+
RuleSet ruleSet = PMDPlugin.getDefault().getPreferencesManager().getRuleSet();
162+
cmd.setProjectRuleSetList(Collections.singletonList(ruleSet));
163163
cmd.setRuleSetStoredInProject(false);
164164
cmd.execute();
165165

@@ -176,7 +176,7 @@ public void externallyChangedProjectPropertiesShouldBeReloaded() throws Exceptio
176176
final IProjectPropertiesManager mgr = PMDPlugin.getDefault().getPropertiesManager();
177177
final IProjectProperties model = mgr.loadProjectProperties(this.testProject);
178178
RuleSet projectRuleSet = model.getProjectRuleSet();
179-
int numberOfRules = rulesets.getAllRules().size();
179+
int numberOfRules = ruleSet.size();
180180
Assert.assertEquals(numberOfRules, projectRuleSet.getRules().size());
181181
// after the rebuild above, the project should be in a consistent state
182182
Assert.assertFalse(model.isNeedRebuild());

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

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,13 @@
3939
import net.sourceforge.pmd.RuleContext;
4040
import net.sourceforge.pmd.RuleSet;
4141
import net.sourceforge.pmd.RuleSetFactory;
42-
import net.sourceforge.pmd.RuleSetNotFoundException;
4342
import net.sourceforge.pmd.RuleSets;
4443
import net.sourceforge.pmd.RuleViolation;
4544
import net.sourceforge.pmd.eclipse.plugin.PMDPlugin;
4645
import net.sourceforge.pmd.eclipse.runtime.PMDRuntimeConstants;
4746
import net.sourceforge.pmd.eclipse.runtime.properties.IProjectProperties;
4847
import net.sourceforge.pmd.eclipse.runtime.properties.PropertiesException;
48+
import net.sourceforge.pmd.eclipse.ui.actions.internal.InternalRuleSetUtil;
4949
import net.sourceforge.pmd.eclipse.util.IOUtil;
5050
import net.sourceforge.pmd.lang.LanguageRegistry;
5151
import net.sourceforge.pmd.lang.LanguageVersion;
@@ -69,7 +69,7 @@ public class BaseVisitor {
6969
private boolean useTaskMarker = false;
7070
private Map<IFile, Set<MarkerInfo2>> accumulator;
7171
// private PMDEngine pmdEngine;
72-
private RuleSets ruleSets;
72+
private List<RuleSet> ruleSets;
7373
private Set<String> fileExtensions;
7474
private int fileCount;
7575
private long pmdDuration;
@@ -193,8 +193,14 @@ public void worked(final int work) {
193193

194194
/**
195195
* @return Returns all the ruleSets.
196+
* @deprecated Use {@link #getRuleSetList()}
196197
*/
198+
@Deprecated
197199
public RuleSets getRuleSets() {
200+
return InternalRuleSetUtil.toRuleSets(this.ruleSets);
201+
}
202+
203+
public List<RuleSet> getRuleSetList() {
198204
return this.ruleSets;
199205
}
200206

@@ -203,7 +209,7 @@ public RuleSets getRuleSets() {
203209
* @return
204210
*/
205211
public RuleSet getRuleSet() {
206-
return this.ruleSets.getAllRuleSets()[0];
212+
return this.ruleSets.get(0);
207213
}
208214

209215
/**
@@ -213,14 +219,21 @@ public RuleSet getRuleSet() {
213219
* @param ruleSet
214220
*/
215221
public void setRuleSet(RuleSet ruleSet) {
216-
this.ruleSets = new RuleSets(ruleSet);
222+
this.ruleSets = new ArrayList<>();
223+
this.ruleSets.add(ruleSet);
217224
}
218225

219226
/**
220227
* @param ruleSet
221228
* The ruleSet to set.
229+
* @deprecated Use {@link #setRuleSetList(List)}
222230
*/
231+
@Deprecated
223232
public void setRuleSets(final RuleSets ruleSets) {
233+
setRuleSetList(Arrays.asList(ruleSets.getAllRuleSets()));
234+
}
235+
236+
public void setRuleSetList(List<RuleSet> ruleSets) {
224237
this.ruleSets = ruleSets;
225238
}
226239

@@ -307,7 +320,7 @@ protected final void reviewResource(IResource resource) {
307320
}
308321

309322
final File sourceCodeFile = file.getRawLocation().toFile();
310-
if (included && getRuleSets().applies(sourceCodeFile) && isFileInWorkingSet(file)
323+
if (included && InternalRuleSetUtil.ruleSetsApplies(ruleSets, sourceCodeFile) && isFileInWorkingSet(file)
311324
&& languageVersion != null) {
312325
subTask("PMD checking: " + file.getProject() + ": " + file.getName());
313326

@@ -322,13 +335,7 @@ protected final void reviewResource(IResource resource) {
322335
// context);
323336

324337
DataSource dataSource = new ReaderDataSource(input, file.getRawLocation().toFile().getPath());
325-
RuleSetFactory ruleSetFactory = new RuleSetFactory() {
326-
@Override
327-
public synchronized RuleSets createRuleSets(String referenceString)
328-
throws RuleSetNotFoundException {
329-
return new RuleSets(getRuleSets());
330-
}
331-
};
338+
RuleSetFactory ruleSetFactory = InternalRuleSetUtil.createFactoryFromRuleSets(ruleSets);
332339
// need to disable multi threading, as the ruleset is
333340
// not recreated and shared between threads...
334341
// but as we anyway have only one file to process, it won't hurt

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

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,14 @@
4545

4646
import net.sourceforge.pmd.Rule;
4747
import net.sourceforge.pmd.RuleSet;
48-
import net.sourceforge.pmd.RuleSets;
4948
import net.sourceforge.pmd.eclipse.plugin.PMDPlugin;
5049
import net.sourceforge.pmd.eclipse.runtime.PMDRuntimeConstants;
5150
import net.sourceforge.pmd.eclipse.runtime.builder.MarkerUtil;
5251
import net.sourceforge.pmd.eclipse.runtime.preferences.IPreferences;
5352
import net.sourceforge.pmd.eclipse.runtime.properties.IProjectProperties;
5453
import net.sourceforge.pmd.eclipse.runtime.properties.PropertiesException;
5554
import net.sourceforge.pmd.eclipse.ui.actions.RuleSetUtil;
55+
import net.sourceforge.pmd.eclipse.ui.actions.internal.InternalRuleSetUtil;
5656
import net.sourceforge.pmd.lang.Language;
5757

5858
/**
@@ -301,7 +301,7 @@ private void determineFileExtensions(Map<IProject, Set<String>> fileExtensionsPe
301301
IProject project = resource.getProject();
302302
if (project != null && !fileExtensionsPerProject.containsKey(project)) {
303303
try {
304-
RuleSets rulesets = rulesetsFrom(resource);
304+
List<RuleSet> rulesets = rulesetsFrom(resource);
305305
Set<String> fileExtensions = determineFileExtensions(rulesets);
306306
fileExtensionsPerProject.put(project, fileExtensions);
307307
} catch (PropertiesException e) {
@@ -502,7 +502,7 @@ private IProjectProperties getProjectProperties(IProject project) throws Propert
502502
return propertyCache;
503503
}
504504

505-
private RuleSets rulesetsFrom(IResource resource) throws PropertiesException {
505+
private List<RuleSet> rulesetsFrom(IResource resource) throws PropertiesException {
506506
IProject project = resource.getProject();
507507
IProjectProperties properties = getProjectProperties(project);
508508

@@ -521,7 +521,7 @@ private void processResource(IResource resource) {
521521
return;
522522
}
523523

524-
RuleSets ruleSets = rulesetsFrom(resource);
524+
List<RuleSet> ruleSets = rulesetsFrom(resource);
525525
Set<String> fileExtensions = determineFileExtensions(ruleSets);
526526
// final PMDEngine pmdEngine = getPmdEngineForProject(project);
527527
int targetCount = 0;
@@ -535,15 +535,15 @@ private void processResource(IResource resource) {
535535
if (resource.exists()) {
536536
final ResourceVisitor visitor = new ResourceVisitor();
537537
visitor.setMonitor(getMonitor());
538-
visitor.setRuleSets(ruleSets);
538+
visitor.setRuleSetList(ruleSets);
539539
visitor.setFileExtensions(fileExtensions);
540540
// visitor.setPmdEngine(pmdEngine);
541541
visitor.setAccumulator(markersByFile);
542542
visitor.setUseTaskMarker(taskMarker);
543543
visitor.setProjectProperties(properties);
544544
resource.accept(visitor);
545545

546-
ruleCount = ruleSets.getAllRules().size();
546+
ruleCount = InternalRuleSetUtil.countRules(ruleSets);
547547
fileCount += visitor.getProcessedFilesCount();
548548
pmdDuration += visitor.getActualPmdDuration();
549549
} else {
@@ -563,10 +563,12 @@ private void processResource(IResource resource) {
563563
}
564564
}
565565

566-
private Set<String> determineFileExtensions(RuleSets ruleSets) {
566+
private Set<String> determineFileExtensions(List<RuleSet> ruleSets) {
567567
Set<Language> languages = new HashSet<Language>();
568-
for (Rule rule : ruleSets.getAllRules()) {
569-
languages.add(rule.getLanguage());
568+
for (RuleSet ruleset : ruleSets) {
569+
for (Rule rule : ruleset.getRules()) {
570+
languages.add(rule.getLanguage());
571+
}
570572
}
571573
Set<String> fileExtensions = new HashSet<String>();
572574
for (Language language : languages) {
@@ -638,14 +640,14 @@ private void taskScope(int activeRuleCount, int totalRuleCount) {
638640
+ " rules");
639641
}
640642

641-
private RuleSets filteredRuleSets(IProjectProperties properties) throws PropertiesException {
642-
final RuleSets projectRuleSets = properties.getProjectRuleSets();
643+
private List<RuleSet> filteredRuleSets(IProjectProperties properties) throws PropertiesException {
644+
final List<RuleSet> projectRuleSets = properties.getProjectRuleSetList();
643645
IPreferences preferences = PMDPlugin.getDefault().getPreferencesManager().loadPreferences();
644646
Set<String> onlyActiveRuleNames = preferences.getActiveRuleNames();
645647

646-
RuleSets filteredRuleSets = new RuleSets();
648+
List<RuleSet> filteredRuleSets = new ArrayList<>();
647649

648-
for (RuleSet ruleSet : projectRuleSets.getAllRuleSets()) {
650+
for (RuleSet ruleSet : projectRuleSets) {
649651
int rulesBefore = ruleSet.size();
650652
RuleSet filteredRuleSet = RuleSetUtil.newCopyOf(ruleSet);
651653
if (preferences.getGlobalRuleManagement()) {
@@ -665,18 +667,20 @@ private RuleSets filteredRuleSets(IProjectProperties properties) throws Properti
665667
rulesAfter, rulesBefore, rulesBefore - rulesAfter);
666668
}
667669
}
668-
filteredRuleSet = RuleSetUtil.addExcludePatterns(filteredRuleSet, preferences.activeExclusionPatterns(),
669-
properties.getBuildPathExcludePatterns());
670-
filteredRuleSet = RuleSetUtil.addIncludePatterns(filteredRuleSet, preferences.activeInclusionPatterns(),
671-
properties.getBuildPathIncludePatterns());
672-
filteredRuleSets.addRuleSet(filteredRuleSet);
670+
filteredRuleSet = InternalRuleSetUtil.addExcludePatterns(filteredRuleSet,
671+
InternalRuleSetUtil.convertStringPatterns(preferences.activeExclusionPatterns()),
672+
InternalRuleSetUtil.convertStringPatterns(properties.getBuildPathExcludePatterns()));
673+
filteredRuleSet = InternalRuleSetUtil.addIncludePatterns(filteredRuleSet,
674+
InternalRuleSetUtil.convertStringPatterns(preferences.activeInclusionPatterns()),
675+
InternalRuleSetUtil.convertStringPatterns(properties.getBuildPathIncludePatterns()));
676+
filteredRuleSets.add(filteredRuleSet);
673677
}
674678

675-
taskScope(filteredRuleSets.getAllRules().size(), projectRuleSets.getAllRules().size());
679+
taskScope(InternalRuleSetUtil.countRules(filteredRuleSets), InternalRuleSetUtil.countRules(projectRuleSets));
676680
return filteredRuleSets;
677681
}
678682

679-
private RuleSets rulesetsFromResourceDelta() throws PropertiesException {
683+
private List<RuleSet> rulesetsFromResourceDelta() throws PropertiesException {
680684

681685
IResource resource = resourceDelta.getResource();
682686
final IProject project = resource.getProject();
@@ -695,7 +699,7 @@ private void processResourceDelta() {
695699
final IProjectProperties properties = getProjectProperties(project);
696700
LOG.info("ReviewCodeCmd started on resource delta {} in {}", resource.getName(), project);
697701

698-
final RuleSets ruleSets = rulesetsFromResourceDelta();
702+
final List<RuleSet> ruleSets = rulesetsFromResourceDelta();
699703
Set<String> fileExtensions = determineFileExtensions(ruleSets);
700704

701705
// PMDEngine pmdEngine = getPmdEngineForProject(project);
@@ -707,15 +711,15 @@ private void processResourceDelta() {
707711

708712
DeltaVisitor visitor = new DeltaVisitor();
709713
visitor.setMonitor(getMonitor());
710-
visitor.setRuleSets(ruleSets);
714+
visitor.setRuleSetList(ruleSets);
711715
visitor.setFileExtensions(fileExtensions);
712716
// visitor.setPmdEngine(pmdEngine);
713717
visitor.setAccumulator(markersByFile);
714718
visitor.setUseTaskMarker(taskMarker);
715719
visitor.setProjectProperties(properties);
716720
resourceDelta.accept(visitor);
717721

718-
ruleCount = ruleSets.getAllRules().size();
722+
ruleCount = InternalRuleSetUtil.countRules(ruleSets);
719723
fileCount += visitor.getProcessedFilesCount();
720724
pmdDuration += visitor.getActualPmdDuration();
721725
} else {

0 commit comments

Comments
 (0)