QualifiedType.ceylon

import ceylon.ast.core {
    BaseType,
    QualifiedType,
    UIdentifier,
    TypeArgument,
    TypeArguments,
    TypeNameWithTypeArguments
}
import ceylon.ast.redhat {
    RedHatTransformer,
    qualifiedTypeToCeylon,
    compileQualifiedType
}
import com.redhat.ceylon.compiler.typechecker.tree {
    Tree {
        JQualifiedType=QualifiedType
    }
}

shared object qualifiedType satisfies ConcreteTest<QualifiedType,JQualifiedType> {
    shared String->QualifiedType stringDotFooOfNothingQualifiedType
            = "String.Foo<Nothing>"->QualifiedType {
        qualifyingType = baseType.stringType.item;
        nameAndArgs = TypeNameWithTypeArguments(UIdentifier("Foo"), TypeArguments([TypeArgument(BaseType(TypeNameWithTypeArguments(UIdentifier("Nothing"), null)))]));
    };
    shared String->QualifiedType stringDotFooOfNothingDotIterableOfStringQualifiedType
            = (stringDotFooOfNothingQualifiedType.key + "." + baseType.iterableOfStringType.key)->QualifiedType(stringDotFooOfNothingQualifiedType.item, baseType.iterableOfStringType.item.nameAndArgs);
    shared String->QualifiedType stringDotFooOfNothingDotIterableOfStringDotInnerQualifiedType
            = (stringDotFooOfNothingDotIterableOfStringQualifiedType.key + ".Inner")->QualifiedType(stringDotFooOfNothingDotIterableOfStringQualifiedType.item, TypeNameWithTypeArguments(UIdentifier("Inner")));
    
    compile = compileQualifiedType;
    fromCeylon = RedHatTransformer.transformQualifiedType;
    toCeylon = qualifiedTypeToCeylon;
    codes = [stringDotFooOfNothingQualifiedType, stringDotFooOfNothingDotIterableOfStringQualifiedType, stringDotFooOfNothingDotIterableOfStringDotInnerQualifiedType];
}