You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by hi...@apache.org on 2010/09/28 15:08:57 UTC

svn commit: r1002152 [2/5] - in /harmony/enhanced/java/branches/mrh: ./ classlib/ classlib/depends/files/ classlib/doc/awt/images/ classlib/doc/regex/images/ classlib/doc/security/images/ classlib/doc/vminterface/ classlib/modules/archive/src/test/java...

Modified: harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/AwtFontPersistenceDelegate.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/AwtFontPersistenceDelegate.java?rev=1002152&r1=1002151&r2=1002152&view=diff
==============================================================================
--- harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/AwtFontPersistenceDelegate.java (original)
+++ harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/AwtFontPersistenceDelegate.java Tue Sep 28 13:08:47 2010
@@ -19,13 +19,14 @@ package java.beans;
 
 import java.awt.Font;
 
+import org.apache.harmony.beans.BeansUtils;
+
 class AwtFontPersistenceDelegate extends DefaultPersistenceDelegate {
     @Override
-	@SuppressWarnings("boxing")
     protected Expression instantiate(Object oldInstance, Encoder enc) {
-		Font font = (Font) oldInstance;
-		return new Expression(oldInstance, oldInstance.getClass(),
-                Statement.CONSTRUCTOR_NAME, new Object[] { font.getFontName(),
-						font.getStyle(), font.getSize() });
-	}
+        Font font = (Font) oldInstance;
+        return new Expression(oldInstance, oldInstance.getClass(),
+                BeansUtils.NEW, new Object[] { font.getFontName(),
+                        font.getStyle(), font.getSize() });
+    }
 }

Modified: harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/AwtInsetsPersistenceDelegate.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/AwtInsetsPersistenceDelegate.java?rev=1002152&r1=1002151&r2=1002152&view=diff
==============================================================================
--- harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/AwtInsetsPersistenceDelegate.java (original)
+++ harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/AwtInsetsPersistenceDelegate.java Tue Sep 28 13:08:47 2010
@@ -19,13 +19,14 @@ package java.beans;
 
 import java.awt.Insets;
 
+import org.apache.harmony.beans.BeansUtils;
+
 class AwtInsetsPersistenceDelegate extends DefaultPersistenceDelegate {
     @Override
-	@SuppressWarnings("boxing")
     protected Expression instantiate(Object oldInstance, Encoder enc) {
-		Insets inset = (Insets) oldInstance;
-		return new Expression(oldInstance, oldInstance.getClass(),
-				Statement.CONSTRUCTOR_NAME, new Object[] { inset.top, inset.left, inset.bottom,
-			 inset.right, });
-	}
+        Insets inset = (Insets) oldInstance;
+        return new Expression(oldInstance, oldInstance.getClass(),
+                BeansUtils.NEW, new Object[] { inset.top, inset.left,
+                        inset.bottom, inset.right, });
+    }
 }

Modified: harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/AwtMenuShortcutPersistenceDelegate.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/AwtMenuShortcutPersistenceDelegate.java?rev=1002152&r1=1002151&r2=1002152&view=diff
==============================================================================
--- harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/AwtMenuShortcutPersistenceDelegate.java (original)
+++ harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/AwtMenuShortcutPersistenceDelegate.java Tue Sep 28 13:08:47 2010
@@ -19,16 +19,15 @@ package java.beans;
 
 import java.awt.MenuShortcut;
 
-class AwtMenuShortcutPersistenceDelegate extends PersistenceDelegate {
+import org.apache.harmony.beans.BeansUtils;
 
+class AwtMenuShortcutPersistenceDelegate extends PersistenceDelegate {
     @Override
-	@SuppressWarnings("boxing")
-	protected Expression instantiate(Object oldInstance, Encoder enc) {
-		MenuShortcut shortcut = (MenuShortcut) oldInstance;
-		int keyCode = shortcut.getKey();
-		boolean useShiftModifier = shortcut.usesShiftModifier();
-		return new Expression(shortcut, shortcut.getClass(),
-                Statement.CONSTRUCTOR_NAME, new Object[] {keyCode, useShiftModifier});
-	}
-
+    protected Expression instantiate(Object oldInstance, Encoder enc) {
+        MenuShortcut shortcut = (MenuShortcut) oldInstance;
+        int keyCode = shortcut.getKey();
+        boolean useShiftModifier = shortcut.usesShiftModifier();
+        return new Expression(shortcut, shortcut.getClass(), BeansUtils.NEW,
+                new Object[] { keyCode, useShiftModifier });
+    }
 }

Modified: harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/AwtPointPersistenceDelegate.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/AwtPointPersistenceDelegate.java?rev=1002152&r1=1002151&r2=1002152&view=diff
==============================================================================
--- harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/AwtPointPersistenceDelegate.java (original)
+++ harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/AwtPointPersistenceDelegate.java Tue Sep 28 13:08:47 2010
@@ -14,16 +14,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 package java.beans;
 
 import java.awt.Point;
 
+import org.apache.harmony.beans.BeansUtils;
+
 class AwtPointPersistenceDelegate extends DefaultPersistenceDelegate {
     @Override
-	@SuppressWarnings("boxing")
     protected Expression instantiate(Object oldInstance, Encoder enc) {
-		Point point = (Point) oldInstance;
-		return new Expression(oldInstance, oldInstance.getClass(),
-				Statement.CONSTRUCTOR_NAME, new Object[] { point.x, point.y });
-	}
+        Point point = (Point) oldInstance;
+        return new Expression(oldInstance, oldInstance.getClass(),
+                BeansUtils.NEW, new Object[] { point.x, point.y });
+    }
 }

