commons-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mben...@apache.org
Subject svn commit: r905786 - /commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/MemberUtils.java
Date Tue, 02 Feb 2010 20:39:41 GMT
Author: mbenson
Date: Tue Feb  2 20:39:36 2010
New Revision: 905786

URL: http://svn.apache.org/viewvc?rev=905786&view=rev
Log:
remove pre Java 5 workaround

Modified:
    commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/MemberUtils.java

Modified: commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/MemberUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/MemberUtils.java?rev=905786&r1=905785&r2=905786&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/MemberUtils.java
(original)
+++ commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/MemberUtils.java
Tue Feb  2 20:39:36 2010
@@ -18,16 +18,14 @@
 
 import java.lang.reflect.AccessibleObject;
 import java.lang.reflect.Member;
-import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 
-import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.ClassUtils;
-import org.apache.commons.lang3.SystemUtils;
 
 /**
  * Contains common code for working with Methods/Constructors, extracted and
- * refactored from <code>MethodUtils</code> when it was imported from Commons
BeanUtils.
+ * refactored from <code>MethodUtils</code> when it was imported from Commons
+ * BeanUtils.
  *
  * @author Apache Software Foundation
  * @author Steve Cohen
@@ -40,35 +38,20 @@
 
     private static final int ACCESS_TEST = Modifier.PUBLIC | Modifier.PROTECTED | Modifier.PRIVATE;
 
-    private static final Method IS_SYNTHETIC;
-    static {
-        Method isSynthetic = null;
-        if (SystemUtils.isJavaVersionAtLeast(1.5f)) {
-            // cannot call synthetic methods:
-            try {
-                isSynthetic = Member.class.getMethod("isSynthetic",
-                        ArrayUtils.EMPTY_CLASS_ARRAY);
-            } catch (Exception e) {
-            }
-        }
-        IS_SYNTHETIC = isSynthetic;
-    }
-
     /** Array of primitive number types ordered by "promotability" */
-    private static final Class<?>[] ORDERED_PRIMITIVE_TYPES = { Byte.TYPE,
-            Short.TYPE, Character.TYPE, Integer.TYPE, Long.TYPE, Float.TYPE,
-            Double.TYPE };
+    private static final Class<?>[] ORDERED_PRIMITIVE_TYPES = { Byte.TYPE, Short.TYPE,
+            Character.TYPE, Integer.TYPE, Long.TYPE, Float.TYPE, Double.TYPE };
 
     /**
      * XXX Default access superclass workaround
      *
-     * When a public class has a default access superclass with public
-     * members, these members are accessible. Calling them from
-     * compiled code works fine. Unfortunately, on some JVMs, using reflection to invoke
these
-     * members seems to (wrongly) to prevent access even when the
-     * modifer is public. Calling setAccessible(true) solves the problem
-     * but will only work from sufficiently privileged code. Better
-     * workarounds would be gratefully accepted.
+     * When a public class has a default access superclass with public members,
+     * these members are accessible. Calling them from compiled code works fine.
+     * Unfortunately, on some JVMs, using reflection to invoke these members
+     * seems to (wrongly) to prevent access even when the modifer is public.
+     * Calling setAccessible(true) solves the problem but will only work from
+     * sufficiently privileged code. Better workarounds would be gratefully
+     * accepted.
      * @param o the AccessibleObject to set as accessible
      */
     static void setAccessibleWorkaround(AccessibleObject o) {
@@ -76,7 +59,8 @@
             return;
         }
         Member m = (Member) o;
