You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by iv...@apache.org on 2009/02/02 09:01:37 UTC
svn commit: r739936 - in
/wicket/trunk/wicket-guice/src/main/java/org/apache/wicket/guice:
GuiceComponentInjector.java GuiceProxyTargetLocator.java
GuiceTypeStore.java InjectionFlagCachingGuiceComponentInjector.java
Author: ivaynberg
Date: Mon Feb 2 08:01:37 2009
New Revision: 739936
URL: http://svn.apache.org/viewvc?rev=739936&view=rev
Log:
WICKET-1403
Removed:
wicket/trunk/wicket-guice/src/main/java/org/apache/wicket/guice/GuiceTypeStore.java
Modified:
wicket/trunk/wicket-guice/src/main/java/org/apache/wicket/guice/GuiceComponentInjector.java
wicket/trunk/wicket-guice/src/main/java/org/apache/wicket/guice/GuiceProxyTargetLocator.java
wicket/trunk/wicket-guice/src/main/java/org/apache/wicket/guice/InjectionFlagCachingGuiceComponentInjector.java
Modified: wicket/trunk/wicket-guice/src/main/java/org/apache/wicket/guice/GuiceComponentInjector.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-guice/src/main/java/org/apache/wicket/guice/GuiceComponentInjector.java?rev=739936&r1=739935&r2=739936&view=diff
==============================================================================
--- wicket/trunk/wicket-guice/src/main/java/org/apache/wicket/guice/GuiceComponentInjector.java (original)
+++ wicket/trunk/wicket-guice/src/main/java/org/apache/wicket/guice/GuiceComponentInjector.java Mon Feb 2 08:01:37 2009
@@ -94,7 +94,6 @@
public GuiceComponentInjector(Application app, Injector injector)
{
app.setMetaData(GuiceInjectorHolder.INJECTOR_KEY, new GuiceInjectorHolder(injector));
- app.setMetaData(GuiceTypeStore.TYPESTORE_KEY, new GuiceTypeStore());
}
public void inject(Object object)
@@ -112,8 +111,7 @@
{
Annotation bindingAnnotation = findBindingAnnotation(field.getAnnotations());
Object proxy = LazyInitProxyFactory.createProxy(field.getType(),
- new GuiceProxyTargetLocator(field.getGenericType(),
- bindingAnnotation));
+ new GuiceProxyTargetLocator(field, bindingAnnotation));
if (!field.isAccessible())
{
@@ -160,8 +158,7 @@
{
Annotation bindingAnnotation = findBindingAnnotation(paramAnnotations[i]);
args[i] = LazyInitProxyFactory.createProxy(paramTypes[i],
- new GuiceProxyTargetLocator(genericParamTypes[i],
- bindingAnnotation));
+ new GuiceProxyTargetLocator(method, i, bindingAnnotation));
}
catch (MoreThanOneBindingException e)
{
Modified: wicket/trunk/wicket-guice/src/main/java/org/apache/wicket/guice/GuiceProxyTargetLocator.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-guice/src/main/java/org/apache/wicket/guice/GuiceProxyTargetLocator.java?rev=739936&r1=739935&r2=739936&view=diff
==============================================================================
--- wicket/trunk/wicket-guice/src/main/java/org/apache/wicket/guice/GuiceProxyTargetLocator.java (original)
+++ wicket/trunk/wicket-guice/src/main/java/org/apache/wicket/guice/GuiceProxyTargetLocator.java Mon Feb 2 08:01:37 2009
@@ -17,9 +17,12 @@
package org.apache.wicket.guice;
import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
import java.lang.reflect.Type;
import org.apache.wicket.Application;
+import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.proxy.IProxyTargetLocator;
import com.google.inject.Key;
@@ -29,28 +32,66 @@
{
private static final long serialVersionUID = 1L;
- private final String typeName;
private final Annotation bindingAnnotation;
- GuiceProxyTargetLocator(Type type, Annotation bindingAnnotation)
+ private final String[] data;
+
+ /** index of argument in the method being injected, or -1 for field */
+ private final int argIndex;
+
+ GuiceProxyTargetLocator(Field field, Annotation bindingAnnotation)
{
- // I'm not too happy about
- typeName = type.toString();
this.bindingAnnotation = bindingAnnotation;
+ data = new String[2];
+ data[0] = field.getDeclaringClass().getName();
+ data[1] = field.getName();
+ argIndex = -1;
+ }
- GuiceTypeStore typeStore = (GuiceTypeStore)Application.get().getMetaData(
- GuiceTypeStore.TYPESTORE_KEY);
- typeStore.setType(typeName, type);
+ GuiceProxyTargetLocator(Method method, int argIndex, Annotation bindingAnnotation)
+ {
+ this.bindingAnnotation = bindingAnnotation;
+ data = new String[2 + method.getParameterTypes().length];
+ data[0] = method.getDeclaringClass().getName();
+ data[1] = method.getName();
+ for (int i = 0; i < method.getParameterTypes().length; i++)
+ {
+ data[2 + i] = method.getParameterTypes()[i].getName();
+ }
+ this.argIndex = argIndex;
}
public Object locateProxyTarget()
{
- final GuiceInjectorHolder holder = (GuiceInjectorHolder)Application.get().getMetaData(
+ final GuiceInjectorHolder holder = Application.get().getMetaData(
GuiceInjectorHolder.INJECTOR_KEY);
- final GuiceTypeStore typeStore = (GuiceTypeStore)Application.get().getMetaData(
- GuiceTypeStore.TYPESTORE_KEY);
- final Type type = typeStore.getType(typeName);
+ final Type type;
+ try
+ {
+
+ Class< ? > clazz = Class.forName(data[0]);
+ if (argIndex < 0)
+ {
+ final Field field = clazz.getDeclaredField(data[1]);
+ type = field.getGenericType();
+ }
+ else
+ {
+ Class< ? >[] paramTypes = new Class[data.length - 2];
+ for (int i = 2; i < data.length; i++)
+ {
+ paramTypes[2 - i] = Class.forName(data[i]);
+ }
+ final Method method = clazz.getDeclaredMethod(data[1], paramTypes);
+ type = method.getGenericParameterTypes()[argIndex];
+ }
+ }
+ catch (Exception e)
+ {
+ throw new WicketRuntimeException("Error accessing member: " + data[1] + " of class: " +
+ data[0], e);
+ }
// using TypeLiteral to retrieve the key gives us automatic support for
// Providers and other injectable TypeLiterals
Modified: wicket/trunk/wicket-guice/src/main/java/org/apache/wicket/guice/InjectionFlagCachingGuiceComponentInjector.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-guice/src/main/java/org/apache/wicket/guice/InjectionFlagCachingGuiceComponentInjector.java?rev=739936&r1=739935&r2=739936&view=diff
==============================================================================
--- wicket/trunk/wicket-guice/src/main/java/org/apache/wicket/guice/InjectionFlagCachingGuiceComponentInjector.java (original)
+++ wicket/trunk/wicket-guice/src/main/java/org/apache/wicket/guice/InjectionFlagCachingGuiceComponentInjector.java Mon Feb 2 08:01:37 2009
@@ -87,8 +87,7 @@
{
Annotation bindingAnnotation = findBindingAnnotation(field.getAnnotations());
Object proxy = LazyInitProxyFactory.createProxy(field.getType(),
- new GuiceProxyTargetLocator(field.getGenericType(),
- bindingAnnotation));
+ new GuiceProxyTargetLocator(field, bindingAnnotation));
if (!field.isAccessible())
{
field.setAccessible(true);
@@ -135,8 +134,7 @@
{
Annotation bindingAnnotation = findBindingAnnotation(paramAnnotations[i]);
args[i] = LazyInitProxyFactory.createProxy(paramTypes[i],
- new GuiceProxyTargetLocator(genericParamTypes[i],
- bindingAnnotation));
+ new GuiceProxyTargetLocator(method, i, bindingAnnotation));
}
catch (MoreThanOneBindingException e)
{