Attached is a patch that add my issue to the test case commited in january
for TAP5-2029 by Thiago. It fails as expected :D

2014-10-24 17:39 GMT+02:00 Lance Java <lance.j...@googlemail.com>:

> If I was to take an educated guess, I'd guess that the solution will
> involve checking java.lang.reflect.Method.isBridge() similar to TAP5-1493.
>
From 2df25d8e256233621a1683ea59c3bf77fcb54a01 Mon Sep 17 00:00:00 2001
From: Charlouze <m...@charlouze.com>
Date: Fri, 24 Oct 2014 18:02:56 +0200
Subject: [PATCH] TAP5-2029 - Test case involving generic interface

---
 .../specs/MethodInvocationGetAnnotationSpec.groovy | 28 +++++++++++++++
 .../tapestry5/ioc/internal/AdviceModule.java       |  7 ++++
 .../NonAnnotatedGenericServiceInterface.java       |  9 +++++
 .../NonAnnotatedGenericSetServiceImpl.java         | 42 ++++++++++++++++++++++
 .../NonAnnotatedGenericSetServiceInterface.java    |  4 +++
 5 files changed, 90 insertions(+)
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/NonAnnotatedGenericServiceInterface.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/NonAnnotatedGenericSetServiceImpl.java
 create mode 100644 tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/NonAnnotatedGenericSetServiceInterface.java

diff --git a/tapestry-ioc/src/test/groovy/ioc/specs/MethodInvocationGetAnnotationSpec.groovy b/tapestry-ioc/src/test/groovy/ioc/specs/MethodInvocationGetAnnotationSpec.groovy
index b4e4c0e..5e4a8a9 100644
--- a/tapestry-ioc/src/test/groovy/ioc/specs/MethodInvocationGetAnnotationSpec.groovy
+++ b/tapestry-ioc/src/test/groovy/ioc/specs/MethodInvocationGetAnnotationSpec.groovy
@@ -5,6 +5,7 @@ import org.apache.tapestry5.ioc.annotations.Advise
 import org.apache.tapestry5.ioc.internal.AdviceModule
 import org.apache.tapestry5.ioc.internal.AnnotatedServiceInterface
 import org.apache.tapestry5.ioc.internal.DecoratorModule
+import org.apache.tapestry5.ioc.internal.NonAnnotatedGenericSetServiceInterface
 import org.apache.tapestry5.ioc.internal.NonAnnotatedServiceInterface
 import org.apache.tapestry5.ioc.internal.TestAdvice
 
@@ -62,6 +63,15 @@ class MethodInvocationGetAnnotationSpec extends AbstractRegistrySpecification {
     def annotatedService = registry.getService AnnotatedServiceInterface
     def annotatedResult = annotatedService.execute(0);
     def annotatedMethod = annotatedService.getClass().getMethod("execute", int.class);
+
+    def nonAnnotatedGenSetService = registry.getService NonAnnotatedGenericSetServiceInterface.class
+    def nonAnnotatedGenSetResult1 = nonAnnotatedGenSetService.execute1(0)
+    def nonAnnotatedGenSetMethod1 = nonAnnotatedGenSetService.getClass().getMethod("execute1", int.class)
+    def nonAnnotatedGenSetResult2 = nonAnnotatedGenSetService.execute2("execute2")
+    // We need to look for a method that accept Object instead of string (maybe because of generic...)
+    def nonAnnotatedGenSetMethod2 = nonAnnotatedGenSetService.getClass().getMethod("execute2", Object.class)
+    def nonAnnotatedGenSetResult3 = nonAnnotatedGenSetService.execute3(0)
+    def nonAnnotatedGenSetMethod3 = nonAnnotatedGenSetService.getClass().getMethod("execute3", int.class)
     
     then:
     nonAnnotatedMethod != null
@@ -80,6 +90,24 @@ class MethodInvocationGetAnnotationSpec extends AbstractRegistrySpecification {
     annotatedService.getClass().getAnnotation(ReorderProperties.class).value().equals("reorder")
     annotatedResult == TestAdvice.ANNOTATION_FOUND
 
+    nonAnnotatedGenSetMethod1 != null
+    nonAnnotatedGenSetMethod1.getAnnotation(Advise.class) != null
+    nonAnnotatedGenSetMethod1.getAnnotation(Advise.class).id().equals("id")
+    nonAnnotatedGenSetMethod1.getAnnotation(Advise.class).serviceInterface() == NonAnnotatedServiceInterface.class
+    nonAnnotatedGenSetResult1 == TestAdvice.ANNOTATION_FOUND
+
+    nonAnnotatedGenSetMethod2 != null
+    nonAnnotatedGenSetMethod2.getAnnotation(Advise.class) != null
+    nonAnnotatedGenSetMethod2.getAnnotation(Advise.class).id().equals("id")
+    nonAnnotatedGenSetMethod2.getAnnotation(Advise.class).serviceInterface() == NonAnnotatedServiceInterface.class
+    nonAnnotatedGenSetResult2 == TestAdvice.ANNOTATION_FOUND
+
+    nonAnnotatedGenSetMethod3 != null
+    nonAnnotatedGenSetMethod3.getAnnotation(Advise.class) != null
+    nonAnnotatedGenSetMethod3.getAnnotation(Advise.class).id().equals("id")
+    nonAnnotatedGenSetMethod3.getAnnotation(Advise.class).serviceInterface() == NonAnnotatedServiceInterface.class
+    nonAnnotatedGenSetResult3 == TestAdvice.ANNOTATION_FOUND
+
   }
 
 }
