public static List<TypedValue> simplifyBooleans(List<TypedValue> conditions, Map<MethodSignature, TypedValue.ComparisonValue.ComparisonOp> comparisonMethods, Map<MethodSignature, TypedValue.ComparisonValue.ComparisonOp> comparisonStaticMethods, boolean isAllEqualsConverted) { List<TypedValue> newConditions = new ArrayList<TypedValue>(); for (TypedValue cond: conditions) { TypedValue simpcond = cond.visit(new TypedValueRewriterWalker<Object, RuntimeException>(new SymbExSimplifier<Object>(comparisonMethods, comparisonStaticMethods, isAllEqualsConverted)), null); simpcond = simpcond.visit(new SymbExBooleanRewriter(), true); newConditions.add(simpcond); } return newConditions; }
@Override public TypedValue virtualMethodCallValue(MethodCallValue.VirtualMethodCallValue val, I in) { // TODO: This changes the semantics of things a little bit MethodSignature sig = val.getSignature(); if (comparisonMethods.containsKey(sig)) { return new TypedValue.ComparisonValue(comparisonMethods.get(sig), val.base, val.args.get(0)); } if (additionalComparisonMethods.containsKey(sig)) { return new TypedValue.ComparisonValue(additionalComparisonMethods.get(sig), val.base, val.args.get(0)); } if (mathMethods.containsKey(sig)) { if (mathMethodsType.containsKey(sig)) return new TypedValue.MathOpValue(mathMethods.get(sig), mathMethodsType.get(sig), val.base, val.args.get(0)); else return new TypedValue.MathOpValue(mathMethods.get(sig), val.base, val.args.get(0)); } if (convertAllEquals && "equals".equals(sig.name) && "(Ljava/lang/Object;)Z".equals(sig.desc)) { return new TypedValue.ComparisonValue(ComparisonOp.eq, val.base, val.args.get(0)); } return methodCallValue(val, in); }
throw new IllegalArgumentException("Unknown comparison operator"); TypedValue toReturn = comparisonOpValueWithZero(val, newOp, val.right); if (toReturn != val) return toReturn; && ((ConstantValue.IntegerConstant)val.right).val == 0) TypedValue toReturn = comparisonOpValueWithZero(val, val.compOp, val.left); if (toReturn != val) return toReturn;
public static TypedValue simplifyBoolean(TypedValue value, Map<MethodSignature, TypedValue.ComparisonValue.ComparisonOp> comparisonMethods, Map<MethodSignature, TypedValue.ComparisonValue.ComparisonOp> comparisonStaticMethods, boolean isAllEqualsConverted) { TypedValue simplifiedBooleanReturnValue = value .visit(new TypedValueRewriterWalker<Object, RuntimeException>(new SymbExSimplifier<Object>(comparisonMethods, comparisonStaticMethods, isAllEqualsConverted)), null); simplifiedBooleanReturnValue = simplifiedBooleanReturnValue.visit(new SymbExBooleanRewriter(), true); return simplifiedBooleanReturnValue; } // public TypedValue getSimplifiedIsTrueReturnValue()
public static TypedValue simplify(TypedValue value, Map<MethodSignature, TypedValue.ComparisonValue.ComparisonOp> comparisonMethods, Map<MethodSignature, TypedValue.ComparisonValue.ComparisonOp> comparisonStaticMethods, boolean isAllEqualsConverted) { TypedValue simplifiedBooleanReturnValue = value .visit(new TypedValueRewriterWalker<Object, RuntimeException>(new SymbExSimplifier<Object>(comparisonMethods, comparisonStaticMethods, isAllEqualsConverted)), null); simplifiedBooleanReturnValue = simplifiedBooleanReturnValue.visit(new SymbExBooleanRewriter(), false); return simplifiedBooleanReturnValue; // return value.visit(new TypedValueRewriterWalker<Object, RuntimeException>(new SymbExSimplifier<Object>(comparisonMethods)), null); } // public TypedValue getIsTrueReturnValue()