Author: limpbizkit
Date: Sat Oct 18 12:50:49 2008
New Revision: 644

Modified:
    trunk/src/com/google/inject/Injector.java
    trunk/src/com/google/inject/InjectorBuilder.java
    trunk/src/com/google/inject/InjectorImpl.java
    trunk/src/com/google/inject/util/Modules.java
    trunk/test/com/google/inject/OverrideModuleTest.java
    trunk/test/com/google/inject/ParentInjectorTest.java

Log:
New API: Injector.getParent

Changing Modules.override() to be lazy

Modified: trunk/src/com/google/inject/Injector.java
==============================================================================
--- trunk/src/com/google/inject/Injector.java   (original)
+++ trunk/src/com/google/inject/Injector.java   Sat Oct 18 12:50:49 2008
@@ -122,6 +122,12 @@
    <T> T getInstance(Class<T> type);

    /**
+   * Returns this injector's parent injector, or [EMAIL PROTECTED] null} if 
this is a  
top-
+   * level injector.
+   */
+  Injector getParent();
+
+  /**
     * Returns a new injector that inherits all state from this injector. All
     * bindings, scopes, interceptors and type converters are inherited --  
they
     * are visible to the child injector. Elements of the child injector are  
not

Modified: trunk/src/com/google/inject/InjectorBuilder.java
==============================================================================
--- trunk/src/com/google/inject/InjectorBuilder.java    (original)
+++ trunk/src/com/google/inject/InjectorBuilder.java    Sat Oct 18 12:50:49  
2008
@@ -321,6 +321,9 @@
      public <T> List<Binding<T>> findBindingsByType(TypeLiteral<T> type) {
        return this.delegateInjector.findBindingsByType(type);
      }
+    public Injector getParent() {
+      return delegateInjector.getParent();
+    }
      public Injector createChildInjector(Iterable<? extends Module>  
modules) {
        return delegateInjector.createChildInjector(modules);
      }

Modified: trunk/src/com/google/inject/InjectorImpl.java
==============================================================================
--- trunk/src/com/google/inject/InjectorImpl.java       (original)
+++ trunk/src/com/google/inject/InjectorImpl.java       Sat Oct 18 12:50:49 2008
@@ -131,6 +131,10 @@
      return getBinding(Key.get(type));
    }

+  public Injector getParent() {
+    return parent;
+  }
+
    public Injector createChildInjector(Iterable<? extends Module> modules) {
      return new InjectorBuilder()
          .parentInjector(this)

Modified: trunk/src/com/google/inject/util/Modules.java
==============================================================================
--- trunk/src/com/google/inject/util/Modules.java       (original)
+++ trunk/src/com/google/inject/util/Modules.java       Sat Oct 18 12:50:49 2008
@@ -132,13 +132,13 @@
        return with(Arrays.asList(overrides));
      }

-    public Module with(Iterable<? extends Module> overrides) {
-      final List<Element> elements = Elements.getElements(baseModules);
-      final List<Element> overrideElements =  
Elements.getElements(overrides);
-
+    public Module with(final Iterable<? extends Module> overrides) {
        return new AbstractModule() {
          @Override
          public void configure() {
+          final List<Element> elements = Elements.getElements(baseModules);
+          final List<Element> overrideElements =  
Elements.getElements(overrides);
+
            final Set<Key> overriddenKeys = Sets.newHashSet();
            final Set<Class<? extends Annotation>> overridesScopeAnnotations  
= Sets.newHashSet();


Modified: trunk/test/com/google/inject/OverrideModuleTest.java
==============================================================================
--- trunk/test/com/google/inject/OverrideModuleTest.java        (original)
+++ trunk/test/com/google/inject/OverrideModuleTest.java        Sat Oct 18  
12:50:49 2008
@@ -25,6 +25,7 @@
  import static java.lang.annotation.RetentionPolicy.RUNTIME;
  import java.lang.annotation.Target;
  import java.util.Date;
+import java.util.concurrent.atomic.AtomicReference;
  import junit.framework.TestCase;

  /**
@@ -276,6 +277,25 @@
            "1) The scope for @TestScopeAnnotation is bound directly and  
cannot be overridden.",
            "at ", getClass().getName(), ".configure(");
      }
+  }
+
+  public void testOverrideIsLazy() {
+    final AtomicReference<String> value = new AtomicReference<String>("A");
+    Module overridden = Modules.override(new AbstractModule() {
+      protected void configure() {
+         
bind(String.class).annotatedWith(named("original")).toInstance(value.get());
+      }
+    }).with(new AbstractModule() {
+      protected void configure() {
+         
bind(String.class).annotatedWith(named("override")).toInstance(value.get());
+      }
+    });
+
+    // the value.get() call should be deferred until Guice.createInjector
+    value.set("B");
+    Injector injector = Guice.createInjector(overridden);
+    assertEquals("B", injector.getInstance(Key.get(String.class,  
named("original"))));
+    assertEquals("B", injector.getInstance(Key.get(String.class,  
named("override"))));
    }

    @Retention(RUNTIME)

Modified: trunk/test/com/google/inject/ParentInjectorTest.java
==============================================================================
--- trunk/test/com/google/inject/ParentInjectorTest.java        (original)
+++ trunk/test/com/google/inject/ParentInjectorTest.java        Sat Oct 18  
12:50:49 2008
@@ -77,6 +77,15 @@
      assertSame(RealB.class, child.getInstance(B.class).getClass());
    }

+  public void testGetParent() {
+    Injector top = Guice.createInjector(bindsA);
+    Injector middle = top.createChildInjector(bindsB);
+    Injector bottom = middle.createChildInjector();
+    assertSame(middle, bottom.getParent());
+    assertSame(top, middle.getParent());
+    assertNull(top.getParent());
+  }
+
    public void testChildBindingsNotVisibleToParent() {
      Injector parent = Guice.createInjector();
      parent.createChildInjector(bindsB);

--~--~---------~--~----~------------~-------~--~----~
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