25using IKVM.ByteCode.Decoding;
30 sealed partial class ClassFile
36 internal sealed class ConstantPoolItemInvokeDynamic : ConstantPoolItem
39 readonly ushort _bootstrapMethodAttributeIndex;
40 readonly NameAndTypeConstantHandle _nameAndTypeHandle;
44 RuntimeJavaType[] _argTypes;
45 RuntimeJavaType _returnType;
52 public ConstantPoolItemInvokeDynamic(RuntimeContext context, InvokeDynamicConstantData data) :
55 _bootstrapMethodAttributeIndex = data.BootstrapMethodAttributeIndex;
56 _nameAndTypeHandle = data.NameAndType;
62 var nameAndType = (ConstantPoolItemNameAndType)classFile.GetConstantPoolItem(_nameAndTypeHandle);
63 if (nameAndType ==
null)
66 _name =
string.Intern(classFile.GetConstantPoolUtf8String(utf8_cp, nameAndType.NameHandle));
67 _descriptor =
string.Intern(classFile.GetConstantPoolUtf8String(utf8_cp, nameAndType.DescriptorHandle).Replace(
'/',
'.'));
71 public override void Link(RuntimeJavaType thisType,
LoadMode mode)
74 if (_argTypes != null)
77 var classLoader = thisType.ClassLoader;
78 var args = classLoader.ArgJavaTypeListFromSig(_descriptor, mode);
79 var ret = classLoader.RetTypeWrapperFromSig(_descriptor, mode);
83 if (_argTypes ==
null)
91 public RuntimeJavaType[] GetArgTypes()
96 public RuntimeJavaType GetRetType()
101 public string Name => _name;
103 public string Signature => _descriptor;
105 public ushort BootstrapMethod => _bootstrapMethodAttributeIndex;
global::java.lang.invoke.LambdaForm.Name Name