// Safely but inefficiently do nothing.
return null ; //new Placement(input, exprs) ;
if ( false ) {
// Push into both sides.
Op left = input.getLeft() ;
Placement pLeft = transform(exprs, left) ;
Op right = input.getRight() ;
Placement pRight = transform(exprs, right) ;
// JENA-652 Temporary fix
if ( pLeft != null && ! pLeft.unplaced.isEmpty() )
return noChangePlacement ;
if ( pRight != null && ! pRight.unplaced.isEmpty() )
return noChangePlacement ;
// Old, buggy if not guarded by the above.
left = transformOpAlways(exprs, left) ;
right = transformOpAlways(exprs, right) ;
Op op2 = OpUnion.create(left, right) ;
return result(op2, emptyList) ;
}
Op left = input.getLeft() ;
Placement pLeft = transform(exprs, left) ;
Op right = input.getRight() ;
Placement pRight = transform(exprs, right) ;
// If it's placed in neitehr arm it should be passed back out for placement.
//
// If it's done in both arms, then expression can be left pushed in
// and not passed back out for placement.
// If it is done in one arm and not the other, then it can be left pushed
// in but needs to be redone for the other arm as if it were no placed at all.
// A filter applied twice is safe.
// Placement = null => nothing done => unplaced.
ExprList exprs2 = null ;
for ( Expr expr : exprs ) {
boolean unplacedLeft = ( pLeft == null || pLeft.unplaced.getList().contains(expr) ) ;
boolean unplacedRight = ( pRight == null || pRight.unplaced.getList().contains(expr) ) ;
// if ( unplacedLeft && unplacedRight ) {
// System.out.println("Unplaced: "+expr) ;
// } else if ( unplacedLeft ) {
// System.out.println("Unplaced(L): "+expr) ;
// } else if ( unplacedRight ) {
// System.out.println("Unplaced(R): "+expr) ;
// } else
// System.out.println("Placed(L+R): "+expr) ;
boolean placed = !unplacedLeft && !unplacedRight ;
if ( placed )
// Went into both arms - expression has been handled completely.
continue ;
if ( exprs2 == null )
exprs2 = new ExprList() ;
exprs2.add(expr) ;
}
Op newLeft = (pLeft == null ) ? left : pLeft.op ;
Op newRight = (pRight == null ) ? right : pRight.op ;
if ( exprs2 == null )
exprs2 = emptyList ;
Op op2 = OpUnion.create(newLeft, newRight) ;
return result(op2, exprs2) ;
}