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();
                 }