From 3a33092d22e8b76cb3d9315ac6627a2689b71015 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= Date: Wed, 2 Sep 2020 16:45:19 +0200 Subject: [PATCH 1/3] Add test case --- .../bestpractices/xml/UnusedAssignment.xml | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/UnusedAssignment.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/UnusedAssignment.xml index 1f0d55cebc..c05ad0a40a 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/UnusedAssignment.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/UnusedAssignment.xml @@ -3159,4 +3159,29 @@ public class UnusedAssignmentNative { ]]> + + False positive with try in loop? #2759 + 0 + 0) { + a--; + try { + if (dummy) { + return somethingThatCanThrowRandomly(1); + } else { + return somethingThatCanThrowRandomly(2); + } + } catch (RuntimeException e) { + // retry + } + } + return 0; + } + } + ]]> + + From b0f924495b3d5a5ca5a46849cd238ab68f761558 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= Date: Thu, 3 Sep 2020 12:10:26 +0200 Subject: [PATCH 2/3] Fix bug Problem was, isInTryBlock didn't ask for parent states, even though abruptCompletionByThrow does. --- .../rule/bestpractices/UnusedAssignmentRule.java | 12 +----------- .../java/rule/bestpractices/xml/UnusedAssignment.xml | 2 +- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/UnusedAssignmentRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/UnusedAssignmentRule.java index dad2aa5563..36713aa632 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/UnusedAssignmentRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/UnusedAssignmentRule.java @@ -895,11 +895,6 @@ public class UnusedAssignmentRule extends AbstractJavaRule { // For the record this has problems with call chains with side effects, like // a.foo(a = 2).bar(a = 3); - if (!state.isInTryBlock()) { - return; - } - // otherwise any method/ctor call may throw - // In 7.0, with the precise type/overload resolution, we // could only target methods that throw checked exceptions // (unless some catch block catches an unchecked exceptions) @@ -907,7 +902,7 @@ public class UnusedAssignmentRule extends AbstractJavaRule { if (child instanceof ASTPrimarySuffix && ((ASTPrimarySuffix) child).isArguments() || child instanceof ASTPrimarySuffix && child.getNumChildren() > 0 && child.getChild(0) instanceof ASTAllocationExpression || child instanceof ASTPrimaryPrefix && child.getNumChildren() > 0 && child.getChild(0) instanceof ASTAllocationExpression) { - state.abruptCompletionByThrow(true); + state.abruptCompletionByThrow(true); // this is a noop if we're outside a try block that has catch/finally } } } @@ -1385,11 +1380,6 @@ public class UnusedAssignmentRule extends AbstractJavaRule { return this; } - private boolean isInTryBlock() { - // ignore resources, once they're initialized everything's fine in the block - return !myCatches.isEmpty() || myFinally != null; - } - SpanInfo absorb(SpanInfo other) { // Merge reaching defs of the other scope into this // This is used to join paths after the control flow has forked diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/UnusedAssignment.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/UnusedAssignment.xml index c05ad0a40a..0dd7179c5e 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/UnusedAssignment.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/UnusedAssignment.xml @@ -3160,7 +3160,7 @@ public class UnusedAssignmentNative { - False positive with try in loop? #2759 + False positive with method that may throw in forked state (the if state) #2759 0 Date: Sat, 12 Sep 2020 11:36:20 +0200 Subject: [PATCH 3/3] [doc] Update release notes, fixes #2759 --- docs/pages/release_notes.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index b8f8783555..15b3b605ec 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -16,6 +16,9 @@ This is a {{ site.pmd.release_type }} release. ### Fixed Issues +* pmd-java + * [#2759](https://github.com/pmd/pmd/issues/2759): \[java] False positive in UnusedAssignment + ### API Changes ### External Contributions