Added parameter index to context. This will be useful if a custom factory wants to change behavior based on annotations on parameters.

git-svn-id: https://google-guice.googlecode.com/svn/trunk@48 d779f126-a31b-0410-b53b-1d3aecad763e
diff --git a/guice.iws b/guice.iws
index f691a05..6bd5a72 100644
--- a/guice.iws
+++ b/guice.iws
@@ -18,16 +18,30 @@
   </component>
   <component name="ChangeListManager">
     <list default="true" name="Default" comment="">
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/com/google/inject/InternalFactoryToFactoryAdapter.java" afterPath="$PROJECT_DIR$/src/com/google/inject/InternalFactoryToFactoryAdapter.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/com/google/inject/AbstractModule.java" afterPath="$PROJECT_DIR$/src/com/google/inject/AbstractModule.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/com/google/inject/Scope.java" afterPath="$PROJECT_DIR$/src/com/google/inject/Scope.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/com/google/inject/ContainerScope.java" afterPath="$PROJECT_DIR$/src/com/google/inject/ContainerScope.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/com/google/inject/Context.java" afterPath="$PROJECT_DIR$/src/com/google/inject/Context.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/com/google/inject/ErrorHandler.java" afterPath="$PROJECT_DIR$/src/com/google/inject/ErrorHandler.java" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/com/google/inject/ContainerImpl.java" afterPath="$PROJECT_DIR$/src/com/google/inject/ContainerImpl.java" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/com/google/inject/AllTests.java" afterPath="$PROJECT_DIR$/test/com/google/inject/AllTests.java" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/com/google/inject/AbstractModule.java" afterPath="$PROJECT_DIR$/src/com/google/inject/AbstractModule.java" />
-      <change type="DELETED" beforePath="$PROJECT_DIR$/src/com/google/inject/Stopwatch.java" afterPath="" />
+      <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$/src/com/google/inject/Scopes.java" afterPath="$PROJECT_DIR$/src/com/google/inject/Scopes.java" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/guice.iws" afterPath="$PROJECT_DIR$/guice.iws" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/com/google/inject/ContainerBuilder.java" afterPath="$PROJECT_DIR$/src/com/google/inject/ContainerBuilder.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/com/google/inject/FactoryToInternalFactoryAdapter.java" afterPath="$PROJECT_DIR$/src/com/google/inject/FactoryToInternalFactoryAdapter.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/com/google/inject/ExternalContext.java" afterPath="$PROJECT_DIR$/src/com/google/inject/ExternalContext.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/com/google/inject/AbstractErrorHandler.java" afterPath="$PROJECT_DIR$/src/com/google/inject/AbstractErrorHandler.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/com/google/inject/InternalToContextualFactoryAdapter.java" afterPath="$PROJECT_DIR$/src/com/google/inject/InternalToContextualFactoryAdapter.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/test/com/google/inject/PreloadingTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/com/google/inject/util/Stopwatch.java" afterPath="$PROJECT_DIR$/src/com/google/inject/util/Stopwatch.java" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/com/google/inject/ErrorHandlingTest.java" afterPath="$PROJECT_DIR$/test/com/google/inject/ErrorHandlingTest.java" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/com/google/inject/ErrorMessage.java" afterPath="$PROJECT_DIR$/src/com/google/inject/ErrorMessage.java" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/com/google/inject/ContainerBuilder.java" afterPath="$PROJECT_DIR$/src/com/google/inject/ContainerBuilder.java" />
-      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/com/google/inject/util/Stopwatch.java" />
-      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/test/com/google/inject/PreloadingTest.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/ContainerCreationException.java" afterPath="$PROJECT_DIR$/src/com/google/inject/ContainerCreationException.java" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/src/com/google/inject/Stopwatch.java" afterPath="" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/com/google/inject/FactoryTest.java" afterPath="$PROJECT_DIR$/test/com/google/inject/FactoryTest.java" />
     </list>
   </component>
   <component name="ChangeListSynchronizer" />
@@ -197,87 +211,10 @@
   </component>
   <component name="FileEditorManager">
     <leaf>
