ClassDec.ceylon

import ceylon.ast.core {
    ClassDec,
    DecQualifier,
    Identifier,
    UIdentifier
}
import ceylon.ast.redhat {
    RedHatTransformer,
    classDecToCeylon,
    compileClassDec
}
import com.redhat.ceylon.compiler.typechecker.tree {
    Tree {
        JClassLiteral=ClassLiteral
    }
}

shared object classDec satisfies ConcreteTest<ClassDec,JClassLiteral> {
    
    String->ClassDec construct(String->Identifier name, <String->DecQualifier>? qualifier = null) {
        String qualification;
        if (exists qualifier) {
            qualification = qualifier.key + ".";
        } else {
            qualification = "";
        }
        return "` class ``qualification````name.key`` `"->ClassDec(name.item, qualifier?.item);
    }
    
    shared String->ClassDec stringClassDec = construct(identifier.stringUIdentifier);
    shared String->ClassDec abcClassDec = construct("C"->UIdentifier("C"), "A.B"->DecQualifier([UIdentifier("A"), UIdentifier("B")]));
    
    compile = compileClassDec;
    fromCeylon = RedHatTransformer.transformClassDec;
    toCeylon = classDecToCeylon;
    codes = [stringClassDec, abcClassDec];
}