Alternative solution for programmatic @Parameters lookup (avoids need to put @Parameters binding annotation on internal backing implementation and also works for other pure marker types)
diff --git a/org.eclipse.sisu.inject.tests/src/org/eclipse/sisu/wire/BeanImportTest.java b/org.eclipse.sisu.inject.tests/src/org/eclipse/sisu/wire/BeanImportTest.java
index ad2b76b..7c79279 100644
--- a/org.eclipse.sisu.inject.tests/src/org/eclipse/sisu/wire/BeanImportTest.java
+++ b/org.eclipse.sisu.inject.tests/src/org/eclipse/sisu/wire/BeanImportTest.java
@@ -17,6 +17,7 @@
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -31,6 +32,7 @@
import org.eclipse.sisu.BeanEntry;
import org.eclipse.sisu.Nullable;
+import org.eclipse.sisu.inject.BeanLocator;
import org.eclipse.sisu.inject.TypeArguments;
import org.eclipse.sisu.space.ClassSpace;
import org.eclipse.sisu.space.URLClassSpace;
@@ -787,4 +789,27 @@
assertSame( y, ( (PlaceholderString) grandchild.getInstance( Key.get( X.class, Names.named( "PS" ) ) ) ).fixed );
assertSame( y, ( (PlaceholderString) grandchild.getInstance( Key.get( X.class, Names.named( "PS" ) ) ) ).fuzzy );
}
+
+ public void testParametersLookup()
+ {
+ final BeanLocator locator = Guice.createInjector( new WireModule( new AbstractModule()
+ {
+ @Override
+ protected void configure()
+ {
+ bind( ParameterKeys.PROPERTIES ).toInstance( Collections.singletonMap( "Hello", "world!" ) );
+ }
+ } ) ).getInstance( BeanLocator.class );
+
+ @SuppressWarnings( { "rawtypes", "unchecked" } )
+ final Iterator<Map<?, ?>> itr = new EntryListAdapter( locator.locate( ParameterKeys.PROPERTIES ) ).iterator();
+
+ assertTrue( itr.hasNext() );
+
+ Map<?, ?> parameters = itr.next();
+ assertEquals( 1, parameters.size() );
+ assertEquals( "world!", parameters.get( "Hello" ) );
+
+ assertFalse( itr.hasNext() );
+ }
}
diff --git a/org.eclipse.sisu.inject/src/org/eclipse/sisu/Parameters.java b/org.eclipse.sisu.inject/src/org/eclipse/sisu/Parameters.java
index 2c041a3..b4b6a04 100644
--- a/org.eclipse.sisu.inject/src/org/eclipse/sisu/Parameters.java
+++ b/org.eclipse.sisu.inject/src/org/eclipse/sisu/Parameters.java
@@ -67,7 +67,7 @@
* will merge multiple @{@link Parameters} bindings; for maps by providing an aggregate view over all bound maps,
* for arrays by appending their elements into a single argument array.
*/
-@Target( value = { ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD, ElementType.TYPE } )
+@Target( value = { ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD } )
@Retention( RetentionPolicy.RUNTIME )
@Qualifier
public @interface Parameters
diff --git a/org.eclipse.sisu.inject/src/org/eclipse/sisu/inject/QualifyingStrategy.java b/org.eclipse.sisu.inject/src/org/eclipse/sisu/inject/QualifyingStrategy.java
index 75c0b17..43ab3d0 100644
--- a/org.eclipse.sisu.inject/src/org/eclipse/sisu/inject/QualifyingStrategy.java
+++ b/org.eclipse.sisu.inject/src/org/eclipse/sisu/inject/QualifyingStrategy.java
@@ -70,6 +70,20 @@
return qualifier;
}
+ // binding only has marker type; upgrade to pseudo-instance
+ if ( markerType.equals( binding.getKey().getAnnotationType() )
+ && markerType.getDeclaredMethods().length == 0 )
+ {
+ // this stub is all we need for internal processing
+ return new Annotation()
+ {
+ public Class<? extends Annotation> annotationType()
+ {
+ return markerType;
+ }
+ };
+ }
+
if ( binding instanceof ProviderKeyBinding<?> )
{
final Key<?> providerKey = ( (ProviderKeyBinding<?>) binding ).getProviderKey();
diff --git a/org.eclipse.sisu.inject/src/org/eclipse/sisu/wire/MergedProperties.java b/org.eclipse.sisu.inject/src/org/eclipse/sisu/wire/MergedProperties.java
index f706d2c..92e687b 100644
--- a/org.eclipse.sisu.inject/src/org/eclipse/sisu/wire/MergedProperties.java
+++ b/org.eclipse.sisu.inject/src/org/eclipse/sisu/wire/MergedProperties.java
@@ -18,12 +18,9 @@
import java.util.NoSuchElementException;
import java.util.Set;
-import org.eclipse.sisu.Parameters;
-
/**
* Delegating {@link Map} that merges a series of {@link Map}s into one consistent view.
*/
-@Parameters
final class MergedProperties
extends AbstractMap<Object, Object>
{