continue;
}
}
// check if it is a simple expression or not
RelationalExprDescr relDescr = null;
if ( d instanceof RelationalExprDescr ) {
relDescr = (RelationalExprDescr) d;
if ( (relDescr.getLeft() instanceof AtomicExprDescr || relDescr.getLeft() instanceof BindingDescr) &&
(relDescr.getRight() instanceof AtomicExprDescr || relDescr.getRight() instanceof BindingDescr) ) {
simple = true;
}
}
// Either it's a complex expression, so do as predicate
// Or it's a Map and we have to treat it as a special case
if ( !simple || new ClassObjectType( Map.class ).isAssignableFrom( pattern.getObjectType() ) ) {
createAndBuildPredicate( context,
pattern,
expr,
aliases );
continue;
}
if ( !(d instanceof RelationalExprDescr) ) {
throw new RuntimeException( "What caused this?: " + d );
}
RelationalExprDescr exprDescr = (RelationalExprDescr) d;
String leftValue = null;
String rightValue = null;
boolean isRightLiteral = false;
boolean usesThisRef = false;
if ( exprDescr.getRight() instanceof AtomicExprDescr ) {
AtomicExprDescr rdescr = ((AtomicExprDescr) exprDescr.getRight());
rightValue = rdescr.getExpression().trim();
usesThisRef = "this".equals( rightValue ) || rightValue.startsWith( "this." );
isRightLiteral = rdescr.isLiteral();
} else {
BindingDescr rdescr = ((BindingDescr) exprDescr.getRight());
rightValue = rdescr.getExpression().trim();
usesThisRef = "this".equals( rightValue ) || rightValue.startsWith( "this." );
}
if ( exprDescr.getLeft() instanceof AtomicExprDescr ) {
AtomicExprDescr ldescr = (AtomicExprDescr) exprDescr.getLeft();
leftValue = ldescr.getExpression();
usesThisRef = usesThisRef || "this".equals( leftValue ) || leftValue.startsWith( "this." );
} else {
leftValue = ((BindingDescr) exprDescr.getLeft()).getExpression();
usesThisRef = usesThisRef || "this".equals( leftValue ) || leftValue.startsWith( "this." );
}
ExprBindings leftExpr = new ExprBindings();
setInputs( context,