Revision: 1182
Author: sberlin
Date: Sat Jul 3 08:35:50 2010
Log: fix issue 507, pointed out by stuart -- LinkedProviderBindingImpl did
not implement HasDependencies & the injector wasn't checking for instanceof
before casting.
http://code.google.com/p/google-guice/source/detail?r=1182
Modified:
/trunk/src/com/google/inject/internal/InjectorImpl.java
/trunk/src/com/google/inject/internal/LinkedProviderBindingImpl.java
/trunk/test/com/google/inject/ImplicitBindingTest.java
=======================================
--- /trunk/src/com/google/inject/internal/InjectorImpl.java Wed Jun 23
18:03:26 2010
+++ /trunk/src/com/google/inject/internal/InjectorImpl.java Sat Jul 3
08:35:50 2010
@@ -540,8 +540,10 @@
private Set<Dependency<?>> getInternalDependencies(BindingImpl<?>
binding) {
if(binding instanceof ConstructorBindingImpl) {
return ((ConstructorBindingImpl)binding).getInternalDependencies();
- } else {
+ } else if(binding instanceof HasDependencies) {
return ((HasDependencies)binding).getDependencies();
+ } else {
+ return ImmutableSet.of();
}
}
=======================================
--- /trunk/src/com/google/inject/internal/LinkedProviderBindingImpl.java
Wed Jun 23 18:03:26 2010
+++ /trunk/src/com/google/inject/internal/LinkedProviderBindingImpl.java
Sat Jul 3 08:35:50 2010
@@ -16,13 +16,17 @@
package com.google.inject.internal;
+import java.util.Set;
+
import com.google.inject.Binder;
import com.google.inject.Key;
import com.google.inject.spi.BindingTargetVisitor;
+import com.google.inject.spi.Dependency;
+import com.google.inject.spi.HasDependencies;
import com.google.inject.spi.ProviderKeyBinding;
final class LinkedProviderBindingImpl<T>
- extends BindingImpl<T> implements ProviderKeyBinding<T> {
+ extends BindingImpl<T> implements ProviderKeyBinding<T>,
HasDependencies {
final Key<? extends javax.inject.Provider<? extends T>> providerKey;
@@ -46,7 +50,11 @@
public Key<? extends javax.inject.Provider<? extends T>>
getProviderKey() {
return providerKey;
}
-
+
+ public Set<Dependency<?>> getDependencies() {
+ return ImmutableSet.<Dependency<?>>of(Dependency.get(providerKey));
+ }
+
public BindingImpl<T> withScoping(Scoping scoping) {
return new LinkedProviderBindingImpl<T>(getSource(), getKey(),
scoping, providerKey);
}
=======================================
--- /trunk/test/com/google/inject/ImplicitBindingTest.java Tue May 25
05:25:46 2010
+++ /trunk/test/com/google/inject/ImplicitBindingTest.java Sat Jul 3
08:35:50 2010
@@ -136,6 +136,10 @@
assertFailure(injector, InvalidLinkedImpl.class);
assertFailure(injector, InvalidLinked2.class);
assertFailure(injector, InvalidLinked2Impl.class);
+ assertFailure(injector, InvalidProvidedBy.class);
+ assertFailure(injector, InvalidProvidedByProvider.class);
+ assertFailure(injector, InvalidProvidedBy2.class);
+ assertFailure(injector, InvalidProvidedBy2Provider.class);
assertFailure(injector, Invalid2.class);
// Validate we didn't do anything to the valid explicit bindings.
@@ -166,6 +170,7 @@
static class Invalid {
@Inject Valid a;
@Inject JitValid b;
+ @Inject InvalidProvidedBy c;
@Inject Invalid(InvalidLinked a) {}
@Inject void foo(InvalidInterface a) {}
@@ -182,6 +187,24 @@
static class InvalidLinked2Impl implements InvalidLinked2 {
@Inject InvalidLinked2Impl(Invalid2 a) {}
}
+
+ @ProvidedBy(InvalidProvidedByProvider.class)
+ static interface InvalidProvidedBy {}
+ static class InvalidProvidedByProvider implements
Provider<InvalidProvidedBy> {
+ @Inject InvalidProvidedBy2 a;
+ public InvalidProvidedBy get() {
+ return null;
+ }
+ }
+
+ @ProvidedBy(InvalidProvidedBy2Provider.class)
+ static interface InvalidProvidedBy2 {}
+ static class InvalidProvidedBy2Provider implements
Provider<InvalidProvidedBy2> {
+ @Inject Invalid2 a;
+ public InvalidProvidedBy2 get() {
+ return null;
+ }
+ }
static class Invalid2 {
@Inject Invalid a;
--
You received this message because you are subscribed to the Google Groups
"google-guice-dev" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-guice-dev?hl=en.