Modified: harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/AwtRectanglePersistenceDelegate.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/AwtRectanglePersistenceDelegate.java?rev=1002152&r1=1002151&r2=1002152&view=diff
==============================================================================
--- harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/AwtRectanglePersistenceDelegate.java (original)
+++ harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/AwtRectanglePersistenceDelegate.java Tue Sep 28 13:08:47 2010
@@ -19,25 +19,25 @@ package java.beans;
 
 import java.awt.Rectangle;
 
+import org.apache.harmony.beans.BeansUtils;
+
 class AwtRectanglePersistenceDelegate extends DefaultPersistenceDelegate {
 
-	@Override
+    @Override
     protected boolean mutatesTo(Object o1, Object o2) {
-		return o1.equals(o2);
-	}
+        return o1.equals(o2);
+    }
 
-	@Override
+    @Override
     protected void initialize(Class<?> type, Object oldInstance,
-			Object newInstance, Encoder enc) {
-		return;
-	}
-	
-	@Override
-	@SuppressWarnings("boxing")
-    protected Expression instantiate(Object oldInstance, Encoder enc) {
-		Rectangle rect = (Rectangle) oldInstance;
+            Object newInstance, Encoder enc) {
+        return;
+    }
 
-        return new Expression(rect, rect.getClass(), Statement.CONSTRUCTOR_NAME,
+    @Override
+    protected Expression instantiate(Object oldInstance, Encoder enc) {
+        Rectangle rect = (Rectangle) oldInstance;
+        return new Expression(rect, rect.getClass(), BeansUtils.NEW,
                 new Object[] { rect.x, rect.y, rect.width, rect.height });
     }
 }

Modified: harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/AwtScrollPanePersistenceDelegate.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/AwtScrollPanePersistenceDelegate.java?rev=1002152&r1=1002151&r2=1002152&view=diff
==============================================================================
--- harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/AwtScrollPanePersistenceDelegate.java (original)
+++ harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/AwtScrollPanePersistenceDelegate.java Tue Sep 28 13:08:47 2010
@@ -18,14 +18,14 @@ package java.beans;
 
 import java.awt.ScrollPane;
 
-class AwtScrollPanePersistenceDelegate extends
-		DefaultPersistenceDelegate {
-	@Override
-    @SuppressWarnings("boxing")
+import org.apache.harmony.beans.BeansUtils;
+
+class AwtScrollPanePersistenceDelegate extends DefaultPersistenceDelegate {
+    @Override
     protected Expression instantiate(Object oldInstance, Encoder enc) {
-		return new Expression(oldInstance, oldInstance.getClass(),
-				Statement.CONSTRUCTOR_NAME,
-				new Object[] { ((ScrollPane) oldInstance)
-						.getScrollbarDisplayPolicy() });
-	}
+        return new Expression(oldInstance, oldInstance.getClass(),
+                BeansUtils.NEW,
+                new Object[] { ((ScrollPane) oldInstance)
+                        .getScrollbarDisplayPolicy() });
+    }
 }

Modified: harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/DefaultPersistenceDelegate.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/DefaultPersistenceDelegate.java?rev=1002152&r1=1002151&r2=1002152&view=diff
==============================================================================
--- harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/DefaultPersistenceDelegate.java (original)
+++ harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/DefaultPersistenceDelegate.java Tue Sep 28 13:08:47 2010
@@ -23,6 +23,8 @@ import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.HashMap;
 
+import org.apache.harmony.beans.BeansUtils;
+
 /**
  * Default PersistenceDelegate for normal classes. The instances of this class
  * are used when other customized PersistenceDelegate is not set in the encoders
@@ -186,13 +188,14 @@ public class DefaultPersistenceDelegate 
     /*
      * Get the value for the specified property of the given bean instance.
      */
