MethodDef getMethodDef(int access, int methodRefPoolIndex) { Object o = pool[methodRefPoolIndex]; if (o != null && o instanceof Assoc) { Assoc assoc = (Assoc) o; if (assoc.tag == 10) { int string_index = intPool[assoc.a]; String className = (String) pool[string_index]; int name_and_type_index = assoc.b; Assoc name_and_type = (Assoc) pool[name_and_type_index]; if (name_and_type.tag == 12) { // Name and Type int name_index = name_and_type.a; int type_index = name_and_type.b; String method = (String) pool[name_index]; String descriptor = (String) pool[type_index]; return new MethodDef(access, className, method, descriptor); } else throw new IllegalArgumentException( "Invalid class file (or parsing is wrong), assoc is not type + name (12)"); } else throw new IllegalArgumentException( "Invalid class file (or parsing is wrong), Assoc is not method ref! (10)"); } else throw new IllegalArgumentException( "Invalid class file (or parsing is wrong), Not an assoc at a method ref"); }
public String getPretty() { StringBuilder sb = new StringBuilder(); sb.append(descriptor.charAt(0)); int index = 1; String del = ""; while (index < descriptor.length() && descriptor.charAt(index) != ')') { sb.append(del); index = printParameter(sb, descriptor, index); del = ","; } sb.append(descriptor.charAt(index++)); StringBuilder sb2 = new StringBuilder(); if (isConstructor()) { sb2.append(getShortName(clazz)); index++; // skip the V } else { printParameter(sb2, descriptor, index); sb2.append(" "); sb2.append(getShortName(clazz)); sb2.append("."); sb2.append(name); } sb2.append(sb); return sb2.toString(); }
String descriptor = pool[descriptor_index].toString(); if (cd != null) { MethodDef mdef = new MethodDef(access_flags, className, name, descriptor); last = mdef; cd.method(mdef);
private void addMethod(MethodDef method, Meta.AD ad) throws Exception { String rtype = method.getReturnType(); String id = Configurable.mangleMethodName(method.name); String name = Clazz.unCamel(id); reporter.error( "AD for %s.%s uses an array of collections in return type (%s), Metatype allows either Vector or array", clazz.getFQN(), method.name, method.getReturnType()); Matcher m = COLLECTION.matcher(rtype); if (m.matches()) {
private static Tag doMethod(Tag tag, MethodDef method) { tag.addAttribute("pretty", method.getPretty()); if (Modifier.isPublic(method.access)) tag.addAttribute("public", true); if (Modifier.isStatic(method.access)) tag.addAttribute("static", true); if (Modifier.isProtected(method.access)) tag.addAttribute("protected", true); if (Modifier.isInterface(method.access)) tag.addAttribute("interface", true); tag.addAttribute("constructor", method.isConstructor()); if (!method.isConstructor()) tag.addAttribute("name", method.name); tag.addAttribute("descriptor", method.descriptor); return tag; } }
public void implementsInterfaces(String names[]) { MethodDef def = new MethodDef(0, clazz.getFQN(), "<implements>", "()V"); for (String interfaceName : names) { interfaceName = Clazz.internalToFqn(interfaceName); for (Map.Entry<MethodDef, List<MethodDef>> entry : catalog .entrySet()) { String catalogClass = entry.getKey().clazz; List<MethodDef> references = entry.getValue(); if (catalogClass.equals(interfaceName)) { references.add(def); } } } }
public void method(Clazz.MethodDef defined) { String descriptor; Kind kind; if (defined.isConstructor()) { descriptor = ":" + defined.descriptor; kind = Kind.CONSTRUCTOR; } else { descriptor = defined.name + ":" + defined.descriptor; kind = Kind.METHOD; } Scope m = s.getScope(descriptor); m.access = Access.modifier(defined.access); m.kind = kind; m.declaring = s; s.add(m); }
private static void method(PrintWriter out, String element, Clazz.MethodDef source, String closeElement) { out.println(" <" + element + " class='" + source.clazz + "'" + getAccess(source.access) + ( source.isConstructor() ? "" : " name='" + source.name + "'") + " descriptor='" + source.descriptor + "' pretty='" + source.getPretty() + "'" + closeElement); }
public void method(Clazz.MethodDef defined) { if (defined.isConstructor()) constructor(defined.access, defined.descriptor); else method(defined.access, defined.name, defined.descriptor); }
private int array(StringBuilder sb, CharSequence descriptor, int index) { int n = 1; while (index < descriptor.length() && descriptor.charAt(index) == '[') { index++; } index = printParameter(sb, descriptor, index); while (n-- > 0) { sb.append("[]"); } return index; } }