-      <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">
+      <file leaf-file-name="ContainerScope.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/com/google/inject/ContainerScope.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="48" column="2" selection-start="1514" selection-end="1514" vertical-scroll-proportion="0.53543305">
-              <folding>
-                <element signature="class#ConstantBindingBuilder#0;class#ContainerBuilder#0" expanded="false" />
-                <element signature="class#LinkedBindingBuilder#0;class#ContainerBuilder#0" expanded="false" />
-              </folding>
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="AbstractErrorHandler.java" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/com/google/inject/AbstractErrorHandler.java">
-          <provider selected="true" editor-type-id="text-editor">
-            <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="PreloadingTest.java" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/test/com/google/inject/PreloadingTest.java">
-          <provider selected="true" editor-type-id="text-editor">
-            <state line="0" column="28" selection-start="3" selection-end="28" vertical-scroll-proportion="0.0">
-              <folding>
-                <element signature="imports" expanded="true" />
-              </folding>
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="AbstractModule.java" pinned="false" current="true" current-in-tab="true">
-        <entry file="file://$PROJECT_DIR$/src/com/google/inject/AbstractModule.java">
-          <provider selected="true" editor-type-id="text-editor">
-            <state line="15" column="0" selection-start="596" selection-end="596" vertical-scroll-proportion="0.4015748">
-              <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="14" column="3" selection-start="595" selection-end="595" vertical-scroll-proportion="0.37480316">
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="ErrorMessage.java" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/com/google/inject/ErrorMessage.java">
-          <provider selected="true" editor-type-id="text-editor">
-            <state line="54" column="9" selection-start="1873" selection-end="1873" vertical-scroll-proportion="0.026771653">
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="ErrorHandlingTest.java" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/test/com/google/inject/ErrorHandlingTest.java">
-          <provider selected="true" editor-type-id="text-editor">
-            <state line="25" column="12" selection-start="441" selection-end="441" vertical-scroll-proportion="0.6692913">
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="Stopwatch.java" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/com/google/inject/util/Stopwatch.java">
-          <provider selected="true" editor-type-id="text-editor">
-            <state line="11" column="13" selection-start="226" selection-end="226" vertical-scroll-proportion="0.2944882">
-              <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="101" column="7" selection-start="3178" selection-end="3178" vertical-scroll-proportion="0.33228347">
+            <state line="14" column="3" selection-start="595" selection-end="595" vertical-scroll-proportion="0.31946307">
               <folding />
             </state>
           </provider>
@@ -286,52 +223,25 @@
       <file leaf-file-name="ErrorHandler.java" pinned="false" current="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/src/com/google/inject/ErrorHandler.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="8" column="3" selection-start="167" selection-end="167" vertical-scroll-proportion="0.21417323">
+            <state line="14" column="3" selection-start="595" selection-end="595" vertical-scroll-proportion="0.31946307">
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="AllTests.java" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/test/com/google/inject/AllTests.java">
+      <file leaf-file-name="ErrorHandlingTest.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/test/com/google/inject/ErrorHandlingTest.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="44" column="37" selection-start="1562" selection-end="1562" vertical-scroll-proportion="0.6425197">
+            <state line="14" column="3" selection-start="595" selection-end="595" vertical-scroll-proportion="0.31946307">
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="Key.java" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/com/google/inject/Key.java">
+      <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="153" column="22" selection-start="3934" selection-end="3934" vertical-scroll-proportion="0.41732284">
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="TypeLiteral.java" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/com/google/inject/TypeLiteral.java">
-          <provider selected="true" editor-type-id="text-editor">
-            <state line="150" column="18" selection-start="4385" selection-end="4385" vertical-scroll-proportion="1.0598425">
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="InternalToContextualFactoryAdapter.java" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/com/google/inject/InternalToContextualFactoryAdapter.java">
-          <provider selected="true" editor-type-id="text-editor">
-            <state line="21" column="18" selection-start="512" selection-end="512" vertical-scroll-proportion="0.5622047">
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="InternalFactoryToFactoryAdapter.java" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/com/google/inject/InternalFactoryToFactoryAdapter.java">
-          <provider selected="true" editor-type-id="text-editor">
-            <state line="15" column="34" selection-start="391" selection-end="391" vertical-scroll-proportion="0.4015748">
+            <state line="14" column="3" selection-start="595" selection-end="595" vertical-scroll-proportion="0.31946307">
               <folding />
             </state>
           </provider>
@@ -340,7 +250,133 @@
       <file leaf-file-name="FactoryToInternalFactoryAdapter.java" pinned="false" current="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/src/com/google/inject/FactoryToInternalFactoryAdapter.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="14" column="32" selection-start="397" selection-end="397" vertical-scroll-proportion="0.37480316">
