TypeArguments.ceylon

import ceylon.ast.core {
    Type,
    TypeArgument,
    TypeArguments
}
import ceylon.ast.redhat {
    RedHatTransformer,
    typeArgumentsToCeylon,
    compileTypeArguments
}
import com.redhat.ceylon.compiler.typechecker.tree {
    Tree {
        JTypeArgumentList=TypeArgumentList
    }
}

shared object typeArguments satisfies ConcreteTest<TypeArguments,JTypeArgumentList> {
    
    String->TypeArguments construct(<String->Type>* typeArguments)
            => "<``",".join(typeArguments*.key)``>"->TypeArguments(typeArguments*.item.collect(TypeArgument));
    
    shared String->TypeArguments stringTypeArguments = construct(baseType.stringType);
    shared String->TypeArguments integerNothingTypeArguments = construct(baseType.integerType, baseType.nothingType);
    shared String->TypeArguments emptyTypeArguments = construct();
    
    compile = compileTypeArguments;
    fromCeylon = RedHatTransformer.transformTypeArguments;
    toCeylon = typeArgumentsToCeylon;
    codes = [stringTypeArguments, integerNothingTypeArguments, emptyTypeArguments];
}