diff options
author | Sam Berlin <sameb@google.com> | 2014-05-03 00:40:05 -0400 |
---|---|---|
committer | Sam Berlin <sameb@google.com> | 2014-05-03 00:52:24 -0400 |
commit | 4754a22f265ad638d5484d12219515bd663272d0 (patch) | |
tree | 4e69c613f5cd414c9ce6b0a015f4cda1b1b6dae7 /core/src/com/google/inject | |
parent | 14e2703cd15b0ac745a0df80d25800692d8c727e (diff) | |
download | guice-4754a22f265ad638d5484d12219515bd663272d0.tar.gz |
Add equals/hashCode to Providers.guicify(...) results.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=65072672
Diffstat (limited to 'core/src/com/google/inject')
-rw-r--r-- | core/src/com/google/inject/util/Providers.java | 76 |
1 files changed, 48 insertions, 28 deletions
diff --git a/core/src/com/google/inject/util/Providers.java b/core/src/com/google/inject/util/Providers.java index e191b019..c18d3512 100644 --- a/core/src/com/google/inject/util/Providers.java +++ b/core/src/com/google/inject/util/Providers.java @@ -97,40 +97,60 @@ public final class Providers { Set<InjectionPoint> injectionPoints = InjectionPoint.forInstanceMethodsAndFields(provider.getClass()); if(injectionPoints.isEmpty()) { - return new Provider<T>() { - public T get() { - return delegate.get(); - } - - @Override public String toString() { - return "guicified(" + delegate + ")"; - } - }; + return new GuicifiedProvider<T>(delegate); } else { Set<Dependency<?>> mutableDeps = Sets.newHashSet(); for(InjectionPoint ip : injectionPoints) { mutableDeps.addAll(ip.getDependencies()); } final Set<Dependency<?>> dependencies = ImmutableSet.copyOf(mutableDeps); - return new ProviderWithDependencies<T>() { - @SuppressWarnings("unused") - @Inject - void initialize(Injector injector) { - injector.injectMembers(delegate); - } - - public Set<Dependency<?>> getDependencies() { - return dependencies; - } - - public T get() { - return delegate.get(); - } - - @Override public String toString() { - return "guicified(" + delegate + ")"; - } - }; + return new GuicifiedProviderWithDependencies<T>(dependencies, delegate); + } + } + + private static class GuicifiedProvider<T> implements Provider<T> { + protected final javax.inject.Provider<T> delegate; + + private GuicifiedProvider(javax.inject.Provider<T> delegate) { + this.delegate = delegate; + } + + public T get() { + return delegate.get(); + } + + @Override public String toString() { + return "guicified(" + delegate + ")"; + } + + @Override public boolean equals(Object obj) { + return (obj instanceof GuicifiedProvider) + && Objects.equal(delegate, ((GuicifiedProvider<?>) obj).delegate); + } + + @Override public int hashCode() { + return Objects.hashCode(delegate); + } + } + + private static final class GuicifiedProviderWithDependencies<T> + extends GuicifiedProvider<T> implements ProviderWithDependencies<T> { + private final Set<Dependency<?>> dependencies; + + private GuicifiedProviderWithDependencies(Set<Dependency<?>> dependencies, + javax.inject.Provider<T> delegate) { + super(delegate); + this.dependencies = dependencies; + } + + @SuppressWarnings("unused") + @Inject + void initialize(Injector injector) { + injector.injectMembers(delegate); + } + + public Set<Dependency<?>> getDependencies() { + return dependencies; } } } |