+            <state line="14" column="3" selection-start="595" selection-end="595" vertical-scroll-proportion="0.31946307">
+              <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="14" column="3" selection-start="595" selection-end="595" vertical-scroll-proportion="0.31946307">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="InternalFactoryToFactoryAdapter.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/com/google/inject/InternalFactoryToFactoryAdapter.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="14" column="3" selection-start="595" selection-end="595" vertical-scroll-proportion="0.31946307">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="InternalToContextualFactoryAdapter.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/com/google/inject/InternalToContextualFactoryAdapter.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="14" column="3" selection-start="595" selection-end="595" vertical-scroll-proportion="0.31946307">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="PreloadingTest.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/test/com/google/inject/PreloadingTest.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="25" column="13" selection-start="772" selection-end="772" vertical-scroll-proportion="0.3248322">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="Scope.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/com/google/inject/Scope.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="14" column="3" selection-start="595" selection-end="595" vertical-scroll-proportion="0.31946307">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="Scopes.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/com/google/inject/Scopes.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="14" column="3" selection-start="595" selection-end="595" vertical-scroll-proportion="0.31946307">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="Stopwatch.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/com/google/inject/util/Stopwatch.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="18" column="16" selection-start="646" selection-end="646" vertical-scroll-proportion="0.41073826">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="AllTests.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/test/com/google/inject/AllTests.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="43" column="20" selection-start="1493" selection-end="1493" vertical-scroll-proportion="0.5248322">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="Context.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/com/google/inject/Context.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="42" column="0" selection-start="1227" selection-end="1227" vertical-scroll-proportion="0.63892615">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="ExternalContext.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/com/google/inject/ExternalContext.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="58" column="22" selection-start="1473" selection-end="1473" vertical-scroll-proportion="0.5704698">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="FactoryTest.java" pinned="false" current="true" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/test/com/google/inject/FactoryTest.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="57" column="29" selection-start="1701" selection-end="1701" vertical-scroll-proportion="0.86308724">
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="AbstractModule.java" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/com/google/inject/AbstractModule.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state line="76" column="20" selection-start="2139" selection-end="2139" vertical-scroll-proportion="0.46979865">
+              <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="949" column="32" selection-start="26963" selection-end="26963" vertical-scroll-proportion="1.0174496">
+              <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="376" column="73" selection-start="12295" selection-end="12295" vertical-scroll-proportion="0.47919464">
               <folding />
             </state>
           </provider>
@@ -563,7 +599,7 @@
     </key>
   </component>
   <component name="RestoreUpdateTree" />
-  <component name="RunManager" selected="JUnit.PreloadingTest">
+  <component name="RunManager" selected="JUnit.AllTests">
     <tempConfiguration default="false" name="PreloadingTest" type="JUnit" factoryName="JUnit" enabled="false" merge="false">
       <pattern value="com.google.inject.*" />
       <module name="guice" />
@@ -785,7 +821,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="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" />
@@ -793,7 +829,7 @@
       <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="3" />
       <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.14623655" order="1" />
       <window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3282876" order="8" />
-      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.38315988" order="2" />
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.38315988" order="2" />
       <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" order="2" />
       <window_info id="File View" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="6" />
       <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.39978448" order="0" />
@@ -892,112 +928,107 @@
     <option name="myLastEditedConfigurable" value="Default" />
   </component>
   <component name="editorHistoryManager">
+    <entry file="file://$PROJECT_DIR$/src/com/google/inject/FactoryToInternalFactoryAdapter.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="14" column="3" selection-start="595" selection-end="595" vertical-scroll-proportion="0.31946307">
+          <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="14" column="3" selection-start="595" selection-end="595" vertical-scroll-proportion="0.31946307">
+          <folding />
+        </state>
+      </provider>
+    </entry>
     <entry file="file://$PROJECT_DIR$/src/com/google/inject/InternalFactoryToFactoryAdapter.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="15" column="34" selection-start="391" selection-end="391" vertical-scroll-proportion="0.4015748">
+        <state line="14" column="3" selection-start="595" selection-end="595" vertical-scroll-proportion="0.31946307">
           <folding />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/src/com/google/inject/InternalToContextualFactoryAdapter.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="21" column="18" selection-start="512" selection-end="512" vertical-scroll-proportion="0.5622047">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/com/google/inject/TypeLiteral.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="150" column="18" selection-start="4385" selection-end="4385" vertical-scroll-proportion="1.0598425">
