IntersectionOperation.ceylon

import ceylon.ast.core {
    IntersectionOperation,
    InvertingExpression,
    IntersectingExpression
}
import ceylon.ast.redhat {
    RedHatTransformer,
    intersectionOperationToCeylon,
    compileIntersectionOperation
}
import com.redhat.ceylon.compiler.typechecker.tree {
    Tree {
        JIntersectionOp=IntersectionOp
    }
}

shared object intersectionOperation satisfies ConcreteTest<IntersectionOperation,JIntersectionOp> {
    
    String->IntersectionOperation construct(String->IntersectingExpression left, String->InvertingExpression right)
            => "``left.key``&``right.key``"->IntersectionOperation(left.item, right.item);
    
    shared String->IntersectionOperation aIntersectBExpression = construct(baseExpression.aExpression, baseExpression.bExpression);
    shared String->IntersectionOperation aIntersectBIntersectCExpression = construct(aIntersectBExpression, baseExpression.cExpression);
    
    compile = compileIntersectionOperation;
    fromCeylon = RedHatTransformer.transformIntersectionOperation;
    toCeylon = intersectionOperationToCeylon;
    codes = [aIntersectBExpression, aIntersectBIntersectCExpression];
}