IfElse.ceylon

import ceylon.ast.core {
    ElseClause,
    IfClause,
    IfElse
}
import ceylon.ast.redhat {
    RedHatTransformer,
    ifElseToCeylon,
    compileIfElse
}
import com.redhat.ceylon.compiler.typechecker.tree {
    Tree {
        JIfStatement=IfStatement
    }
}

shared object ifElse satisfies ConcreteTest<IfElse,JIfStatement> {
    
    String->IfElse construct(String->IfClause ifClause, <String->ElseClause>? elseClause = null)
            => "``ifClause.key```` elseClause?.key else "" ``"->IfElse(ifClause.item, elseClause?.item);
    
    shared String->IfElse emptyIf => construct(ifClause.emptyIfClause);
    shared String->IfElse emptyIfElse => construct(ifClause.emptyIfClause, elseClause.emptyElseClause);
    shared String->IfElse emptyIfElseIf => construct(ifClause.emptyIfClause, elseClause.emptyElseIfClause);
    
    compile = compileIfElse;
    fromCeylon = RedHatTransformer.transformIfElse;
    toCeylon = ifElseToCeylon;
    codes => [emptyIf, emptyIfElse, emptyIfElseIf];
}