--- a/jdk/src/java.base/share/classes/java/lang/invoke/DirectMethodHandle.java Mon Apr 04 15:48:28 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/DirectMethodHandle.java Sat Apr 23 05:04:27 2016 -0700
@@ -155,7 +155,7 @@
private static LambdaForm preparedLambdaForm(MemberName m) {
assert(m.isInvocable()) : m; // call preparedFieldLambdaForm instead
MethodType mtype = m.getInvocationType().basicType();
- assert(!m.isMethodHandleInvoke() || "invokeBasic".equals(m.getName())) : m;
+ assert(!m.isMethodHandleInvoke()) : m;
int which;
switch (m.getReferenceKind()) {
case REF_invokeVirtual: which = LF_INVVIRTUAL; break;
--- a/jdk/src/java.base/share/classes/java/lang/invoke/LambdaForm.java Mon Apr 04 15:48:28 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/LambdaForm.java Sat Apr 23 05:04:27 2016 -0700
@@ -1049,7 +1049,7 @@
this.member = member;
this.resolvedHandle = resolvedHandle;
// The following assert is almost always correct, but will fail for corner cases, such as PrivateInvokeTest.
- //assert(!isInvokeBasic());
+ //assert(!isInvokeBasic(member));
}
NamedFunction(MethodType basicInvokerType) {
assert(basicInvokerType == basicInvokerType.basicType()) : basicInvokerType;
@@ -1060,13 +1060,13 @@
// necessary to pass BigArityTest
this.member = Invokers.invokeBasicMethod(basicInvokerType);
}
- assert(isInvokeBasic());
+ assert(isInvokeBasic(member));
}
- private boolean isInvokeBasic() {
+ private static boolean isInvokeBasic(MemberName member) {
return member != null &&
- member.isMethodHandleInvoke() &&
- "invokeBasic".equals(member.getName());
+ member.getDeclaringClass() == MethodHandle.class &&
+ "invokeBasic".equals(member.getName());
}
// The next 2 constructors are used to break circular dependencies on MH.invokeStatic, etc.
@@ -1204,7 +1204,7 @@
assert(mh.type().basicType() == MethodType.genericMethodType(arity).changeReturnType(rtype))
: Arrays.asList(mh, rtype, arity);
MemberName member = mh.internalMemberName();
- if (member != null && member.getName().equals("invokeBasic") && member.isMethodHandleInvoke()) {
+ if (isInvokeBasic(member)) {
assert(arity > 0);
assert(a[0] instanceof MethodHandle);
MethodHandle mh2 = (MethodHandle) a[0];
--- a/jdk/src/java.base/share/classes/java/lang/invoke/MemberName.java Mon Apr 04 15:48:28 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/MemberName.java Sat Apr 23 05:04:27 2016 -0700
@@ -346,7 +346,6 @@
}
/** 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() {
final int bits = MH_INVOKE_MODS &~ Modifier.PUBLIC;
@@ -361,7 +360,6 @@
switch (name) {
case "invoke":
case "invokeExact":
- case "invokeBasic": // internal sig-poly method
return true;
default:
return false;
--- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandles.java Mon Apr 04 15:48:28 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandles.java Sat Apr 23 05:04:27 2016 -0700
@@ -951,8 +951,6 @@
return invoker(type);
if ("invokeExact".equals(name))
return exactInvoker(type);
- if ("invokeBasic".equals(name))
- return basicInvoker(type);
assert(!MemberName.isMethodHandleInvokeName(name));
return null;
}