in tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/util/InternalUtils.java [296:386]
public static void injectIntoFields(final Object object, final ObjectLocator locator,
final InjectionResources resources, OperationTracker tracker)
{
Class clazz = object.getClass();
while (clazz != Object.class)
{
Field[] fields = clazz.getDeclaredFields();
for (final Field f : fields)
{
// Ignore all static and final fields.
int fieldModifiers = f.getModifiers();
if (Modifier.isStatic(fieldModifiers) || Modifier.isFinal(fieldModifiers))
continue;
final AnnotationProvider ap = new AnnotationProvider()
{
@Override
public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
{
return f.getAnnotation(annotationClass);
}
};
String description = String.format("Calculating possible injection value for field %s.%s (%s)",
clazz.getName(), f.getName(),
PlasticUtils.toTypeName(f.getType()));
tracker.run(description, new Runnable()
{
@Override
public void run()
{
final Class<?> fieldType = f.getType();
InjectService is = ap.getAnnotation(InjectService.class);
if (is != null)
{
inject(object, f, locator.getService(is.value(), fieldType));
return;
}
if (ap.getAnnotation(Inject.class) != null || ap.getAnnotation(InjectResource.class) != null)
{
Object value = resources.findResource(fieldType, f.getGenericType());
if (value != null)
{
inject(object, f, value);
return;
}
inject(object, f, locator.getObject(fieldType, ap));
return;
}
if (ap.getAnnotation(javax.inject.Inject.class) != null)
{
Named named = ap.getAnnotation(Named.class);
if (named == null)
{
Object value = resources.findResource(fieldType, f.getGenericType());
if (value != null)
{
inject(object, f, value);
return;
}
inject(object, f, locator.getObject(fieldType, ap));
} else
{
inject(object, f, locator.getService(named.value(), fieldType));
}
return;
}
// Ignore fields that do not have the necessary annotation.
}
});
}
clazz = clazz.getSuperclass();
}
}