Merge branch 'DevFactory-release/multiple-code-improvements-fix-1'

This commit is contained in:
Andreas Dangel
2016-05-20 19:13:15 +02:00
6 changed files with 44 additions and 39 deletions

View File

@ -81,7 +81,7 @@ public abstract class AbstractNcssCountRule extends AbstractStatisticalApexRule
* @return count of the number of children of the node, plus one
*/
protected Integer countNodeChildren(Node node, Object data) {
Integer nodeCount = null;
Integer nodeCount;
int lineCount = 0;
for (int i = 0; i < node.jjtGetNumChildren(); i++) {
nodeCount = (Integer) ((ApexNode<?>) node.jjtGetChild(i)).jjtAccept(this, data);

View File

@ -53,9 +53,9 @@ public class TooManyFieldsRule extends AbstractApexRule {
bumpCounterFor(clazz);
}
}
for (String k : stats.keySet()) {
int val = stats.get(k);
Node n = nodes.get(k);
for (Map.Entry<String, Integer> entry : stats.entrySet()) {
int val = entry.getValue();
Node n = nodes.get(entry.getKey());
if (val > maxFields) {
addViolation(data, n);
}

View File

@ -36,4 +36,6 @@ public class PropertyDescriptorFields {
public static final String MAX = "max";
/** To limit the range of valid values, e.g. to Enums */
public static final String LEGAL_PACKAGES = "legalPackages";
private PropertyDescriptorFields() {}
}

View File

@ -34,6 +34,7 @@ import net.sourceforge.pmd.util.filter.Filters;
public class RuleSet {
private static final Logger LOG = Logger.getLogger(RuleSet.class.getName());
private static final String MISSING_RULE = "Missing rule";
private List<Rule> rules = new ArrayList<>();
private String fileName;
@ -80,7 +81,7 @@ public class RuleSet {
*/
public void addRule(Rule rule) {
if (rule == null) {
throw new IllegalArgumentException("Missing rule");
throw new IllegalArgumentException(MISSING_RULE);
}
rules.add(rule);
}
@ -96,7 +97,7 @@ public class RuleSet {
*/
public boolean addRuleReplaceIfExists(Rule rule) {
if (rule == null) {
throw new IllegalArgumentException("Missing rule");
throw new IllegalArgumentException(MISSING_RULE);
}
boolean replaced = false;
@ -122,7 +123,7 @@ public class RuleSet {
*/
public boolean addRuleIfNotExists(Rule rule) {
if (rule == null) {
throw new IllegalArgumentException("Missing rule");
throw new IllegalArgumentException(MISSING_RULE);
}
boolean exists = false;
@ -182,10 +183,8 @@ public class RuleSet {
*/
public boolean usesDFA(Language language) {
for (Rule r : rules) {
if (r.getLanguage().equals(language)) {
if (r.usesDFA()) {
return true;
}
if (r.getLanguage().equals(language) && r.usesDFA()) {
return true;
}
}
return false;
@ -509,10 +508,8 @@ public class RuleSet {
*/
public boolean usesTypeResolution(Language language) {
for (Rule r : rules) {
if (r.getLanguage().equals(language)) {
if (r.usesTypeResolution()) {
return true;
}
if (r.getLanguage().equals(language) && r.usesTypeResolution()) {
return true;
}
}
return false;

View File

@ -48,6 +48,13 @@ public class RuleSetFactory {
private static final Logger LOG = Logger.getLogger(RuleSetFactory.class.getName());
private static final String DESCRIPTION = "description";
private static final String UNEXPECTED_ELEMENT = "Unexpected element <";
private static final String PRIORITY = "priority";
private static final String FOR_RULE = "' for Rule ";
private static final String MESSAGE = "message";
private static final String EXTERNAL_INFO_URL = "externalInfoUrl";
private ClassLoader classLoader = RuleSetFactory.class.getClassLoader();
private RulePriority minimumPriority = RulePriority.LOW;
private boolean warnDeprecated = false;
@ -257,7 +264,7 @@ public class RuleSetFactory {
Node node = nodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
String nodeName = node.getNodeName();
if ("description".equals(nodeName)) {
if (DESCRIPTION.equals(nodeName)) {
ruleSet.setDescription(parseTextNode(node));
} else if ("include-pattern".equals(nodeName)) {
ruleSet.addIncludePattern(parseTextNode(node));
@ -266,7 +273,7 @@ public class RuleSetFactory {
} else if ("rule".equals(nodeName)) {
parseRuleNode(ruleSetReferenceId, ruleSet, node, withDeprecatedRuleReferences);
} else {
throw new IllegalArgumentException("Unexpected element <" + node.getNodeName()
throw new IllegalArgumentException(UNEXPECTED_ELEMENT + node.getNodeName()
+ "> encountered as child of <ruleset> element.");
}
}
@ -346,7 +353,7 @@ public class RuleSetFactory {
String excludedRuleName = excludeElement.getAttribute("name");
ruleSetReference.addExclude(excludedRuleName);
excludedRulesCheck.add(excludedRuleName);
} else if (isElementNode(child, "priority")) {
} else if (isElementNode(child, PRIORITY)) {
priority = parseTextNode(child).trim();
}
}
@ -406,7 +413,7 @@ public class RuleSetFactory {
String languageName = ruleElement.getAttribute("language");
Language language = LanguageRegistry.findLanguageByTerseName(languageName);
if (language == null) {
throw new IllegalArgumentException("Unknown Language '" + languageName + "' for Rule " + rule.getName()
throw new IllegalArgumentException("Unknown Language '" + languageName + FOR_RULE + rule.getName()
+ ", supported Languages are "
+ LanguageRegistry.commaSeparatedTerseNamesForLanguage(LanguageRegistry.findWithRuleSupport()));
}
@ -424,7 +431,7 @@ public class RuleSetFactory {
LanguageVersion minimumLanguageVersion = language.getVersion(minimumLanguageVersionName);
if (minimumLanguageVersion == null) {
throw new IllegalArgumentException("Unknown minimum Language Version '" + minimumLanguageVersionName
+ "' for Language '" + language.getTerseName() + "' for Rule " + rule.getName()
+ "' for Language '" + language.getTerseName() + FOR_RULE + rule.getName()
+ "; supported Language Versions are: "
+ LanguageRegistry.commaSeparatedTerseNamesForLanguageVersion(language.getVersions()));
}
@ -436,7 +443,7 @@ public class RuleSetFactory {
LanguageVersion maximumLanguageVersion = language.getVersion(maximumLanguageVersionName);
if (maximumLanguageVersion == null) {
throw new IllegalArgumentException("Unknown maximum Language Version '" + maximumLanguageVersionName
+ "' for Language '" + language.getTerseName() + "' for Rule " + rule.getName()
+ "' for Language '" + language.getTerseName() + FOR_RULE + rule.getName()
+ "; supported Language Versions are: "
+ LanguageRegistry.commaSeparatedTerseNamesForLanguageVersion(language.getVersions()));
}
@ -447,7 +454,7 @@ public class RuleSetFactory {
throw new IllegalArgumentException("The minimum Language Version '"
+ rule.getMinimumLanguageVersion().getTerseName()
+ "' must be prior to the maximum Language Version '"
+ rule.getMaximumLanguageVersion().getTerseName() + "' for Rule " + rule.getName()
+ rule.getMaximumLanguageVersion().getTerseName() + FOR_RULE + rule.getName()
+ "; perhaps swap them around?");
}
@ -455,9 +462,9 @@ public class RuleSetFactory {
if (StringUtil.isNotEmpty(since)) {
rule.setSince(since);
}
rule.setMessage(ruleElement.getAttribute("message"));
rule.setMessage(ruleElement.getAttribute(MESSAGE));
rule.setRuleSetName(ruleSet.getName());
rule.setExternalInfoUrl(ruleElement.getAttribute("externalInfoUrl"));
rule.setExternalInfoUrl(ruleElement.getAttribute(EXTERNAL_INFO_URL));
if (hasAttributeSetTrue(ruleElement, "dfa")) {
rule.setUsesDFA();
@ -474,16 +481,16 @@ public class RuleSetFactory {
continue;
}
String nodeName = node.getNodeName();
if (nodeName.equals("description")) {
if (nodeName.equals(DESCRIPTION)) {
rule.setDescription(parseTextNode(node));
} else if (nodeName.equals("example")) {
rule.addExample(parseTextNode(node));
} else if (nodeName.equals("priority")) {
} else if (nodeName.equals(PRIORITY)) {
rule.setPriority(RulePriority.valueOf(Integer.parseInt(parseTextNode(node).trim())));
} else if (nodeName.equals("properties")) {
parsePropertiesNode(rule, node);
} else {
throw new IllegalArgumentException("Unexpected element <" + nodeName
throw new IllegalArgumentException(UNEXPECTED_ELEMENT + nodeName
+ "> encountered as child of <rule> element for Rule " + rule.getName());
}
@ -581,25 +588,25 @@ public class RuleSetFactory {
if (ruleElement.hasAttribute("name")) {
ruleReference.setName(ruleElement.getAttribute("name"));
}
if (ruleElement.hasAttribute("message")) {
ruleReference.setMessage(ruleElement.getAttribute("message"));
if (ruleElement.hasAttribute(MESSAGE)) {
ruleReference.setMessage(ruleElement.getAttribute(MESSAGE));
}
if (ruleElement.hasAttribute("externalInfoUrl")) {
ruleReference.setExternalInfoUrl(ruleElement.getAttribute("externalInfoUrl"));
if (ruleElement.hasAttribute(EXTERNAL_INFO_URL)) {
ruleReference.setExternalInfoUrl(ruleElement.getAttribute(EXTERNAL_INFO_URL));
}
for (int i = 0; i < ruleElement.getChildNodes().getLength(); i++) {
Node node = ruleElement.getChildNodes().item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
if (node.getNodeName().equals("description")) {
if (node.getNodeName().equals(DESCRIPTION)) {
ruleReference.setDescription(parseTextNode(node));
} else if (node.getNodeName().equals("example")) {
ruleReference.addExample(parseTextNode(node));
} else if (node.getNodeName().equals("priority")) {
} else if (node.getNodeName().equals(PRIORITY)) {
ruleReference.setPriority(RulePriority.valueOf(Integer.parseInt(parseTextNode(node))));
} else if (node.getNodeName().equals("properties")) {
parsePropertiesNode(ruleReference, node);
} else {
throw new IllegalArgumentException("Unexpected element <" + node.getNodeName()
throw new IllegalArgumentException(UNEXPECTED_ELEMENT + node.getNodeName()
+ "> encountered as child of <rule> element for Rule " + ruleReference.getName());
}
}
@ -630,11 +637,9 @@ public class RuleSetFactory {
NodeList rules = ruleSetElement.getElementsByTagName("rule");
for (int i = 0; i < rules.getLength(); i++) {
Element rule = (Element) rules.item(i);
if (rule.hasAttribute("name")) {
if (rule.getAttribute("name").equals(ruleName)) {
found = true;
break;
}
if (rule.hasAttribute("name") && rule.getAttribute("name").equals(ruleName)) {
found = true;
break;
}
}
} catch (Exception e) {

View File

@ -47,6 +47,7 @@ you'll need a java8 runtime environment.
* [#31](https://github.com/adangel/pmd/pull/31): Added file encoding detection to CPD.
* [#32](https://github.com/adangel/pmd/pull/32): Extended Objective-C grammar to accept UTF-8 escapes (\uXXXX) in string literals.
* [#33](https://github.com/adangel/pmd/pull/33): Added support for Swift to CPD.
* [#34](https://github.com/adangel/pmd/pull/34): multiple code improvements: squid:S1192, squid:S1118, squid:S1066, squid:S1854, squid:S2864
* [#72](https://github.com/pmd/pmd/pull/72): Added capability in Java and JSP parser for tracking tokens.
* [#73](https://github.com/pmd/pmd/pull/73): Add rule to look for invalid message format in slf4j loggers
* [#74](https://github.com/pmd/pmd/pull/74): Fix rendering CommentDefaultAccessModifier description as code