void setMethods(List<MethodInfo> methods, NameTable names) { if (methods.size() == 0) { this.methods = MethodInternal.EMPTY_ARRAY; return; } this.methods = new MethodInternal[methods.size()]; for (int i = 0; i < methods.size(); i++) { MethodInfo methodInfo = methods.get(i); MethodInternal internal = names.intern(methodInfo.methodInternal()); methodInfo.setMethodInternal(internal); this.methods[i] = internal; } Arrays.sort(this.methods, MethodInternal.NAME_AND_PARAMETER_COMPONENT_COMPARATOR); }
private void processMethodInfo(DataInputStream data) throws IOException { int numMethods = data.readUnsignedShort(); List<MethodInfo> methods = numMethods > 0 ? new ArrayList<MethodInfo>(numMethods) : Collections.<MethodInfo>emptyList(); for (int i = 0; i < numMethods; i++) { short flags = (short) data.readUnsignedShort(); byte[] name = intern(decodeUtf8EntryAsBytes(data.readUnsignedShort())); String descriptor = decodeUtf8Entry(data.readUnsignedShort()); IntegerHolder pos = new IntegerHolder(); Type[] parameters = intern(parseMethodArgs(descriptor, pos)); Type returnType = parseType(descriptor, pos); MethodInfo method = new MethodInfo(currentClass, name, MethodInternal.EMPTY_PARAMETER_NAMES, parameters, returnType, flags); if (parameters.length == 0 && Arrays.equals(INIT_METHOD_NAME, name)) { currentClass.setHasNoArgsConstructor(true); } methodParameterNames = debugParameterNames = null; processAttributes(data, method); method.setAnnotations(elementAnnotations); elementAnnotations.clear(); // Prefer method parameter names over debug info if(methodParameterNames != null) method.methodInternal().setParameterNames(methodParameterNames); else if(debugParameterNames != null) method.methodInternal().setParameterNames(debugParameterNames); methods.add(method); } this.methods = methods; }
type = method.methodInternal().parameterArray()[target.asMethodParameterType().position()]; break; type = ((MethodInfo)enclosingTarget).methodInternal().exceptionArray()[target.asThrows().position()]; break;