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();