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);", " }",