You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ja...@apache.org on 2010/08/23 16:24:53 UTC
svn commit: r988130 -
/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/ApplicationImpl.java
Author: jakobk
Date: Mon Aug 23 14:24:53 2010
New Revision: 988130
URL: http://svn.apache.org/viewvc?rev=988130&view=rev
Log:
MYFACES-2879 Cache introspection information about converters
Modified:
myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/ApplicationImpl.java
Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/ApplicationImpl.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/ApplicationImpl.java?rev=988130&r1=988129&r2=988130&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/ApplicationImpl.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/ApplicationImpl.java Mon Aug 23 14:24:53 2010
@@ -198,6 +198,9 @@ public class ApplicationImpl extends App
private final Map<Class<?>, List<ListenerFor>> _classToListenerForMap = new HashMap<Class<?>, List<ListenerFor>>() ;
private final Map<Class<?>, List<ResourceDependency>> _classToResourceDependencyMap = new HashMap<Class<?>, List<ResourceDependency>>() ;
+ private List<Class<? extends Converter>> _noArgConstructorConverterClasses
+ = new ArrayList<Class<? extends Converter>>();
+
// ~ Constructors
// --------------------------------------------------------------------------
// -----
@@ -1429,21 +1432,35 @@ public class ApplicationImpl extends App
try
{
Class<? extends Converter> converterClass = ClassUtils.simpleClassForName(converterClassName);
-
Converter converter = null;
- try
+
+ // check cached constructor information
+ if (!_noArgConstructorConverterClasses.contains(converterClass))
{
- // look for a constructor that takes a single Class object
- // See JSF 1.2 javadoc for Converter
- Constructor<? extends Converter> constructor = converterClass
- .getConstructor(new Class[] { Class.class });
+ // the converter class either supports the one-arg constructor
+ // or has never been processed before
+ try
+ {
+ // look for a constructor that takes a single Class object
+ // See JSF 1.2 javadoc for Converter
+ Constructor<? extends Converter> constructor = converterClass
+ .getConstructor(new Class[] { Class.class });
- converter = constructor.newInstance(new Object[] { targetClass });
+ converter = constructor.newInstance(new Object[] { targetClass });
+ }
+ catch (Exception e)
+ {
+ // the constructor does not exist
+ // add the class to the no-arg constructor classes cache
+ _noArgConstructorConverterClasses.add(converterClass);
+
+ // use no-arg constructor
+ converter = converterClass.newInstance();
+ }
}
- catch (Exception e)
+ else
{
- // if there is no matching constructor use no-arg
- // constructor
+ // use no-arg constructor
converter = converterClass.newInstance();
}