You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by st...@apache.org on 2015/05/22 10:33:05 UTC
svn commit: r1681043 - in /openwebbeans/trunk/webbeans-impl/src:
main/java/org/apache/webbeans/util/GenericsUtil.java
test/java/org/apache/webbeans/test/events/generics/
test/java/org/apache/webbeans/test/events/generics/GenericObserverTest.java
Author: struberg
Date: Fri May 22 08:33:05 2015
New Revision: 1681043
URL: http://svn.apache.org/r1681043
Log:
OWB-1065 fix Incorrect matching of parameterized events
txs to Harald Wellmann for the catch and ideas for the unit test.
Added:
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/events/generics/
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/events/generics/GenericObserverTest.java (with props)
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/GenericsUtil.java
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/GenericsUtil.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/GenericsUtil.java?rev=1681043&r1=1681042&r2=1681043&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/GenericsUtil.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/GenericsUtil.java Fri May 22 08:33:05 2015
@@ -321,6 +321,12 @@ public final class GenericsUtil
{
return false;
}
+ else if (isDelegateOrEvent && injectionPointTypeArgument instanceof Class && beanTypeArgument instanceof Class)
+ {
+ // if no wildcard type was given then we require a real exact match.
+ return injectionPointTypeArgument.equals(beanTypeArgument);
+
+ }
else if (!isAssignableFrom(isDelegateOrEvent, false, injectionPointTypeArgument, beanTypeArgument))
{
return false;
Added: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/events/generics/GenericObserverTest.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/events/generics/GenericObserverTest.java?rev=1681043&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/events/generics/GenericObserverTest.java (added)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/events/generics/GenericObserverTest.java Fri May 22 08:33:05 2015
@@ -0,0 +1,114 @@
+/*
+ * 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.test.events.generics;
+
+import javax.enterprise.context.RequestScoped;
+import javax.enterprise.event.Event;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.webbeans.test.AbstractUnitTest;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Tests assignability of raw and parameterized event types.
+ * See CDI-1.2 spec 10.3.1. "Assignability of type variables, raw and parameterized types"
+ */
+public class GenericObserverTest extends AbstractUnitTest
+{
+
+ @Test
+ public void testGenericObserverAssignability()
+ {
+ startContainer(GenericEventBean1.class);
+
+ GenericEventBean1 instance = getInstance(GenericEventBean1.class);
+ instance.fireEvent();
+
+ Assert.assertTrue(instance.isIntegerObserved());
+ Assert.assertFalse(instance.isUnintendedListObserved());
+ Assert.assertFalse(instance.isNumberObserved());
+ Assert.assertTrue(instance.isExtendsNumberObserved());
+ }
+
+ @RequestScoped
+ public static class GenericEventBean1
+ {
+ private boolean integerObserved = false;
+ private boolean numberObserved = false;
+ private boolean extendsNumberObserved = false;
+ private boolean unintendedListObserved = false;
+
+
+ private @Inject Event<List<Integer>> integerEvent;
+
+ public void fireEvent()
+ {
+ List<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3));
+ integerEvent.fire(list);
+ }
+
+ public void observeTotallyDifferentList(@Observes List<Map> mapList)
+ {
+ unintendedListObserved = true;
+ }
+
+ public void observeParameterizedEventInteger(@Observes List<Integer> integerList)
+ {
+ integerObserved = true;
+ }
+
+ public void observeParameterizedEventNumber(@Observes List<Number> integerList)
+ {
+ numberObserved = true;
+ }
+
+ public void observeParameterizedEventExtendsNumber(@Observes List<? extends Number> integerList)
+ {
+ extendsNumberObserved = true;
+ }
+
+
+ public boolean isIntegerObserved()
+ {
+ return integerObserved;
+ }
+
+ public boolean isNumberObserved()
+ {
+ return numberObserved;
+ }
+
+ public boolean isExtendsNumberObserved()
+ {
+ return extendsNumberObserved;
+ }
+
+ public boolean isUnintendedListObserved()
+ {
+ return unintendedListObserved;
+ }
+ }
+}
Propchange: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/events/generics/GenericObserverTest.java
------------------------------------------------------------------------------
svn:eol-style = native