diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/UnusedAssignmentRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/UnusedAssignmentRule.java index ac9de7e239..711bfe62ff 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/UnusedAssignmentRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/UnusedAssignmentRule.java @@ -130,8 +130,16 @@ public class UnusedAssignmentRule extends AbstractJavaRule { .defaultValue(false) .build(); + private static final PropertyDescriptor REPORT_UNUSED_VARS = + PropertyFactory.booleanProperty("reportUnusedVariables") + .desc("Report variables that are only initialized, and never read at all. " + + "The rule UnusedVariable already cares for that, so you can disable it if needed") + .defaultValue(false) + .build(); + public UnusedAssignmentRule() { definePropertyDescriptor(CHECK_PREFIX_INCREMENT); + definePropertyDescriptor(REPORT_UNUSED_VARS); } @Override @@ -169,6 +177,9 @@ public class UnusedAssignmentRule extends AbstractJavaRule { if (isField) { // assignments to fields don't really go out of scope continue; + } else if (suppressUnusedVariableRuleOverlap(entry)) { + // see REPORT_UNUSED_VARS property + continue; } // This is a "DU" anomaly, the others are "DD" reason = "goes out of scope"; @@ -183,6 +194,10 @@ public class UnusedAssignmentRule extends AbstractJavaRule { } } + private boolean suppressUnusedVariableRuleOverlap(AssignmentEntry entry) { + return !getProperty(REPORT_UNUSED_VARS) && entry.rhs instanceof ASTVariableInitializer; + } + private boolean isIgnorablePrefixIncrement(JavaNode assignment) { if (assignment instanceof ASTPreIncrementExpression || assignment instanceof ASTPreDecrementExpression) {