Search in sources :

Example 1 with EnExpr

use of com.googlecode.dex2jar.ir.expr.Value.EnExpr in project dex2jar by pxb1988.

the class ArrayNullPointerTransformer method tryAdd.

private boolean tryAdd(Value value, List<Value> values) {
    if (!arrayNPE(value)) {
        values.add(value);
        return true;
    } else {
        switch(value.et) {
            case E0:
                values.add(value);
                break;
            case E1:
                E1Expr e1 = (E1Expr) value;
                if (e1.op == null || e1.op.trim() == null) {
                    return false;
                }
                tryAdd(e1.op.trim(), values);
                break;
            case E2:
                E2Expr e2 = (E2Expr) value;
                if (e2.vt == VT.ARRAY && e2.op1.trim().vt == VT.CONSTANT) {
                    Constant cst = (Constant) e2.op1.trim();
                    if (cst.value.equals(Integer.valueOf(0))) {
                        tryAdd(e2.op2.trim(), values);
                        return false;
                    }
                }
                if (tryAdd(e2.op1.trim(), values)) {
                    tryAdd(e2.op2.trim(), values);
                }
            case En:
                for (Value vb : ((EnExpr) value).ops) {
                    if (!tryAdd(vb.trim(), values)) {
                        break;
                    }
                }
        }
    }
    return false;
}
Also used : E2Expr(com.googlecode.dex2jar.ir.expr.Value.E2Expr) E1Expr(com.googlecode.dex2jar.ir.expr.Value.E1Expr) EnExpr(com.googlecode.dex2jar.ir.expr.Value.EnExpr) Constant(com.googlecode.dex2jar.ir.expr.Constant) Value(com.googlecode.dex2jar.ir.expr.Value)

Aggregations

Constant (com.googlecode.dex2jar.ir.expr.Constant)1 Value (com.googlecode.dex2jar.ir.expr.Value)1 E1Expr (com.googlecode.dex2jar.ir.expr.Value.E1Expr)1 E2Expr (com.googlecode.dex2jar.ir.expr.Value.E2Expr)1 EnExpr (com.googlecode.dex2jar.ir.expr.Value.EnExpr)1