WICKET-5482 Wicket-guice doesn't support @javax.inject.Named annotations

Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/0a271d8a
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/0a271d8a
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/0a271d8a

Branch: refs/heads/master
Commit: 0a271d8a9a843358cc23ae7afa3d8baaa62e5c2b
Parents: 517dfb0
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Sun Feb 2 10:05:32 2014 +0100
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Sun Feb 2 10:06:43 2014 +0100

----------------------------------------------------------------------
 .../wicket/guice/GuiceFieldValueFactory.java    |  5 ++-
 .../apache/wicket/guice/GuiceInjectorTest.java  | 39 ++++++++++++++++++++
 .../wicket/guice/JavaxInjectTestComponent.java  | 21 +++++++++++
 .../org/apache/wicket/guice/TestComponent.java  | 20 ++++++++++
 .../wicket/guice/TestComponentInterface.java    |  4 ++
 5 files changed, 88 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/0a271d8a/wicket-guice/src/main/java/org/apache/wicket/guice/GuiceFieldValueFactory.java
----------------------------------------------------------------------
diff --git 
a/wicket-guice/src/main/java/org/apache/wicket/guice/GuiceFieldValueFactory.java
 
b/wicket-guice/src/main/java/org/apache/wicket/guice/GuiceFieldValueFactory.java
index d2b68ac..ed137f5 100644
--- 
a/wicket-guice/src/main/java/org/apache/wicket/guice/GuiceFieldValueFactory.java
+++ 
b/wicket-guice/src/main/java/org/apache/wicket/guice/GuiceFieldValueFactory.java
@@ -20,6 +20,8 @@ import java.lang.annotation.Annotation;
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
 
+import javax.inject.Qualifier;
+
 import com.google.inject.BindingAnnotation;
 import com.google.inject.Inject;
 import org.apache.wicket.WicketRuntimeException;
@@ -120,7 +122,8 @@ public class GuiceFieldValueFactory implements 
IFieldValueFactory
                // Work out if we have a BindingAnnotation on this parameter.
                for (Annotation annotation : annotations)
                {
-                       if 
(annotation.annotationType().getAnnotation(BindingAnnotation.class) != null)
+                       if 
(annotation.annotationType().getAnnotation(BindingAnnotation.class) != null ||
+                               
annotation.annotationType().getAnnotation(Qualifier.class) != null)
                        {
                                if (bindingAnnotation != null)
                                {

http://git-wip-us.apache.org/repos/asf/wicket/blob/0a271d8a/wicket-guice/src/test/java/org/apache/wicket/guice/GuiceInjectorTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-guice/src/test/java/org/apache/wicket/guice/GuiceInjectorTest.java 
b/wicket-guice/src/test/java/org/apache/wicket/guice/GuiceInjectorTest.java
index f9b4f36..a55c25e 100644
--- a/wicket-guice/src/test/java/org/apache/wicket/guice/GuiceInjectorTest.java
+++ b/wicket-guice/src/test/java/org/apache/wicket/guice/GuiceInjectorTest.java
@@ -16,13 +16,17 @@
  */
 package org.apache.wicket.guice;
 
+import java.lang.annotation.Annotation;
 import java.util.HashMap;
 import java.util.Map;
 
+import javax.inject.Named;
+
 import com.google.inject.Binder;
 import com.google.inject.Module;
 import com.google.inject.Provider;
 import com.google.inject.TypeLiteral;
+import com.google.inject.name.Names;
 import org.apache.wicket.Session;
 import org.apache.wicket.ThreadContext;
 import org.apache.wicket.mock.MockApplication;
@@ -31,6 +35,7 @@ import org.apache.wicket.protocol.http.WebSession;
 import org.apache.wicket.protocol.http.mock.MockServletContext;
 import org.apache.wicket.request.Url;
 import org.apache.wicket.core.util.lang.WicketObjects;
+import org.apache.wicket.util.lang.Args;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -83,6 +88,12 @@ public class GuiceInjectorTest extends Assert
                                                        return strings;
                                                }
                                        });
+
+                                       
binder.bind(String.class).annotatedWith(Names.named("named1")).toInstance("NAMED_1");
+                                       
binder.bind(String.class).annotatedWith(Names.named("named2")).toInstance("NAMED_2");
+
+                                       
binder.bind(String.class).annotatedWith(new 
Jsr330Named("named1")).toInstance("NAMED_1");
+                                       
binder.bind(String.class).annotatedWith(new 
Jsr330Named("named2")).toInstance("NAMED_2");
                                }
 
                        });
@@ -125,6 +136,9 @@ public class GuiceInjectorTest extends Assert
 
                assertEquals(ITestService.RESULT,
                        
component.getInjectedTypeLiteralField().get(ITestService.RESULT));
+
+               assertEquals("NAMED_1", component.getNamed1());
+               assertEquals("NAMED_2", component.getNamed2());
        }
 
        protected TestNoComponentInterface newTestNoComponent()