-          <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="153" column="22" selection-start="3934" selection-end="3934" vertical-scroll-proportion="0.41732284">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/com/google/inject/ErrorHandler.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="8" column="3" selection-start="167" selection-end="167" vertical-scroll-proportion="0.21417323">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/test/com/google/inject/ErrorHandlingTest.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="25" column="12" selection-start="441" selection-end="441" vertical-scroll-proportion="0.6692913">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/com/google/inject/util/Stopwatch.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="11" column="13" selection-start="226" selection-end="226" vertical-scroll-proportion="0.2944882">
-          <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="101" column="7" selection-start="3178" selection-end="3178" vertical-scroll-proportion="0.33228347">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/com/google/inject/ErrorMessage.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="54" column="9" selection-start="1873" selection-end="1873" vertical-scroll-proportion="0.026771653">
-          <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="44" column="37" selection-start="1562" selection-end="1562" vertical-scroll-proportion="0.6425197">
-          <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="14" column="3" selection-start="595" selection-end="595" vertical-scroll-proportion="0.37480316">
+        <state line="14" column="3" selection-start="595" selection-end="595" vertical-scroll-proportion="0.31946307">
           <folding />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/test/com/google/inject/PreloadingTest.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="0" column="28" selection-start="3" selection-end="28" vertical-scroll-proportion="0.0">
-          <folding>
-            <element signature="imports" expanded="true" />
-          </folding>
+        <state line="25" column="13" selection-start="772" selection-end="772" vertical-scroll-proportion="0.3248322">
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/com/google/inject/ContainerBuilder.java">
+    <entry file="file://$PROJECT_DIR$/src/com/google/inject/Scope.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="48" column="2" selection-start="1514" selection-end="1514" vertical-scroll-proportion="0.53543305">
-          <folding>
-            <element signature="class#ConstantBindingBuilder#0;class#ContainerBuilder#0" expanded="false" />
-            <element signature="class#LinkedBindingBuilder#0;class#ContainerBuilder#0" expanded="false" />
-          </folding>
+        <state line="14" column="3" selection-start="595" selection-end="595" vertical-scroll-proportion="0.31946307">
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/com/google/inject/AbstractErrorHandler.java">
+    <entry file="file://$PROJECT_DIR$/src/com/google/inject/Scopes.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
+        <state line="14" column="3" selection-start="595" selection-end="595" vertical-scroll-proportion="0.31946307">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/com/google/inject/util/Stopwatch.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="18" column="16" selection-start="646" selection-end="646" vertical-scroll-proportion="0.41073826">
           <folding />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/src/com/google/inject/AbstractModule.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="15" column="0" selection-start="596" selection-end="596" vertical-scroll-proportion="0.4015748">
+        <state line="76" column="20" selection-start="2139" selection-end="2139" vertical-scroll-proportion="0.46979865">
+          <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="43" column="20" selection-start="1493" selection-end="1493" vertical-scroll-proportion="0.5248322">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/com/google/inject/Context.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="42" column="0" selection-start="1227" selection-end="1227" vertical-scroll-proportion="0.63892615">
+          <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="949" column="32" selection-start="26963" selection-end="26963" vertical-scroll-proportion="1.0174496">
+          <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="376" column="73" selection-start="12295" selection-end="12295" vertical-scroll-proportion="0.47919464">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/com/google/inject/ExternalContext.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="58" column="22" selection-start="1473" selection-end="1473" vertical-scroll-proportion="0.5704698">
+          <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="57" column="29" selection-start="1701" selection-end="1701" vertical-scroll-proportion="0.86308724">
           <folding />
         </state>
       </provider>
diff --git a/src/com/google/inject/ContainerImpl.java b/src/com/google/inject/ContainerImpl.java
index 2ca249d..ce35435 100644
--- a/src/com/google/inject/ContainerImpl.java
+++ b/src/com/google/inject/ContainerImpl.java
@@ -358,6 +358,7 @@
 
     Iterator<Annotation[]> annotationsIterator =
         Arrays.asList(annotations).iterator();
+    int index = 0;
     for (Type parameterType : parameterTypes) {
       Inject annotation = findInject(annotationsIterator.next());
 
@@ -373,21 +374,21 @@
       }
 
       Key<?> key = Key.get(parameterType, name);
