diff --git a/.ci/files/all-java.xml b/.ci/files/all-java.xml index fe0e3053ae..dc6998b35f 100644 --- a/.ci/files/all-java.xml +++ b/.ci/files/all-java.xml @@ -184,7 +184,7 @@ - + diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/UnaryOp.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/UnaryOp.java index 170911d0bc..a9f525fdff 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/UnaryOp.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/UnaryOp.java @@ -4,6 +4,10 @@ package net.sourceforge.pmd.lang.java.ast; +import java.util.Set; + +import org.checkerframework.checker.nullness.qual.Nullable; + /** * A unary operator, either prefix or postfix. This is used by {@link ASTUnaryExpression UnaryExpression} * to abstract over the syntactic form of the operator. @@ -96,4 +100,25 @@ public enum UnaryOp implements InternalInterfaces.OperatorLike { return this.code; } + /** + * Tests if the node is an {@link ASTUnaryExpression} with one of the given operators. + */ + public static boolean isUnaryExprWithOperator(@Nullable JavaNode e, Set operators) { + if (e instanceof ASTUnaryExpression) { + ASTUnaryExpression unary = (ASTUnaryExpression) e; + return operators.contains(unary.getOperator()); + } + return false; + } + + /** + * Tests if the node is an {@link ASTUnaryExpression} with the given operator. + */ + public static boolean isUnaryExprWithOperator(@Nullable JavaNode e, UnaryOp operator) { + if (e instanceof ASTUnaryExpression) { + ASTUnaryExpression unary = (ASTUnaryExpression) e; + return operator == unary.getOperator(); + } + return false; + } } diff --git a/pmd-java/src/main/resources/category/java/errorprone.xml b/pmd-java/src/main/resources/category/java/errorprone.xml index 5173cc5106..5cd2677d96 100644 --- a/pmd-java/src/main/resources/category/java/errorprone.xml +++ b/pmd-java/src/main/resources/category/java/errorprone.xml @@ -451,7 +451,7 @@ try { // Prefer this: @@ -474,28 +474,28 @@ the property ignoreMagicNumbers is not taken into account, if there are multiple 1] +//IfStatement[$ignoreExpressions = false()]/*[1][count(*[pmd-java:nodeIs('Literal')] + [not(pmd-java:nodeIs('NullLiteral'))] + [not(pmd-java:nodeIs('BooleanLiteral'))]) > 1] ]]> diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/errorprone/AvoidLiteralsInIfConditionTest.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/errorprone/AvoidLiteralsInIfConditionTest.java index 323a568224..7621018942 100644 --- a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/errorprone/AvoidLiteralsInIfConditionTest.java +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/errorprone/AvoidLiteralsInIfConditionTest.java @@ -6,7 +6,6 @@ package net.sourceforge.pmd.lang.java.rule.errorprone; import net.sourceforge.pmd.testframework.PmdRuleTst; -@org.junit.Ignore("Rule has not been updated yet") public class AvoidLiteralsInIfConditionTest extends PmdRuleTst { // no additional unit tests } diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/AvoidLiteralsInIfCondition.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/AvoidLiteralsInIfCondition.xml index 62bfd8505f..a03efce856 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/AvoidLiteralsInIfCondition.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/AvoidLiteralsInIfCondition.xml @@ -7,6 +7,7 @@ basic test 1 + 3 0 @@ -63,7 +68,7 @@ public class Foo { 0 0.0) {} // magic number 0.0 if (aDouble >= Double.MIN_VALUE) {} // preferred approach } @@ -76,7 +81,7 @@ public class Foo { 0 0) { } } @@ -90,11 +95,12 @@ public class Foo { 0 @@ -124,7 +130,7 @@ public class Foo { 4,7,7,8,9,10,11,11