\ No newline at end of file
diff --git a/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/AdviceModule.java b/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/AdviceModule.java
index 466b528..0e0a186 100644
--- a/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/AdviceModule.java
+++ b/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/AdviceModule.java
@@ -24,6 +24,8 @@ public class AdviceModule
     {
         binder.bind(NonAnnotatedServiceInterface.class, NonAnnotatedServiceInterfaceImpl.class);
         binder.bind(AnnotatedServiceInterface.class, AnnotatedServiceInterfaceImpl.class);
+        binder.bind(NonAnnotatedGenericSetServiceInterface.class,
+                NonAnnotatedGenericSetServiceImpl.class);
     }
 
     @Advise(serviceInterface = NonAnnotatedServiceInterface.class)
@@ -38,4 +40,9 @@ public class AdviceModule
         methodAdviceReceiver.adviseAllMethods(new TestAdvice());
     }
 
+    @Advise(serviceInterface = NonAnnotatedGenericSetServiceInterface.class)
+    public static void adviseNonAnnotatedGenericSetServiceInterface(
+            final MethodAdviceReceiver methodAdviceReceiver) {
+        methodAdviceReceiver.adviseAllMethods(new TestAdvice());
+    }
 }
diff --git a/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/NonAnnotatedGenericServiceInterface.java b/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/NonAnnotatedGenericServiceInterface.java
new file mode 100644
index 0000000..fbbb44d
--- /dev/null
+++ b/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/NonAnnotatedGenericServiceInterface.java
@@ -0,0 +1,9 @@
+package org.apache.tapestry5.ioc.internal;
+
+public interface NonAnnotatedGenericServiceInterface<T> {
+    String execute1(int i);
+
+    String execute2(T t);
+
+    T execute3(int i);
+}
diff --git a/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/NonAnnotatedGenericSetServiceImpl.java b/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/NonAnnotatedGenericSetServiceImpl.java
new file mode 100644
index 0000000..092f7cb
--- /dev/null
+++ b/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/NonAnnotatedGenericSetServiceImpl.java
@@ -0,0 +1,42 @@
+package org.apache.tapestry5.ioc.internal;
+
+import org.apache.tapestry5.ioc.annotations.Advise;
+import org.apache.tapestry5.ioc.annotations.IntermediateType;
+
+public class NonAnnotatedGenericSetServiceImpl implements NonAnnotatedGenericSetServiceInterface {
+    @Override
+    @Advise(id = "id", serviceInterface = NonAnnotatedServiceInterface.class)
+    public String execute1(@IntermediateType(String.class) final int i) {
+        try {
+            System.out.println();
+        } catch (final Exception e) {
+            e.printStackTrace();
+        }
+
+        return null;
+    }
+
+    @Override
+    @Advise(id = "id", serviceInterface = NonAnnotatedServiceInterface.class)
+    public String execute2(@IntermediateType(String.class) final String t) {
+        try {
+            System.out.println();
+        } catch (final Exception e) {
+            e.printStackTrace();
+        }
+
+        return null;
+    }
+
+    @Override
+    @Advise(id = "id", serviceInterface = NonAnnotatedServiceInterface.class)
+    public String execute3(@IntermediateType(String.class) int i) {
+        try {
+            System.out.println();
+        } catch (final Exception e) {
+            e.printStackTrace();
+        }
+
+        return null;
+    }
+}
diff --git a/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/NonAnnotatedGenericSetServiceInterface.java b/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/NonAnnotatedGenericSetServiceInterface.java
new file mode 100644
index 0000000..009fae4
--- /dev/null
+++ b/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/NonAnnotatedGenericSetServiceInterface.java
@@ -0,0 +1,4 @@
+package org.apache.tapestry5.ioc.internal;
+
+public interface NonAnnotatedGenericSetServiceInterface extends NonAnnotatedGenericServiceInterface<String> {
+}
-- 
1.9.1

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to