-    private Object getPropertyValue(HashMap<String, PropertyDescriptor> proDscMap, Object oldInstance,
+    private Object getPropertyValue(
+            HashMap<String, PropertyDescriptor> proDscMap, Object oldInstance,
             String propName) throws Exception {
         // Try to get the read method for the property
         Method getter = null;
         if (null != proDscMap) {
-            PropertyDescriptor pd = proDscMap
-                    .get(Introspector.decapitalize(propName));
+            PropertyDescriptor pd = proDscMap.get(Introspector
+                    .decapitalize(propName));
             if (null != pd) {
                 getter = pd.getReadMethod();
             }
@@ -212,7 +215,6 @@ public class DefaultPersistenceDelegate 
                     "The getter method for the property " //$NON-NLS-1$
                             + propName + " can't be found."); //$NON-NLS-1$
         }
-
     }
 
     /**
@@ -264,7 +266,7 @@ public class DefaultPersistenceDelegate 
         }
 
         return new Expression(oldInstance, oldInstance.getClass(),
-                Statement.CONSTRUCTOR_NAME, args);
+                BeansUtils.NEW, args);
     }
 
     private static HashMap<String, PropertyDescriptor> internalAsMap(
@@ -280,9 +282,9 @@ public class DefaultPersistenceDelegate 
      * Determines whether one object mutates to the other object. If this
      * <code>DefaultPersistenceDelegate</code> is constructed with one or more
      * property names, and the class of <code>o1</code> overrides the
-     * "equals(Object)" method, then <code>o2</code> is considered to mutate
-     * to <code>o1</code> if <code>o1</code> equals to <code>o2</code>.
-     * Otherwise, the result is the same as the definition in
+     * "equals(Object)" method, then <code>o2</code> is considered to mutate to
+     * <code>o1</code> if <code>o1</code> equals to <code>o2</code>. Otherwise,
+     * the result is the same as the definition in
      * <code>PersistenceDelegate</code>.
      * 
      * @param o1
@@ -295,17 +297,7 @@ public class DefaultPersistenceDelegate 
     @Override
     protected boolean mutatesTo(Object o1, Object o2) {
         if (this.propertyNames.length > 0) {
-            Class<?> clazz = o1.getClass();
-            // Check the "equals" method has been declared
-            Method equalMethod = null;
-            try {
-                equalMethod = clazz.getDeclaredMethod("equals", //$NON-NLS-1$
-                        new Class[] { Object.class });
-            } catch (NoSuchMethodException e) {
-                // Ignored
-            }
-
-            if (null != equalMethod) {
+            if (BeansUtils.declaredEquals(o1.getClass())) {
                 return o1.equals(o2);
             }
         }

Modified: harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/Expression.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/Expression.java?rev=1002152&r1=1002151&r2=1002152&view=diff
==============================================================================
--- harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/Expression.java (original)
+++ harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/Expression.java Tue Sep 28 13:08:47 2010
@@ -17,7 +17,7 @@
 
 package java.beans;
 
-import org.apache.harmony.beans.internal.nls.Messages;
+import org.apache.harmony.beans.BeansUtils;
 
 public class Expression extends Statement {
 
@@ -40,25 +40,21 @@ public class Expression extends Statemen
 
     @Override
     public String toString() {
-        try {
-            StringBuilder sb = new StringBuilder();
-
-            if (!valueIsDefined) {
-                sb.append("<unbound>"); //$NON-NLS-1$
+        StringBuilder sb = new StringBuilder();
+        if (!valueIsDefined) {
+            sb.append("<unbound>"); //$NON-NLS-1$
+        } else {
+            if (value == null) {
+                sb.append(BeansUtils.NULL);
             } else {
-                if (value == null) {
-                    sb.append("null"); //$NON-NLS-1$
-                } else {
-                    sb.append(convertClassName(value.getClass()));
-                }
+                Class<?> clazz = value.getClass();
+                sb.append(clazz == String.class ? BeansUtils.QUOTE : BeansUtils
+                        .idOfClass(clazz));
             }
-            sb.append('=');
-            sb.append(super.toString());
-
-            return sb.toString();
-        } catch (Exception e) {
-            return new String(Messages.getString("beans.0D", e.getClass())); //$NON-NLS-1$
         }
+        sb.append('=');
+        sb.append(super.toString());
+        return sb.toString();
     }
 
     public void setValue(Object value) {
@@ -73,4 +69,4 @@ public class Expression extends Statemen
         }
         return value;
     }
-}
+}
\ No newline at end of file

Modified: harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/Statement.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/Statement.java?rev=1002152&r1=1002151&r2=1002152&view=diff
==============================================================================
--- harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/Statement.java (original)
+++ harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/Statement.java Tue Sep 28 13:08:47 2010
@@ -31,63 +31,50 @@ import java.util.Iterator;
 import java.util.Map;
 import java.util.WeakHashMap;
 
+import org.apache.harmony.beans.BeansUtils;
 import org.apache.harmony.beans.internal.nls.Messages;
 
 public class Statement {
-    private static final Object[] EMPTY_ARRAY = new Object[0];
 
     private Object target;
 
     private String methodName;
 
     private Object[] arguments;
-    
-    // cache used methods of specified target class to accelerate method search
-    private static WeakHashMap<Class<?>, Method[]> cache = new WeakHashMap<Class<?>, Method[]>();
-    
-    // the special method name donating constructors
-    static final String CONSTRUCTOR_NAME = "new"; //$NON-NLS-1$
-
-    // the special method name donating array "get"
-    static final String ARRAY_GET = "get"; //$NON-NLS-1$
 
-    // the special method name donating array "set"
-    static final String ARRAY_SET = "set"; //$NON-NLS-1$
+    // cache used methods of specified target class to accelerate method search
+    private static WeakHashMap<Class<?>, Method[]> classMethodsCache = new WeakHashMap<Class<?>, Method[]>();
 
     public Statement(Object target, String methodName, Object[] arguments) {
         this.target = target;
         this.methodName = methodName;
-        if (arguments != null) {
-            this.arguments = arguments;
-        } else {
-            this.arguments = EMPTY_ARRAY;
-        }
+        this.arguments = arguments == null ? BeansUtils.EMPTY_OBJECT_ARRAY
+                : arguments;
     }
 
     @Override
     public String toString() {
         StringBuilder sb = new StringBuilder();
-        Object theTarget = getTarget();
-        String theMethodName = getMethodName();
-        Object[] theArguments = getArguments();
-        String targetVar = theTarget != null ? convertClassName(theTarget.getClass()) : "null"; //$NON-NLS-1$
-        sb.append(targetVar);
-        sb.append('.');
-        sb.append(theMethodName);
-        sb.append('(');
-        if (theArguments != null) {
-            for (int i = 0; i < theArguments.length; ++i) {
-                if (i > 0) {
+        if (target == null) {
+            sb.append(BeansUtils.NULL);
+        } else {
+            Class<?> clazz = target.getClass();
+            sb.append(clazz == String.class ? BeansUtils.QUOTE : BeansUtils
+                    .idOfClass(clazz));
+        }
+        sb.append('.' + methodName + '(');
+        if (arguments != null) {
+            Class<?> clazz;
+            for (int index = 0; index < arguments.length; index++) {
+                if (index > 0) {
                     sb.append(", "); //$NON-NLS-1$
                 }
-                if (theArguments[i] == null) {
-                    sb.append("null"); //$NON-NLS-1$
-                } else if (theArguments[i] instanceof String) {
-                    sb.append('"');
-                    sb.append(theArguments[i].toString());
-                    sb.append('"');
+                if (arguments[index] == null) {
+                    sb.append(BeansUtils.NULL);
                 } else {
-                    sb.append(convertClassName(theArguments[i].getClass()));
+                    clazz = arguments[index].getClass();
+                    sb.append(clazz == String.class ? '"' + (String) arguments[index] + '"'
+                            : BeansUtils.idOfClass(clazz));
                 }
             }
         }
@@ -115,120 +102,117 @@ public class Statement {
     Object invokeMethod() throws Exception {
         Object result = null;
         try {
-            Object theTarget = getTarget();
-            String theMethodName = getMethodName();
-            Object[] theArguments = getArguments();
-            if (theTarget.getClass().isArray()) {
-                Method method = findArrayMethod(theMethodName, theArguments);
-                Object[] args = new Object[theArguments.length + 1];
-                args[0] = theTarget;
-                System.arraycopy(theArguments, 0, args, 1, theArguments.length);
-                result = method.invoke(null, args);
-            } else if (theMethodName.equals("newInstance") //$NON-NLS-1$
-                    && theTarget == Array.class) {
-                Class<?> componentType = (Class<?>) theArguments[0];
-                int length = ((Integer) theArguments[1]).intValue();
-                result = Array.newInstance(componentType, length);
-            } else if (theMethodName.equals("new") //$NON-NLS-1$
-                    || theMethodName.equals("newInstance")) { //$NON-NLS-1$
-                if (theTarget instanceof Class<?>) {
-                    Constructor<?> constructor = findConstructor((Class<?>)theTarget, theArguments);
-                    result = constructor.newInstance(theArguments);
+            Object target = getTarget();
+            String methodName = getMethodName();
+            Object[] arguments = getArguments();
+            Class<?> targetClass = target.getClass();
+            if (targetClass.isArray()) {
+                Method method = findArrayMethod(methodName, arguments);
+                Object[] copy = new Object[arguments.length + 1];
+                copy[0] = target;
+                System.arraycopy(arguments, 0, copy, 1, arguments.length);
+                result = method.invoke(null, copy);
+            } else if (BeansUtils.NEWINSTANCE.equals(methodName)
+                    && target == Array.class) {
+                result = Array.newInstance((Class<?>) arguments[0],
+                        ((Integer) arguments[1]).intValue());
+            } else if (BeansUtils.NEW.equals(methodName)
+                    || BeansUtils.NEWINSTANCE.equals(methodName)) {
+                if (target instanceof Class<?>) {
+                    Constructor<?> constructor = findConstructor(
+                            (Class<?>) target, arguments);
+                    result = constructor.newInstance(arguments);
                 } else {
-                    if ("new".equals(theMethodName)) { //$NON-NLS-1$
+                    if (BeansUtils.NEW.equals(methodName)) {
                         throw new NoSuchMethodException(this.toString());
                     }
                     // target class declares a public named "newInstance" method
-                    Method method = findMethod(theTarget.getClass(),
-                            theMethodName, theArguments, false);
-                    result = method.invoke(theTarget, theArguments);
+                    Method method = findMethod(targetClass, methodName,
+                            arguments, false);
+                    result = method.invoke(target, arguments);
                 }
-            } else if (theMethodName.equals("newArray")) {//$NON-NLS-1$
+            } else if (methodName.equals(BeansUtils.NEWARRAY)) {
                 // create a new array instance without length attribute
-                int length = theArguments.length;
-                Class<?> clazz = (Class<?>) theTarget;
+                Class<?> clazz = (Class<?>) target, argClass;
 
                 // check the element types of array
-                for (int i = 0; i < length; i++) {
-                    boolean isNull = theArguments[i] == null;
-                    boolean isPrimitiveWrapper = isNull ? false
-                            : isPrimitiveWrapper(theArguments[i].getClass(),
-                                    clazz);
-                    boolean isAssignable = isNull ? false : clazz
-                            .isAssignableFrom(theArguments[i].getClass());
-                    if (!isNull && !isPrimitiveWrapper && !isAssignable) {
-                        throw new IllegalArgumentException(Messages
-                                .getString("beans.63")); //$NON-NLS-1$
+                for (int index = 0; index < arguments.length; index++) {
+                    argClass = arguments[index] == null ? null
+                            : arguments[index].getClass();
+                    if (argClass != null && !clazz.isAssignableFrom(argClass)
+                            && !BeansUtils.isPrimitiveWrapper(argClass, clazz)) {
+                        throw new IllegalArgumentException(
+                                Messages.getString("beans.63")); //$NON-NLS-1$
                     }
                 }
-                result = Array.newInstance(clazz, length);
+                result = Array.newInstance(clazz, arguments.length);
                 if (clazz.isPrimitive()) {
                     // Copy element according to primitive types
-                    arrayCopy(clazz, theArguments, result, length);
+                    arrayCopy(clazz, arguments, result, arguments.length);
                 } else {
                     // Copy element of Objects
-                    System.arraycopy(theArguments, 0, result, 0, length);
+                    System.arraycopy(arguments, 0, result, 0, arguments.length);
                 }
                 return result;
-            } else if (theTarget instanceof Class<?>) {
+            } else if (target instanceof Class<?>) {
                 Method method = null;
-                boolean found = false;
                 try {
                     /*
                      * Try to look for a static method of class described by the
                      * given Class object at first process only if the class
                      * differs from Class itself
                      */
