move asm related tests from FilterOpTest to OptimizedAsmParser testcase

This commit is contained in:
wea_ondara
2022-07-27 15:27:59 +02:00
parent 3824a6f595
commit 23e046ef7e
5 changed files with 217 additions and 197 deletions

View File

@@ -0,0 +1,42 @@
package jef.asm;
import jef.expressions.Expression;
import jef.expressions.modifier.ExpressionOptimizerBottomUp;
import jef.expressions.modifier.IConst0Fixer;
import jef.expressions.modifier.TableAliasInjector;
import jef.expressions.modifier.TernaryRewriter;
import jef.serializable.SerializableFunction;
import jef.serializable.SerializablePredicate;
import lombok.Getter;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.Opcodes;
import java.io.InputStream;
import java.io.Serializable;
import java.lang.invoke.SerializedLambda;
import java.util.stream.IntStream;
@Getter
public class OptimizedAsmParser extends AsmParser{
public OptimizedAsmParser(SerializablePredicate<?> predicate) {
super(predicate);
}
public OptimizedAsmParser(SerializableFunction<?, ?> function) {
super(function);
}
public Expression parse() throws AsmParseException {
var expr = super.parse();
System.out.println(expr);
expr = new TernaryRewriter().modify(expr);
System.out.println(expr);
expr = new IConst0Fixer().modify(expr);
System.out.println(expr);
expr = new ExpressionOptimizerBottomUp().modify(expr);
return expr;
}
}

View File

@@ -23,6 +23,6 @@ public class IntermediateFieldExpression extends ConstantExpression implements S
@Override
public String toString() {
return name;
return "`" + name + "`";
}
}

View File

@@ -3,6 +3,7 @@ package jef.operations;
import jef.Queryable;
import jef.asm.AsmParseException;
import jef.asm.AsmParser;
import jef.asm.OptimizedAsmParser;
import jef.expressions.Expression;
import jef.expressions.SelectExpression;
import jef.expressions.WhereExpression;
@@ -27,20 +28,14 @@ public class FilterOp<T extends Serializable> implements Queryable<T>, Operation
public FilterOp(Queryable<T> queryable, SerializablePredicate<? super T> predicate) {
this.queryable = queryable;
this.predicate = predicate;
var parser = new AsmParser(predicate);
var parser = new OptimizedAsmParser(predicate);
Expression expr;
try {
expr = parser.parse();
} catch (AsmParseException e) {
throw new RuntimeException(e);
}
System.out.println(expr);
expr = new TernaryRewriter().modify(expr);
System.out.println(expr);
expr = new IConst0Fixer().modify(expr);
System.out.println(expr);
// expr = new ExpressionOptimizer().modify(expr);
expr = new ExpressionOptimizerBottomUp().modify(expr);
expr = new TableAliasInjector(getTableAlias()).modify(expr);//TODO this does not work together with expression optimization
this.predicateExpr = expr;
//TODO optimize whole expression