From 144b5b1337b01d7813db4088a02146858cb669b7 Mon Sep 17 00:00:00 2001 From: ghm Date: Thu, 9 Oct 2025 06:39:15 -0700 Subject: [PATCH] Recognise `Bind` and `Inject` as prefixes for annotations that we should treat as injecty ones. Obviously this _could_ lead to false negatives, but these are such common prefixes for injection annotations that it saves us special casing a bunch. PiperOrigin-RevId: 817162404 --- .../bugpatterns/UnnecessaryQualifier.java | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/UnnecessaryQualifier.java b/core/src/main/java/com/google/errorprone/bugpatterns/UnnecessaryQualifier.java index ed61eb5c596..4008b261497 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/UnnecessaryQualifier.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/UnnecessaryQualifier.java @@ -93,7 +93,13 @@ public Description matchVariable(VariableTree tree, VisitorState state) { var symbol = getSymbol(tree); switch (symbol.getKind()) { case FIELD -> { - if (INJECTION_FIELDS.stream().anyMatch(ip -> hasAnnotation(tree, ip, state))) { + if (INJECTION_FIELDS.stream().anyMatch(ip -> hasAnnotation(tree, ip, state)) + || tree.getModifiers().getAnnotations().stream() + .anyMatch( + anno -> + INJECTION_PREFIXES.stream() + .anyMatch( + p -> getSymbol(anno).getSimpleName().toString().startsWith(p)))) { return NO_MATCH; } if (isRecord(symbol)) { @@ -222,22 +228,12 @@ private static ImmutableList getQualifiers( private static final ImmutableSet INJECTION_FIELDS = ImmutableSet.of( // keep-sorted start - "com.google.inject.Inject", - "dagger.Binds", - "dagger.BindsInstance", - "dagger.hilt.android.testing.BindElementsIntoSet", - "dagger.hilt.android.testing.BindValue", - "dagger.hilt.android.testing.BindValueIntoMap", - "dagger.hilt.android.testing.BindValueIntoSet", - "dagger.hilt.testing.BindElementsIntoSet", - "dagger.hilt.testing.BindValue", - "dagger.hilt.testing.BindValueIntoMap", - "dagger.hilt.testing.BindValueIntoSet", - "jakarta.inject.Inject", - "javax.inject.Inject" // keep-sorted end ); + /** Prefixes for annotations on variables which can have qualifiers. */ + private static final ImmutableSet INJECTION_PREFIXES = ImmutableSet.of("Bind", "Inject"); + private static final ImmutableSet CLASS_ANNOTATIONS_EXEMPTING_METHODS = ImmutableSet.of( // keep-sorted start