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/04/25 20:28:12 UTC
svn commit: r768572 - in /wicket/trunk/wicket-guice/src:
main/java/org/apache/wicket/guice/ test/java/org/apache/wicket/guice/
Author: ivaynberg
Date: Sat Apr 25 18:28:11 2009
New Revision: 768572
URL: http://svn.apache.org/viewvc?rev=768572&view=rev
Log:
WICKET-2241 Guice integration doesn't honour optional bindings
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
wicket/trunk/wicket-guice/src/test/java/org/apache/wicket/guice/GuiceInjectorTest.java
wicket/trunk/wicket-guice/src/test/java/org/apache/wicket/guice/TestComponent.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=768572&r1=768571&r2=768572&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 Sat Apr 25 18:28:11 2009
@@ -104,14 +104,15 @@
Field[] currentFields = current.getDeclaredFields();
for (final Field field : currentFields)
{
- if (!Modifier.isStatic(field.getModifiers()) &&
- field.getAnnotation(Inject.class) != null)
+ 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));
+ new GuiceProxyTargetLocator(field, bindingAnnotation,
+ injectAnnotation.optional()));
if (!field.isAccessible())
{
@@ -136,8 +137,8 @@
Method[] currentMethods = current.getDeclaredMethods();
for (final Method method : currentMethods)
{
- if (!Modifier.isStatic(method.getModifiers()) &&
- method.getAnnotation(Inject.class) != null)
+ Inject injectAnnotation = method.getAnnotation(Inject.class);
+ if (!Modifier.isStatic(method.getModifiers()) && injectAnnotation != null)
{
Annotation[][] paramAnnotations = method.getParameterAnnotations();
Class< ? >[] paramTypes = method.getParameterTypes();
@@ -158,7 +159,8 @@
{
Annotation bindingAnnotation = findBindingAnnotation(paramAnnotations[i]);
args[i] = LazyInitProxyFactory.createProxy(paramTypes[i],
- new GuiceProxyTargetLocator(method, i, bindingAnnotation));
+ new GuiceProxyTargetLocator(method, i, bindingAnnotation,
+ injectAnnotation.optional()));
}
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=768572&r1=768571&r2=768572&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 Sat Apr 25 18:28:11 2009
@@ -25,6 +25,7 @@
import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.proxy.IProxyTargetLocator;
+import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.TypeLiteral;
@@ -34,23 +35,28 @@
private final Annotation bindingAnnotation;
+ private final boolean optional;
+
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)
+ GuiceProxyTargetLocator(Field field, Annotation bindingAnnotation, boolean optional)
{
this.bindingAnnotation = bindingAnnotation;
+ this.optional = optional;
data = new String[2];
data[0] = field.getDeclaringClass().getName();
data[1] = field.getName();
argIndex = -1;
}
- GuiceProxyTargetLocator(Method method, int argIndex, Annotation bindingAnnotation)
+ GuiceProxyTargetLocator(Method method, int argIndex, Annotation bindingAnnotation,
+ boolean optional)
{
this.bindingAnnotation = bindingAnnotation;
+ this.optional = optional;
data = new String[2 + method.getParameterTypes().length];
data[0] = method.getDeclaringClass().getName();
data[1] = method.getName();
@@ -105,6 +111,16 @@
{
key = Key.get(TypeLiteral.get(type), bindingAnnotation);
}
- return holder.getInjector().getInstance(key);
+
+ Injector injector = holder.getInjector();
+
+ // if the Inject annotation is marked optional and no binding is found
+ // then skip this injection (WICKET-2241)
+ if (optional && injector.getBinding(key) == null)
+ {
+ return null;
+ }
+
+ return injector.getInstance(key);
}
}
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=768572&r1=768571&r2=768572&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 Sat Apr 25 18:28:11 2009
@@ -80,14 +80,16 @@
Field[] currentFields = current.getDeclaredFields();
for (final Field field : currentFields)
{
- if (field.getAnnotation(Inject.class) != null)
+ Inject injectAnnotation = field.getAnnotation(Inject.class);
+ if (injectAnnotation != null)
{
actualDoInject = true;
try
{
Annotation bindingAnnotation = findBindingAnnotation(field.getAnnotations());
Object proxy = LazyInitProxyFactory.createProxy(field.getType(),
- new GuiceProxyTargetLocator(field, bindingAnnotation));
+ new GuiceProxyTargetLocator(field, bindingAnnotation,
+ injectAnnotation.optional()));
if (!field.isAccessible())
{
field.setAccessible(true);
@@ -112,7 +114,8 @@
Method[] currentMethods = current.getDeclaredMethods();
for (final Method method : currentMethods)
{
- if (method.getAnnotation(Inject.class) != null)
+ Inject injectAnnotation = method.getAnnotation(Inject.class);
+ if (injectAnnotation != null)
{
actualDoInject = true;
Annotation[][] paramAnnotations = method.getParameterAnnotations();
@@ -134,7 +137,8 @@
{
Annotation bindingAnnotation = findBindingAnnotation(paramAnnotations[i]);
args[i] = LazyInitProxyFactory.createProxy(paramTypes[i],
- new GuiceProxyTargetLocator(method, i, bindingAnnotation));
+ new GuiceProxyTargetLocator(method, i, bindingAnnotation,
+ injectAnnotation.optional()));
}
catch (MoreThanOneBindingException e)
{
Modified: wicket/trunk/wicket-guice/src/test/java/org/apache/wicket/guice/GuiceInjectorTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-guice/src/test/java/org/apache/wicket/guice/GuiceInjectorTest.java?rev=768572&r1=768571&r2=768572&view=diff
==============================================================================
--- wicket/trunk/wicket-guice/src/test/java/org/apache/wicket/guice/GuiceInjectorTest.java (original)
+++ wicket/trunk/wicket-guice/src/test/java/org/apache/wicket/guice/GuiceInjectorTest.java Sat Apr 25 18:28:11 2009
@@ -115,6 +115,7 @@
private void doChecksForComponent(TestComponent component)
{
assertEquals(ITestService.RESULT, component.getInjectedField().getString());
+ assertEquals(null, component.getInjectedOptionalField());
assertEquals(ITestService.RESULT_RED, component.getInjectedFieldRed().getString());
assertEquals(ITestService.RESULT_BLUE, component.getInjectedFieldBlue().getString());
assertEquals(ITestService.RESULT, component.getInjectedMethod().getString());
Modified: wicket/trunk/wicket-guice/src/test/java/org/apache/wicket/guice/TestComponent.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-guice/src/test/java/org/apache/wicket/guice/TestComponent.java?rev=768572&r1=768571&r2=768572&view=diff
==============================================================================
--- wicket/trunk/wicket-guice/src/test/java/org/apache/wicket/guice/TestComponent.java (original)
+++ wicket/trunk/wicket-guice/src/test/java/org/apache/wicket/guice/TestComponent.java Sat Apr 25 18:28:11 2009
@@ -23,6 +23,7 @@
import com.google.inject.Inject;
import com.google.inject.Provider;
+import com.google.inject.name.Named;
public class TestComponent extends Component
{
@@ -31,6 +32,10 @@
@Inject
private ITestService injectedField;
+ @Inject(optional = true)
+ @Named("optional")
+ private String injectedOptionalField;
+
@Inject
@Red
private ITestService injectedFieldRed;
@@ -91,6 +96,16 @@
return injectedFieldProvider;
}
+ /**
+ * Gets injectedOptionalField.
+ *
+ * @return injectedOptionalField
+ */
+ public String getInjectedOptionalField()
+ {
+ return injectedOptionalField;
+ }
+
public Map<String, String> getInjectedTypeLiteralField()
{
return injectedTypeLiteralField;