You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by rm...@apache.org on 2018/11/28 08:07:09 UTC
svn commit: r1847620 - in
/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans:
annotation/AnnotationManager.java
component/creation/BeanAttributesBuilder.java portable/AbstractAnnotated.java
Author: rmannibucau
Date: Wed Nov 28 08:07:09 2018
New Revision: 1847620
URL: http://svn.apache.org/viewvc?rev=1847620&view=rev
Log:
OWB-1271 wrapping repeatableMethodCache values in Optional to reduce the number of NPE
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnnotationManager.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BeanAttributesBuilder.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractAnnotated.java
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnnotationManager.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnnotationManager.java?rev=1847620&r1=1847619&r2=1847620&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnnotationManager.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnnotationManager.java Wed Nov 28 08:07:09 2018
@@ -59,6 +59,7 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArraySet;
@@ -74,7 +75,7 @@ public final class AnnotationManager
new ConcurrentHashMap<>();
private CopyOnWriteArraySet<Class<?>> repeatableMethodCheckedTypes = new CopyOnWriteArraySet<>();
- private Map<Class<?>, Method> repeatableMethodCache = new ConcurrentHashMap<>();
+ private Map<Class<?>, Optional<Method>> repeatableMethodCache = new ConcurrentHashMap<>();
private final BeanManagerImpl beanManagerImpl;
private final WebBeansContext webBeansContext;
@@ -940,17 +941,17 @@ public final class AnnotationManager
repeatableMethodCache.clear();
}
- public Method getRepeatableMethod(Class<?> type)
+ public Optional<Method> getRepeatableMethod(Class<?> type)
{
if (repeatableMethodCheckedTypes.contains(type))
{
return repeatableMethodCache.get(type);
}
- Method method = resolveRepeatableMethod(type);
+ Optional<Method> method = Optional.ofNullable(resolveRepeatableMethod(type));
repeatableMethodCheckedTypes.add(type);
- repeatableMethodCache.put(type, method);
+ repeatableMethodCache.put(type, method); // don't put null here!
return method;
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BeanAttributesBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BeanAttributesBuilder.java?rev=1847620&r1=1847619&r2=1847620&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BeanAttributesBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BeanAttributesBuilder.java Wed Nov 28 08:07:09 2018
@@ -303,7 +303,7 @@ public abstract class BeanAttributesBuil
{
return AbstractAnnotated.class.isInstance(annotated) ?
AbstractAnnotated.class.cast(annotated).getRepeatables().contains(annotation.annotationType()) :
- webBeansContext.getAnnotationManager().getRepeatableMethod(annotation.annotationType()) != null;
+ webBeansContext.getAnnotationManager().getRepeatableMethod(annotation.annotationType()).isPresent();
}
/**
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractAnnotated.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractAnnotated.java?rev=1847620&r1=1847619&r2=1847620&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractAnnotated.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractAnnotated.java Wed Nov 28 08:07:09 2018
@@ -26,6 +26,7 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;
+import java.util.Optional;
import java.util.Set;
import java.util.stream.Stream;
@@ -98,12 +99,13 @@ public abstract class AbstractAnnotated
Class<?> type = a.annotationType();
try
{
- Method repeatableMethod = webBeansContext.getAnnotationManager().getRepeatableMethod(type);
- if (repeatableMethod == null)
+ Optional<Method> repeatableMethod =
+ webBeansContext.getAnnotationManager().getRepeatableMethod(type);
+ if (!repeatableMethod.isPresent())
{
return null;
}
- return (Annotation[]) repeatableMethod.invoke(a);
+ return (Annotation[]) repeatableMethod.orElseThrow(IllegalStateException::new).invoke(a);
}
catch (Exception e)
{