-                    if (theTarget != Class.class) {
-                        method = findMethod((Class<?>) theTarget, theMethodName, theArguments, true);
-                        result = method.invoke(null, theArguments);
-                        found = true;
+                    if (target != Class.class) {
+                        method = findMethod((Class<?>) target, methodName,
+                                arguments, true);
+                        result = method.invoke(null, arguments);
                     }
                 } catch (NoSuchMethodException e) {
                     // expected
                 }
-                if (!found) {
+                if (method == null) {
                     // static method was not found
                     // try to invoke method of Class object
-                    if (theMethodName.equals("forName") //$NON-NLS-1$
-                            && theArguments.length == 1 && theArguments[0] instanceof String) {
+                    if (BeansUtils.FORNAME.equals(methodName)
+                            && arguments.length == 1
+                            && arguments[0] instanceof String) {
                         // special handling of Class.forName(String)
                         try {
-                            result = Class.forName((String) theArguments[0]);
+                            result = Class.forName((String) arguments[0]);
                         } catch (ClassNotFoundException e2) {
-                            result = Class.forName((String) theArguments[0], true, Thread
-                                    .currentThread().getContextClassLoader());
+                            result = Class.forName((String) arguments[0], true,
+                                    Thread.currentThread()
+                                            .getContextClassLoader());
                         }
                     } else {
-                        method = findMethod(theTarget.getClass(), theMethodName, theArguments, false);
-                        result = method.invoke(theTarget, theArguments);
-                    }
+                        method = findMethod(targetClass, methodName, arguments,
+                                false);
+                        result = method.invoke(target, arguments);
+                    }
+                }
+            } else if (target instanceof Iterator<?>) {
+                final Iterator<?> iterator = (Iterator<?>) target;
+                final Method method = findMethod(targetClass, methodName,
+                        arguments, false);
+                if (iterator.hasNext()) {
+                    result = new PrivilegedAction<Object>() {
+                        public Object run() {
+                            try {
+                                method.setAccessible(true);
+                                return (method.invoke(iterator, new Object[0]));
+                            } catch (Exception e) {
+                                // ignore
+                            }
+                            return null;
+                        }
+
+                    }.run();
                 }
-            } else if (theTarget instanceof Iterator<?>){
-            	final Iterator<?> iterator = (Iterator<?>) theTarget;
-				final Method method = findMethod(theTarget.getClass(), theMethodName,
-						theArguments, false);
-				if (iterator.hasNext()) {
-					PrivilegedAction<Object> action = new PrivilegedAction<Object>() {
-
-						public Object run() {
-							try {
-								method.setAccessible(true);
-								return (method.invoke(iterator, new Object[0]));
-							} catch (Exception e) {
-								// ignore
-							} 
-							return null;
-						}
-						
-					};
-					result = action.run();
-				}
             } else {
-                Method method = findMethod(theTarget.getClass(), theMethodName,
-                        theArguments, false);
+                Method method = findMethod(targetClass, methodName, arguments,
+                        false);
                 method.setAccessible(true);
-                result = method.invoke(theTarget, theArguments);
+                result = method.invoke(target, arguments);
             }
         } catch (InvocationTargetException ite) {
             Throwable t = ite.getCause();
@@ -236,122 +220,109 @@ public class Statement {
         }
         return result;
     }
