[aries-cdi] 03/03: [ARIES-2020] basic Discovery optimizations

2020-10-30 Thread rmannibucau
This is an automated email from the ASF dual-hosted git repository.

rmannibucau pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git

commit 2d071cbc932da248f56d937aa913890870c69d70
Author: Romain Manni-Bucau 
AuthorDate: Fri Oct 30 11:20:34 2020 +0100

[ARIES-2020] basic Discovery optimizations
---
 .../internal/annotated/AnnotatedImpl.java  | 26 ++-
 .../internal/annotated/CachingAnnotated.java   | 29 
 .../container/internal/container/Discovery.java| 44 ++-
 .../cdi/container/internal/util/Annotates.java | 85 ++
 .../aries/cdi/container/internal/util/Maps.java| 19 -
 .../cdi/container/internal/util/AnnotatesTest.java | 39 ++
 .../org/apache/aries/cdi/test/cases/TrimTests.java |  6 +-
 .../java/org/apache/aries/cdi/test/tb17/A.java |  1 -
 8 files changed, 172 insertions(+), 77 deletions(-)

diff --git 
a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/AnnotatedImpl.java
 
b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/AnnotatedImpl.java
index 463fc05..f7c498b 100644
--- 
a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/AnnotatedImpl.java
+++ 
b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/AnnotatedImpl.java
@@ -20,18 +20,22 @@ import java.lang.annotation.Annotation;
 import java.lang.reflect.AnnotatedElement;
 import java.lang.reflect.Type;
 import java.util.Arrays;
+import java.util.List;
 import java.util.Set;
 
 import javax.enterprise.inject.spi.Annotated;
 
 import org.apache.aries.cdi.container.internal.util.Reflection;
 
