Author: nbelaevski
Date: 2009-01-19 10:38:50 -0500 (Mon, 19 Jan 2009)
New Revision: 12337
Modified:
trunk/framework/impl/src/main/java/org/ajax4jsf/util/ELUtils.java
Log:
https://jira.jboss.org/jira/browse/RF-5772
Modified: trunk/framework/impl/src/main/java/org/ajax4jsf/util/ELUtils.java
===================================================================
--- trunk/framework/impl/src/main/java/org/ajax4jsf/util/ELUtils.java 2009-01-19 15:04:31
UTC (rev 12336)
+++ trunk/framework/impl/src/main/java/org/ajax4jsf/util/ELUtils.java 2009-01-19 15:38:50
UTC (rev 12337)
@@ -30,6 +30,8 @@
import java.lang.reflect.Type;
import java.util.Collection;
import java.util.HashMap;
+import java.util.Map;
+import java.util.ResourceBundle;
import javax.el.ELContext;
import javax.el.ValueExpression;
@@ -113,33 +115,42 @@
private static Class<?> getGenericCollectionType(FacesContext context, Object
base, String propertyName) {
Class<?> genericPropertyClass = null;
- GenericsIntrospectionCache introspectionCache =
GenericsIntrospectionCache.getInstance(context);
if (base != null && propertyName != null) {
Class<? extends Object> beanClass = base.getClass();
-
- synchronized (introspectionCache) {
- GenericsCacheEntry cacheEntry = introspectionCache.getGenericCacheEntry(beanClass);
+
+ //Map and ResourceBundle have special resolvers that we doesn't support
+ if (!Map.class.isAssignableFrom(beanClass) &&
!ResourceBundle.class.isAssignableFrom(beanClass)) {
- if (cacheEntry.genericPropertiesClasses == null) {
- cacheEntry.genericPropertiesClasses = new HashMap<String, Class<?>>();
- } else {
- genericPropertyClass = cacheEntry.genericPropertiesClasses.get(propertyName);
- }
-
- if (genericPropertyClass == null) {
- BeanInfo beanInfo = getBeanInfo(beanClass, cacheEntry);
+ GenericsIntrospectionCache introspectionCache =
GenericsIntrospectionCache.getInstance(context);
- PropertyDescriptor[] descriptors = beanInfo.getPropertyDescriptors();
- for (PropertyDescriptor pd : descriptors) {
- if (propertyName.equals(pd.getName())) {
- Method readMethod = pd.getReadMethod();
-
- genericPropertyClass = resolveType(readMethod.getGenericReturnType());
- break;
+ synchronized (introspectionCache) {
+ GenericsCacheEntry cacheEntry = introspectionCache.getGenericCacheEntry(beanClass);
+
+ if (cacheEntry.genericPropertiesClasses == null) {
+ cacheEntry.genericPropertiesClasses = new HashMap<String, Class<?>>();
+ } else {
+ genericPropertyClass = cacheEntry.genericPropertiesClasses.get(propertyName);
+ }
+
+ if (genericPropertyClass == null) {
+ if (!cacheEntry.genericPropertiesClasses.containsKey(propertyName)) {
+ BeanInfo beanInfo = getBeanInfo(beanClass, cacheEntry);
+
+ PropertyDescriptor[] descriptors = beanInfo.getPropertyDescriptors();
+ for (PropertyDescriptor pd : descriptors) {
+ if (propertyName.equals(pd.getName())) {
+ Method readMethod = pd.getReadMethod();
+
+ genericPropertyClass = resolveType(readMethod.getGenericReturnType());
+ break;
+ }
+ }
+
+ cacheEntry.genericPropertiesClasses.put(propertyName, genericPropertyClass);
+ } else {
+ //property Class has been already resolved as null
}
}
-
- cacheEntry.genericPropertiesClasses.put(propertyName, genericPropertyClass);
}
}
}