You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mc...@apache.org on 2012/02/01 18:27:54 UTC

svn commit: r1239219 - in /commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl: OgnlRuntime.java internal/entry/PropertyDescriptorCacheEntryFactory.java

Author: mcucchiara
Date: Wed Feb  1 17:27:54 2012
New Revision: 1239219

URL: http://svn.apache.org/viewvc?rev=1239219&view=rev
Log:
Moved ex-private method to the unique consumer

Modified:
    commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/OgnlRuntime.java
    commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/entry/PropertyDescriptorCacheEntryFactory.java

Modified: commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/OgnlRuntime.java
URL: http://svn.apache.org/viewvc/commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/OgnlRuntime.java?rev=1239219&r1=1239218&r2=1239219&view=diff
==============================================================================
--- commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/OgnlRuntime.java (original)
+++ commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/OgnlRuntime.java Wed Feb  1 17:27:54 2012
@@ -101,17 +101,17 @@ public class OgnlRuntime
     /**
      * Java beans standard set method prefix.
      */
-    private static final String SET_PREFIX = "set";
+    public static final String SET_PREFIX = "set";
 
     /**
      * Java beans standard get method prefix.
      */
-    private static final String GET_PREFIX = "get";
+    public static final String GET_PREFIX = "get";
 
     /**
      * Java beans standard is<Foo> boolean getter prefix.
      */
