You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by ar...@apache.org on 2012/10/13 11:18:25 UTC

svn commit: r1397805 - in /openwebbeans/trunk/webbeans-impl/src: main/java/org/apache/webbeans/util/ test/java/org/apache/webbeans/newtests/events/observer/

Author: arne
Date: Sat Oct 13 09:18:24 2012
New Revision: 1397805

URL: http://svn.apache.org/viewvc?rev=1397805&view=rev
Log:
OWB-711 Fix overriding of an observer method without declaring @Observes

Added:
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/events/observer/BeanA.java
      - copied, changed from r1397297, openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/events/observer/Bean.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/events/observer/BeanB.java
Removed:
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/events/observer/Bean.java
Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/AnnotationUtil.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/events/observer/EventTest.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/events/observer/Superclass.java

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/AnnotationUtil.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/AnnotationUtil.java?rev=1397805&r1=1397804&r2=1397805&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/AnnotationUtil.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/AnnotationUtil.java Sat Oct 13 09:18:24 2012
@@ -627,7 +627,8 @@ public final class AnnotationUtil
     {
         Asserts.nullCheckForClass(clazz);
         Asserts.assertNotNull(annotation, "Annotation argument can not be null");
-        List<Method> list = new ArrayList<Method>();
+        List<Method> methodsWithParameterAnnotation = new ArrayList<Method>();
+        List<Method> allMethods = new ArrayList<Method>();
 
         do
         {
@@ -635,15 +636,16 @@ public final class AnnotationUtil
 
             for (Method m : methods)
             {
-                if (hasMethodParameterAnnotation(m, annotation) && !isMethodOverridden(m, list))
+                if (hasMethodParameterAnnotation(m, annotation) && !isMethodOverridden(m, allMethods))
                 {
-                    list.add(m);
+                    methodsWithParameterAnnotation.add(m);
                 }
+                allMethods.add(m);
             }
             clazz = clazz.getSuperclass();
         } while (clazz != null && clazz != Object.class);
 
-        Method[] rMethod = list.toArray(new Method[list.size()]);
+        Method[] rMethod = methodsWithParameterAnnotation.toArray(new Method[methodsWithParameterAnnotation.size()]);
 
         return rMethod;
     }

Copied: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/events/observer/BeanA.java (from r1397297, openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/events/observer/Bean.java)
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/events/observer/BeanA.java?p2=openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/events/observer/BeanA.java&p1=openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/events/observer/Bean.java&r1=1397297&r2=1397805&rev=1397805&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/events/observer/Bean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/events/observer/BeanA.java Sat Oct 13 09:18:24 2012
@@ -23,11 +23,9 @@ import java.io.Serializable;
 
 import javax.enterprise.context.ApplicationScoped;
 import javax.enterprise.event.Observes;
-import javax.enterprise.inject.Specializes;
 
-@Specializes
 @ApplicationScoped
-public class Bean extends Superclass implements Serializable
+public class BeanA extends Superclass implements Serializable
 {
     private static final long serialVersionUID = 821164664338581947L;
 

Added: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/events/observer/BeanB.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/events/observer/BeanB.java?rev=1397805&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/events/observer/BeanB.java (added)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/events/observer/BeanB.java Sat Oct 13 09:18:24 2012
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.webbeans.newtests.events.observer;
+
+
+import java.io.Serializable;
+
+import javax.enterprise.context.ApplicationScoped;
+
+@ApplicationScoped
+public class BeanB extends Superclass implements Serializable
+{
+    private static final long serialVersionUID = 821164664338581947L;
+
+    protected void observeTestEvent(TestEvent testEvent)
+    {
+        testEvent.addInvocation(getBeanName());
+    }
+
+    @Override
+    public String getBeanName()
+    {
+        return super.getBeanName() + ":[subclass]";
+    }
+}

Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/events/observer/EventTest.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/events/observer/EventTest.java?rev=1397805&r1=1397804&r2=1397805&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/events/observer/EventTest.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/events/observer/EventTest.java Sat Oct 13 09:18:24 2012
@@ -28,11 +28,11 @@ import org.junit.Test;
 public class EventTest extends AbstractUnitTest {
 
     @Test
-    public void testObserverMethodsInSpecializedBeans()
+    public void testOverriddenObserverMethodsInSubclasses()
     {
         Collection<Class<?>> beanClasses = new ArrayList<Class<?>>();
         beanClasses.add(Superclass.class);
-        beanClasses.add(Bean.class);
+        beanClasses.add(BeanA.class);
         startContainer(beanClasses, null);
 
         TestEvent testEvent = new TestEvent();
@@ -43,4 +43,20 @@ public class EventTest extends AbstractU
 
         shutDownContainer();
     }
+
+    @Test
+    public void testSubclassRemovesObserverAnnotationByOverriding()
+    {
+        Collection<Class<?>> beanClasses = new ArrayList<Class<?>>();
+        beanClasses.add(Superclass.class);
+        beanClasses.add(BeanB.class);
+        startContainer(beanClasses, null);
+
+        TestEvent testEvent = new TestEvent();
+        getBeanManager().fireEvent(testEvent);
+
+        Assert.assertEquals(0, testEvent.getCalledObservers().size());
+
+        shutDownContainer();
+    }
 }

Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/events/observer/Superclass.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/events/observer/Superclass.java?rev=1397805&r1=1397804&r2=1397805&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/events/observer/Superclass.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/events/observer/Superclass.java Sat Oct 13 09:18:24 2012
@@ -20,7 +20,7 @@ package org.apache.webbeans.newtests.eve
 
 import javax.enterprise.event.Observes;
 
-public class Superclass
+public abstract class Superclass
 {
 
     protected void observeTestEvent(@Observes TestEvent testEvent)