public static Method parseMethodAndUnescape(String full) throws RuntimeException { int x = full.indexOf("->"); if (x <= 0) { throw new RuntimeException(); } return parseMethodAndUnescape(unEscapeId(full.substring(0, x)), full.substring(x + 2)); }
@Override public Object visitFm5c(SmaliParser.Fm5cContext ctx) { Op op = getOp(ctx.op); List<TerminalNode> ts = ctx.REGISTER(); int rs[] = new int[ts.size()]; for (int i = 0; i < ts.size(); i++) { rs[i] = m.pareReg(ts.get(i).getSymbol().getText()); } scv.visitMethodStmt(op, rs, parseMethodAndUnescape(ctx.method.getText())); return null; }
@Override public Object visitFmrc(SmaliParser.FmrcContext ctx) { if (ctx.rstart != null) { int start = m.pareReg(ctx.rstart.getText()); int end = m.pareReg(ctx.rend.getText()); int size = end - start + 1; int rs[] = new int[size]; for (int i = 0; i < size; i++) { rs[i] = start + i; } scv.visitMethodStmt(getOp(ctx.op), rs, parseMethodAndUnescape(ctx.method.getText())); } else { scv.visitMethodStmt(getOp(ctx.op), new int[0], parseMethodAndUnescape(ctx.method.getText())); } return null; }
return parseMethodAndUnescape(value.getText()); case SmaliLexer.OBJECT_TYPE: return new DexType(unEscapeId(value.getText()));
public static void acceptMethod(SmaliParser.SMethodContext ctx, String className, DexClassVisitor dexClassVisitor) { Method method; Token methodObj = ctx.methodObj; if (methodObj.getType() == SmaliLexer.METHOD_FULL) { method = Utils.parseMethodAndUnescape(methodObj.getText()); } else {// PART method = Utils.parseMethodAndUnescape(className, methodObj.getText()); } int access = collectAccess(ctx.sAccList()); boolean isStatic = 0 != (access & DexConstants.ACC_STATIC); DexMethodVisitor dexMethodVisitor = dexClassVisitor.visitMethod(access, method); if (dexMethodVisitor != null) { acceptAnnotations(ctx.sAnnotation(), dexMethodVisitor); int ins = Utils.methodIns(method, isStatic); int totalRegisters = findTotalRegisters(ctx, ins); if (totalRegisters < 0) { totalRegisters = ins; } M m = new M(method, totalRegisters, ins, isStatic); acceptParameter(ctx.sParameter(), m, dexMethodVisitor); acceptCode(ctx, m, dexMethodVisitor); dexMethodVisitor.visitEnd(); } }