static String escapeMethodDesc(Proto m) { StringBuilder escapeBuff = new StringBuilder(); escapeBuff.append("("); for (String t : m.getParameterTypes()) { escapeType0(escapeBuff, t); } escapeBuff.append(")"); escapeType0(escapeBuff, m.getReturnType()); return escapeBuff.toString(); }
public Method(String owner, String name, String[] parameterTypes, String returnType) { this.owner = owner; this.name = name; this.proto = new Proto(parameterTypes, returnType); } public Method(String owner, String name, Proto proto) {
public String getDesc() { return proto.getDesc(); }
p = new Proto(p.getParameterTypes(), "V"); asm.visitMethodInsn(opcode, toInternal(ie.getOwner()), ie.getName(), p.getDesc()); String argTypes[] = ice.getProto().getParameterTypes(); Value[] vbs = ice.getOps(); if (argTypes.length == vbs.length) { throw new RuntimeException(); asm.visitInvokeDynamicInsn(ice.name, ice.proto.getDesc(), (Handle) Dex2Asm.convertConstantValue(ice.handle), Dex2Asm.convertConstantValues(ice.bsmArgs)); InvokePolymorphicExpr ipe = (InvokePolymorphicExpr) value; Method m = ipe.method; String argTypes[] = ipe.getProto().getParameterTypes(); Value[] vbs = ipe.getOps(); accept(vbs[0], asm); insertI2x(vb.valueType, argTypes[i - 1], asm); asm.visitMethodInsn(INVOKEVIRTUAL, toInternal(m.getOwner()), m.getName(), ipe.getProto().getDesc(), false);
/** * @return the parameterTypes */ public String[] getParameterTypes() { return proto.getParameterTypes(); }
public String getReturnType() { return proto.getReturnType(); }
@Override public int hashCode() { int result = name != null ? name.hashCode() : 0; result = 31 * result + (owner != null ? owner.hashCode() : 0); result = 31 * result + proto.hashCode(); return result; }
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Method method = (Method) o; if (name != null ? !name.equals(method.name) : method.name != null) return false; if (owner != null ? !owner.equals(method.owner) : method.owner != null) return false; return proto.equals(method.proto); }
@Override public String toString0() { StringBuilder sb = new StringBuilder(); int i = 0; sb.append(ops[i++]).append('.').append(this.method.getName()); String[] argTypes = getProto().getParameterTypes(); sb.append('('); int j = 0; boolean first = true; for (; i < ops.length; i++) { if (first) { first = false; } else { sb.append(','); } sb.append("(").append(Util.toShortClassName(argTypes[j++])).append(")").append(ops[i]); } sb.append(')'); return sb.toString(); } }
if ("V".equals(n.getProto().getReturnType())) { emit(nVoidInvoke(invoke)); return null; if ("V".equals(n.getProto().getReturnType())) { emit(nVoidInvoke(invoke)); return null;
public static String v(Proto m) { return String.format("new Proto(%s,%s)", v(m.getParameterTypes()), v(m.getReturnType())); }
v = new ArrayList<>(proto.getParameterTypes().length); } else { v = new ArrayList<>(proto.getParameterTypes().length + 1); v.add(getReg(methodStmtNode.args[i++])); for (String type : proto.getParameterTypes()) { v.add(getReg(methodStmtNode.args[i])); char t = type.charAt(0);
private Proto getProto(int proto_idx) { String[] parameterTypes; String returnType; protoIdIn.position(proto_idx * 12 + 4); // move to position and skip shorty_idx int return_type_idx = protoIdIn.getInt(); int parameters_off = protoIdIn.getInt(); returnType = getType(return_type_idx); parameterTypes = getTypeList(parameters_off); return new Proto(parameterTypes, returnType); }
ele = Type.getMethodType(((Proto) ele).getDesc());
case INVOKE_CUSTOM: { AbstractInvokeExpr ice = (AbstractInvokeExpr) enExpr; String type = ice.getProto().getReturnType(); provideAs(enExpr, type); String argTypes[] = ice.getProto().getParameterTypes(); if (argTypes.length == vbs.length) { for (int i = 0; i < vbs.length; i++) {