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)