677 mv.visitInsn(opcode); 678 } 679 680 private String getInternalName(Class<?> c) { 681 if (c == Object.class) return OBJ; 682 else if (c == Object[].class) return OBJARY; 683 else if (c == Class.class) return CLS; 684 else if (c == MethodHandle.class) return MH; 685 assert(VerifyAccess.isTypeVisible(c, Object.class)) : c.getName(); 686 687 if (c == lastClass) { 688 return lastInternalName; 689 } 690 lastClass = c; 691 return lastInternalName = c.getName().replace('.', '/'); 692 } 693 694 private static MemberName resolveFrom(String name, MethodType type, Class<?> holder) { 695 MemberName member = new MemberName(holder, name, type, REF_invokeStatic); 696 MemberName resolvedMember = MemberName.getFactory().resolveOrNull(REF_invokeStatic, member, holder); 697 if (TRACE_RESOLVE) { 698 System.out.println("[LF_RESOLVE] " + holder.getName() + " " + name + " " + 699 shortenSignature(basicTypeSignature(type)) + (resolvedMember != null ? " (success)" : " (fail)") ); 700 } 701 return resolvedMember; 702 } 703 704 private static MemberName lookupPregenerated(LambdaForm form, MethodType invokerType) { 705 if (form.customized != null) { 706 // No pre-generated version for customized LF 707 return null; 708 } 709 String name = form.kind.methodName; 710 switch (form.kind) { 711 case BOUND_REINVOKER: { 712 name = name + "_" + BoundMethodHandle.speciesDataFor(form).key(); 713 return resolveFrom(name, invokerType, DelegatingMethodHandle.Holder.class); 714 } 715 case DELEGATE: return resolveFrom(name, invokerType, DelegatingMethodHandle.Holder.class); 716 case ZERO: // fall-through 717 case IDENTITY: { 718 name = name + "_" + form.returnType().basicTypeChar(); 719 return resolveFrom(name, invokerType, LambdaForm.Holder.class); | 677 mv.visitInsn(opcode); 678 } 679 680 private String getInternalName(Class<?> c) { 681 if (c == Object.class) return OBJ; 682 else if (c == Object[].class) return OBJARY; 683 else if (c == Class.class) return CLS; 684 else if (c == MethodHandle.class) return MH; 685 assert(VerifyAccess.isTypeVisible(c, Object.class)) : c.getName(); 686 687 if (c == lastClass) { 688 return lastInternalName; 689 } 690 lastClass = c; 691 return lastInternalName = c.getName().replace('.', '/'); 692 } 693 694 private static MemberName resolveFrom(String name, MethodType type, Class<?> holder) { 695 MemberName member = new MemberName(holder, name, type, REF_invokeStatic); 696 MemberName resolvedMember = MemberName.getFactory().resolveOrNull(REF_invokeStatic, member, holder); 697 if (TRACE_RESOLVE || CDS_TRACE_RESOLVE) { 698 String outLine = "[LF_RESOLVE] " + holder.getName() + " " + name + " " + 699 shortenSignature(basicTypeSignature(type)) + (resolvedMember != null ? " (success)" : " (fail)"); 700 if (TRACE_RESOLVE) { 701 System.out.println(outLine); 702 } 703 if (CDS_TRACE_RESOLVE) { 704 InvokerBytecodeGeneratorHelper.cdsTraceResolve(outLine); 705 } 706 } 707 return resolvedMember; 708 } 709 710 private static MemberName lookupPregenerated(LambdaForm form, MethodType invokerType) { 711 if (form.customized != null) { 712 // No pre-generated version for customized LF 713 return null; 714 } 715 String name = form.kind.methodName; 716 switch (form.kind) { 717 case BOUND_REINVOKER: { 718 name = name + "_" + BoundMethodHandle.speciesDataFor(form).key(); 719 return resolveFrom(name, invokerType, DelegatingMethodHandle.Holder.class); 720 } 721 case DELEGATE: return resolveFrom(name, invokerType, DelegatingMethodHandle.Holder.class); 722 case ZERO: // fall-through 723 case IDENTITY: { 724 name = name + "_" + form.returnType().basicTypeChar(); 725 return resolveFrom(name, invokerType, LambdaForm.Holder.class); |