public override void ProcessFromConstantPool(ConstantPool constantPool) { switch (ReferenceKind) { case ReferenceKindType.GetField: case ReferenceKindType.GetStatic: case ReferenceKindType.PutField: case ReferenceKindType.PutStatic: Reference = constantPool.GetEntry <FieldReferenceEntry>(referenceIndex); break; case ReferenceKindType.InvokeVirtual: case ReferenceKindType.NewInvokeSpecial: Reference = constantPool.GetEntry <MethodReferenceEntry>(referenceIndex); break; case ReferenceKindType.InvokeStatic: case ReferenceKindType.InvokeSpecial: try { Reference = constantPool.GetEntry <MethodReferenceEntry>(referenceIndex); } catch (InvalidCastException) { Reference = constantPool.GetEntry <InterfaceMethodReferenceEntry>(referenceIndex); } break; case ReferenceKindType.InvokeReference: Reference = constantPool.GetEntry <InterfaceMethodReferenceEntry>(referenceIndex); break; default: throw new ArgumentOutOfRangeException(nameof(ReferenceKind)); } }
public MethodHandleEntry(ReferenceKindType referenceKind, ReferenceEntry reference) { ReferenceKind = referenceKind; Reference = reference ?? throw new ArgumentNullException(nameof(reference)); }
private bool Equals(ReferenceEntry other) { return(Class.Equals(other.Class) && NameAndType.Equals(other.NameAndType)); }