29 sealed partial class ClassFile
35 internal abstract class ConstantPoolItemFMI : ConstantPoolItem
38 readonly ClassConstantHandle _clazzHandle;
39 readonly NameAndTypeConstantHandle _nameAndTypeHandle;
41 ConstantPoolItemClass _clazz;
51 public ConstantPoolItemFMI(RuntimeContext context, ClassConstantHandle clazz, NameAndTypeConstantHandle nameAndType) :
55 _nameAndTypeHandle = nameAndType;
61 var name_and_type = (ConstantPoolItemNameAndType)classFile.GetConstantPoolItem(_nameAndTypeHandle);
63 _clazz = (ConstantPoolItemClass)classFile.GetConstantPoolItem(_clazzHandle);
65 if (name_and_type ==
null || _clazz ==
null)
68 _name =
string.Intern(classFile.GetConstantPoolUtf8String(utf8_cp, name_and_type.NameHandle));
69 _descriptor = classFile.GetConstantPoolUtf8String(utf8_cp, name_and_type.DescriptorHandle);
70 Validate(_name, _descriptor, classFile.MajorVersion);
71 _descriptor =
string.Intern(_descriptor.Replace(
'/',
'.'));
80 protected abstract void Validate(
string name,
string descriptor,
int majorVersion);
83 public override void MarkLinkRequired()
85 _clazz.MarkLinkRequired();
89 public override void Link(RuntimeJavaType thisType,
LoadMode mode)
91 _clazz.Link(thisType, mode);
97 public string Name => _name;
102 public string Signature => _descriptor;
107 public string Class => _clazz.Name;
109 public RuntimeJavaType GetClassType() => _clazz.GetClassType();
111 public abstract RuntimeJavaMember GetMember();
global::java.lang.Class Class
global::java.lang.invoke.LambdaForm.Name Name