ClassSpecifier.ceylon

import ceylon.ast.core {
    ClassSpecifier,
    ExtensionOrConstruction
}
import ceylon.ast.redhat {
    RedHatTransformer,
    classSpecifierToCeylon,
    compileClassSpecifier
}
import com.redhat.ceylon.compiler.typechecker.tree {
    Tree {
        JClassSpecifier=ClassSpecifier
    }
}

shared object classSpecifier satisfies ConcreteTest<ClassSpecifier,JClassSpecifier> {
    
    String->ClassSpecifier construct(String->ExtensionOrConstruction target)
            => "=> ``target.key``"->ClassSpecifier(target.item);
    
    shared String->ClassSpecifier objectClassSpecifier = construct(extension.objectExtension);
    shared String->ClassSpecifier packageObjectClassSpecifier = construct(extension.packageObjectExtension);
    shared String->ClassSpecifier superInnerClassSpecifier = construct(extension.superInnerExtension);
    shared String->ClassSpecifier objectOfStringClassSpecifier = construct(extension.objectOfStringExtension);
    shared String->ClassSpecifier packageObjectOfStringClassSpecifier = construct(extension.packageObjectOfStringExtension);
    shared String->ClassSpecifier superInnerOfStringClassSpecifier = construct(extension.superInnerOfStringExtension);
    
    shared String->ClassSpecifier pointCartesianClassSpecifier = construct(construction.pointCartesianConstruction);
    shared String->ClassSpecifier withRgbClassSpecifier = construct(construction.withRgbConstruction);
    shared String->ClassSpecifier superCartesianClassSpecifier = construct(construction.superCartesianConstruction);
    shared String->ClassSpecifier pointCartesianOfStringClassSpecifier = construct(construction.pointCartesianOfStringConstruction);
    shared String->ClassSpecifier withRgbOfStringClassSpecifier = construct(construction.withRgbOfStringConstruction);
    shared String->ClassSpecifier superCartesianOfStringClassSpecifier = construct(construction.superCartesianOfStringConstruction);
    
    // not tested directly, but used by other tests
    shared String->ClassSpecifier classSpecifyStringCharacters = construct(extension.extendsStringCharacters);
    
    compile = compileClassSpecifier;
    fromCeylon = RedHatTransformer.transformClassSpecifier;
    toCeylon = classSpecifierToCeylon;
    codes = [objectClassSpecifier, packageObjectClassSpecifier, superInnerClassSpecifier, objectOfStringClassSpecifier, packageObjectOfStringClassSpecifier, superInnerOfStringClassSpecifier,
        pointCartesianClassSpecifier, withRgbClassSpecifier, superCartesianClassSpecifier, pointCartesianOfStringClassSpecifier, withRgbOfStringClassSpecifier, superCartesianOfStringClassSpecifier];
}