-public class AnnotatedImpl implements Annotated {
+public class AnnotatedImpl implements CachingAnnotated {
 
private final Type _baseType;
private final AnnotatedElement _annotatedElement;
private final Set _typeClosure;
 
+   private Class beanScope;
+   private List collectedAnnotations;
+
public AnnotatedImpl(final Type baseType, final AnnotatedElement 
annotatedElement) {
_baseType = baseType;
_annotatedElement = annotatedElement;
@@ -39,6 +43,26 @@ public class AnnotatedImpl implements Annotated {
}
 
@Override
+   public List getCollectedAnnotations() {
+   return collectedAnnotations;
+   }
+
+   @Override
+   public void setCollectedAnnotations(final List 
collectedAnnotations) {
+   this.collectedAnnotations = collectedAnnotations;
+   }
+
+   @Override
+   public Class getBeanScope() {
+   return beanScope;
+   }
+
+   @Override
+   public void setBeanScope(Class beanScope) {
+   this.beanScope = beanScope;
+   }
+
+   @Override
public Type getBaseType() {
return _baseType;
}
diff --git 
a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/CachingAnnotated.java
 
b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/CachingAnnotated.java
new file mode 100644
index 000..9de0236
--- /dev/null
+++ 
b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/CachingAnnotated.java
@@ -0,0 +1,29 @@
+/**
+ * Licensed 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.aries.cdi.container.internal.annotated;
+
+import javax.enterprise.inject.spi.Annotated;
+import java.lang.annotation.Annotation;
+import java.util.List;
+
+// because Discovery run should be free and not cost as much as a CDI starts 
we try to reduce its cost by caching meta
+public interface CachingAnnotated extends Annotated {
+// tested early and generally later too so cache it
+Class getBeanScope();
+void setBeanScope(Class value);
+
+// used in all "tests" so worth a cache
+List getCollectedAnnotations();
+void setCollectedAnnotations(List annotations);
+}
diff --git 
a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Discovery.java
 
b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Discovery.java
index 07f56b6..71f8d18 100644
--- 
a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Discovery.java
+++ 
b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Discovery.java
@@ -20,6 +20,7 @@ import java.lang.reflect.Type;
 import 

[aries-cdi] branch master updated (9242268 -> 2d071cb)

2020-10-30 Thread rmannibucau
This is an automated email from the ASF dual-hosted git repository.

rmannibucau pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git.


from 9242268  [ARIES-2017] reduce unsafe warnings for owb impl
 new 08ebf6c  [ARIES-2018] don't create document builder and xpath if no 
beans.xml is seen
 new e2521fa  [ARIES-2019] basic @Vetoed handling
 new 2d071cb  [ARIES-2020] basic Discovery optimizations

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../internal/annotated/AnnotatedImpl.java  | 26 ++-
 ...otatedMethodImpl.java => CachingAnnotated.java} | 26 +++
 .../container/internal/container/Discovery.java| 83 ++---
 .../internal/model/BeansModelBuilder.java  |  7 ++
 .../cdi/container/internal/util/Annotates.java | 85 ++
 .../aries/cdi/container/internal/util/Maps.java| 19 -
 .../cdi/container/internal/util/AnnotatesTest.java | 39 +-
 .../org/apache/aries/cdi/test/cases/TrimTests.java |  6 +-
 .../java/org/apache/aries/cdi/test/tb17/A.java |  1 -
 9 files changed, 161 insertions(+), 131 deletions(-)
 copy 
cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/annotated/{AnnotatedMethodImpl.java
 => CachingAnnotated.java} (51%)
 copy cdi-itests/src/main/java/org/apache/aries/cdi/test/tb8/ContainerBean.java 
=> 
cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/util/AnnotatesTest.java
 (52%)



[aries-cdi] 01/03: [ARIES-2018] don't create document builder and xpath if no beans.xml is seen

2020-10-30 Thread rmannibucau
This is an automated email from the ASF dual-hosted git repository.

rmannibucau pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git

commit 08ebf6c474f1ec1d99fd8bed38b461c8b7806b0b
Author: Romain Manni-Bucau 
AuthorDate: Fri Oct 30 09:40:31 2020 +0100

[ARIES-2018] don't create document builder and xpath if no beans.xml is seen
---
 .../container/internal/container/Discovery.java| 37 --
 1 file changed, 20 insertions(+), 17 deletions(-)

diff --git 
a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Discovery.java
 
b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Discovery.java
index 96e68ce..709d46b 100644
--- 
a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Discovery.java
+++ 
b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Discovery.java
@@ -88,21 +88,23 @@ public class Discovery {
 
private static final List BIND_TYPES = 
Arrays.asList(BindService.class, BindBeanServiceObjects.class, 
BindServiceReference.class);
 
-   static final DocumentBuilderFactory dbf = 
DocumentBuilderFactory.newInstance();
-   static final XPathFactory   xpf = 
XPathFactory.newInstance();
-   static final XPathExpressiontrimExpression;
-   static final XPathExpressionexcludeExpression;
+   private static final class LazyXml { // when not needed, don't create 
that
+   static final DocumentBuilderFactory dbf = 
DocumentBuilderFactory.newInstance();
+   static final XPathFactory   xpf = 
XPathFactory.newInstance();
+   static final XPathExpressiontrimExpression;
+   static final XPathExpressionexcludeExpression;
 
-   static {
-   try {
-   
dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl;, true);
-   dbf.setXIncludeAware(false);
-   dbf.setExpandEntityReferences(false);
-   XPath xPath = xpf.newXPath();
-   trimExpression = xPath.compile("boolean(/beans/trim)");
-   excludeExpression = 
xPath.compile("/beans/scan/exclude");
-   } catch (Throwable t) {
-   throw Exceptions.duck(t);
+   static {
+   try {
+   
dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl;, true);
+   dbf.setXIncludeAware(false);
+   dbf.setExpandEntityReferences(false);
+   XPath xPath = xpf.newXPath();
+   trimExpression = 
xPath.compile("boolean(/beans/trim)");
+   excludeExpression = 
xPath.compile("/beans/scan/exclude");
+   } catch (Throwable t) {
+   throw Exceptions.duck(t);
+   }
}
}
 
@@ -460,7 +462,7 @@ public class Discovery {
 
boolean checkTrim(Document document) {
try {
-   return 
Boolean.class.cast(trimExpression.evaluate(document, XPathConstants.BOOLEAN));
+   return 
Boolean.class.cast(LazyXml.trimExpression.evaluate(document, 
XPathConstants.BOOLEAN));
} catch (XPathExpressionException e) {
throw Exceptions.duck(e);
}
@@ -470,7 +472,8 @@ public class Discovery {
try {
List excludes = new ArrayList<>();
 
-   NodeList excludeNodes = 
NodeList.class.cast(excludeExpression.evaluate(document, 
XPathConstants.NODESET));
+   NodeList excludeNodes = NodeList.class.cast(
+   
LazyXml.excludeExpression.evaluate(document, XPathConstants.NODESET));
 
for (int i = 0; i < excludeNodes.getLength(); i++) {
Element excludeElement = 
(Element)excludeNodes.item(i);
@@ -487,7 +490,7 @@ public class Discovery {
 
Document readXMLResource(URL resource) {
try {
-   DocumentBuilder db = dbf.newDocumentBuilder();
+   DocumentBuilder db = LazyXml.dbf.newDocumentBuilder();
try (InputStream is = resource.openStream()) {
return db.parse(is);
} catch (Throwable t) {



[aries-cdi] 02/03: [ARIES-2019] basic @Vetoed handling

2020-10-30 Thread rmannibucau
This is an automated email from the ASF dual-hosted git repository.

rmannibucau pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/aries-cdi.git

commit e2521faca77383b9ea466941a54e311340b96535
Author: Romain Manni-Bucau 
AuthorDate: Fri Oct 30 09:45:30 2020 +0100

[ARIES-2019] basic @Vetoed handling
---
 .../apache/aries/cdi/container/internal/container/Discovery.java   | 2 +-
 .../aries/cdi/container/internal/model/BeansModelBuilder.java  | 7 +++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git 
a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Discovery.java
 
b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Discovery.java
index 709d46b..07f56b6 100644
--- 
a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Discovery.java
+++ 
b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Discovery.java
@@ -126,7 +126,7 @@ public class Discovery {
}
 
public void discover() {
-   _beansModel.getOSGiBeans().stream().forEach(osgiBean -> {
+   _beansModel.getOSGiBeans().forEach(osgiBean -> {
osgiBean.found(true);
 
AnnotatedType annotatedType = new 
AnnotatedTypeImpl<>(osgiBean.getBeanClass());
diff --git 
a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BeansModelBuilder.java
 
b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BeansModelBuilder.java
index 9e8b9c8..b08007f 100644
--- 
a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BeansModelBuilder.java
+++ 
b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/model/BeansModelBuilder.java
@@ -30,6 +30,8 @@ import org.osgi.framework.Bundle;
 import org.osgi.framework.wiring.BundleWiring;
 import org.osgi.service.log.Logger;
 
+import javax.enterprise.inject.Vetoed;
+
 public class BeansModelBuilder {
 
public BeansModelBuilder(
@@ -80,6 +82,11 @@ public class BeansModelBuilder {
for (String beanClassName : beanClassNames) {
try {
Class clazz = 
_aggregateClassLoader.loadClass(beanClassName);
+   if (clazz.isAnnotationPresent(Vetoed.class) ||
+   // should be recursive but at 
the end this is generally enough and faster
+   (clazz.getPackage() != null && 
clazz.getPackage().isAnnotationPresent(Vetoed.class))) {
+   continue;
+   }
 
beans.put(beanClassName, new 
OSGiBean.Builder(_containerState.containerLogs(), clazz).build());