Modified Container to return a 'creator' or new instance factory. This helps clients avoid a concurrent map lookup each time they inject a class. Also fixed typing of Key.getRawType() and undeprecated it.

git-svn-id: https://google-guice.googlecode.com/svn/trunk@33 d779f126-a31b-0410-b53b-1d3aecad763e
diff --git a/guice.iws b/guice.iws
index adbbe75..52945be 100644
--- a/guice.iws
+++ b/guice.iws
@@ -18,8 +18,20 @@
   </component>
   <component name="ChangeListManager">
     <list default="true" name="Default" comment="">
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/com/google/inject/NotRequiredTest.java" afterPath="$PROJECT_DIR$/test/com/google/inject/NotRequiredTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/com/google/inject/SuperclassTest.java" afterPath="$PROJECT_DIR$/test/com/google/inject/SuperclassTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/com/google/inject/Key.java" afterPath="$PROJECT_DIR$/src/com/google/inject/Key.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/com/google/inject/GenericInjectionTest.java" afterPath="$PROJECT_DIR$/test/com/google/inject/GenericInjectionTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/com/google/inject/ContainerImpl.java" afterPath="$PROJECT_DIR$/src/com/google/inject/ContainerImpl.java" />
       <change type="DELETED" beforePath="$PROJECT_DIR$/src/com/google/inject/SourceProvider.java" afterPath="" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/com/google/inject/ConstantConversionTest.java" afterPath="$PROJECT_DIR$/test/com/google/inject/ConstantConversionTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/guice.ipr" afterPath="$PROJECT_DIR$/guice.ipr" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/com/google/inject/FactoryInjectionTest.java" afterPath="$PROJECT_DIR$/test/com/google/inject/FactoryInjectionTest.java" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/guice.iws" afterPath="$PROJECT_DIR$/guice.iws" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/com/google/inject/Container.java" afterPath="$PROJECT_DIR$/src/com/google/inject/Container.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/com/google/inject/FactoryTest.java" afterPath="$PROJECT_DIR$/test/com/google/inject/FactoryTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/com/google/inject/ContainerTest.java" afterPath="$PROJECT_DIR$/test/com/google/inject/ContainerTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/com/google/inject/CircularDependencyTest.java" afterPath="$PROJECT_DIR$/test/com/google/inject/CircularDependencyTest.java" />
     </list>
   </component>
   <component name="ChangeListSynchronizer" />
@@ -188,7 +200,125 @@
     <option name="myCurrentFavoritesList" value="guice" />
   </component>
   <component name="FileEditorManager">
-    <leaf />
+    <leaf>
+      <file leaf-file-name="ContextualFactory.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/com/google/inject/ContextualFactory.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="23" column="17" selection-start="726" selection-end="726" vertical-scroll-proportion="0.20536913">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="ContainerImpl.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/com/google/inject/ContainerImpl.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="137" column="28" selection-start="4578" selection-end="4578" vertical-scroll-proportion="0.3328859">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="CircularDependencyTest.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/test/com/google/inject/CircularDependencyTest.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="67" column="0" selection-start="1549" selection-end="1549" vertical-scroll-proportion="0.86308724">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="GenericInjectionTest.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/test/com/google/inject/GenericInjectionTest.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="19" column="50" selection-start="582" selection-end="582" vertical-scroll-proportion="0.36510068">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="SuperclassTest.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/test/com/google/inject/SuperclassTest.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="31" column="22" selection-start="1042" selection-end="1042" vertical-scroll-proportion="0.36107382">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="NotRequiredTest.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/test/com/google/inject/NotRequiredTest.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="29" column="43" selection-start="956" selection-end="956" vertical-scroll-proportion="0.3328859">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="ConstantConversionTest.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/test/com/google/inject/ConstantConversionTest.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="14" column="3" selection-start="595" selection-end="595" vertical-scroll-proportion="0.0">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="FactoryInjectionTest.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/test/com/google/inject/FactoryInjectionTest.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="19" column="51" selection-start="499" selection-end="499" vertical-scroll-proportion="0.4067114">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="FactoryTest.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/test/com/google/inject/FactoryTest.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="85" column="0" selection-start="2663" selection-end="2663" vertical-scroll-proportion="0.58389264">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="ContainerTest.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/test/com/google/inject/ContainerTest.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="151" column="0" selection-start="3306" selection-end="3306" vertical-scroll-proportion="0.013422819">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="ContainerBuilder.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/com/google/inject/ContainerBuilder.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="581" column="55" selection-start="17538" selection-end="17538" vertical-scroll-proportion="0.3328859">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="Key.java" pinned="false" current="true" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/src/com/google/inject/Key.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="132" column="0" selection-start="3391" selection-end="3391" vertical-scroll-proportion="0.3785235">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="Container.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/com/google/inject/Container.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="76" column="0" selection-start="2156" selection-end="2210" vertical-scroll-proportion="0.52080536">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+    </leaf>
   </component>
   <component name="FindManager">
     <FindUsagesManager>
