aboutsummaryrefslogtreecommitdiff
path: root/core/src/com/google/inject
diff options
context:
space:
mode:
authorSam Berlin <sameb@google.com>2014-05-23 18:19:12 -0400
committerSam Berlin <sameb@google.com>2014-05-23 18:22:09 -0400
commit53a5936f55056dc695c35e6e16233c5b49780ded (patch)
treec7d6b66eed8a9d9cc34389a6fe2bde5ae2e32006 /core/src/com/google/inject
parent0c69c36ff97fa83887e75ba567745a5919d4b6ed (diff)
downloadguice-53a5936f55056dc695c35e6e16233c5b49780ded.tar.gz
Ignore synthetic bridge methods during provider method lookup.
------------- Created by MOE: http://code.google.com/p/moe-java MOE_MIGRATED_REVID=67854418
Diffstat (limited to 'core/src/com/google/inject')
-rw-r--r--core/src/com/google/inject/internal/ProviderMethodsModule.java14
1 files changed, 13 insertions, 1 deletions
diff --git a/core/src/com/google/inject/internal/ProviderMethodsModule.java b/core/src/com/google/inject/internal/ProviderMethodsModule.java
index 062653d2..8f4d5ed0 100644
--- a/core/src/com/google/inject/internal/ProviderMethodsModule.java
+++ b/core/src/com/google/inject/internal/ProviderMethodsModule.java
@@ -81,7 +81,7 @@ public final class ProviderMethodsModule implements Module {
List<ProviderMethod<?>> result = Lists.newArrayList();
for (Class<?> c = delegate.getClass(); c != Object.class; c = c.getSuperclass()) {
for (Method method : c.getDeclaredMethods()) {
- if (method.isAnnotationPresent(Provides.class)) {
+ if (isProvider(method)) {
result.add(createProviderMethod(binder, method));
}
}
@@ -89,6 +89,18 @@ public final class ProviderMethodsModule implements Module {
return result;
}
+ /**
+ * Returns true if the method is a provider.
+ *
+ * Synthetic bridge methods are excluded. Starting with JDK 8, javac copies annotations onto
+ * bridge methods (which always have erased signatures).
+ */
+ private static boolean isProvider(Method method) {
+ return !method.isBridge()
+ && !method.isSynthetic()
+ && method.isAnnotationPresent(Provides.class);
+ }
+
<T> ProviderMethod<T> createProviderMethod(Binder binder, final Method method) {
binder = binder.withSource(method);
Errors errors = new Errors(method);