Add ctor for ruleset reference id
This commit is contained in:
2 files changed
+29
-7
No files matched your search
@@ -129,15 +129,14 @@ final class RuleSetFactory {
|
||||
* @return A new Rule.
|
||||
*/
|
||||
private Rule createRule(RuleSetReferenceId ruleSetReferenceId, boolean withDeprecatedRuleReferences) {
|
||||
if (ruleSetReferenceId.isAllRules()) {
|
||||
RuleSetReferenceId parentRuleset = ruleSetReferenceId.getParentRulesetIfThisIsARule();
|
||||
if (parentRuleset == null) {
|
||||
throw new IllegalArgumentException(
|
||||
"Cannot parse a single Rule from an all Rule RuleSet reference: <" + ruleSetReferenceId + ">.");
|
||||
}
|
||||
RuleSet ruleSet;
|
||||
// java8: computeIfAbsent
|
||||
if (parsedRulesets.containsKey(ruleSetReferenceId)) {
|
||||
ruleSet = parsedRulesets.get(ruleSetReferenceId);
|
||||
} else {
|
||||
// can't use computeIfAbsent as creating a ruleset may add more entries to the map.
|
||||
RuleSet ruleSet = parsedRulesets.get(parentRuleset);
|
||||
if (ruleSet == null) {
|
||||
ruleSet = createRuleSet(ruleSetReferenceId, withDeprecatedRuleReferences);
|
||||
parsedRulesets.put(ruleSetReferenceId, ruleSet);
|
||||
}
|
||||
@@ -500,7 +499,7 @@ final class RuleSetFactory {
|
||||
RuleSetFactory ruleSetFactory = toLoader().filterAbovePriority(RulePriority.LOW).warnDeprecated(false).toFactory();
|
||||
|
||||
boolean isSameRuleSet = false;
|
||||
RuleSetReferenceId otherRuleSetReferenceId = RuleSetReferenceId.parse(ref).get(0);
|
||||
RuleSetReferenceId otherRuleSetReferenceId = RuleSetReferenceId.parse(ref).get(0); // fixme what is this get(0) doing here
|
||||
if (!otherRuleSetReferenceId.isExternal()
|
||||
&& containsRule(ruleSetReferenceId, otherRuleSetReferenceId.getRuleName())) {
|
||||
otherRuleSetReferenceId = new RuleSetReferenceId(ref, ruleSetReferenceId);
|
||||
|
||||
@@ -14,6 +14,7 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
import net.sourceforge.pmd.annotation.InternalApi;
|
||||
import net.sourceforge.pmd.util.ResourceLoader;
|
||||
@@ -105,6 +106,14 @@ public class RuleSetReferenceId {
|
||||
this(id, null);
|
||||
}
|
||||
|
||||
private RuleSetReferenceId(final String ruleSetFileName, boolean allRules, boolean external, String ruleName, RuleSetReferenceId externalRuleSetReferenceId) {
|
||||
this.ruleSetFileName = ruleSetFileName;
|
||||
this.allRules = allRules;
|
||||
this.external = external;
|
||||
this.ruleName = ruleName;
|
||||
this.externalRuleSetReferenceId = externalRuleSetReferenceId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct a RuleSetReferenceId for the given single ID string. If an
|
||||
* external RuleSetReferenceId is given, the ID must refer to a non-external
|
||||
@@ -221,6 +230,20 @@ public class RuleSetReferenceId {
|
||||
this.externalRuleSetReferenceId = externalRuleSetReferenceId;
|
||||
}
|
||||
|
||||
@Nullable RuleSetReferenceId getParentRulesetIfThisIsARule() {
|
||||
if (ruleName == null) {
|
||||
return null;
|
||||
}
|
||||
return new RuleSetReferenceId(
|
||||
ruleSetFileName,
|
||||
true,
|
||||
external,
|
||||
null,
|
||||
|
||||
null
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tries to load the given ruleset.
|
||||
*
|
||||
|
||||
Reference in new issue
Block a user