CallableConstructorDefinition.ceylon

import ceylon.ast.core {
    Annotations,
    Block,
    CallableConstructorDefinition,
    ExtendedType,
    LIdentifier,
    Parameters
}
import ceylon.ast.redhat {
    RedHatTransformer,
    callableConstructorDefinitionToCeylon,
    compileCallableConstructorDefinition
}
import com.redhat.ceylon.compiler.typechecker.tree {
    Tree {
        JConstructor=Constructor
    }
}

shared object callableConstructorDefinition satisfies ConcreteTest<CallableConstructorDefinition,JConstructor> {
    
    String->CallableConstructorDefinition construct(<String->LIdentifier>? name, String->Parameters parameters, String->Block block, <String->ExtendedType>? extendedType = null, String->Annotations annotations = package.annotations.emptyAnnotations)
            => "``annotations.key`` new `` name?.key else "" ````parameters.key`` `` extendedType?.key else "" `` ``block.key``"->CallableConstructorDefinition(name?.item, parameters.item, block.item, extendedType?.item, annotations.item);
    
    shared String->CallableConstructorDefinition callableConstructorDefinition = construct(identifier.nameLIdentifier, parameters.notEmptyParameters, block.printPersonNameBlock, extendedType.pointCartesianExtendedType, annotations.sharedAnnotations);
    shared String->CallableConstructorDefinition cartesianConstructorDefinition = construct(identifier.cartesianLIdentifier, parameters.xyParameters, block.cartesianConstructorBlock, null, annotations.sharedAnnotations);
    shared String->CallableConstructorDefinition polarConstructorDefinition = construct(identifier.polarLIdentifier, parameters.rphiParameters, block.polarConstructorBlock, null, annotations.sharedAnnotations);
    shared String->CallableConstructorDefinition defaultConstructorDefinition = construct(null, parameters.emptyParameters, block.emptyBlock);
    
    compile = compileCallableConstructorDefinition;
    fromCeylon = RedHatTransformer.transformCallableConstructorDefinition;
    toCeylon = callableConstructorDefinitionToCeylon;
    codes = [callableConstructorDefinition, cartesianConstructorDefinition, polarConstructorDefinition, defaultConstructorDefinition];
}