26using IKVM.ByteCode.Decoding;
31 sealed partial class ClassFile
37 internal sealed class ConstantPoolItemMethodHandle : ConstantPoolItem
40 readonly MethodHandleConstantData data;
41 ConstantPoolItemFMI cpi;
48 internal ConstantPoolItemMethodHandle(RuntimeContext context, MethodHandleConstantData data) :
55 public override ConstantType GetConstantType() => ConstantType.MethodHandle;
62 case MethodHandleKind.GetField:
63 case MethodHandleKind.GetStatic:
64 case MethodHandleKind.PutField:
65 case MethodHandleKind.PutStatic:
66 cpi = classFile.GetConstantPoolItem(data.Reference) as ConstantPoolItemFieldref;
68 case MethodHandleKind.InvokeSpecial:
69 case MethodHandleKind.InvokeVirtual:
70 case MethodHandleKind.InvokeStatic:
71 case MethodHandleKind.NewInvokeSpecial:
72 cpi = classFile.GetConstantPoolItem(data.Reference) as ConstantPoolItemMethodref;
73 if (cpi ==
null && classFile.MajorVersion >= 52 && (data.Kind is MethodHandleKind.InvokeStatic or MethodHandleKind.InvokeSpecial))
74 goto case MethodHandleKind.InvokeInterface;
76 case MethodHandleKind.InvokeInterface:
77 cpi = classFile.GetConstantPoolItem(data.Reference) as ConstantPoolItemInterfaceMethodref;
84 if (ReferenceEquals(cpi.Name, StringConstants.INIT) && data.Kind != MethodHandleKind.NewInvokeSpecial)
89 public override void MarkLinkRequired()
91 cpi.MarkLinkRequired();
95 public override void Link(RuntimeJavaType thisType,
LoadMode mode)
97 cpi.Link(thisType, mode);
100 public string Class => cpi.Class;
102 public string Name => cpi.Name;
104 public string Signature => cpi.Signature;
106 public ConstantPoolItemFMI MemberConstantPoolItem => cpi;
108 public MethodHandleKind Kind => data.Kind;
110 public RuntimeJavaMember Member => cpi.GetMember();
112 public RuntimeJavaType GetClassType()
114 return cpi.GetClassType();
global::java.lang.Class Class
global::java.lang.invoke.LambdaForm.Name Name