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