public static Method GetMethod(Class c, CompileMethodInfo method, List<CompileConstant> constants)
        {
            var m = new Method
                        {
                            DeclaringType = c,
                            Name = GetUtf8(method.Name, constants),
                            Modifiers = method.Modifiers,
                        };

            string methodDescriptor = GetUtf8(method.Descriptor, constants);
            Tuple<List<Type>, Type> methodTypes = GetMethodTypeFromDescriptor(methodDescriptor);

            m.Parameters.AddRange(methodTypes.Item1.Select(x => new Method.Parameter { Type = x }));
            m.ReturnType = methodTypes.Item2;

            return m;
        }
        public CompileMethodInfo Compile(CompileManager manager)
        {
            method.Resolve(manager.Imports);

            var methodInfo = new CompileMethodInfo();

            short nameIndex = manager.AddConstantUtf8(method.Name);
            short descriptorIndex = manager.AddConstantUtf8(method.GetDescriptor());

            CompileBody(manager);

            methodInfo.Modifiers = method.Modifiers;
            methodInfo.Name = nameIndex;
            methodInfo.Descriptor = descriptorIndex;
            methodInfo.Attributes = attributes; //TODO: Code, Exceptions, Synthetic, Deprecated

            return methodInfo;
        }
 public void AddMethod(CompileMethodInfo method)
 {
     Methods.Add(method);
 }
        private void ReadMethods(EndianBinaryReader reader)
        {
            var methodCount = reader.ReadInt16();

            for (var i = 0; i < methodCount; i++)
            {
                var method = new CompileMethodInfo();

                method.Modifiers = (Modifier)reader.ReadInt16();
                method.Name = reader.ReadInt16();
                method.Descriptor = reader.ReadInt16();

                method.Attributes.AddRange(ReadAttributes(reader));

                Methods.Add(method);
            }
        }
        private static IEnumerable<CompileMethodInfo> ReadMethods(EndianBinaryReader reader, List<CompileConstant> constants)
        {
            short methodCount = reader.ReadInt16();
            var methods = new CompileMethodInfo[methodCount];

            for (int i = 0; i < methodCount; i++)
            {
                var method = new CompileMethodInfo();

                method.Modifiers = (Modifier)reader.ReadInt16();
                method.Name = reader.ReadInt16();
                method.Descriptor = reader.ReadInt16();

                method.Attributes.AddRange(ReadAttributes(reader, constants));

                methods[i] = method;
            }

            return methods;
        }