-        if (Modifier.isPublic(m.getModifiers()) && isPackageAccess(m.getDeclaringClass().getModifiers()))
{
+        if (Modifier.isPublic(m.getModifiers())
+                && isPackageAccess(m.getDeclaringClass().getModifiers())) {
             try {
                 o.setAccessible(true);
             } catch (SecurityException e) {
@@ -100,33 +84,19 @@
      * @return true if <code>m</code> is accessible
      */
     static boolean isAccessible(Member m) {
-        return m != null && Modifier.isPublic(m.getModifiers())
-                && !isSynthetic(m);
-    }
-
-    /**
-     * Try to learn whether a given member, on JDK >= 1.5, is synthetic.
-     * @param m Member to check
-     * @return true if <code>m</code> was introduced by the compiler.
-     */
-    static boolean isSynthetic(Member m) {
-        if (IS_SYNTHETIC != null) {
-            try {
-                return ((Boolean) IS_SYNTHETIC.invoke(m, (Object[]) null)).booleanValue();
-            } catch (Exception e) {
-            }
-        }
-        return false;
+        return m != null && Modifier.isPublic(m.getModifiers()) && !m.isSynthetic();
     }
 
     /**
      * Compare the relative fitness of two sets of parameter types in terms of
      * matching a third set of runtime parameter types, such that a list ordered
-     * by the results of the comparison would return the best match first (least).
+     * by the results of the comparison would return the best match first
+     * (least).
      *
      * @param left the "left" parameter set
      * @param right the "right" parameter set
-     * @param actual the runtime parameter types to match against <code>left</code>/<code>right</code>
+     * @param actual the runtime parameter types to match against
+     * <code>left</code>/<code>right</code>
      * @return int consistent with <code>compare</code> semantics
      */
     static int compareParameterTypes(Class<?>[] left, Class<?>[] right, Class<?>[]
actual) {
@@ -136,14 +106,13 @@
     }
 
     /**
-     * Returns the sum of the object transformation cost for each class in the source
-     * argument list.
+     * Returns the sum of the object transformation cost for each class in the
+     * source argument list.
      * @param srcArgs The source arguments
      * @param destArgs The destination arguments
      * @return The total transformation cost
      */
-    private static float getTotalTransformationCost(Class<?>[] srcArgs,
-            Class<?>[] destArgs) {
+    private static float getTotalTransformationCost(Class<?>[] srcArgs, Class<?>[]
destArgs) {
         float totalCost = 0.0f;
         for (int i = 0; i < srcArgs.length; i++) {
             Class<?> srcClass, destClass;
@@ -155,22 +124,20 @@
     }
 
     /**
-     * Gets the number of steps required needed to turn the source class into the 
-     * destination class. This represents the number of steps in the object hierarchy 
-     * graph.
+     * Gets the number of steps required needed to turn the source class into
+     * the destination class. This represents the number of steps in the object
+     * hierarchy graph.
      * @param srcClass The source class
      * @param destClass The destination class
      * @return The cost of transforming an object
      */
-    private static float getObjectTransformationCost(Class<?> srcClass,
-            Class<?> destClass) {
+    private static float getObjectTransformationCost(Class<?> srcClass, Class<?>
destClass) {
         if (destClass.isPrimitive()) {
             return getPrimitivePromotionCost(srcClass, destClass);
         }
         float cost = 0.0f;
         while (destClass != null && !destClass.equals(srcClass)) {
-            if (destClass.isInterface()
-                    && ClassUtils.isAssignable(srcClass, destClass)) {
+            if (destClass.isInterface() && ClassUtils.isAssignable(srcClass, destClass))
{
                 // slight penalty for interface match.
                 // we still want an exact match to override an interface match,
                 // but
@@ -193,13 +160,13 @@
     }
 
     /**
-     * Get the number of steps required to promote a primitive number to another type.
+     * Get the number of steps required to promote a primitive number to another
+     * type.
      * @param srcClass the (primitive) source class
      * @param destClass the (primitive) destination class
      * @return The cost of promoting the primitive
      */
-    private static float getPrimitivePromotionCost(final Class<?> srcClass,
-            final Class<?> destClass) {
+    private static float getPrimitivePromotionCost(final Class<?> srcClass, final Class<?>
destClass) {
         float cost = 0.0f;
         Class<?> cls = srcClass;
         if (!cls.isPrimitive()) {



Mime
View raw message