public MethodDescriptor(MethodDescriptorInfo mdi, MethodComponent methods) { this.MethodDescriptorInfo = mdi; if (null != methods) { StreamNavigator sn = new StreamNavigator(methods.Methods, mdi.method_offset - 1); this.MethodInfo = MethodInfo.Factory(sn, mdi.bytecode_count); } }
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 MethodComponent Factory(StreamNavigator sn) { MethodComponent c = new MethodComponent { Tag = sn.GetByte(), Size = sn.GetUshort() }; int start = sn.Position; byte handlerCount = sn.GetByte(); c.ExceptionHandlers = new ExceptionHandlerInfo[handlerCount]; for (int i = 0; i < handlerCount; i++) { c.ExceptionHandlers[i] = sn.GetStruct <ExceptionHandlerInfo>(); c.ExceptionHandlers[i].CorrectEndianness(); } c.Methods = sn.GetData(c.Size - (sn.Position - start)); 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); }