ComplementOperation.ceylon

import ceylon.ast.core {
    ComplementOperation,
    IntersectingExpression,
    UnioningExpression
}
import ceylon.ast.redhat {
    RedHatTransformer,
    complementOperationToCeylon,
    compileComplementOperation
}
import com.redhat.ceylon.compiler.typechecker.tree {
    Tree {
        JComplementOp=ComplementOp
    }
}

shared object complementOperation satisfies ConcreteTest<ComplementOperation,JComplementOp> {
    
    String->ComplementOperation construct(String->UnioningExpression left, String->IntersectingExpression right)
            => "``left.key``~``right.key``"->ComplementOperation(left.item, right.item);
    
    shared String->ComplementOperation aComplementBExpression = construct(baseExpression.aExpression, baseExpression.bExpression);
    shared String->ComplementOperation aUnionBComplementAIntersectBExpression = construct(unionOperation.aUnionBExpression, intersectionOperation.aIntersectBExpression);
    
    compile = compileComplementOperation;
    fromCeylon = RedHatTransformer.transformComplementOperation;
    toCeylon = complementOperationToCeylon;
    codes = [aComplementBExpression, aUnionBComplementAIntersectBExpression];
}