8006179: JSR292 MethodHandles lookup with interface using findVirtual()

Reviewed-by: jrose, twisti
This commit is contained in:
Vladimir Ivanov 2013-02-22 03:00:12 -08:00
parent 98e5a4b393
commit f179e269b9

View File

@ -51,6 +51,16 @@ class DirectMethodHandle extends MethodHandle {
private DirectMethodHandle(MethodType mtype, LambdaForm form, MemberName member) {
super(mtype, form);
if (!member.isResolved()) throw new InternalError();
if (member.getDeclaringClass().isInterface() && !member.isAbstract()) {
// Check for corner case: invokeinterface of Object method
MemberName m = new MemberName(Object.class, member.getName(), member.getMethodType(), member.getReferenceKind());
m = MemberName.getFactory().resolveOrNull(m.getReferenceKind(), m, null);
if (m != null && m.isPublic()) {
member = m;
}
}
this.member = member;
}