-    private static final String IS_PREFIX = "is";
+    public static final String IS_PREFIX = "is";
 
     /**
      * Prefix padding for hexadecimal numbers to HEX_LENGTH.
@@ -1571,141 +1571,6 @@ public class OgnlRuntime
         return hasSetMethod( context, target, targetClass, name ) || hasField( context, target, targetClass, name );
     }
 
-    private static boolean indexMethodCheck( List<Method> methods )
-        throws CacheException
-    {
-        boolean result = false;
-
-        if ( methods.size() > 0 )
-        {
-            Method method = methods.get( 0 );
-            Class<?>[] parameterTypes = getParameterTypes( method );
-            int numParameterTypes = parameterTypes.length;
-            Class<?> lastMethodClass = method.getDeclaringClass();
-
-            result = true;
-            for ( int i = 1; result && ( i < methods.size() ); i++ )
-            {
-                Class<?> clazz = methods.get( i ).getDeclaringClass();
-
-                // Check to see if more than one method implemented per class
-                if ( lastMethodClass == clazz )
-                {
-                    result = false;
-                }
-                else
-                {
-                    Class<?>[] mpt = getParameterTypes( method );
-                    int mpc = parameterTypes.length;
-
-                    if ( numParameterTypes != mpc )
-                    {
-                        result = false;
-                    }
-                    for ( int j = 0; j < numParameterTypes; j++ )
-                    {
-                        if ( parameterTypes[j] != mpt[j] )
-                        {
-                            result = false;
-                            break;
-                        }
-                    }
-                }
-                lastMethodClass = clazz;
-            }
-        }
-        return result;
-    }
-
-    //TODO: again, this method was local
-    public static void findObjectIndexedPropertyDescriptors( Class<?> targetClass,
-                                                             Map<String, PropertyDescriptor> intoMap )
-        throws OgnlException
-    {
-        Map<String, List<Method>> allMethods = getMethods( targetClass, false );
-        Map<String, List<Method>> pairs = new HashMap<String, List<Method>>( 101 );
-
-        for ( Map.Entry<String, List<Method>> entry : allMethods.entrySet() )
-        {
-            String methodName = entry.getKey();
-            List<Method> methods = entry.getValue();
-
-            /*
-             * Only process set/get where there is exactly one implementation of the method per class and those
-             * implementations are all the same
-             */
-            if ( indexMethodCheck( methods ) )
-            {
-                boolean isGet = false, isSet;
-                Method method = methods.get( 0 );
-
-                if ( ( ( isSet = methodName.startsWith( SET_PREFIX ) ) || ( isGet =
-                    methodName.startsWith( GET_PREFIX ) ) ) && ( methodName.length() > 3 ) )
-                {
-                    String propertyName = Introspector.decapitalize( methodName.substring( 3 ) );
-                    Class<?>[] parameterTypes = getParameterTypes( method );
-                    int parameterCount = parameterTypes.length;
-
-                    if ( isGet && ( parameterCount == 1 ) && ( method.getReturnType() != Void.TYPE ) )
-                    {
-                        List<Method> pair = pairs.get( propertyName );
-
-                        if ( pair == null )
-                        {
-                            pairs.put( propertyName, pair = new ArrayList<Method>() );
-                        }
-                        pair.add( method );
-                    }
-                    if ( isSet && ( parameterCount == 2 ) && ( method.getReturnType() == Void.TYPE ) )
-                    {
-                        List<Method> pair = pairs.get( propertyName );
-
-                        if ( pair == null )
-                        {
-                            pairs.put( propertyName, pair = new ArrayList<Method>() );
-                        }
-                        pair.add( method );
-                    }
-                }
-            }
-        }
-
-        for ( String propertyName : pairs.keySet() )
-        {
-            List<Method> methods = pairs.get( propertyName );
-
-            if ( methods.size() == 2 )
-            {
-                Method method1 = methods.get( 0 ), method2 = methods.get( 1 ), setMethod =
-                    ( method1.getParameterTypes().length == 2 ) ? method1 : method2, getMethod =
-                    ( setMethod == method1 ) ? method2 : method1;
-                Class<?> keyType = getMethod.getParameterTypes()[0], propertyType = getMethod.getReturnType();
-
-                if ( keyType == setMethod.getParameterTypes()[0] )
-                {
-                    if ( propertyType == setMethod.getParameterTypes()[1] )
-                    {
-                        ObjectIndexedPropertyDescriptor propertyDescriptor;
-
-                        try
-                        {
-                            propertyDescriptor =
-                                new ObjectIndexedPropertyDescriptor( propertyName, propertyType, getMethod, setMethod );
-                        }
-                        catch ( Exception ex )
-                        {
-                            throw new OgnlException(
-                                "creating object indexed property descriptor for '" + propertyName + "' in "
-                                    + targetClass, ex );
-                        }
-                        intoMap.put( propertyName, propertyDescriptor );
-                    }
-                }
-
-            }
-        }
-    }
-
     /**
      * This method returns the property descriptors for the given class as a Map.
      *

Modified: commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/entry/PropertyDescriptorCacheEntryFactory.java
URL: http://svn.apache.org/viewvc/commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/entry/PropertyDescriptorCacheEntryFactory.java?rev=1239219&r1=1239218&r2=1239219&view=diff
==============================================================================
--- commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/entry/PropertyDescriptorCacheEntryFactory.java (original)
+++ commons/proper/ognl/trunk/src/main/java/org/apache/commons/ognl/internal/entry/PropertyDescriptorCacheEntryFactory.java Wed Feb  1 17:27:54 2012
@@ -23,6 +23,7 @@ package org.apache.commons.ognl.internal
  * $Id$
  */
 
+import org.apache.commons.ognl.ObjectIndexedPropertyDescriptor;
 import org.apache.commons.ognl.OgnlException;
 import org.apache.commons.ognl.OgnlRuntime;
 import org.apache.commons.ognl.internal.CacheException;
@@ -31,6 +32,7 @@ import java.beans.IntrospectionException
 import java.beans.Introspector;
 import java.beans.PropertyDescriptor;
 import java.lang.reflect.Method;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -66,7 +68,7 @@ public class PropertyDescriptorCacheEntr
                 result.put( pda[i].getName(), pda[i] );
             }
 
-            OgnlRuntime.findObjectIndexedPropertyDescriptors( targetClass, result );
+            findObjectIndexedPropertyDescriptors( targetClass, result );
         }
         catch ( IntrospectionException e )
         {
@@ -98,5 +100,137 @@ public class PropertyDescriptorCacheEntr
         return m;
     }
 
