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.

Reply via email to