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 2017/12/19 21:11:58 UTC
svn commit: r1818721 - in /openwebbeans/trunk/webbeans-impl/src:
main/java/org/apache/webbeans/config/BeansDeployer.java
test/java/org/apache/webbeans/test/managed/specialized/SpecializeDeactivationTest.java
Author: struberg
Date: Tue Dec 19 21:11:58 2017
New Revision: 1818721
URL: http://svn.apache.org/viewvc?rev=1818721&view=rev
Log:
OWB-1215 further improve producermethod specialisation logic
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/managed/specialized/SpecializeDeactivationTest.java
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java?rev=1818721&r1=1818720&r2=1818721&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java Tue Dec 19 21:11:58 2017
@@ -976,18 +976,6 @@ public class BeansDeployer
List<ProducerMethodBean> producerMethodBeans = beans.stream()
.filter(ProducerMethodBean.class::isInstance)
.map(ProducerMethodBean.class::cast)
- .sorted((e1, e2) ->
- {
- if (e1.getBeanClass().isAssignableFrom(e2.getBeanClass()))
- {
- return 1;
- }
- else if (e1.equals(e2))
- {
- return 0;
- }
- return -1;
- })
.collect(Collectors.toList());
checkSpecializedProducerMethodConditions(producerMethodBeans);
@@ -1000,10 +988,16 @@ public class BeansDeployer
continue;
}
- for (int j = i+1; j < producerMethodBeans.size(); j++)
+ for (int j = 0; j < producerMethodBeans.size(); j++)
{
ProducerMethodBean<?> otherProducerMethodBean = producerMethodBeans.get(j);
+ if (i==j)
+ {
+ // makes no sense to compare with ourselves
+ continue;
+ }
+
if (!otherProducerMethodBean.isEnabled())
{
// already disabled
@@ -1026,13 +1020,6 @@ public class BeansDeployer
otherProducerMethodBean.setEnabled(false);
}
}
- else
- {
- // since all the producermethods are sorted we can stop
- // once we leave the 'block' of superclasses for a bean
- break;
- }
-
}
}
}
Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/managed/specialized/SpecializeDeactivationTest.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/managed/specialized/SpecializeDeactivationTest.java?rev=1818721&r1=1818720&r2=1818721&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/managed/specialized/SpecializeDeactivationTest.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/managed/specialized/SpecializeDeactivationTest.java Tue Dec 19 21:11:58 2017
@@ -70,10 +70,10 @@ public class SpecializeDeactivationTest
@Test
public void specializeProducers()
{
- startContainer(Arrays.<Class<?>>asList(Init.class, API.class, Prod1.class, Prod2.class, Spe1.class),
- Collections.<String>emptyList(), true);
+ startContainer(Arrays.asList(Init.class, API.class, Prod1.class, Prod2.class, Spe1.class, Prod3.class, Prod4.class),
+ Collections.emptyList(), true);
- assertEquals(2, init.init());
+ assertEquals(4, init.init());
assertTrue(SpeImpl1.called);
assertTrue(Impl2.called);
}
@@ -83,6 +83,11 @@ public class SpecializeDeactivationTest
void init();
}
+ public interface API2
+ {
+ void init();
+ }
+
public static class Prod1
{
@Produces
@@ -90,6 +95,32 @@ public class SpecializeDeactivationTest
{
return new Impl1();
}
+
+ @Produces
+ public API2 api2()
+ {
+ return new Impl1();
+ }
+ }
+
+ public static class Prod3
+ {
+ @Produces
+ public API api1()
+ {
+ return new Impl1();
+ }
+
+ }
+
+ public static class Prod4
+ {
+ @Produces
+ public API api1()
+ {
+ return new Impl1();
+ }
+
}
public static class Spe1 extends Prod1
@@ -101,6 +132,14 @@ public class SpecializeDeactivationTest
{
return new SpeImpl1();
}
+
+ @Produces
+ @Override
+ @Specializes
+ public API2 api2()
+ {
+ return new SpeImpl1();
+ }
}
public static class Prod2
@@ -110,9 +149,15 @@ public class SpecializeDeactivationTest
{
return new Impl2();
}
+
+ @Produces
+ public API2 api2()
+ {
+ return new Impl2();
+ }
}
- public static class Impl1 implements API
+ public static class Impl1 implements API, API2
{
public static boolean called = false;
@@ -135,7 +180,7 @@ public class SpecializeDeactivationTest
}
}
- public static class Impl2 implements API
+ public static class Impl2 implements API, API2
{
public static boolean called = false;