+    private static void findObjectIndexedPropertyDescriptors( Class<?> targetClass,
+                                                             Map<String, PropertyDescriptor> intoMap )
+        throws OgnlException
+    {
+        Map<String, List<Method>> allMethods = OgnlRuntime.getMethods( targetClass, false );
+        Map<String, List<Method>> pairs = new HashMap<String, List<Method>>( 101 );
+
+        for ( Map.Entry<String, List<Method>> entry : allMethods.entrySet() )
+        {
+            String methodName = entry.getKey();
+            List<Method> methods = entry.getValue();
+
+            /*
+             * Only process set/get where there is exactly one implementation of the method per class and those
+             * implementations are all the same
+             */
+            if ( indexMethodCheck( methods ) )
+            {
+                boolean isGet = false, isSet;
+                Method method = methods.get( 0 );
+
+                if ( ( ( isSet = methodName.startsWith( OgnlRuntime.SET_PREFIX ) ) || ( isGet =
+                    methodName.startsWith( OgnlRuntime.GET_PREFIX ) ) ) && ( methodName.length() > 3 ) )
+                {
+                    String propertyName = Introspector.decapitalize( methodName.substring( 3 ) );
+                    Class<?>[] parameterTypes = OgnlRuntime.getParameterTypes( method );
+                    int parameterCount = parameterTypes.length;
+
+                    if ( isGet && ( parameterCount == 1 ) && ( method.getReturnType() != Void.TYPE ) )
+                    {
+                        List<Method> pair = pairs.get( propertyName );
+
+                        if ( pair == null )
+                        {
+                            pairs.put( propertyName, pair = new ArrayList<Method>() );
+                        }
+                        pair.add( method );
+                    }
+                    if ( isSet && ( parameterCount == 2 ) && ( method.getReturnType() == Void.TYPE ) )
+                    {
+                        List<Method> pair = pairs.get( propertyName );
+
+                        if ( pair == null )
+                        {
+                            pairs.put( propertyName, pair = new ArrayList<Method>() );
+                        }
+                        pair.add( method );
+                    }
+                }
+            }
+        }
+
+        for ( String propertyName : pairs.keySet() )
+        {
+            List<Method> methods = pairs.get( propertyName );
+
+            if ( methods.size() == 2 )
+            {
+                Method method1 = methods.get( 0 ), method2 = methods.get( 1 ), setMethod =
+                    ( method1.getParameterTypes().length == 2 ) ? method1 : method2, getMethod =
+                    ( setMethod == method1 ) ? method2 : method1;
+                Class<?> keyType = getMethod.getParameterTypes()[0], propertyType = getMethod.getReturnType();
+
+                if ( keyType == setMethod.getParameterTypes()[0] )
+                {
+                    if ( propertyType == setMethod.getParameterTypes()[1] )
+                    {
+                        ObjectIndexedPropertyDescriptor propertyDescriptor;
+
+                        try
+                        {
+                            propertyDescriptor =
+                                new ObjectIndexedPropertyDescriptor( propertyName, propertyType, getMethod, setMethod );
+                        }
+                        catch ( Exception ex )
+                        {
+                            throw new OgnlException(
+                                "creating object indexed property descriptor for '" + propertyName + "' in "
+                                    + targetClass, ex );
+                        }
+                        intoMap.put( propertyName, propertyDescriptor );
+                    }
+                }
+
+            }
+        }
+    }
+    private static boolean indexMethodCheck( List<Method> methods )
+    {
+        boolean result = false;
+
+        if ( methods.size() > 0 )
+        {
+            Method method = methods.get( 0 );
+            Class<?>[] parameterTypes = OgnlRuntime.getParameterTypes( method );
+            int numParameterTypes = parameterTypes.length;
+            Class<?> lastMethodClass = method.getDeclaringClass();
+
+            result = true;
+            for ( int i = 1; result && ( i < methods.size() ); i++ )
+            {
+                Class<?> clazz = methods.get( i ).getDeclaringClass();
+
+                // Check to see if more than one method implemented per class
+                if ( lastMethodClass == clazz )
+                {
+                    result = false;
+                }
+                else
+                {
+                    Class<?>[] mpt = OgnlRuntime.getParameterTypes( method );
+                    int mpc = parameterTypes.length;
+
+                    if ( numParameterTypes != mpc )
+                    {
+                        result = false;
+                    }
+                    for ( int j = 0; j < numParameterTypes; j++ )
+                    {
+                        if ( parameterTypes[j] != mpt[j] )
+                        {
+                            result = false;
+                            break;
+                        }
+                    }
+                }
+                lastMethodClass = clazz;
+            }
+        }
+        return result;
+    }
+
 
 }