@@ -136,4 +150,29 @@ public class GuiceInjectorTest extends Assert
        {
                return new TestComponent(id);
        }
+
+       /**
+        * Helper class to make binding of an instance of javax.inject.Named 
less verbose
+        */
+       private static class Jsr330Named implements Named
+       {
+               private final String name;
+
+               private Jsr330Named(String name)
+               {
+                       this.name = name;
+               }
+
+               @Override
+               public String value()
+               {
+                       return name;
+               }
+
+               @Override
+               public Class<? extends Annotation> annotationType()
+               {
+                       return Named.class;
+               }
+       }
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/0a271d8a/wicket-guice/src/test/java/org/apache/wicket/guice/JavaxInjectTestComponent.java
----------------------------------------------------------------------
diff --git 
a/wicket-guice/src/test/java/org/apache/wicket/guice/JavaxInjectTestComponent.java
 
b/wicket-guice/src/test/java/org/apache/wicket/guice/JavaxInjectTestComponent.java
index 7afd71e..5792be5 100644
--- 
a/wicket-guice/src/test/java/org/apache/wicket/guice/JavaxInjectTestComponent.java
+++ 
b/wicket-guice/src/test/java/org/apache/wicket/guice/JavaxInjectTestComponent.java
@@ -19,6 +19,7 @@ package org.apache.wicket.guice;
 import java.util.Map;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 
 import com.google.inject.Provider;
 import org.apache.wicket.Component;
@@ -46,6 +47,14 @@ public class JavaxInjectTestComponent extends Component 
implements TestComponent
        @Inject
        private Map<String, String> injectedTypeLiteralField;
 
+       @Inject
+       @Named("named1")
+       private String named1;
+
+       @Inject
+       @Named("named2")
+       private String named2;
+
        private final JavaxInjectTestNoComponent noComponent;
 
        /**
@@ -107,6 +116,18 @@ public class JavaxInjectTestComponent extends Component 
implements TestComponent
                return null;
        }
 
+       @Override
+       public String getNamed1()
+       {
+               return named1;
+       }
+
+       @Override
+       public String getNamed2()
+       {
+               return named2;
+       }
+
        /**
         * @return injectedTypeLiteralField
         */

http://git-wip-us.apache.org/repos/asf/wicket/blob/0a271d8a/wicket-guice/src/test/java/org/apache/wicket/guice/TestComponent.java
----------------------------------------------------------------------
diff --git 
a/wicket-guice/src/test/java/org/apache/wicket/guice/TestComponent.java 
b/wicket-guice/src/test/java/org/apache/wicket/guice/TestComponent.java
index 6d065fc..01e5b70 100644
--- a/wicket-guice/src/test/java/org/apache/wicket/guice/TestComponent.java
+++ b/wicket-guice/src/test/java/org/apache/wicket/guice/TestComponent.java
@@ -50,6 +50,14 @@ public class TestComponent extends Component implements 
TestComponentInterface
        @Inject
        private Map<String, String> injectedTypeLiteralField;
 
+       @Inject()
+       @Named("named1")
+       private String named1;
+
+       @Inject()
+       @Named("named2")
+       private String named2;
+
        private final TestNoComponent noComponent;
 
        /**
@@ -111,6 +119,18 @@ public class TestComponent extends Component implements 
TestComponentInterface
                return injectedOptionalField;
        }
 
+       @Override
+       public String getNamed1()
+       {
+               return named1;
+       }
+
+       @Override
+       public String getNamed2()
+       {
+               return named2;
+       }
+
        /**
         * @return injectedTypeLiteralField
         */

http://git-wip-us.apache.org/repos/asf/wicket/blob/0a271d8a/wicket-guice/src/test/java/org/apache/wicket/guice/TestComponentInterface.java
----------------------------------------------------------------------
diff --git 
a/wicket-guice/src/test/java/org/apache/wicket/guice/TestComponentInterface.java
 
b/wicket-guice/src/test/java/org/apache/wicket/guice/TestComponentInterface.java
index 5bc5be9..c7fb85b 100644
--- 
a/wicket-guice/src/test/java/org/apache/wicket/guice/TestComponentInterface.java
+++ 
b/wicket-guice/src/test/java/org/apache/wicket/guice/TestComponentInterface.java
@@ -27,6 +27,10 @@ public interface TestComponentInterface
 
        String getInjectedOptionalField();
 
+       String getNamed1();
+
+       String getNamed2();
+
        ITestService getInjectedFieldRed();
 
        ITestService getInjectedFieldBlue();

Reply via email to