Пример #1
0
        public static DescriptorComponent Factory(StreamNavigator sn, MethodComponent methods)
        {
            DescriptorComponent c = new DescriptorComponent();

            c._tag        = sn.GetByte();
            c._size       = sn.GetUshort();
            c._classCount = sn.GetByte();

            c._classes = new ClassDescriptorInfo[c._classCount];
            for (int i = 0; i < c._classCount; i++)
            {
                c._classes[i] = ClassDescriptorInfo.Factory(sn, methods);
            }
            // TODO:
            // c._types = ...
            return(c);
        }
Пример #2
0
        public static ClassDescriptorInfo Factory(StreamNavigator sn, MethodComponent methods)
        {
            ClassDescriptorInfo cdi = new ClassDescriptorInfo
            {
                _token          = sn.GetByte(),
                _accessFlags    = (ClassAccessFlags)sn.GetByte(),
                _thisClassRef   = sn.GetStruct <ClassRef>(),
                _interfaceCount = sn.GetByte(),
                _fieldCount     = sn.GetUshort(),
                _methodCount    = sn.GetUshort()
            };

            cdi._thisClassRef.CorrectEndianness();

            cdi._interfaces = new ClassRef[cdi._interfaceCount];
            cdi._fields     = new FieldDescriptorInfo[cdi._fieldCount];
            cdi._methods    = new MethodDescriptor[cdi._methodCount];

            int i = 0;

            for (i = 0; i < cdi._interfaceCount; i++)
            {
                cdi._interfaces[i] = sn.GetStruct <ClassRef>();
                cdi._interfaces[i].CorrectEndianness();
            }
            for (i = 0; i < cdi._fieldCount; i++)
            {
                cdi._fields[i] = sn.GetStruct <FieldDescriptorInfo>();
                cdi._fields[i].CorrectEndianness();
            }
            for (i = 0; i < cdi._methodCount; i++)
            {
                var mdi = sn.GetStruct <MethodDescriptorInfo>();
                mdi.CorrectEndianness();
                cdi._methods[i] = new MethodDescriptor(mdi, cdi._accessFlags.HasFlag(ClassAccessFlags.ACC_INTERFACE) ? null : methods);
            }
            return(cdi);
        }