diff options
author | Sam Berlin <sameb@google.com> | 2014-05-23 18:19:12 -0400 |
---|---|---|
committer | Sam Berlin <sameb@google.com> | 2014-05-23 18:22:09 -0400 |
commit | 53a5936f55056dc695c35e6e16233c5b49780ded (patch) | |
tree | c7d6b66eed8a9d9cc34389a6fe2bde5ae2e32006 /core/src/com/google/inject | |
parent | 0c69c36ff97fa83887e75ba567745a5919d4b6ed (diff) | |
download | guice-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.java | 14 |
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); |