8026502: java/lang/invoke/MethodHandleConstants.java fails on all platforms

Reviewed-by: iveresov, jrose
This commit is contained in:
Christian Thalinger 2013-10-24 10:52:15 -07:00
parent be2d6e6535
commit 1ac0200394

View File

@ -1716,6 +1716,13 @@ return mh1;
checkSymbolicClass(defc);
return mh;
}
// Treat MethodHandle.invoke and invokeExact specially.
if (defc == MethodHandle.class && refKind == REF_invokeVirtual) {
mh = findVirtualForMH(member.getName(), member.getMethodType());
if (mh != null) {
return mh;
}
}
MemberName resolved = resolveOrFail(refKind, member);
mh = getDirectMethodForConstant(refKind, defc, resolved);
if (mh instanceof DirectMethodHandle
@ -1768,12 +1775,6 @@ return mh1;
if (MethodHandleNatives.refKindIsField(refKind)) {
return getDirectFieldNoSecurityManager(refKind, defc, member);
} else if (MethodHandleNatives.refKindIsMethod(refKind)) {
if (defc == MethodHandle.class && refKind == REF_invokeVirtual) {
MethodHandle mh = findVirtualForMH(member.getName(), member.getMethodType());
if (mh != null) {
return mh;
}
}
return getDirectMethodNoSecurityManager(refKind, defc, member, lookupClass);
} else if (refKind == REF_newInvokeSpecial) {
return getDirectConstructorNoSecurityManager(defc, member);