From 88a224c9f00deca8757fd864a8d29941cff1ac12 Mon Sep 17 00:00:00 2001 From: ghm Date: Tue, 21 Nov 2023 03:45:04 -0800 Subject: [PATCH] UnusedVariable: flag parameters in _effectively_ private methods, not just private methods. PiperOrigin-RevId: 584277317 --- .../errorprone/bugpatterns/UnusedVariable.java | 13 ++++++++----- .../errorprone/bugpatterns/UnusedVariableTest.java | 6 ++++++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/UnusedVariable.java b/core/src/main/java/com/google/errorprone/bugpatterns/UnusedVariable.java index b93080bb1c3..4f18642d2e1 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/UnusedVariable.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/UnusedVariable.java @@ -686,10 +686,13 @@ private boolean isParameterSubjectToAnalysis(Symbol sym) { checkArgument(sym.getKind() == ElementKind.PARAMETER); Symbol enclosingMethod = sym.owner; - for (String annotationName : methodAnnotationsExemptingParameters) { - if (hasAnnotation(enclosingMethod, annotationName, state)) { - return false; - } + if (!(enclosingMethod instanceof MethodSymbol)) { + return false; + } + + if (methodAnnotationsExemptingParameters.stream() + .anyMatch(anno -> hasAnnotation(enclosingMethod, anno, state))) { + return false; } if (ANNOTATIONS_INDICATING_PARAMETERS_SHOULD_BE_CHECKED.stream() @@ -697,7 +700,7 @@ private boolean isParameterSubjectToAnalysis(Symbol sym) { return true; } - return enclosingMethod.getModifiers().contains(Modifier.PRIVATE); + return canBeRemoved(enclosingMethod, state); } @Override diff --git a/core/src/test/java/com/google/errorprone/bugpatterns/UnusedVariableTest.java b/core/src/test/java/com/google/errorprone/bugpatterns/UnusedVariableTest.java index 6ff7e4d732f..d1243c5844b 100644 --- a/core/src/test/java/com/google/errorprone/bugpatterns/UnusedVariableTest.java +++ b/core/src/test/java/com/google/errorprone/bugpatterns/UnusedVariableTest.java @@ -257,6 +257,12 @@ public void unusedParamInPrivateMethod() { " private void test(int i, int j) {", " System.out.println(i);", " }", + " private class Inner {", + " // BUG: Diagnostic contains: 'j' is never read", + " public void test(int i, int j) {", + " System.out.println(i);", + " }", + " }", " public void main() {", " test(1, 2);", " }",