-    
+
     private void arrayCopy(Class<?> type, Object[] src, Object dest, int length) {
         if (type == boolean.class) {
             boolean[] destination = (boolean[]) dest;
-            for (int i = 0; i < length; i++) {
-                destination[i] = ((Boolean) src[i]).booleanValue();
+            for (int index = 0; index < length; index++) {
+                destination[index] = ((Boolean) src[index]).booleanValue();
             }
         } else if (type == short.class) {
             short[] destination = (short[]) dest;
-            for (int i = 0; i < length; i++) {
-                destination[i] = ((Short) src[i]).shortValue();
+            for (int index = 0; index < length; index++) {
+                destination[index] = ((Short) src[index]).shortValue();
             }
         } else if (type == byte.class) {
             byte[] destination = (byte[]) dest;
-            for (int i = 0; i < length; i++) {
-                destination[i] = ((Byte) src[i]).byteValue();
+            for (int index = 0; index < length; index++) {
+                destination[index] = ((Byte) src[index]).byteValue();
             }
         } else if (type == char.class) {
             char[] destination = (char[]) dest;
-            for (int i = 0; i < length; i++) {
-                destination[i] = ((Character) src[i]).charValue();
+            for (int index = 0; index < length; index++) {
+                destination[index] = ((Character) src[index]).charValue();
             }
         } else if (type == int.class) {
             int[] destination = (int[]) dest;
-            for (int i = 0; i < length; i++) {
-                destination[i] = ((Integer) src[i]).intValue();
+            for (int index = 0; index < length; index++) {
+                destination[index] = ((Integer) src[index]).intValue();
             }
         } else if (type == long.class) {
             long[] destination = (long[]) dest;
-            for (int i = 0; i < length; i++) {
-                destination[i] = ((Long) src[i]).longValue();
+            for (int index = 0; index < length; index++) {
+                destination[index] = ((Long) src[index]).longValue();
             }
         } else if (type == float.class) {
             float[] destination = (float[]) dest;
-            for (int i = 0; i < length; i++) {
-                destination[i] = ((Float) src[i]).floatValue();
+            for (int index = 0; index < length; index++) {
+                destination[index] = ((Float) src[index]).floatValue();
             }
         } else if (type == double.class) {
             double[] destination = (double[]) dest;
-            for (int i = 0; i < length; i++) {
-                destination[i] = ((Double) src[i]).doubleValue();
+            for (int index = 0; index < length; index++) {
+                destination[index] = ((Double) src[index]).doubleValue();
             }
         }
     }
 
-    private Method findArrayMethod(String theMethodName, Object[] theArguments) throws NoSuchMethodException {
+    private Method findArrayMethod(String methodName, Object[] args)
+            throws NoSuchMethodException {
         // the code below reproduces exact RI exception throwing behavior
-        if (!theMethodName.equals("set") && !theMethodName.equals("get")) { //$NON-NLS-1$ //$NON-NLS-2$
+        boolean isGet = BeansUtils.GET.equals(methodName); //$NON-NLS-1$
+        boolean isSet = BeansUtils.SET.equals(methodName); //$NON-NLS-1$
+        if (!isGet && !isSet) {
             throw new NoSuchMethodException(Messages.getString("beans.3C")); //$NON-NLS-1$
-        } else if (theArguments.length > 0 && theArguments[0].getClass() != Integer.class) {
+        } else if (args.length > 0 && args[0].getClass() != Integer.class) {
             throw new ClassCastException(Messages.getString("beans.3D")); //$NON-NLS-1$
-        } else if (theMethodName.equals("get") && (theArguments.length != 1)) { //$NON-NLS-1$
-            throw new ArrayIndexOutOfBoundsException(Messages.getString("beans.3E")); //$NON-NLS-1$
-        } else if (theMethodName.equals("set") && (theArguments.length != 2)) { //$NON-NLS-1$
-            throw new ArrayIndexOutOfBoundsException(Messages.getString("beans.3F")); //$NON-NLS-1$
-        }
-        if (theMethodName.equals("get")) { //$NON-NLS-1$
-            return Array.class.getMethod("get", new Class[] { Object.class, //$NON-NLS-1$
-                    int.class });
-        }
-        return Array.class.getMethod("set", new Class[] { Object.class, //$NON-NLS-1$
-                int.class, Object.class });
-    }
-
-    private Constructor<?> findConstructor(Class<?> targetClass, Object[] theArguments) throws NoSuchMethodException {
-        Class<?>[] argClasses = getClasses(theArguments);
+        } else if (isGet && args.length != 1) {
+            throw new ArrayIndexOutOfBoundsException(
+                    Messages.getString("beans.3E")); //$NON-NLS-1$
+        } else if (isSet && args.length != 2) {
+            throw new ArrayIndexOutOfBoundsException(
+                    Messages.getString("beans.3F")); //$NON-NLS-1$
+        }
+
+        Class<?>[] paraTypes = isGet ? new Class<?>[] { Object.class, int.class }
+                : new Class<?>[] { Object.class, int.class, Object.class };
+        return Array.class.getMethod(methodName, paraTypes);
+    }
+
+    private Constructor<?> findConstructor(Class<?> clazz, Object[] args)
+            throws NoSuchMethodException {
+        Class<?>[] argTypes = getTypes(args), paraTypes, resultParaTypes;
         Constructor<?> result = null;
-        Constructor<?>[] constructors = targetClass.getConstructors();
-        for (Constructor<?> constructor : constructors) {
-            Class<?>[] parameterTypes = constructor.getParameterTypes();
-            if (parameterTypes.length == argClasses.length) {
-                boolean found = true;
-                for (int j = 0; j < parameterTypes.length; ++j) {
-                    boolean argIsNull = argClasses[j] == null;
-                    boolean argIsPrimitiveWrapper = isPrimitiveWrapper(argClasses[j],
-                            parameterTypes[j]);
-                    boolean paramIsPrimitive = parameterTypes[j].isPrimitive();
-                    boolean paramIsAssignable = argIsNull ? false : parameterTypes[j]
-                            .isAssignableFrom(argClasses[j]);
-                    if (!argIsNull && !paramIsAssignable && !argIsPrimitiveWrapper || argIsNull
-                            && paramIsPrimitive) {
-                        found = false;
-                        break;
-                    }
+        boolean isAssignable;
+        for (Constructor<?> constructor : clazz.getConstructors()) {
+            paraTypes = constructor.getParameterTypes();
+            if (match(argTypes, paraTypes)) {
+                if (result == null) {
+                    // first time, set constructor
+                    result = constructor;
+                    continue;
                 }
-                if (found) {
-                    if (result == null) {
-                        // first time, set constructor
-                        result = constructor;
-                        continue;
-                    }
-                    // find out more suitable constructor
-                    Class<?>[] resultParameterTypes = result
-                            .getParameterTypes();
-                    boolean isAssignable = true;
-                    for (int j = 0; j < parameterTypes.length; ++j) {
-                        if (theArguments[j] != null
-                                && !(isAssignable &= resultParameterTypes[j]
-                                        .isAssignableFrom(parameterTypes[j]))) {
-                            break;
-                        }
-                        if (theArguments[j] == null
-                                && !(isAssignable &= parameterTypes[j]
-                                        .isAssignableFrom(resultParameterTypes[j]))) {
-                            break;
-                        }
+                // find out more suitable constructor
+                resultParaTypes = result.getParameterTypes();
+                isAssignable = true;
+                for (int index = 0; index < paraTypes.length; index++) {
+                    if (argTypes[index] != null
+                            && !(isAssignable &= resultParaTypes[index]
+                                    .isAssignableFrom(paraTypes[index]))) {
+                        break;
                     }
-                    if (isAssignable) {
-                        result = constructor;
+                    if (argTypes[index] == null
+                            && !(isAssignable &= paraTypes[index]
+                                    .isAssignableFrom(resultParaTypes[index]))) {
+                        break;
                     }
                 }
+                if (isAssignable) {
+                    result = constructor;
+                }
             }
         }
         if (result == null) {
             throw new NoSuchMethodException(Messages.getString(
-                    "beans.40", targetClass.getName())); //$NON-NLS-1$
+                    "beans.40", clazz.getName())); //$NON-NLS-1$
         }
         return result;
     }
@@ -359,90 +330,91 @@ public class Statement {
     /**
      * Searches for best matching method for given name and argument types.
      */
-    static Method findMethod(Class<?> targetClass, String methodName, Object[] arguments,
-            boolean methodIsStatic) throws NoSuchMethodException {
-        Class<?>[] argClasses = getClasses(arguments);
+    static Method findMethod(Class<?> clazz, String methodName, Object[] args,
+            boolean isStatic) throws NoSuchMethodException {
+        Class<?>[] argTypes = getTypes(args);
+
         Method[] methods = null;
-        
-        if(cache.containsKey(targetClass)){
-            methods = cache.get(targetClass);
-        }else{
-            methods = targetClass.getMethods();
-            cache.put(targetClass, methods);
-        }
-        
-        ArrayList<Method> foundMethods = new ArrayList<Method>();
-        Method[] foundMethodsArr;
+        if (classMethodsCache.containsKey(clazz)) {
+            methods = classMethodsCache.get(clazz);
+        } else {
+            methods = clazz.getMethods();
+            classMethodsCache.put(clazz, methods);
+        }
+
+        ArrayList<Method> fitMethods = new ArrayList<Method>();
         for (Method method : methods) {
-            int mods = method.getModifiers();
-            if (method.getName().equals(methodName)
-                    && (methodIsStatic ? Modifier.isStatic(mods) : true)) {
-                Class<?>[] parameterTypes = method.getParameterTypes();
-                if (parameterTypes.length == argClasses.length) {
-                    boolean found = true;
-                    for (int j = 0; j < parameterTypes.length; ++j) {
-                        boolean argIsNull = (argClasses[j] == null);
-                        boolean argIsPrimitiveWrapper = isPrimitiveWrapper(argClasses[j],
-                                parameterTypes[j]);
-                        boolean paramIsAssignable = argIsNull ? false : parameterTypes[j]
-                                .isAssignableFrom(argClasses[j]);
-                        if (!argIsNull && !paramIsAssignable && !argIsPrimitiveWrapper){
-                            found = false;
-                            break;
-                        }
-                    }
-                    if (found) {
-                        foundMethods.add(method);
+            if (methodName.equals(method.getName())) {
+                if (!isStatic || Modifier.isStatic(method.getModifiers())) {
+                    if (match(argTypes, method.getParameterTypes())) {
+                        fitMethods.add(method);
                     }
                 }
             }
         }
-        if (foundMethods.size() == 0) {
-            throw new NoSuchMethodException(Messages.getString("beans.41", methodName)); //$NON-NLS-1$
+        int fitSize = fitMethods.size();
+        if (fitSize == 0) {
+            throw new NoSuchMethodException(Messages.getString(
+                    "beans.41", methodName)); //$NON-NLS-1$
         }
-        if(foundMethods.size() == 1){
-            return foundMethods.get(0);
+        if (fitSize == 1) {
+            return fitMethods.get(0);
         }
-        foundMethodsArr = foundMethods.toArray(new Method[foundMethods.size()]);
-        //find the most relevant one
-        MethodComparator comparator = new MethodComparator(methodName, argClasses);
-        Method chosenOne = foundMethodsArr[0];
-        for (int i = 1; i < foundMethodsArr.length; i++) {
-            int difference = comparator.compare(chosenOne, foundMethodsArr[i]);
-            //if 2 methods have same relevance, throw exception
-            if (difference == 0) {
+        // find the most relevant one
+        MethodComparator comparator = new MethodComparator(methodName, argTypes);
+        Method[] fitMethodArray = fitMethods.toArray(new Method[fitSize]);
+        Method onlyMethod = fitMethodArray[0];
+        Class<?> onlyReturnType, fitReturnType;
+        int difference;
+        for (int i = 1; i < fitMethodArray.length; i++) {
+            // if 2 methods have same relevance, check their return type
+            if ((difference = comparator.compare(onlyMethod, fitMethodArray[i])) == 0) {
                 // if 2 methods have the same signature, check their return type
-                Class<?> oneReturnType = chosenOne.getReturnType();
-                Class<?> foundMethodReturnType = foundMethodsArr[i]
-                        .getReturnType();
-                if (oneReturnType.equals(foundMethodReturnType)) {
-                    // if 2 methods have the same signature and return type,
-                    // throw NoSuchMethodException
+                onlyReturnType = onlyMethod.getReturnType();
+                fitReturnType = fitMethodArray[i].getReturnType();
+                if (onlyReturnType == fitReturnType) {
+                    // if 2 methods have the same relevance and return type
                     throw new NoSuchMethodException(Messages.getString(
                             "beans.62", methodName)); //$NON-NLS-1$
                 }
 
-                if (oneReturnType.isAssignableFrom(foundMethodReturnType)) {
-                    // if chosenOne is super class or interface of
-                    // foundMethodReturnType, set chosenOne to foundMethodArr[i]
-                    chosenOne = foundMethodsArr[i];
+                if (onlyReturnType.isAssignableFrom(fitReturnType)) {
+                    // if onlyReturnType is super class or interface of
+                    // fitReturnType, set onlyMethod to fitMethodArray[i]
+                    onlyMethod = fitMethodArray[i];
                 }
             }
-            if(difference > 0){
-                chosenOne = foundMethodsArr[i];
+            if (difference > 0) {
+                onlyMethod = fitMethodArray[i];
             }
         }
-        return chosenOne;
+        return onlyMethod;
+    }
+
+    private static boolean match(Class<?>[] argTypes, Class<?>[] paraTypes) {
+        if (paraTypes.length != argTypes.length) {
+            return false;
+        }
+        for (int index = 0; index < paraTypes.length; index++) {
+            if (argTypes[index] != null
+                    && !paraTypes[index].isAssignableFrom(argTypes[index])
+                    && !BeansUtils.isPrimitiveWrapper(argTypes[index],
+                            paraTypes[index])) {
+                return false;
+            }
+        }
+        return true;
     }
 
     static boolean isStaticMethodCall(Statement stmt) {
         Object target = stmt.getTarget();
-        String mName = stmt.getMethodName();
+        String methodName = stmt.getMethodName();
         if (!(target instanceof Class<?>)) {
             return false;
         }
         try {
-            Statement.findMethod((Class<?>) target, mName, stmt.getArguments(), true);
+            Statement.findMethod((Class<?>) target, methodName,
+                    stmt.getArguments(), true);
             return true;
         } catch (NoSuchMethodException e) {
             return false;
@@ -475,7 +447,8 @@ public class Statement {
         String methodName = stmt.getMethodName();
         Object[] args = stmt.getArguments();
         String[] sig = new String[pdConstructorSignatures[0].length];
-        if (target == null || methodName == null || args == null || args.length == 0) {
+        if (target == null || methodName == null || args == null
+                || args.length == 0) {
             // not a constructor for sure
             return false;
         }
@@ -483,7 +456,8 @@ public class Statement {
         sig[1] = methodName;
         for (int i = 2; i < sig.length; i++) {
             if (args.length > i - 2) {
-                sig[i] = args[i - 2] != null ? args[i - 2].getClass().getName() : "null"; //$NON-NLS-1$
+                sig[i] = args[i - 2] != null ? args[i - 2].getClass().getName()
+                        : "null"; //$NON-NLS-1$
             } else {
                 sig[i] = ""; //$NON-NLS-1$
             }
@@ -496,16 +470,6 @@ public class Statement {
         return false;
     }
 
-    private static boolean isPrimitiveWrapper(Class<?> wrapper, Class<?> base) {
-        return (base == boolean.class) && (wrapper == Boolean.class) || (base == byte.class)
-                && (wrapper == Byte.class) || (base == char.class)
-                && (wrapper == Character.class) || (base == short.class)
-                && (wrapper == Short.class) || (base == int.class)
-                && (wrapper == Integer.class) || (base == long.class)
-                && (wrapper == Long.class) || (base == float.class) && (wrapper == Float.class)
-                || (base == double.class) && (wrapper == Double.class);
-    }
-
     private static Class<?> getPrimitiveWrapper(Class<?> base) {
         Class<?> res = null;
         if (base == boolean.class) {
@@ -528,31 +492,13 @@ public class Statement {
         return res;
     }
 
-    static String convertClassName(Class<?> type) {
-        StringBuilder clazzNameSuffix = new StringBuilder();
-        Class<?> componentType = null;
-        Class<?> clazzType = type;
-        while ((componentType = clazzType.getComponentType()) != null) {
-            clazzNameSuffix.append("Array"); //$NON-NLS-1$
-            clazzType = componentType;
-        }
-        String clazzName = clazzType.getName();
-        int k = clazzName.lastIndexOf('.');
-        if (k != -1 && k < clazzName.length()) {
-            clazzName = clazzName.substring(k + 1);
-        }
-        if (clazzNameSuffix.length() == 0 && "String".equals(clazzName)) { //$NON-NLS-1$
-            return "\"\""; //$NON-NLS-1$
-        }
-        return clazzName + clazzNameSuffix.toString();
-    }
-
-    private static Class<?>[] getClasses(Object[] arguments) {
-        Class<?>[] result = new Class[arguments.length];
-        for (int i = 0; i < arguments.length; ++i) {
-            result[i] = (arguments[i] == null) ? null : arguments[i].getClass();
+    private static Class<?>[] getTypes(Object[] arguments) {
+        Class<?>[] types = new Class[arguments.length];
+        for (int index = 0; index < arguments.length; ++index) {
+            types[index] = (arguments[index] == null) ? null : arguments[index]
+                    .getClass();
         }
-        return result;
+        return types;
     }
 
     /**
@@ -568,7 +514,8 @@ public class Statement {
 
         private final Map<Method, Integer> cache;
 
-        public MethodComparator(String refMethodName, Class<?>[] refArgumentTypes) {
+        public MethodComparator(String refMethodName,
+                Class<?>[] refArgumentTypes) {
             this.referenceMethodName = refMethodName;
             this.referenceMethodArgumentTypes = refArgumentTypes;
             cache = new HashMap<Method, Integer>();
@@ -615,7 +562,8 @@ public class Statement {
                 if (argumentTypes[i].isPrimitive()) {
                     argumentTypes[i] = getPrimitiveWrapper(argumentTypes[i]);
                 }
-                totalNorm += getDistance(referenceMethodArgumentTypes[i], argumentTypes[i]);
+                totalNorm += getDistance(referenceMethodArgumentTypes[i],
+                        argumentTypes[i]);
             }
             return totalNorm;
         }
@@ -656,7 +604,7 @@ public class Statement {
                 }
                 return (bestDist != INFINITY ? bestDist + 1 : INFINITY);
             }
-            return (superDist != INFINITY ? superDist + 1 : INFINITY);
+            return (superDist != INFINITY ? superDist + 2 : INFINITY);
         }
     }
-}
+}
\ No newline at end of file

Modified: harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/UtilDatePersistenceDelegate.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/UtilDatePersistenceDelegate.java?rev=1002152&r1=1002151&r2=1002152&view=diff
==============================================================================
--- harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/UtilDatePersistenceDelegate.java (original)
+++ harmony/enhanced/java/branches/mrh/classlib/modules/beans/src/main/java/java/beans/UtilDatePersistenceDelegate.java Tue Sep 28 13:08:47 2010
@@ -19,12 +19,13 @@ package java.beans;
 
 import java.util.Date;
 
+import org.apache.harmony.beans.BeansUtils;
+
 class UtilDatePersistenceDelegate extends DefaultPersistenceDelegate {
     @Override
-    @SuppressWarnings("boxing")
     protected Expression instantiate(Object oldInstance, Encoder enc) {
         Date date = (Date) oldInstance;
         return new Expression(oldInstance, oldInstance.getClass(),
-                Statement.CONSTRUCTOR_NAME, new Object[] { date.getTime() });
+                BeansUtils.NEW, new Object[] { date.getTime() });
     }
 }