@@ -624,9 +754,9 @@
       <window_info id="Mach" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32919848" order="9" />
       <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="7" />
       <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.15854311" order="0" />
-      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.29517502" order="1" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.29517502" order="1" />
       <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.16236559" order="1" />
-      <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.27909178" order="10" />
+      <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.27909178" order="10" />
       <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" order="6" />
       <window_info id="Profile" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32890996" order="13" />
       <window_info id="Module Dependencies" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="3" />
@@ -733,97 +863,6 @@
     <option name="myLastEditedConfigurable" value="Default" />
   </component>
   <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/src/com/google/inject/util/Function.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="40" column="34" selection-start="1577" selection-end="1577" vertical-scroll-proportion="0.60714287">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/com/google/inject/SingletonScope.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="22" column="27" selection-start="591" selection-end="591" vertical-scroll-proportion="0.51373625">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/test/com/google/inject/AllTests.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="29" column="13" selection-start="964" selection-end="964" vertical-scroll-proportion="0.21016483">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="jar://$PROJECT_DIR$/lib/cglib-nodep-2.1_3.jar!/net/sf/cglib/reflect/FastClass.class">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="12" column="47" selection-start="386" selection-end="386" vertical-scroll-proportion="0.023842918">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/com/google/inject/Key.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="188" column="9" selection-start="4748" selection-end="4748" vertical-scroll-proportion="0.98214287">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/com/google/inject/ContainerBuilder.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="18" column="0" selection-start="625" selection-end="625" vertical-scroll-proportion="0.023351649">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/com/google/inject/ContainerImpl.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="50" column="6" selection-start="1570" selection-end="1570" vertical-scroll-proportion="0.023351649">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/com/google/inject/ConstantFactory.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="21" column="6" selection-start="680" selection-end="680" vertical-scroll-proportion="0.16346154">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/test/com/google/inject/ContainerTest.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="63" column="68" selection-start="1990" selection-end="1990" vertical-scroll-proportion="0.023351649">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/test/com/google/inject/SpringPerformanceComparison.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="108" column="27" selection-start="3948" selection-end="3948" vertical-scroll-proportion="0.023351649">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/com/google/inject/Container.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="71" column="0" selection-start="2050" selection-end="2050" vertical-scroll-proportion="0.88873625">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/test/com/google/inject/TypeTokenTest.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="25" column="13" selection-start="745" selection-end="745" vertical-scroll-proportion="0.21016483">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/com/google/inject/TypeToken.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="32" column="22" selection-start="1101" selection-end="1101" vertical-scroll-proportion="0.023351649">
-          <folding />
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/src/com/google/inject/Scoped.java">
       <provider selected="true" editor-type-id="text-editor">
         <state line="31" column="18" selection-start="1024" selection-end="1024" vertical-scroll-proportion="0.32692307">
@@ -838,6 +877,97 @@
         </state>
       </provider>
     </entry>
