src/share/classes/java/lang/invoke/MemberName.java
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File jdk Cdiff src/share/classes/java/lang/invoke/MemberName.java

src/share/classes/java/lang/invoke/MemberName.java

Print this page

        

*** 234,243 **** --- 234,245 ---- } else if (isMethod()) { assert(staticIsConsistent()); assert(MethodHandleNatives.refKindIsMethod(refKind)); if (clazz.isInterface()) assert(refKind == REF_invokeInterface || + refKind == REF_invokeStatic || + refKind == REF_invokeSpecial || refKind == REF_invokeVirtual && isObjectPublicMethod()); } else { assert(false); } return true;
*** 266,276 **** case REF_newInvokeSpecial: // Looked up a virtual, can get (e.g.) final String.hashCode. assert(refKind == REF_invokeSpecial) : this; return true; } ! assert(false) : this; return true; } private boolean staticIsConsistent() { byte refKind = getReferenceKind(); return MethodHandleNatives.refKindIsStatic(refKind) == isStatic() || getModifiers() == 0; --- 268,278 ---- case REF_newInvokeSpecial: // Looked up a virtual, can get (e.g.) final String.hashCode. assert(refKind == REF_invokeSpecial) : this; return true; } ! assert(false) : this+" != "+MethodHandleNatives.refKindName((byte)originalRefKind); return true; } private boolean staticIsConsistent() { byte refKind = getReferenceKind(); return MethodHandleNatives.refKindIsStatic(refKind) == isStatic() || getModifiers() == 0;
*** 483,500 **** --- 485,507 ---- assert(isResolved() && this.clazz != null); this.name = m.getName(); if (this.type == null) this.type = new Object[] { m.getReturnType(), m.getParameterTypes() }; if (wantSpecial) { + assert(!isAbstract()) : this; if (getReferenceKind() == REF_invokeVirtual) changeReferenceKind(REF_invokeSpecial, REF_invokeVirtual); + else if (getReferenceKind() == REF_invokeInterface) + // invokeSpecial on a default method + changeReferenceKind(REF_invokeSpecial, REF_invokeInterface); } } public MemberName asSpecial() { switch (getReferenceKind()) { case REF_invokeSpecial: return this; case REF_invokeVirtual: return clone().changeReferenceKind(REF_invokeSpecial, REF_invokeVirtual); + case REF_invokeInterface: return clone().changeReferenceKind(REF_invokeSpecial, REF_invokeInterface); case REF_newInvokeSpecial: return clone().changeReferenceKind(REF_invokeSpecial, REF_newInvokeSpecial); } throw new IllegalArgumentException(this.toString()); } public MemberName asConstructor() {
src/share/classes/java/lang/invoke/MemberName.java
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File