do
{
Field[] currentFields = current.getDeclaredFields();
for (final Field field : currentFields)
{
Inject injectAnnotation = field.getAnnotation(Inject.class);
if (!Modifier.isStatic(field.getModifiers()) && injectAnnotation != null)
{
try
{
Annotation bindingAnnotation = findBindingAnnotation(field.getAnnotations());
Object proxy = LazyInitProxyFactory.createProxy(field.getType(),
new GuiceProxyTargetLocator(field, bindingAnnotation,
injectAnnotation.optional()));
if (!field.isAccessible())
{
field.setAccessible(true);
}
field.set(object, proxy);
}
catch (IllegalAccessException e)
{
throw new WicketRuntimeException("Error Guice-injecting field " +
field.getName() + " in " + object, e);
}
catch (MoreThanOneBindingException e)
{
throw new RuntimeException(
"Can't have more than one BindingAnnotation on field " +
field.getName() + " of class " +
object.getClass().getName());
}
}
}
Method[] currentMethods = current.getDeclaredMethods();
for (final Method method : currentMethods)
{
Inject injectAnnotation = method.getAnnotation(Inject.class);
if (!Modifier.isStatic(method.getModifiers()) && injectAnnotation != null)
{
Annotation[][] paramAnnotations = method.getParameterAnnotations();
Class< ? >[] paramTypes = method.getParameterTypes();
Type[] genericParamTypes = method.getGenericParameterTypes();
Object[] args = new Object[paramTypes.length];
for (int i = 0; i < paramTypes.length; i++)
{
Type paramType;
if (genericParamTypes[i] instanceof ParameterizedType)
{
paramType = ((ParameterizedType)genericParamTypes[i]).getRawType();
}
else
{
paramType = paramTypes[i];
}
try
{
Annotation bindingAnnotation = findBindingAnnotation(paramAnnotations[i]);
args[i] = LazyInitProxyFactory.createProxy(paramTypes[i],
new GuiceProxyTargetLocator(method, i, bindingAnnotation,
injectAnnotation.optional()));
}
catch (MoreThanOneBindingException e)
{
throw new RuntimeException(
"Can't have more than one BindingAnnotation on parameter " + i +