@Uses annotation with a parameterized collection causes InstantiationException
------------------------------------------------------------------------------
Key: QI-33
URL: http://issues.ops4j.org/jira/browse/QI-33
Project: Qi4j
Issue Type: Bug
Affects Versions: 0.2
Reporter: Sonny Gill
Assignee: Rickard Öberg
Using @Uses with a parameterized Collection causes an exception.
This is most likely linked to http://issues.ops4j.org/jira/browse/QI-32
From what I can see the problem is at -
UsesInjectionProviderFactory (line 57)
if( resolution.getInjectionModel().getInjectionClass().isAssignableFrom(
usedObject.getClass() ) )
Here resolution.getInjectionModel().getInjectionClass() returns a String
whereas it should be ArrayList<String>
Test case
--------------------------------------------------------------------------------------------------------------------------------
import java.util.ArrayList;
import org.qi4j.bootstrap.ApplicationFactory;
import org.qi4j.bootstrap.AssemblyException;
import org.qi4j.bootstrap.ModuleAssembly;
import org.qi4j.bootstrap.SingletonAssembler;
import org.qi4j.composite.Composite;
import org.qi4j.composite.CompositeBuilder;
import org.qi4j.composite.CompositeBuilderFactory;
import org.qi4j.composite.Mixins;
import org.qi4j.composite.ObjectBuilderFactory;
import org.qi4j.composite.scope.Structure;
import org.qi4j.composite.scope.Uses;
import org.qi4j.runtime.structure.ApplicationInstance;
@Mixins ( MyMixin.class )
public interface TestCase extends Composite, AnotherComposite
{
public static class Main
{
@Structure
CompositeBuilderFactory cbf;
public Main() throws Exception
{
SingletonAssembler assembler = new SingletonAssembler()
{
public void assemble( ModuleAssembly module ) throws
AssemblyException
{
module.addComposites( TestCase.class );
module.addObjects( Main.class );
}
};
final ApplicationInstance application = new
ApplicationFactory().newApplication(assembler).
newApplicationInstance( "Test" );
application.activate();
ObjectBuilderFactory obf = application.getLayerInstances().get( 0
).getModuleInstances().
get( 0 ).getStructureContext().getObjectBuilderFactory();
obf.newObjectBuilder( Main.class ).injectTo( this );
CompositeBuilder<TestCase> builder = cbf.newCompositeBuilder(
TestCase.class );
ArrayList<String> list = new ArrayList<String>();
list.add( "Hello" );
list.add( "Bye" );
builder.use( list );
TestCase TestCase = builder.newInstance();
TestCase.sayHello();
}
public static void main( String[] args ) throws Exception
{
new Main();
}
}
}
interface AnotherComposite {
void sayHello();
}
class MyMixin implements AnotherComposite
{
public MyMixin(){}
@Uses ArrayList<String> messages;
public void sayHello()
{
System.out.println( messages );
}
}
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.ops4j.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
_______________________________________________
qi4j-dev mailing list
[email protected]
http://lists.ops4j.org/mailman/listinfo/qi4j-dev