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); }
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); }