Add ctor for ruleset reference id

This commit is contained in:
Clément Fournier committed 2022-04-15 21:09:09 +02:00
1 parent 6084611032
commit 3acc740925
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.
*