private void eventuallyInjectStatic( Class clazz, String controllersLayerName, String controllersModuleName )
{
// QUID What about Scala support?
Layer controllersLayer = application.findLayer( controllersLayerName );
Module controllersModule = application.findModule( controllersLayerName, controllersModuleName );
try
{
for( Field field : clazz.getDeclaredFields() )
{
if( Modifier.isStatic( field.getModifiers() ) )
{
if( field.isAnnotationPresent( Structure.class ) )
{
if( field.getType().isAssignableFrom( Qi4jSPI.class )
|| field.getType().isAssignableFrom( Qi4j.class ) )
{
inject( field, qi4j );
}
else
{
if( field.getType().isAssignableFrom( Application.class ) )
{
inject( field, application );
}
else
{
if( field.getType().isAssignableFrom( Layer.class ) )
{
inject( field, controllersLayer );
}
else
{
if( field.getType().isAssignableFrom( Module.class )
|| field.getType().isAssignableFrom( TransientBuilderFactory.class )
|| field.getType().isAssignableFrom( UnitOfWorkFactory.class )
|| field.getType().isAssignableFrom( ServiceFinder.class ) )
{
inject( field, controllersModule );
}
}
}
}
}
else
{
if( field.isAnnotationPresent( Service.class ) )
{
if( field.getType().isAssignableFrom( Iterable.class ) )
{
inject( field, controllersModule.findServices( field.getType() ) );
}
else
{
if( field.getType().isAssignableFrom( ServiceReference.class ) )
{
inject( field, controllersModule.findService( field.getType() ) );
}
else
{
inject( field, controllersModule.findService( field.getType() ).get() );
}
}
}
}
}