+    <entry file="file://$PROJECT_DIR$/src/com/google/inject/ContextualFactory.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="23" column="17" selection-start="726" selection-end="726" vertical-scroll-proportion="0.20536913">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/com/google/inject/CircularDependencyTest.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="67" column="0" selection-start="1549" selection-end="1549" vertical-scroll-proportion="0.86308724">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/com/google/inject/GenericInjectionTest.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="19" column="50" selection-start="582" selection-end="582" vertical-scroll-proportion="0.36510068">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/com/google/inject/SuperclassTest.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="31" column="22" selection-start="1042" selection-end="1042" vertical-scroll-proportion="0.36107382">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/com/google/inject/ConstantConversionTest.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="14" column="3" selection-start="595" selection-end="595" vertical-scroll-proportion="0.0">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/com/google/inject/FactoryInjectionTest.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="19" column="51" selection-start="499" selection-end="499" vertical-scroll-proportion="0.4067114">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/com/google/inject/FactoryTest.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="85" column="0" selection-start="2663" selection-end="2663" vertical-scroll-proportion="0.58389264">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/com/google/inject/Container.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="76" column="0" selection-start="2156" selection-end="2210" vertical-scroll-proportion="0.52080536">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/com/google/inject/NotRequiredTest.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="29" column="43" selection-start="956" selection-end="956" vertical-scroll-proportion="0.3328859">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/com/google/inject/ContainerTest.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="151" column="0" selection-start="3306" selection-end="3306" vertical-scroll-proportion="0.013422819">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/com/google/inject/ContainerImpl.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="137" column="28" selection-start="4578" selection-end="4578" vertical-scroll-proportion="0.3328859">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/com/google/inject/ContainerBuilder.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="581" column="55" selection-start="17538" selection-end="17538" vertical-scroll-proportion="0.3328859">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/com/google/inject/Key.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="132" column="0" selection-start="3391" selection-end="3391" vertical-scroll-proportion="0.3785235">
+          <folding />
+        </state>
+      </provider>
+    </entry>
   </component>
 </project>
 
diff --git a/src/com/google/inject/Container.java b/src/com/google/inject/Container.java
index 44f8e33..9285348 100644
--- a/src/com/google/inject/Container.java
+++ b/src/com/google/inject/Container.java
@@ -71,9 +71,10 @@
   void injectMembers(Object o);
 
   /**
-   * Creates and injects a new instance of type {@code implementation}.
+   * Gets a factory which injects the given class's constructor creating new
+   * instances.
    */
