You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by rm...@apache.org on 2014/09/04 18:26:36 UTC

svn commit: r1622509 - in /openwebbeans/trunk/webbeans-impl/src: main/java/org/apache/webbeans/event/ContainerEventObserverMethodImpl.java test/java/org/apache/webbeans/test/portable/WithAnnotationTest.java

Author: rmannibucau
Date: Thu Sep  4 16:26:36 2014
New Revision: 1622509

URL: http://svn.apache.org/r1622509
Log:
Fixes OWB-997 supporting generics in ProcessAnnotatedType observers using WithAnnotations

Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ContainerEventObserverMethodImpl.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/portable/WithAnnotationTest.java

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ContainerEventObserverMethodImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ContainerEventObserverMethodImpl.java?rev=1622509&r1=1622508&r2=1622509&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ContainerEventObserverMethodImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ContainerEventObserverMethodImpl.java Thu Sep  4 16:26:36 2014
@@ -27,6 +27,8 @@ import javax.enterprise.inject.spi.Defin
 import javax.enterprise.inject.spi.ProcessAnnotatedType;
 import javax.enterprise.inject.spi.WithAnnotations;
 import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
 
 public class ContainerEventObserverMethodImpl<T> extends ObserverMethodImpl<T>
 {
@@ -39,7 +41,12 @@ public class ContainerEventObserverMetho
         WithAnnotations withAnnotationsAnn = annotatedObservesParameter.getAnnotation(WithAnnotations.class);
         if (withAnnotationsAnn != null)
         {
-            if (annotatedObservesParameter.getBaseType().equals(ProcessAnnotatedType.class))
+            Type baseType = annotatedObservesParameter.getBaseType();
+            if (ParameterizedType.class.isInstance(baseType))
+            {
+                baseType = ParameterizedType.class.cast(baseType).getRawType();
+            }
+            if (baseType.equals(ProcessAnnotatedType.class))
             {
                 withAnnotations = withAnnotationsAnn.value();
             }

Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/portable/WithAnnotationTest.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/portable/WithAnnotationTest.java?rev=1622509&r1=1622508&r2=1622509&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/portable/WithAnnotationTest.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/portable/WithAnnotationTest.java Thu Sep  4 16:26:36 2014
@@ -43,17 +43,20 @@ public class WithAnnotationTest extends 
     public void testWithAnnotation()
     {
         WithAnnotationExtension.scannedClasses = 0;
+        WithAnnotationExtension.one = 0;
 
         addExtension(new WithAnnotationExtension());
         startContainer(WithoutAnyAnnotation.class, WithAnnotatedClass.class, WithAnnotatedField.class, WithAnnotatedMethod.class);
 
         Assert.assertEquals(3, WithAnnotationExtension.scannedClasses);
+        Assert.assertEquals(1, WithAnnotationExtension.one);
     }
 
 
     public static class WithAnnotationExtension implements Extension
     {
         public static int scannedClasses = 0;
+        public static int one = 0;
 
         public void processClassess(@Observes @WithAnnotations(MyAnnoation.class) ProcessAnnotatedType pat)
         {
@@ -64,6 +67,11 @@ public class WithAnnotationTest extends 
         {
             throw new IllegalStateException("This observer must not get called by the container!");
         }
+
+        public void noIssueWithGenericsOWB997(@Observes @WithAnnotations(MyAnnoation.class) ProcessAnnotatedType<WithAnnotatedClass> pat)
+        {
+            one++;
+        }
     }
 
     @Retention(RetentionPolicy.RUNTIME)