-      parameterInjectors.add(createParameterInjector(key, member));
+      parameterInjectors.add(createParameterInjector(key, member, index++));
     }
 
     return toArray(parameterInjectors);
   }
 
   <T> ParameterInjector<T> createParameterInjector(
-      Key<T> key, Member member) throws MissingDependencyException {
+      Key<T> key, Member member, int index) throws MissingDependencyException {
     InternalFactory<? extends T> factory = getFactory(member, key);
     if (factory == null) {
       throw new MissingDependencyException(key, member);
     }
 
     ExternalContext<T> externalContext =
-        ExternalContext.newInstance(member, key, this);
+        ExternalContext.newInstance(member, index, key, this);
     return new ParameterInjector<T>(externalContext, factory);
   }
 
diff --git a/src/com/google/inject/Context.java b/src/com/google/inject/Context.java
index b0e9658..d9a957f 100644
--- a/src/com/google/inject/Context.java
+++ b/src/com/google/inject/Context.java
@@ -38,6 +38,12 @@
   Member getMember();
 
   /**
+   * Gets the index of the parameter which is being injected. Returns
+   * {@code -1} if we aren't injecting a parameter.
+   */
+  int getParameterIndex();
+
+  /**
    * Gets the binding key for the object currently being retrieved.
    */
   Key<?> getKey();
diff --git a/src/com/google/inject/ExternalContext.java b/src/com/google/inject/ExternalContext.java
index 4e2c815..abea51d 100644
--- a/src/com/google/inject/ExternalContext.java
+++ b/src/com/google/inject/ExternalContext.java
@@ -30,11 +30,14 @@
   final Member member;
   final Key<T> key;
   final ContainerImpl container;
+  final int parameterIndex;
 
-  public ExternalContext(Member member, Key<T> key, ContainerImpl container) {
+  public ExternalContext(Member member, int paramterIndex, Key<T> key,
+      ContainerImpl container) {
     this.member = member;
     this.key = key;
     this.container = container;
+    this.parameterIndex = paramterIndex;
   }
 
   public Key<?> getKey() {
@@ -49,6 +52,10 @@
     return member;
   }
 
+  public int getParameterIndex() {
+    return parameterIndex;
+  }
+
   public String toString() {
     return "Context" + new LinkedHashMap<String, Object>() {{
       put("member", member);
@@ -57,8 +64,13 @@
     }}.toString();
   }
 
-  static <T> ExternalContext<T> newInstance(Member member, Key<T> key,
-      ContainerImpl container) {
-    return new ExternalContext<T>(member, key, container);
+  static <T> ExternalContext<T> newInstance(Member member,
+      Key<T> key, ContainerImpl container) {
+    return new ExternalContext<T>(member, -1, key, container);
+  }
+
+  static <T> ExternalContext<T> newInstance(Member member, int parameterIndex,
+      Key<T> key, ContainerImpl container) {
+    return new ExternalContext<T>(member, parameterIndex, key, container);
   }
 }
diff --git a/test/com/google/inject/FactoryTest.java b/test/com/google/inject/FactoryTest.java
index 2a4c070..0517ca3 100644
--- a/test/com/google/inject/FactoryTest.java
+++ b/test/com/google/inject/FactoryTest.java
@@ -26,6 +26,56 @@
  */
 public class FactoryTest extends TestCase {
 
+  public void testParameterIndex() throws ContainerCreationException {
+    ContainerBuilder cb = new ContainerBuilder();
+
+    cb.bind(Zero.class).to(new ContextualFactory<Zero>() {
+      public Zero get(Context context) {
+        assertEquals(0, context.getParameterIndex());
+        return new Zero();
+      }
+    });
+
+    cb.bind(One.class).to(new ContextualFactory<One>() {
+      public One get(Context context) {
+        assertEquals(1, context.getParameterIndex());
+        return new One();
+      }
+    });
+
+    cb.bind(NegativeOne.class).to(new ContextualFactory<NegativeOne>() {
+      public NegativeOne get(Context context) {
+        assertEquals(-1, context.getParameterIndex());
+        return new NegativeOne();
+      }
+    });
+
+    Container c = cb.create(false);
+
+    A a = c.getCreator(A.class).get();
+
+    assertNotNull(a.negativeOne);
+    assertTrue(a.initCalled);
+  }
+
+  static class A {
+
+    @Inject
+    NegativeOne negativeOne;
+
+    boolean initCalled;
+
+    @Inject void init(Zero zero, One one) {
+      assertNotNull(zero);
+      assertNotNull(one);
+      initCalled = true;
+    }
+  }
+
+  static class Zero {}
+  static class One {}
+  static class NegativeOne {}
+
   public void testInjection() throws Exception {
     ContainerBuilder cb = new ContainerBuilder();