Package jadx.core.dex.instructions.args

Examples of jadx.core.dex.instructions.args.ArgType


    check(unknown(PrimitiveType.INT, PrimitiveType.OBJECT),
        unknown(PrimitiveType.OBJECT, PrimitiveType.ARRAY),
        unknown(PrimitiveType.OBJECT));

    ArgType objExc = object("java.lang.Exception");
    ArgType objThr = object("java.lang.Throwable");
    ArgType objIO = object("java.io.IOException");
    ArgType objArr = object("java.lang.ArrayIndexOutOfBoundsException");
    ArgType objList = object("java.util.List");

    first(objExc, objExc);
    check(objExc, objList, OBJECT);
    first(objExc, OBJECT);

    check(objExc, objThr, objThr);
    check(objIO, objArr, objExc);

    ArgType generic = genericType("T");
    first(generic, objExc);
  }
View Full Code Here


    merge(t1, t2, exp);
    merge(t2, t1, exp);
  }

  private void merge(ArgType t1, ArgType t2, ArgType exp) {
    ArgType res = ArgType.merge(t1, t2);
    String msg = format(t1, t2, exp, res);
    if (exp == null) {
      assertNull("Incorrect accept: " + msg, res);
    } else {
      assertNotNull("Incorrect reject: " + msg, res);
View Full Code Here

    ArgType.setClsp(clsp);
  }

  @Test
  public void test() {
    ArgType objExc = object(JAVA_LANG_EXCEPTION);
    ArgType objThr = object(JAVA_LANG_THROWABLE);

    assertTrue(clsp.isImplements(JAVA_LANG_EXCEPTION, JAVA_LANG_THROWABLE));
    assertFalse(clsp.isImplements(JAVA_LANG_THROWABLE, JAVA_LANG_EXCEPTION));

    assertFalse(ArgType.isCastNeeded(objExc, objThr));
View Full Code Here

        String str = ((ConstStringNode) insn).getString();
        code.add(StringUtils.unescapeString(str));
        break;

      case CONST_CLASS:
        ArgType clsType = ((ConstClassNode) insn).getClsType();
        useType(code, clsType);
        code.add(".class");
        break;

      case CONST:
        LiteralArg arg = (LiteralArg) insn.getArg(0);
        code.add(lit(arg));
        break;

      case MOVE:
        addArg(code, insn.getArg(0), false);
        break;

      case CHECK_CAST:
      case CAST: {
        boolean wrap = state.contains(Flags.BODY_ONLY);
        if (wrap) {
          code.add('(');
        }
        code.add('(');
        useType(code, (ArgType) ((IndexInsnNode) insn).getIndex());
        code.add(") ");
        addArg(code, insn.getArg(0), true);
        if (wrap) {
          code.add(')');
        }
        break;
      }

      case ARITH:
        makeArith((ArithNode) insn, code, state);
        break;

      case NEG: {
        boolean wrap = state.contains(Flags.BODY_ONLY);
        if (wrap) {
          code.add('(');
        }
        code.add('-');
        addArg(code, insn.getArg(0));
        if (wrap) {
          code.add(')');
        }
        break;
      }

      case RETURN:
        if (insn.getArgsCount() != 0) {
          code.add("return ");
          addArg(code, insn.getArg(0), false);
        } else {
          code.add("return");
        }
        break;

      case BREAK:
        code.add("break");
        LoopLabelAttr labelAttr = insn.get(AType.LOOP_LABEL);
        if (labelAttr != null) {
          code.add(' ').add(mgen.getNameGen().getLoopLabel(labelAttr));
        }
        break;

      case CONTINUE:
        code.add("continue");
        break;

      case THROW:
        code.add("throw ");
        addArg(code, insn.getArg(0), true);
        break;

      case CMP_L:
      case CMP_G:
        code.add('(');
        addArg(code, insn.getArg(0));
        code.add(" > ");
        addArg(code, insn.getArg(1));
        code.add(" ? 1 : (");
        addArg(code, insn.getArg(0));
        code.add(" == ");
        addArg(code, insn.getArg(1));
        code.add(" ? 0 : -1))");
        break;

      case INSTANCE_OF: {
        boolean wrap = state.contains(Flags.BODY_ONLY);
        if (wrap) {
          code.add('(');
        }
        addArg(code, insn.getArg(0));
        code.add(" instanceof ");
        useType(code, (ArgType) ((IndexInsnNode) insn).getIndex());
        if (wrap) {
          code.add(')');
        }
        break;
      }
      case CONSTRUCTOR:
        makeConstructor((ConstructorInsn) insn, code);
        break;

      case INVOKE:
        makeInvoke((InvokeNode) insn, code);
        break;

      case NEW_ARRAY: {
        ArgType arrayType = insn.getResult().getType();
        code.add("new ");
        useType(code, arrayType.getArrayRootElement());
        code.add('[');
        addArg(code, insn.getArg(0));
        code.add(']');
        int dim = arrayType.getArrayDimension();
        for (int i = 0; i < dim - 1; i++) {
          code.add("[]");
        }
        break;
      }
View Full Code Here

    useType(code, insn.getElementType());
    code.add("[]{").add(filledArray).add('}');
  }

  private String makeArrayElements(FillArrayNode insn) throws CodegenException {
    ArgType insnArrayType = insn.getResult().getType();
    ArgType insnElementType = insnArrayType.getArrayElement();
    ArgType elType = insn.getElementType();
    if (!elType.equals(insnElementType) && !insnArrayType.equals(ArgType.OBJECT)) {
      ErrorsCounter.methodError(mth,
          "Incorrect type for fill-array insn " + InsnUtils.formatOffset(insn.getOffset())
              + ", element type: " + elType + ", insn element type: " + insnElementType
      );
    }
    if (!elType.isTypeKnown()) {
      LOG.warn("Unknown array element type: {} in mth: {}", elType, mth);
      elType = insnElementType.isTypeKnown() ? insnElementType : elType.selectFirst();
    }
    insn.mergeElementType(elType);

    StringBuilder str = new StringBuilder();
    Object data = insn.getData();
    switch (elType.getPrimitiveType()) {
      case BOOLEAN:
      case BYTE:
        byte[] array = (byte[]) data;
        for (byte b : array) {
          str.append(TypeGen.literalToString(b, elType));
View Full Code Here

  /**
   * Add additional cast for overloaded method argument.
   */
  private boolean processOverloadedArg(CodeWriter code, MethodNode callMth, InsnArg arg, int origPos) {
    ArgType origType = callMth.getMethodInfo().getArgumentsTypes().get(origPos);
    if (!arg.getType().equals(origType)) {
      code.add('(');
      useType(code, origType);
      code.add(") ");
      return true;
View Full Code Here

      if (paramsAnnotation != null) {
        annotationGen.addForParameter(argsCode, paramsAnnotation, i);
      }
      if (!it.hasNext() && mth.getAccessFlags().isVarArgs()) {
        // change last array argument to varargs
        ArgType type = arg.getType();
        if (type.isArray()) {
          ArgType elType = type.getArrayElement();
          classGen.useType(argsCode, elType);
          argsCode.add("...");
        } else {
          LOG.warn(ErrorsCounter.formatErrorMsg(mth, "Last argument in varargs method not array"));
          classGen.useType(argsCode, arg.getType());
View Full Code Here

  private final Object data;
  private ArgType elemType;

  public FillArrayNode(int resReg, FillArrayDataPayloadDecodedInstruction payload) {
    super(InsnType.FILL_ARRAY, 0);
    ArgType elType;
    switch (payload.getElementWidthUnit()) {
      case 1:
        elType = ArgType.unknown(PrimitiveType.BOOLEAN, PrimitiveType.BYTE);
        break;
      case 2:
View Full Code Here

  public ArgType getElementType() {
    return elemType;
  }

  public void mergeElementType(ArgType foundElemType) {
    ArgType r = ArgType.merge(elemType, foundElemType);
    if (r != null) {
      elemType = r;
    }
  }
View Full Code Here

            FieldNode f;
            if (insn.getType() == InsnType.CONST_STR) {
              String s = ((ConstStringNode) insn).getString();
              f = parentClass.getConstField(s);
            } else if (insn.getType() == InsnType.CONST_CLASS) {
              ArgType t = ((ConstClassNode) insn).getClsType();
              f = parentClass.getConstField(t);
            } else {
              f = parentClass.getConstFieldByLiteralArg((LiteralArg) insn.getArg(0));
            }
            if (f != null) {
View Full Code Here

TOP

Related Classes of jadx.core.dex.instructions.args.ArgType

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.