DeclarationOrStatement.ceylon

import ceylon.ast.core {
    Declaration,
    Node,
    Statement
}
import com.redhat.ceylon.compiler.typechecker.tree {
    JNode=Node,
    Tree {
        JDeclaration=Declaration,
        JExecutableStatement=ExecutableStatement,
        JStatement=Statement
    }
}

"Converts a RedHat AST [[JStatement|Statement]] to a `ceylon.ast`
 [[Declaration]] or [[Statement]]."
shared Declaration|Statement declarationOrStatementToCeylon(JStatement declarationOrStatement, Anything(JNode,Node) update = noop) {
    assert (is JDeclaration|JExecutableStatement declarationOrStatement);
    switch (declarationOrStatement)
    case (is JDeclaration) { return declarationToCeylon(declarationOrStatement, update); }
    case (is JExecutableStatement) { return statementToCeylon(declarationOrStatement, update); }
}