提交 d0ad069a 编写于 作者: T twisti

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

Reviewed-by: iveresov, jrose
上级 1ce489a4
...@@ -1716,6 +1716,13 @@ return mh1; ...@@ -1716,6 +1716,13 @@ return mh1;
checkSymbolicClass(defc); checkSymbolicClass(defc);
return mh; 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); MemberName resolved = resolveOrFail(refKind, member);
mh = getDirectMethodForConstant(refKind, defc, resolved); mh = getDirectMethodForConstant(refKind, defc, resolved);
if (mh instanceof DirectMethodHandle if (mh instanceof DirectMethodHandle
...@@ -1768,12 +1775,6 @@ return mh1; ...@@ -1768,12 +1775,6 @@ return mh1;
if (MethodHandleNatives.refKindIsField(refKind)) { if (MethodHandleNatives.refKindIsField(refKind)) {
return getDirectFieldNoSecurityManager(refKind, defc, member); return getDirectFieldNoSecurityManager(refKind, defc, member);
} else if (MethodHandleNatives.refKindIsMethod(refKind)) { } 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); return getDirectMethodNoSecurityManager(refKind, defc, member, lookupClass);
} else if (refKind == REF_newInvokeSpecial) { } else if (refKind == REF_newInvokeSpecial) {
return getDirectConstructorNoSecurityManager(defc, member); return getDirectConstructorNoSecurityManager(defc, member);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册