diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/RedundantSetterCall.java b/core/src/main/java/com/google/errorprone/bugpatterns/RedundantSetterCall.java index aea5199421a..7d5608d3158 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/RedundantSetterCall.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/RedundantSetterCall.java @@ -29,6 +29,7 @@ import static com.google.errorprone.util.ASTHelpers.getEnclosedElements; import static com.google.errorprone.util.ASTHelpers.getSymbol; import static com.google.errorprone.util.ASTHelpers.getType; +import static com.google.errorprone.util.ASTHelpers.getUpperBound; import static com.google.errorprone.util.ASTHelpers.hasAnnotation; import static com.google.errorprone.util.ASTHelpers.isAbstract; import static com.google.errorprone.util.ASTHelpers.isSameType; @@ -164,7 +165,7 @@ public Description matchMethodInvocation(MethodInvocationTree tree, VisitorState } private ImmutableMap scanForOneOfSetters(Type type, VisitorState state) { - var owner = type.tsym.owner; + var owner = getUpperBound(type, state.getTypes()).tsym.owner; if (owner == null || isSubtype(owner.type, GENERATED_MESSAGE_LITE.get(state), state)) { return ImmutableMap.of(); } diff --git a/core/src/test/java/com/google/errorprone/bugpatterns/RedundantSetterCallTest.java b/core/src/test/java/com/google/errorprone/bugpatterns/RedundantSetterCallTest.java index d1545ec72c4..c1c6702d9a4 100644 --- a/core/src/test/java/com/google/errorprone/bugpatterns/RedundantSetterCallTest.java +++ b/core/src/test/java/com/google/errorprone/bugpatterns/RedundantSetterCallTest.java @@ -223,4 +223,19 @@ public void autovalue() { "}") .doTest(); } + + @Test + public void builderOfWildcardType_noFindings() { + compilationHelper + .addSourceLines( + "Test.java", + "import com.google.protobuf.Descriptors.FieldDescriptor;", + "import com.google.protobuf.GeneratedMessage.Builder;", + "class Test {", + " public void clear(final Builder builder, FieldDescriptor fieldDescriptor) {", + " builder.clearField(fieldDescriptor);", + " }", + "}") + .doTest(); + } }