static String escapeMethodDesc(Method m) { return escapeMethodDesc(m.getProto()); } static String escapeMethodDesc(Proto m) {
@Override public void visitMethodStmt(Op op, int[] args, String name, Proto proto, MethodHandle bsm, Object... bsmArgs) { StringBuilder sb = new StringBuilder(); sb.append("{ ").append( BaksmaliDumper.escapeValue(bsm)).append(", ").append(BaksmaliDumper.escapeValue(name)).append(", ").append(BaksmaliDumper.escapeMethodDesc(proto)); for(Object o: bsmArgs) { sb.append(", ").append(BaksmaliDumper.escapeValue(o)); } sb.append("}"); if (args.length > 0) { if (op.format == InstructionFormat.kFmt3rc) { // invoke-x/range out.s("%s { %s .. %s }, %s", op.displayName, reg(args[0]), reg(args[args.length - 1]), sb); } else { boolean first = true; StringBuilder buff = new StringBuilder(); for (int i : args) { if (first) { first = false; } else { buff.append(", "); } buff.append(reg(i)); } out.s("%s { %s }, %s", op.displayName, buff, sb); } } else { out.s("%s { }, %s", op.displayName, sb); } }
@Override public void visitMethodStmt(Op op, int[] args, Method method, Proto proto) { if (args.length > 0) { if (op.format == InstructionFormat.kFmt4rcc) { // invoke-x/range out.s("%s { %s .. %s }, %s, %s", op.displayName, reg(args[0]), reg(args[args.length - 1]), BaksmaliDumper.escapeMethod(method), BaksmaliDumper.escapeMethodDesc(proto)); } else { boolean first = true; StringBuilder buff = new StringBuilder(); for (int i : args) { if (first) { first = false; } else { buff.append(", "); } buff.append(reg(i)); } out.s("%s { %s }, %s, %s", op.displayName, buff, BaksmaliDumper.escapeMethod(method), BaksmaliDumper.escapeMethodDesc(proto)); } } else { out.s("%s { }, %s, %s", op.displayName, BaksmaliDumper.escapeMethod(method), BaksmaliDumper.escapeMethodDesc(proto)); } }
static String escapeMethod(Method method) { return BaksmaliDumper.escapeType(method.getOwner()) + "->" + BaksmaliDumper.escapeId(method.getName()) + BaksmaliDumper.escapeMethodDesc(method); } static String escapeMethodDesc(Method m) {
return escapeMethodDesc((Proto) obj);
Method method = m.method; appendAccess(m.access, buff); buff.append(escapeId(method.getName())).append(escapeMethodDesc(method)); out.s(buff.toString()); out.push();