8154475: Clean up lookup visibility

Reviewed-by: vlivanov, mhaupt, ahgross
This commit is contained in:
John R Rose 2016-04-23 05:04:27 -07:00
parent b8549d7f13
commit a4ff82596a
4 changed files with 7 additions and 11 deletions

View File

@ -155,7 +155,7 @@ class DirectMethodHandle extends MethodHandle {
private static LambdaForm preparedLambdaForm(MemberName m) { private static LambdaForm preparedLambdaForm(MemberName m) {
assert(m.isInvocable()) : m; // call preparedFieldLambdaForm instead assert(m.isInvocable()) : m; // call preparedFieldLambdaForm instead
MethodType mtype = m.getInvocationType().basicType(); MethodType mtype = m.getInvocationType().basicType();
assert(!m.isMethodHandleInvoke() || "invokeBasic".equals(m.getName())) : m; assert(!m.isMethodHandleInvoke()) : m;
int which; int which;
switch (m.getReferenceKind()) { switch (m.getReferenceKind()) {
case REF_invokeVirtual: which = LF_INVVIRTUAL; break; case REF_invokeVirtual: which = LF_INVVIRTUAL; break;

View File

@ -1049,7 +1049,7 @@ class LambdaForm {
this.member = member; this.member = member;
this.resolvedHandle = resolvedHandle; this.resolvedHandle = resolvedHandle;
// The following assert is almost always correct, but will fail for corner cases, such as PrivateInvokeTest. // The following assert is almost always correct, but will fail for corner cases, such as PrivateInvokeTest.
//assert(!isInvokeBasic()); //assert(!isInvokeBasic(member));
} }
NamedFunction(MethodType basicInvokerType) { NamedFunction(MethodType basicInvokerType) {
assert(basicInvokerType == basicInvokerType.basicType()) : basicInvokerType; assert(basicInvokerType == basicInvokerType.basicType()) : basicInvokerType;
@ -1060,13 +1060,13 @@ class LambdaForm {
// necessary to pass BigArityTest // necessary to pass BigArityTest
this.member = Invokers.invokeBasicMethod(basicInvokerType); this.member = Invokers.invokeBasicMethod(basicInvokerType);
} }
assert(isInvokeBasic()); assert(isInvokeBasic(member));
} }
private boolean isInvokeBasic() { private static boolean isInvokeBasic(MemberName member) {
return member != null && return member != null &&
member.isMethodHandleInvoke() && member.getDeclaringClass() == MethodHandle.class &&
"invokeBasic".equals(member.getName()); "invokeBasic".equals(member.getName());
} }
// The next 2 constructors are used to break circular dependencies on MH.invokeStatic, etc. // The next 2 constructors are used to break circular dependencies on MH.invokeStatic, etc.
@ -1204,7 +1204,7 @@ class LambdaForm {
assert(mh.type().basicType() == MethodType.genericMethodType(arity).changeReturnType(rtype)) assert(mh.type().basicType() == MethodType.genericMethodType(arity).changeReturnType(rtype))
: Arrays.asList(mh, rtype, arity); : Arrays.asList(mh, rtype, arity);
MemberName member = mh.internalMemberName(); MemberName member = mh.internalMemberName();
if (member != null && member.getName().equals("invokeBasic") && member.isMethodHandleInvoke()) { if (isInvokeBasic(member)) {
assert(arity > 0); assert(arity > 0);
assert(a[0] instanceof MethodHandle); assert(a[0] instanceof MethodHandle);
MethodHandle mh2 = (MethodHandle) a[0]; MethodHandle mh2 = (MethodHandle) a[0];

View File

@ -346,7 +346,6 @@ import static java.lang.invoke.MethodHandleStatics.newInternalError;
} }
/** Utility method to query if this member is a method handle invocation (invoke or invokeExact). /** Utility method to query if this member is a method handle invocation (invoke or invokeExact).
* Also returns true for the non-public MH.invokeBasic.
*/ */
public boolean isMethodHandleInvoke() { public boolean isMethodHandleInvoke() {
final int bits = MH_INVOKE_MODS &~ Modifier.PUBLIC; final int bits = MH_INVOKE_MODS &~ Modifier.PUBLIC;
@ -361,7 +360,6 @@ import static java.lang.invoke.MethodHandleStatics.newInternalError;
switch (name) { switch (name) {
case "invoke": case "invoke":
case "invokeExact": case "invokeExact":
case "invokeBasic": // internal sig-poly method
return true; return true;
default: default:
return false; return false;

View File

@ -951,8 +951,6 @@ assertEquals("", (String) MH_newString.invokeExact());
return invoker(type); return invoker(type);
if ("invokeExact".equals(name)) if ("invokeExact".equals(name))
return exactInvoker(type); return exactInvoker(type);
if ("invokeBasic".equals(name))
return basicInvoker(type);
assert(!MemberName.isMethodHandleInvokeName(name)); assert(!MemberName.isMethodHandleInvokeName(name));
return null; return null;
} }