-  <T> T newInstance(Class<T> implementation);
+  <T> Factory<T> getCreator(Class<T> implementation);
 
   /**
    * Gets the factory bound to the given key.
diff --git a/src/com/google/inject/ContainerImpl.java b/src/com/google/inject/ContainerImpl.java
index 530dff0..9448798 100644
--- a/src/com/google/inject/ContainerImpl.java
+++ b/src/com/google/inject/ContainerImpl.java
@@ -135,7 +135,7 @@
       return null;
     }
 
-    Class<T> type = key.getRawType();
+    Class<?> type = key.getRawType();
 
     // We don't need do pass in an InternalContext because we know this is
     // a ConstantFactory which will not use it.
@@ -409,7 +409,7 @@
         }
       };
 
-  static class ConstructorInjector<T> {
+  class ConstructorInjector<T> implements Factory<T> {
 
     final Class<T> implementation;
     final List<Injector> injectors;
@@ -524,6 +524,21 @@
     private T newInstance(Object[] parameters) throws InvocationTargetException {
       return (T) fastConstructor.newInstance(parameters);
     }
+
+    public T get() {
+      try {
+        return callInContext(new ContextualCallable<T>() {
+          @SuppressWarnings({"unchecked"})
+          public T call(InternalContext context) {
+            return (T) construct(context, implementation);
+          }
+        });
+      } catch (RuntimeException e) {
+        throw e;
+      } catch (Exception e) {
+        throw new RuntimeException(e);
+      }
+    }
   }
 
   static class ParameterInjector<T> {
@@ -568,16 +583,8 @@
     }
   }
 
-  <T> T newInstance(Class<T> implementation, InternalContext context) {
-    try {
-      ConstructorInjector<T> constructor = getConstructor(implementation);
-      return implementation.cast(
-          constructor.construct(context, implementation));
-    } catch (RuntimeException e) {
-      throw e;
-    } catch (Exception e) {
-      throw new RuntimeException(e);
-    }
+  public <T> Factory<T> getCreator(final Class<T> implementation) {
+    return getConstructor(implementation);
   }
 
   public boolean hasBindingFor(Key<?> key) {
@@ -597,14 +604,6 @@
     });
   }
 
-  public <T> T newInstance(final Class<T> implementation) {
-    return callInContext(new ContextualCallable<T>() {
-      public T call(InternalContext context) {
-        return newInstance(implementation, context);
-      }
-    });
-  }
-
   public <T> Factory<T> getFactory(final Key<T> key) {
     final InternalFactory<? extends T> factory = getFactory(null, key);
 
diff --git a/src/com/google/inject/Key.java b/src/com/google/inject/Key.java
index ae1404e..2949e7b 100644
--- a/src/com/google/inject/Key.java
+++ b/src/com/google/inject/Key.java
@@ -127,9 +127,8 @@
     return this.hashCode;
   }
 
-  @Deprecated
-  Class<T> getRawType() {
-    return (Class<T>) typeToken.getRawType();
+  Class<? super T> getRawType() {
+    return typeToken.getRawType();
   }
 
   public boolean equals(Object o) {
diff --git a/test/com/google/inject/CircularDependencyTest.java b/test/com/google/inject/CircularDependencyTest.java
index ac025ab..9f3b205 100644
--- a/test/com/google/inject/CircularDependencyTest.java
+++ b/test/com/google/inject/CircularDependencyTest.java
@@ -31,7 +31,7 @@
     builder.bind(B.class).to(BImpl.class);
 
     Container container = builder.create(false);
-    A a = container.newInstance(AImpl.class);
+    A a = container.getCreator(AImpl.class).get();
     assertNotNull(a.getB().getA());
   }
 
diff --git a/test/com/google/inject/ConstantConversionTest.java b/test/com/google/inject/ConstantConversionTest.java
index c46142b..e2958a0 100644
--- a/test/com/google/inject/ConstantConversionTest.java
+++ b/test/com/google/inject/ConstantConversionTest.java
@@ -60,7 +60,7 @@
     ContainerBuilder b = new ContainerBuilder();
     b.bindProperties(properties);
     Container c = b.create(false);
-    Foo foo = c.newInstance(Foo.class);
+    Foo foo = c.getCreator(Foo.class).get();
 
     checkNumbers(
       foo.integerField,
@@ -92,7 +92,7 @@
     b.bind("#").to("invalid");
     Container c = b.create(false);
     try {
-      c.newInstance(InvalidInteger.class);
+      c.getCreator(InvalidInteger.class).get();
       fail();
     } catch (ConstantConversionException e) {
       assertTrue(e.getMessage().startsWith(
@@ -110,7 +110,7 @@
     b.bind("foo").to("invalid");
     Container c = b.create(false);
     try {
-      c.newInstance(InvalidCharacter.class);
+      c.getCreator(InvalidCharacter.class).get();
       fail();
     } catch (ConstantConversionException e) {
       assertTrue(e.getMessage().startsWith(
@@ -128,7 +128,7 @@
     b.bind("foo").to("invalid");
     Container c = b.create(false);
     try {
-      c.newInstance(InvalidEnum.class);
+      c.getCreator(InvalidEnum.class).get();
       fail();
     } catch (ConstantConversionException e) {
       assertTrue(e.getMessage().startsWith(
diff --git a/test/com/google/inject/ContainerTest.java b/test/com/google/inject/ContainerTest.java
index 7a5a164..0a48d54 100644
--- a/test/com/google/inject/ContainerTest.java
+++ b/test/com/google/inject/ContainerTest.java
@@ -27,7 +27,7 @@
 
   public void testInjection() {
     Container container = createFooContainer();
-    Foo foo = container.newInstance(Foo.class);
+    Foo foo = container.getCreator(Foo.class).get();
 
     assertEquals("test", foo.s);
     assertEquals("test", foo.bar.getTee().getS());
@@ -61,7 +61,7 @@
     ContainerBuilder builder = new ContainerBuilder();
     builder.bind("i").to(5);
     Container container = builder.create(false);
-    IntegerWrapper iw = container.newInstance(IntegerWrapper.class);
+    IntegerWrapper iw = container.getCreator(IntegerWrapper.class).get();
     assertEquals(5, (int) iw.i);
   }
 
@@ -142,7 +142,7 @@
     builder.bind(B.class).to(BImpl.class);
 
     Container container = builder.create(false);
-    A a = container.newInstance(AImpl.class);
+    A a = container.getCreator(AImpl.class).get();
     assertNotNull(a.getB().getA());
   }
 
diff --git a/test/com/google/inject/FactoryInjectionTest.java b/test/com/google/inject/FactoryInjectionTest.java
index a73c21a..bd93e65 100644
--- a/test/com/google/inject/FactoryInjectionTest.java
+++ b/test/com/google/inject/FactoryInjectionTest.java
@@ -17,7 +17,7 @@
 
     Container container = builder.create(false);
 
-    Foo foo = container.newInstance(Foo.class);
+    Foo foo = container.getCreator(Foo.class).get();
 
     Bar bar = foo.barFactory.get();
     assertNotNull(bar);
diff --git a/test/com/google/inject/FactoryTest.java b/test/com/google/inject/FactoryTest.java
index b745c4a..103ba0e 100644
--- a/test/com/google/inject/FactoryTest.java
+++ b/test/com/google/inject/FactoryTest.java
@@ -72,7 +72,7 @@
         assertEquals(expectedMember, context.getMember());
         assertEquals(name, context.getKey().getName());
         assertEquals(type, context.getKey().getTypeToken().getType());
-        return context.getContainer().newInstance(type);
+        return context.getContainer().getCreator(type).get();
       }
     };
   }
diff --git a/test/com/google/inject/GenericInjectionTest.java b/test/com/google/inject/GenericInjectionTest.java
index 27e7e95..d75ec90 100644
--- a/test/com/google/inject/GenericInjectionTest.java
+++ b/test/com/google/inject/GenericInjectionTest.java
@@ -17,7 +17,7 @@
     ContainerBuilder builder = new ContainerBuilder();
     builder.bind(new TypeToken<List<String>>() {}).to(names);
     Container container = builder.create(false);
-    Foo foo = container.newInstance(Foo.class);
+    Foo foo = container.getCreator(Foo.class).get();
     assertEquals(names, foo.names);
   }
 
diff --git a/test/com/google/inject/NotRequiredTest.java b/test/com/google/inject/NotRequiredTest.java
index 24582ec..27e5c39 100644
--- a/test/com/google/inject/NotRequiredTest.java
+++ b/test/com/google/inject/NotRequiredTest.java
@@ -27,7 +27,7 @@
     ContainerBuilder builder = new ContainerBuilder();
     builder.bind(Bar.class);
     Container c = builder.create(false);
-    Foo foo = c.newInstance(Foo.class);
+    Foo foo = c.getCreator(Foo.class).get();
     assertNotNull(foo.bar);
     assertNotNull(foo.fromMethod);
   }
@@ -35,7 +35,7 @@
   public void testNotProvided() {
     Container c = new ContainerBuilder()
         .create(false);
-    Foo foo = c.newInstance(Foo.class);
+    Foo foo = c.getCreator(Foo.class).get();
     assertNull(foo.bar);
     assertNull(foo.fromMethod);
   }
diff --git a/test/com/google/inject/SuperclassTest.java b/test/com/google/inject/SuperclassTest.java
index 8205964..25bc374 100644
--- a/test/com/google/inject/SuperclassTest.java
+++ b/test/com/google/inject/SuperclassTest.java
@@ -27,11 +27,12 @@
     ContainerBuilder builder = new ContainerBuilder();
     builder.bind(Foo.class);
     Container container = builder.create(false);
-    Sub sub = container.newInstance(Sub.class);
-    sub = container.newInstance(Sub.class);
-    sub = container.newInstance(Sub.class);
-    sub = container.newInstance(Sub.class);
-    sub = container.newInstance(Sub.class);
+    Factory<Sub> creator = container.getCreator(Sub.class);
+    Sub sub = creator.get();
+    sub = creator.get();
+    sub = creator.get();
+    sub = creator.get();
+    sub = creator.get();
     assertNotNull(sub.field);
     assertNotNull(sub.fromMethod);
   }