[jboss-cvs] JBossAS SVN: r105217 - projects/jboss-mdr/branches/Branch_2_0/src/main/java/org/jboss/metadata/plugins/loader/reflection.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue May 25 09:34:01 EDT 2010


Author: alesj
Date: 2010-05-25 09:34:01 -0400 (Tue, 25 May 2010)
New Revision: 105217

Modified:
   projects/jboss-mdr/branches/Branch_2_0/src/main/java/org/jboss/metadata/plugins/loader/reflection/AnnotatedElementMetaDataLoader.java
Log:
Port JBMDR-69 parameters no-clone fix.

Modified: projects/jboss-mdr/branches/Branch_2_0/src/main/java/org/jboss/metadata/plugins/loader/reflection/AnnotatedElementMetaDataLoader.java
===================================================================
--- projects/jboss-mdr/branches/Branch_2_0/src/main/java/org/jboss/metadata/plugins/loader/reflection/AnnotatedElementMetaDataLoader.java	2010-05-25 13:31:47 UTC (rev 105216)
+++ projects/jboss-mdr/branches/Branch_2_0/src/main/java/org/jboss/metadata/plugins/loader/reflection/AnnotatedElementMetaDataLoader.java	2010-05-25 13:34:01 UTC (rev 105217)
@@ -292,56 +292,66 @@
       return null;
    }
    
+   /**
+    * Search for real bridge method.
+    *
+    * @param bridge the current method
+    * @return real bridge method
+    */
    private Method searchForRealBridgeMethodSignature(Method bridge)
    {
+      Class<?> declaringClass = bridge.getDeclaringClass();
+      Class<?>[] parameters = bridge.getParameterTypes();
+
       List<Method> matching = new ArrayList<Method>();
-      Method[] all = bridge.getDeclaringClass().getDeclaredMethods();
-      for (int i = 0 ; i < all.length ; i++)
+      Method[] all = declaringClass.getDeclaredMethods();
+      for (Method m : all)
       {
-         if (all[i].getName().equals(bridge.getName()) &&
-               all[i].getParameterTypes().length == bridge.getParameterTypes().length &&
-               !all[i].equals(bridge) &&
-               !all[i].isBridge())
-            matching.add(all[i]);
+         if (m.getName().equals(bridge.getName()) &&
+               m.getParameterTypes().length == parameters.length &&
+               m.equals(bridge) == false &&
+               m.isBridge() == false)
+            matching.add(m);
       }
-      
+
       if (matching.size() == 1)
          return matching.get(0);
-      
+
       //Should not happen
       if (matching.size() == 0)
-         throw new IllegalStateException("No original methods found");
-      
+         throw new IllegalStateException("No original methods found: " + bridge);
+
       for (Iterator<Method> it = matching.iterator() ; it.hasNext() ; )
       {
          Method cur = it.next();
-         if (!bridge.getReturnType().isAssignableFrom(cur.getReturnType()))
+
+         if (bridge.getReturnType().isAssignableFrom(cur.getReturnType()) == false)
          {
             it.remove();
             continue;
          }
-         
-         
-         for (int i = 0 ; i < bridge.getParameterTypes().length ; i++)
+
+         Class<?>[] currentParameters = cur.getParameterTypes();
+         for (int i = 0 ; i < parameters.length ; i++)
          {
-            if (!bridge.getParameterTypes()[i].isAssignableFrom(cur.getParameterTypes()[i]))
+            if (parameters[i].isAssignableFrom(currentParameters[i]) == false)
             {
                it.remove();
-               continue;
+               break;
             }
          }
       }
 
       if (matching.size() == 1)
          return matching.get(0);
-       
+
       //Should not happen
       if (matching.size() == 0)
-         throw new IllegalStateException("No original methods found");
+         throw new IllegalStateException("No original methods found: " + bridge);
 
       if (log.isTraceEnabled())
          log.trace("Could not determine original method for " + bridge + " found: " + matching);
-      
+
       return null;
    }
 }




More information about the jboss-cvs-commits mailing list