diff --git a/p3c-pmd/pom.xml b/p3c-pmd/pom.xml index cfccbf29c4dd52fa306be90fb6e62437026ed606..82e9a717e00fd750a3d27ffb48e6fa5eabcf187b 100644 --- a/p3c-pmd/pom.xml +++ b/p3c-pmd/pom.xml @@ -9,7 +9,7 @@ com.alibaba.p3c p3c-pmd - 2.0.1 + 2.1.0 jar p3c-pmd @@ -17,7 +17,7 @@ 6.15.0 1.8 1.3.2 - 1.3.50 + 1.3.72 Alibaba Java Coding Guidelines PMD implementations https://github.com/alibaba/p3c diff --git a/p3c-pmd/src/main/java/com/alibaba/p3c/pmd/lang/java/rule/oop/WrapperTypeEqualityRule.java b/p3c-pmd/src/main/java/com/alibaba/p3c/pmd/lang/java/rule/oop/WrapperTypeEqualityRule.java index b1a555ff3b821e4215060de099f82c15d1491515..5b6d80b6ddfa2618b4298fa0d1858f356490f30b 100644 --- a/p3c-pmd/src/main/java/com/alibaba/p3c/pmd/lang/java/rule/oop/WrapperTypeEqualityRule.java +++ b/p3c-pmd/src/main/java/com/alibaba/p3c/pmd/lang/java/rule/oop/WrapperTypeEqualityRule.java @@ -38,7 +38,7 @@ public class WrapperTypeEqualityRule extends AbstractAliRule { final String unaryExpression = "UnaryExpression"; // null presents in either side of "==" or "!=" means no violation if (node.hasDescendantMatchingXPath(literalPrefix) - || node.hasDescendantMatchingXPath(unaryExpression)) { + || node.hasDescendantMatchingXPath(unaryExpression)) { return super.visit(node, data); } @@ -48,7 +48,10 @@ public class WrapperTypeEqualityRule extends AbstractAliRule { // PMD can not resolve array length type, but only the ASTPrimaryExpression left = expressions.get(0); ASTPrimaryExpression right = expressions.get(1); - + // if left is complex expression, skip + if (left.jjtGetNumChildren() > 1) { + return super.visit(node, data); + } boolean bothArrayLength = isArrayLength(left) && isArrayLength(right); boolean bothWrapperType = NodeUtils.isWrapperType(left) && NodeUtils.isWrapperType(right); @@ -61,7 +64,8 @@ public class WrapperTypeEqualityRule extends AbstractAliRule { } private boolean isArrayLength(ASTPrimaryExpression expression) { - // assume expression like "x.length" is the length of array, field with name "length" may result in misrecognition + // assume expression like "x.length" is the length of array, field with name "length" may result in + // misrecognition return "length".equals(expression.jjtGetLastToken().getImage()) && ".".equals(expression.jjtGetFirstToken().getNext().getImage()); } diff --git a/p3c-pmd/src/test/resources/com/alibaba/p3c/pmd/lang/java/rule/oop/xml/WrapperTypeEqualityRule.xml b/p3c-pmd/src/test/resources/com/alibaba/p3c/pmd/lang/java/rule/oop/xml/WrapperTypeEqualityRule.xml index 08d65daace84d4a574a0acce0555c984e9188a18..cee259d77e0151b1baa78236d9ddb7589997e2b2 100644 --- a/p3c-pmd/src/test/resources/com/alibaba/p3c/pmd/lang/java/rule/oop/xml/WrapperTypeEqualityRule.xml +++ b/p3c-pmd/src/test/resources/com/alibaba/p3c/pmd/lang/java/rule/oop/xml/WrapperTypeEqualityRule.xml @@ -53,7 +53,7 @@ compare wrapper type objects without equals 4 11,23,31,34 - + @@ -148,7 +148,7 @@ bugfix 0 - + @@ -171,7 +171,37 @@ 0 + + + + + expression is primitive type + 1 + 17 + + \ No newline at end of file