Esempio n. 1
0
        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));
            }
        }
Esempio n. 2
0
 public MethodHandleEntry(ReferenceKindType referenceKind, ReferenceEntry reference)
 {
     ReferenceKind = referenceKind;
     Reference     = reference ?? throw new ArgumentNullException(nameof(reference));
 }
Esempio n. 3
0
 private bool Equals(ReferenceEntry other)
 {
     return(Class.Equals(other.Class) && NameAndType.Equals(other.NameAndType));
 }