UnionOperation.ceylon

import ceylon.ast.core {
    IntersectingExpression,
    UnioningExpression,
    UnionOperation
}
import ceylon.ast.redhat {
    RedHatTransformer,
    unionOperationToCeylon,
    compileUnionOperation
}
import com.redhat.ceylon.compiler.typechecker.tree {
    Tree {
        JUnionOp=UnionOp
    }
}

shared object unionOperation satisfies ConcreteTest<UnionOperation,JUnionOp> {
    
    String->UnionOperation construct(String->UnioningExpression left, String->IntersectingExpression right)
            => "``left.key``|``right.key``"->UnionOperation(left.item, right.item);
    
    shared String->UnionOperation aUnionBExpression = construct(baseExpression.aExpression, baseExpression.bExpression);
    
    compile = compileUnionOperation;
    fromCeylon = RedHatTransformer.transformUnionOperation;
    toCeylon = unionOperationToCeylon;
    codes = [aUnionBExpression];
}