refactored
diff --git a/impl/src/main/java/org/apache/myfaces/application/ApplicationImpl.java b/impl/src/main/java/org/apache/myfaces/application/ApplicationImpl.java
index 46349ba..ea3c413 100755
--- a/impl/src/main/java/org/apache/myfaces/application/ApplicationImpl.java
+++ b/impl/src/main/java/org/apache/myfaces/application/ApplicationImpl.java
@@ -971,31 +971,22 @@
{
Assert.notEmpty(behaviorId, "behaviorId");
- final Class<? extends Behavior> behaviorClass =
- getObjectFromClassMap(behaviorId, _behaviorClassMap);
-
+ final Class<? extends Behavior> behaviorClass = getObjectFromClassMap(behaviorId, _behaviorClassMap);
if (behaviorClass == null)
{
throw new FacesException("Could not find any registered behavior-class for behaviorId : " + behaviorId);
}
-
- if (!_cdiManagedBehaviorMap.containsKey(behaviorClass))
- {
- FacesBehavior annotation = behaviorClass.getAnnotation(FacesBehavior.class);
- if (annotation != null && annotation.managed())
- {
- _cdiManagedBehaviorMap.put(behaviorClass, true);
- }
- else
- {
- _cdiManagedBehaviorMap.put(behaviorClass, false);
- }
- }
-
+
try
{
+ boolean managed = _cdiManagedBehaviorMap.computeIfAbsent(behaviorClass, k ->
+ {
+ FacesBehavior annotation = k.getAnnotation(FacesBehavior.class);
+ return annotation == null ? false : annotation.managed();
+ });
+
Behavior behavior = null;
- if (Boolean.TRUE.equals(_cdiManagedBehaviorMap.get(behaviorClass)))
+ if (managed)
{
if (ClientBehavior.class.isAssignableFrom(behaviorClass))
{
@@ -1012,13 +1003,13 @@
if (innerBehavior instanceof ClientBehaviorBase)
{
- ClientBehaviorBase clientBehavior = (ClientBehaviorBase) innerBehavior;
- String renderType = clientBehavior.getRendererType();
- if (renderType != null)
- {
- ClientBehaviorRenderer cbr = facesContext.getRenderKit().getClientBehaviorRenderer(renderType);
- _handleAttachedResourceDependencyAnnotations(facesContext, cbr);
- }
+ ClientBehaviorBase clientBehavior = (ClientBehaviorBase) innerBehavior;
+ String renderType = clientBehavior.getRendererType();
+ if (renderType != null)
+ {
+ ClientBehaviorRenderer cbr = facesContext.getRenderKit().getClientBehaviorRenderer(renderType);
+ _handleAttachedResourceDependencyAnnotations(facesContext, cbr);
+ }
}
}
else
@@ -1029,13 +1020,13 @@
if (behavior instanceof ClientBehaviorBase)
{
- ClientBehaviorBase clientBehavior = (ClientBehaviorBase) behavior;
- String renderType = clientBehavior.getRendererType();
- if (renderType != null)
- {
- ClientBehaviorRenderer cbr = facesContext.getRenderKit().getClientBehaviorRenderer(renderType);
- _handleAttachedResourceDependencyAnnotations(facesContext, cbr);
- }
+ ClientBehaviorBase clientBehavior = (ClientBehaviorBase) behavior;
+ String renderType = clientBehavior.getRendererType();
+ if (renderType != null)
+ {
+ ClientBehaviorRenderer cbr = facesContext.getRenderKit().getClientBehaviorRenderer(renderType);
+ _handleAttachedResourceDependencyAnnotations(facesContext, cbr);
+ }
}
}
@@ -1334,31 +1325,22 @@
{
Assert.notEmpty(converterId, "converterId");
- final Class<? extends Converter> converterClass =
- getObjectFromClassMap(converterId, _converterIdToClassMap);
+ final Class<? extends Converter> converterClass = getObjectFromClassMap(converterId, _converterIdToClassMap);
if (converterClass == null)
{
throw new FacesException("Could not find any registered converter-class by converterId : " + converterId);
}
- if (!_cdiManagedConverterMap.containsKey(converterClass))
- {
- FacesConverter annotation = converterClass.getAnnotation(FacesConverter.class);
- if (annotation != null && annotation.managed())
- {
- _cdiManagedConverterMap.put(converterClass, true);
- }
- else
- {
- _cdiManagedConverterMap.put(converterClass, false);
- }
- }
-
try
{
- Converter converter = null;
+ boolean managed = _cdiManagedConverterMap.computeIfAbsent(converterClass, k ->
+ {
+ FacesConverter annotation = k.getAnnotation(FacesConverter.class);
+ return annotation == null ? false : annotation.managed();
+ });
- if (Boolean.TRUE.equals(_cdiManagedConverterMap.get(converterClass)))
+ Converter converter = null;
+ if (managed)
{
converter = new FacesConverterCDIWrapper(converterClass, null, converterId);
@@ -1646,53 +1628,32 @@
{
return;
}
- boolean classAlreadyProcessed = false;
-
- List<ResourceDependency> dependencyList = null;
- boolean isCachedList = false;
-
- if(context.isProjectStage(ProjectStage.Production) && _classToResourceDependencyMap.containsKey(inspectedClass))
+ // reset cache each time
+ if (context.isProjectStage(ProjectStage.Development))
{
- dependencyList = _classToResourceDependencyMap.get(inspectedClass);
- if(dependencyList == null)
- {
- return; //class has been inspected and did not contain any resource dependency annotations
- }
- else if (dependencyList.isEmpty())
- {
- return;
- }
-
- isCachedList = true; // else annotations were found in the cache
+ _classToResourceDependencyMap.remove(inspectedClass);
}
- if(dependencyList == null) //not in production or the class hasn't been inspected yet
- {
- ResourceDependency dependency = inspectedClass.getAnnotation(ResourceDependency.class);
- ResourceDependencies dependencies = inspectedClass.getAnnotation(ResourceDependencies.class);
- if(dependency != null || dependencies != null)
- {
- //resource dependencies were found using one or both annotations, create and build a new list
- dependencyList = new ArrayList<ResourceDependency>();
-
- if(dependency != null)
- {
- dependencyList.add(dependency);
- }
-
- if(dependencies != null)
- {
- dependencyList.addAll(Arrays.asList(dependencies.value()));
- }
- }
- else
- {
- dependencyList = Collections.emptyList();
- }
- }
+ List<ResourceDependency> dependencyList = _classToResourceDependencyMap.computeIfAbsent(inspectedClass, k ->
+ {
+ List<ResourceDependency> values = new ArrayList<>(5);
- //resource dependencies were found through inspection or from cache, handle them
+ ResourceDependency dependency = k.getAnnotation(ResourceDependency.class);
+ if (dependency != null)
+ {
+ values.add(dependency);
+ }
+
+ ResourceDependencies dependencies = k.getAnnotation(ResourceDependencies.class);
+ if (dependencies != null)
+ {
+ values.addAll(Arrays.asList(dependencies.value()));
+ }
+
+ return values.isEmpty() ? Collections.emptyList() : values;
+ });
+
if (dependencyList != null && !dependencyList.isEmpty())
{
for (int i = 0, size = dependencyList.size(); i < size; i++)
@@ -1705,19 +1666,8 @@
}
}
}
-
- //if we're in production and the list is not yet cached, store it
- if(context.isProjectStage(ProjectStage.Production) && !isCachedList && dependencyList != null)
- {
- // Note at this point dependencyList cannot be null, but just let this
- // as a sanity check.
- _classToResourceDependencyMap.put(inspectedClass, dependencyList);
- }
-
- if (!classAlreadyProcessed)
- {
- rvc.setClassProcessed(inspectedClass);
- }
+
+ rvc.setClassProcessed(inspectedClass);
}
/**
@@ -1861,33 +1811,24 @@
{
Assert.notEmpty(validatorId, "validatorId");
- Class<? extends Validator> validatorClass =
- getObjectFromClassMap(validatorId, _validatorClassMap);
+ Class<? extends Validator> validatorClass = getObjectFromClassMap(validatorId, _validatorClassMap);
if (validatorClass == null)
{
String message = "Unknown validator id '" + validatorId + "'.";
log.severe(message);
throw new FacesException(message);
}
-
- if (!_cdiManagedValidatorMap.containsKey(validatorClass))
- {
- FacesValidator annotation = validatorClass.getAnnotation(FacesValidator.class);
- if (annotation != null && annotation.managed())
- {
- _cdiManagedValidatorMap.put(validatorClass, true);
- }
- else
- {
- _cdiManagedValidatorMap.put(validatorClass, false);
- }
- }
try
{
- Validator validator = null;
+ boolean managed = _cdiManagedValidatorMap.computeIfAbsent(validatorClass, k ->
+ {
+ FacesValidator annotation = k.getAnnotation(FacesValidator.class);
+ return annotation == null ? false : annotation.managed();
+ });
- if (Boolean.TRUE.equals(_cdiManagedValidatorMap.get(validatorClass)))
+ Validator validator = null;
+ if (managed)
{
validator = new FacesValidatorCDIWrapper(validatorClass, validatorId);
@@ -2012,49 +1953,31 @@
private void _handleListenerForAnnotations(FacesContext context, Object inspected, Class<?> inspectedClass,
UIComponent component, boolean isProduction)
{
- List<ListenerFor> listenerForList = null;
- boolean isCachedList = false;
-
- if(isProduction)
+ // reset cache each time
+ if (!isProduction)
{
- listenerForList = _classToListenerForMap.get(inspectedClass);
-
- if (listenerForList != null)
- {
- if (listenerForList.isEmpty())
- {
- return; //class has been inspected and did not contain any listener annotations
- }
-
- isCachedList = true; // else annotations were found in the cache
- }
+ _classToListenerForMap.remove(inspectedClass);
}
- if(listenerForList == null) //not in production or the class hasn't been inspected yet
+ List<ListenerFor> listenerForList = _classToListenerForMap.computeIfAbsent(inspectedClass, k ->
{
- ListenerFor listener = inspectedClass.getAnnotation(ListenerFor.class);
- ListenersFor listeners = inspectedClass.getAnnotation(ListenersFor.class);
- if(listener != null || listeners != null)
+ List<ListenerFor> values = new ArrayList<>();
+
+ ListenerFor listener = k.getAnnotation(ListenerFor.class);
+ if (listener != null)
{
- //listeners were found using one or both annotations, create and build a new list
- listenerForList = new ArrayList<ListenerFor>();
-
- if(listener != null)
- {
- listenerForList.add(listener);
- }
-
- if(listeners != null)
- {
- listenerForList.addAll(Arrays.asList(listeners.value()));
- }
+ values.add(listener);
}
- else
+
+ ListenersFor listeners = k.getAnnotation(ListenersFor.class);
+ if (listeners != null)
{
- listenerForList = Collections.emptyList();
+ values.addAll(Arrays.asList(listeners.value()));
}
- }
-
+
+ return values.isEmpty() ? Collections.emptyList() : values;
+ });
+
// listeners were found through inspection or from cache, handle them
if (listenerForList != null && !listenerForList.isEmpty())
{
@@ -2064,14 +1987,6 @@
_handleListenerFor(context, inspected, component, listenerFor);
}
}
-
- //if we're in production and the list is not yet cached, store it
- if(isProduction && !isCachedList && listenerForList != null)
- {
- // Note at this point listenerForList cannot be null, but just let listenerForList != null
- // as a sanity check.
- _classToListenerForMap.put(inspectedClass, listenerForList);
- }
}
private void _handleListenerFor(FacesContext context, Object inspected, UIComponent component,
@@ -2373,12 +2288,12 @@
{
Object obj = classMap.get(id);
- if(obj == null)
+ if (obj == null)
{
return null; //object for this id wasn't found on the map
}
- if(obj instanceof Class<?>)
+ if (obj instanceof Class<?>)
{
return (Class<? extends T>)obj;
}
diff --git a/impl/src/main/java/org/apache/myfaces/context/RequestViewMetadata.java b/impl/src/main/java/org/apache/myfaces/context/RequestViewMetadata.java
index 5e7eea0..560ebd6 100644
--- a/impl/src/main/java/org/apache/myfaces/context/RequestViewMetadata.java
+++ b/impl/src/main/java/org/apache/myfaces/context/RequestViewMetadata.java
@@ -37,7 +37,7 @@
public static final String RESOURCE_DEPENDENCY_KEY = "oam.component.resource.RDK";
// No lazy init: every view has one (UIView.class) or more classes to process
- private Map<Class<?>, Boolean> processedClasses = new HashMap<Class<?>,Boolean>();
+ private Map<Class<?>, Boolean> processedClasses = new HashMap<>();
private Map<ResourceDependency, Boolean> addedResources;