@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

Reply via email to