[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