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