<commit_before>"Builds a Ceylon expression string for an AST node;
 compiling and evaluating the resulting string will yield
 a copy of the transformed node.
 
 Usage:
 ~~~
 myNode.transform(CeylonExpressionTransformer());
 ~~~"
shared class CeylonExpressionTransformer(String indentLevel = "    ") satisfies ImmediateNarrowingTransformer<String> {
    
    variable String indent = "";
    
    String transformWithIndent(Node|Node[]|Null that) {
        switch (that)
        case (is Node) {
            value origIndent = indent;
            indent += indentLevel;
            value ret = that.transform(this);
            indent = origIndent;
            return ret;
        }
        case (is []) {
            return "[]";
        }
        case (null) {
            return "null";
        }
        else { // case (is [Node+]) { – but Node and [Node+] are not disjoint, because Sequence is a sealed interface, not a class
            assert (is [Node+] that);
            value origIndent = indent;
            indent += indentLevel + indentLevel;
            value firstString = that.first.transform(this);
            value multiLine = that.size > 1 || firstString.lines.longerThan(1);
            StringBuilder code = StringBuilder();
            code.append("[");
            if (multiLine) {
                code.appendNewline();
                code.append(indent);
            }
            code.append(firstString);
            for (node in that.rest) {
                code.append(",");
                code.appendNewline();
                code.append(indent);
                code.append(node.transform(this));
            }
            if (multiLine) {
                code.appendNewline();
                code.append(origIndent + indentLevel);
            }
            code.append("]");
            indent = origIndent;
            return code.string;
        }
    }
    
    transformAddAssignmentOperation(AddAssignmentOperation that)
            => "AddAssignmentOperation {
                `` indent + indentLevel ``target = ``transformWithIndent(that.target)``;
                `` indent + indentLevel ``summand = ``transformWithIndent(that.summand)``;
                ``indent``}";
    transformAliasDec(AliasDec that)
            => that.qualifier exists
            then "AliasDec {
                  `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                  `` indent + indentLevel ``qualifier = ``transformWithIndent(that.qualifier)``;
                  ``indent``}"
            else "AliasDec(``transformWithIndent(that.name)``)";
    transformAndAssignmentOperation(AndAssignmentOperation that)
            => "AndAssignmentOperation {
                `` indent + indentLevel ``target = ``transformWithIndent(that.target)``;
                `` indent + indentLevel ``other = ``transformWithIndent(that.other)``;
                ``indent``}";
    transformAndOperation(AndOperation that)
            => "AndOperation {
                `` indent + indentLevel ``leftOperand_ = ``transformWithIndent(that.leftOperand)``;
                `` indent + indentLevel ``rightOperand_ = ``transformWithIndent(that.rightOperand)``;
                ``indent``}";
    transformArgumentList(ArgumentList that)
            => that.sequenceArgument exists
            then "ArgumentList {
                  `` indent + indentLevel ``listedArguments = ``transformWithIndent(that.listedArguments)``;
                  `` indent + indentLevel ``sequenceArgument = ``transformWithIndent(that.sequenceArgument)``;
                  ``indent``}"
            else "ArgumentList(``transformWithIndent(that.listedArguments)``)";
    transformAnnotation(Annotation that)
            => that.arguments exists
            then "Annotation {
                  `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                  `` indent + indentLevel ``arguments = ``transformWithIndent(that.arguments)``;
                  ``indent``}"
            else "Annotation(``transformWithIndent(that.name)``)";
    transformAnnotations(Annotations that)
            => that.anonymousAnnotation exists
            then (that.annotations nonempty
                then "Annotations {
                      `` indent + indentLevel ``anonymousAnnotation = ``transformWithIndent(that.anonymousAnnotation)``;
                      `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                      ``indent``}"
                else "Annotations(``transformWithIndent(that.anonymousAnnotation)``)")
            else (that.annotations nonempty
                then "Annotations {
                      `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                      ``indent``}"
                else "Annotations()");
    transformAnonymousArgument(AnonymousArgument that) => "AnonymousArgument(``transformWithIndent(that.expression)``)";
    transformAssertion(Assertion that)
            => "Assertion {
                `` indent + indentLevel ``conditions = ``transformWithIndent(that.conditions)``;
                `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                ``indent``}";
    transformAssignOperation(AssignOperation that)
            => "AssignOperation {
                `` indent + indentLevel ``target = ``transformWithIndent(that.target)``;
                `` indent + indentLevel ``expression = ``transformWithIndent(that.expression)``;
                ``indent``}";
    transformAssignmentStatement(AssignmentStatement that) => "AssignmentStatement(``transformWithIndent(that.expression)``)";
    transformBaseExpression(BaseExpression that) => "BaseExpression(``transformWithIndent(that.nameAndArgs)``)";
    transformBaseMeta(BaseMeta that) => "BaseMeta(``transformWithIndent(that.nameAndArgs)``)";
    transformBaseType(BaseType that) => "BaseType(``transformWithIndent(that.nameAndArgs)``)";
    transformBlock(Block that) => "Block(``transformWithIndent(that.content)``)";
    transformBooleanCondition(BooleanCondition that) => "BooleanCondition(``transformWithIndent(that.condition)``)";
    transformBreak(Break that) => "Break()";
    transformCallableParameter(CallableParameter that)
            => "CallableParameter {
                `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                `` indent + indentLevel ``type = ``transformWithIndent(that.type)``;
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``parameterLists = ``transformWithIndent(that.parameterLists)``;
                ``indent``}";
    transformCallableType(CallableType that)
            => "CallableType {
                `` indent + indentLevel ``returnType = ``transformWithIndent(that.returnType)``;
                `` indent + indentLevel ``argumentTypes = ``transformWithIndent(that.argumentTypes)``;
                ``indent``}";
    transformCaseClause(CaseClause that)
            => "CaseClause {
                `` indent + indentLevel ``caseItem = ``transformWithIndent(that.caseItem)``;
                `` indent + indentLevel ``block = ``transformWithIndent(that.block)``;
                ``indent``}";
    transformCaseTypes(CaseTypes that) => "CaseTypes(``transformWithIndent(that.caseTypes)``)";
    transformCatchClause(CatchClause that)
            => "CatchClause {
                `` indent + indentLevel ``variable = ``transformWithIndent(that.variable)``;
                `` indent + indentLevel ``block = ``transformWithIndent(that.block)``;
                ``indent``}";
    transformCharacterLiteral(CharacterLiteral that) => "CharacterLiteral(\"\"\"``that.text``\"\"\")";
    transformClassAliasDefinition(ClassAliasDefinition that)
            => "ClassAliasDefinition {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``parameters = ``transformWithIndent(that.parameters)``;
                `` indent + indentLevel ``specifier = ``transformWithIndent(that.specifier)``;
                `` indent + indentLevel ``caseTypes = ``transformWithIndent(that.caseTypes)``;
                `` indent + indentLevel ``extendedType = ``transformWithIndent(that.extendedType)``;
                `` indent + indentLevel ``satisfiedTypes = ``transformWithIndent(that.satisfiedTypes)``;
                `` indent + indentLevel ``typeParameters = ``transformWithIndent(that.typeParameters)``;
                `` indent + indentLevel ``typeConstraints = ``transformWithIndent(that.typeConstraints)``;
                `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                ``indent``}";
    transformClassBody(ClassBody that) => "ClassBody(``transformWithIndent(that.content)``)";
    transformClassDec(ClassDec that)
            => that.qualifier exists
            then "ClassDec {
                  `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                  `` indent + indentLevel ``qualifier = ``transformWithIndent(that.qualifier)``;
                  ``indent``}"
            else "ClassDec(``transformWithIndent(that.name)``)";
    transformClassDefinition(ClassDefinition that)
            => "ClassDefinition {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``parameters = ``transformWithIndent(that.parameters)``;
                `` indent + indentLevel ``body = ``transformWithIndent(that.body)``;
                `` indent + indentLevel ``caseTypes = ``transformWithIndent(that.caseTypes)``;
                `` indent + indentLevel ``extendedType = ``transformWithIndent(that.extendedType)``;
                `` indent + indentLevel ``satisfiedTypes = ``transformWithIndent(that.satisfiedTypes)``;
                `` indent + indentLevel ``typeParameters = ``transformWithIndent(that.typeParameters)``;
                `` indent + indentLevel ``typeConstraints = ``transformWithIndent(that.typeConstraints)``;
                `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                ``indent``}";
    transformClassInstantiation(ClassInstantiation that)
            => "ClassInstantiation {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``arguments = ``transformWithIndent(that.arguments)``;
                `` indent + indentLevel ``qualifier = ``transformWithIndent(that.qualifier)``;
                ``indent``}";
    transformClassSpecifier(ClassSpecifier that) => "ClassSpecifier(``transformWithIndent(that.instantiation)``)";
    transformClosedBound(ClosedBound that) => "ClosedBound(``transformWithIndent(that.endpoint)``)";
    transformCompareOperation(CompareOperation that)
            => "CompareOperation {
                `` indent + indentLevel ``leftOperand_ = ``transformWithIndent(that.leftOperand)``;
                `` indent + indentLevel ``rightOperand_ = ``transformWithIndent(that.rightOperand)``;
                ``indent``}";
    transformCompilationUnit(CompilationUnit that)
            => "CompilationUnit {
                `` indent + indentLevel ``imports = ``transformWithIndent(that.imports)``;
                `` indent + indentLevel ``declarations = ``transformWithIndent(that.declarations)``;
                ``indent``}";
    transformComplementAssignmentOperation(ComplementAssignmentOperation that)
            => "ComplementAssignmentOperation {
                `` indent + indentLevel ``target = ``transformWithIndent(that.target)``;
                `` indent + indentLevel ``other = ``transformWithIndent(that.other)``;
                ``indent``}";
    transformComplementOperation(ComplementOperation that)
            => "ComplementOperation {
                `` indent + indentLevel ``leftOperand_ = ``transformWithIndent(that.leftOperand)``;
                `` indent + indentLevel ``rightOperand_ = ``transformWithIndent(that.rightOperand)``;
                ``indent``}";
    transformComprehension(Comprehension that) => "Comprehension(``transformWithIndent(that.clause)``)";
    transformConditions(Conditions that) => "Conditions(``transformWithIndent(that.conditions)``)";
    transformContinue(Continue that) => "Continue()";
    transformDecQualifier(DecQualifier that) => "DecQualifier(``transformWithIndent(that.components)``)";
    transformDefaultedCallableParameter(DefaultedCallableParameter that)
            => "DefaultedCallableParameter {
                `` indent + indentLevel ``parameter = ``transformWithIndent(that.parameter)``;
                `` indent + indentLevel ``specifier = ``transformWithIndent(that.specifier)``;
                ``indent``}";
    transformDefaultedParameterReference(DefaultedParameterReference that)
            => "DefaultedParameterReference {
                `` indent + indentLevel ``parameter = ``transformWithIndent(that.parameter)``;
                `` indent + indentLevel ``specifier = ``transformWithIndent(that.specifier)``;
                ``indent``}";
    transformDefaultedType(DefaultedType that) => "DefaultedType(``transformWithIndent(that.type)``)";
    transformDefaultedValueParameter(DefaultedValueParameter that)
            => "DefaultedValueParameter {
                `` indent + indentLevel ``parameter = ``transformWithIndent(that.parameter)``;
                `` indent + indentLevel ``specifier = ``transformWithIndent(that.specifier)``;
                ``indent``}";
    transformDifferenceOperation(DifferenceOperation that)
            => "DifferenceOperation {
                `` indent + indentLevel ``minuend = ``transformWithIndent(that.minuend)``;
                `` indent + indentLevel ``subtrahend = ``transformWithIndent(that.subtrahend)``;
                ``indent``}";
    transformDivideAssignmentOperation(DivideAssignmentOperation that)
            => "DivideAssignmentOperation {
                `` indent + indentLevel ``target = ``transformWithIndent(that.target)``;
                `` indent + indentLevel ``divisor = ``transformWithIndent(that.divisor)``;
                ``indent``}";
    transformDynamicBlock(DynamicBlock that) => "DynamicBlock(``transformWithIndent(that.block)``)";
    transformDynamicInterfaceDefinition(DynamicInterfaceDefinition that)
            => "DynamicInterfaceDefinition {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``body = ``transformWithIndent(that.body)``;
                `` indent + indentLevel ``caseTypes = ``transformWithIndent(that.caseTypes)``;
                `` indent + indentLevel ``satisfiedTypes = ``transformWithIndent(that.satisfiedTypes)``;
                `` indent + indentLevel ``typeParameters = ``transformWithIndent(that.typeParameters)``;
                `` indent + indentLevel ``typeConstraints = ``transformWithIndent(that.typeConstraints)``;
                `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                ``indent``}";
    transformDynamicModifier(DynamicModifier that) => "DynamicModifier()";
    transformDynamicValue(DynamicValue that)
            => "DynamicValue {
                `` indent + indentLevel ``namedArguments = ``transformWithIndent(that.namedArguments)``;
                `` indent + indentLevel ``iterableArgument = ``transformWithIndent(that.iterableArgument)``;
                `` indent + indentLevel ``modifier = ``transformWithIndent(that.modifier)``;
                ``indent``}";
    transformElementOrSubrangeExpression(ElementOrSubrangeExpression that)
            => "ElementOrSubrangeExpression {
                `` indent + indentLevel ``primary = ``transformWithIndent(that.primary)``;
                `` indent + indentLevel ``subscript = ``transformWithIndent(that.subscript)``;
                ``indent``}";
    transformElseCaseClause(ElseCaseClause that) => "ElseCaseClause(``transformWithIndent(that.block)``)";
    transformElseClause(ElseClause that) => "ElseClause(``transformWithIndent(that.child)``)";
    transformElseOperation(ElseOperation that)
            => "ElseOperation {
                `` indent + indentLevel ``optionalValue = ``transformWithIndent(that.leftOperand)``;
                `` indent + indentLevel ``defaultValue = ``transformWithIndent(that.rightOperand)``;
                ``indent``}";
    transformEntryOperation(EntryOperation that)
            => "EntryOperation {
                `` indent + indentLevel ``key = ``transformWithIndent(that.key)``;
                `` indent + indentLevel ``item = ``transformWithIndent(that.item)``;
                ``indent``}";
    transformEntryType(EntryType that)
            => "EntryType {
                `` indent + indentLevel ``key = ``transformWithIndent(that.key)``;
                `` indent + indentLevel ``item = ``transformWithIndent(that.item)``;
                ``indent``}";
    transformEqualOperation(EqualOperation that)
            => "EqualOperation {
                `` indent + indentLevel ``leftOperand_ = ``transformWithIndent(that.leftOperand)``;
                `` indent + indentLevel ``rightOperand_ = ``transformWithIndent(that.rightOperand)``;
                ``indent``}";
    transformExistsCondition(ExistsCondition that) => "ExistsCondition(``transformWithIndent(that.variable)``)";
    transformExistsOperation(ExistsOperation that) => "ExistsOperation(``transformWithIndent(that.operand)``)";
    transformExponentiationOperation(ExponentiationOperation that)
            => "ExponentiationOperation {
                `` indent + indentLevel ``base = ``transformWithIndent(that.base)``;
                `` indent + indentLevel ``exponent = ``transformWithIndent(that.exponent)``;
                ``indent``}";
    transformExpressionComprehensionClause(ExpressionComprehensionClause that) => "ExpressionComprehensionClause(``transformWithIndent(that.expression)``)";
    transformExtendedType(ExtendedType that) => "ExtendedType(``transformWithIndent(that.instantiation)``)";
    transformFailClause(FailClause that) => "FailClause(``transformWithIndent(that.block)``)";
    transformFinallyClause(FinallyClause that) => "FinallyClause(``transformWithIndent(that.block)``)";
    transformFloatLiteral(FloatLiteral that) => "FloatLiteral(\"``that.text``\")";
    transformForClause(ForClause that)
            => "ForClause {
                `` indent + indentLevel ``iterator = ``transformWithIndent(that.iterator)``;
                `` indent + indentLevel ``block = ``transformWithIndent(that.block)``;
                ``indent``}";
    transformForComprehensionClause(ForComprehensionClause that)
            => "ForComprehensionClause {
                `` indent + indentLevel ``iterator = ``transformWithIndent(that.iterator)``;
                `` indent + indentLevel ``clause = ``transformWithIndent(that.clause)``;
                ``indent``}";
    transformForFail(ForFail that)
            => "ForFail {
                `` indent + indentLevel ``forClause = ``transformWithIndent(that.forClause)``;
                `` indent + indentLevel ``failClause = ``transformWithIndent(that.failClause)``;
                ``indent``}";
    transformFullPackageName(FullPackageName that) => "FullPackageName(``transformWithIndent(that.components)``)";
    transformFunctionArgument(FunctionArgument that)
            => "FunctionArgument {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``type = ``transformWithIndent(that.type)``;
                `` indent + indentLevel ``parameterLists = ``transformWithIndent(that.parameterLists)``;
                `` indent + indentLevel ``definition = ``transformWithIndent(that.definition)``;
                ``indent``}";
    transformFunctionDec(FunctionDec that)
            => that.qualifier exists
            then "FunctionDec {
                  `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                  `` indent + indentLevel ``qualifier = ``transformWithIndent(that.qualifier)``;
                  ``indent``}"
            else "FunctionDec(``transformWithIndent(that.name)``)";
    transformFunctionDeclaration(FunctionDeclaration that)
            => "FunctionDeclaration {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``type = ``transformWithIndent(that.type)``;
                `` indent + indentLevel ``parameterLists = ``transformWithIndent(that.parameterLists)``;
                `` indent + indentLevel ``typeParameters = ``transformWithIndent(that.typeParameters)``;
                `` indent + indentLevel ``typeConstraints = ``transformWithIndent(that.typeConstraints)``;
                `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                ``indent``}";
    transformFunctionDefinition(FunctionDefinition that)
            => "FunctionDefinition {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``type = ``transformWithIndent(that.type)``;
                `` indent + indentLevel ``parameterLists = ``transformWithIndent(that.parameterLists)``;
                `` indent + indentLevel ``definition = ``transformWithIndent(that.definition)``;
                `` indent + indentLevel ``typeParameters = ``transformWithIndent(that.typeParameters)``;
                `` indent + indentLevel ``typeConstraints = ``transformWithIndent(that.typeConstraints)``;
                `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                ``indent``}";
    transformFunctionExpression(FunctionExpression that)
            => "FunctionExpression {
                `` indent + indentLevel ``parameterLists = ``transformWithIndent(that.parameterLists)``;
                `` indent + indentLevel ``definition = ``transformWithIndent(that.definition)``;
                `` indent + indentLevel ``type = ``transformWithIndent(that.type)``;
                ``indent``}";
    transformFunctionModifier(FunctionModifier that) => "FunctionModifier()";
    transformFunctionShortcutDefinition(FunctionShortcutDefinition that)
            => "FunctionShortcutDefinition {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``type = ``transformWithIndent(that.type)``;
                `` indent + indentLevel ``parameterLists = ``transformWithIndent(that.parameterLists)``;
                `` indent + indentLevel ``definition = ``transformWithIndent(that.definition)``;
                `` indent + indentLevel ``typeParameters = ``transformWithIndent(that.typeParameters)``;
                `` indent + indentLevel ``typeConstraints = ``transformWithIndent(that.typeConstraints)``;
                `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                ``indent``}";
    transformGivenDec(GivenDec that) => "GivenDec(``transformWithIndent(that.name)``)";
    transformGroupedExpression(GroupedExpression that) => "GroupedExpression(``transformWithIndent(that.innerExpression)``)";
    transformGroupedType(GroupedType that) => "GroupedType(``transformWithIndent(that.type)``)";
    transformIdenticalOperation(IdenticalOperation that)
            => "IdenticalOperation {
                `` indent + indentLevel ``leftOperand_ = ``transformWithIndent(that.leftOperand)``;
                `` indent + indentLevel ``rightOperand_ = ``transformWithIndent(that.rightOperand)``;
                ``indent``}";
    transformIdentityOperation(IdentityOperation that) => "IdentityOperation(``transformWithIndent(that.operand)``)";
    transformIfClause(IfClause that)
            => "IfClause {
                `` indent + indentLevel ``conditions = ``transformWithIndent(that.conditions)``;
                `` indent + indentLevel ``block = ``transformWithIndent(that.block)``;
                ``indent``}";
    transformIfComprehensionClause(IfComprehensionClause that)
            => "IfComprehensionClause {
                `` indent + indentLevel ``conditions = ``transformWithIndent(that.conditions)``;
                `` indent + indentLevel ``clause = ``transformWithIndent(that.clause)``;
                ``indent``}";
    transformIfElse(IfElse that)
            => "IfElse {
                `` indent + indentLevel ``ifClause = ``transformWithIndent(that.ifClause)``;
                `` indent + indentLevel ``elseClause = ``transformWithIndent(that.elseClause)``;
                ``indent``}";
    transformImport(Import that)
            => "Import {
                `` indent + indentLevel ``packageName = ``transformWithIndent(that.packageName)``;
                `` indent + indentLevel ``elements = ``transformWithIndent(that.elements)``;
                ``indent``}";
    transformImportElements(ImportElements that)
            => "ImportElements {
                `` indent + indentLevel ``elements = ``transformWithIndent(that.elements)``;
                `` indent + indentLevel ``wildcard = ``transformWithIndent(that.wildcard)``;
                ``indent``}";
    transformImportFunctionValueAlias(ImportFunctionValueAlias that) => "ImportFunctionValueAlias(``transformWithIndent(that.name)``)";
    transformImportFunctionValueElement(ImportFunctionValueElement that)
            => "ImportFunctionValueElement {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``importAlias = ``transformWithIndent(that.importAlias)``;
                `` indent + indentLevel ``nestedImports = ``transformWithIndent(that.nestedImports)``;
                ``indent``}";
    transformImportTypeAlias(ImportTypeAlias that) => "ImportTypeAlias(``transformWithIndent(that.name)``)";
    transformImportTypeElement(ImportTypeElement that)
            => "ImportTypeElement {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``importAlias = ``transformWithIndent(that.importAlias)``;
                `` indent + indentLevel ``nestedImports = ``transformWithIndent(that.nestedImports)``;
                ``indent``}";
    transformImportWildcard(ImportWildcard that) => "ImportWildcard()";
    transformInModifier(InModifier that) => "InModifier()";
    transformInOperation(InOperation that)
            => "InOperation {
                `` indent + indentLevel ``element = ``transformWithIndent(that.element)``;
                `` indent + indentLevel ``category = ``transformWithIndent(that.category)``;
                ``indent``}";
    transformIntegerLiteral(IntegerLiteral that) => "IntegerLiteral(\"``that.text``\")";
    transformInterfaceAliasDefinition(InterfaceAliasDefinition that)
            => "InterfaceAliasDefinition {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``specifier = ``transformWithIndent(that.specifier)``;
                `` indent + indentLevel ``caseTypes = ``transformWithIndent(that.caseTypes)``;
                `` indent + indentLevel ``satisfiedTypes = ``transformWithIndent(that.satisfiedTypes)``;
                `` indent + indentLevel ``typeParameters = ``transformWithIndent(that.typeParameters)``;
                `` indent + indentLevel ``typeConstraints = ``transformWithIndent(that.typeConstraints)``;
                `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                ``indent``}";
    transformInterfaceBody(InterfaceBody that) => "InterfaceBody(``transformWithIndent(that.content)``)";
    transformInterfaceDec(InterfaceDec that)
            => that.qualifier exists
            then "InterfaceDec {
                  `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                  `` indent + indentLevel ``qualifier = ``transformWithIndent(that.qualifier)``;
                  ``indent``}"
            else "InterfaceDec(``transformWithIndent(that.name)``)";
    transformInterfaceDefinition(InterfaceDefinition that)
            => "InterfaceDefinition {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``body = ``transformWithIndent(that.body)``;
                `` indent + indentLevel ``caseTypes = ``transformWithIndent(that.caseTypes)``;
                `` indent + indentLevel ``satisfiedTypes = ``transformWithIndent(that.satisfiedTypes)``;
                `` indent + indentLevel ``typeParameters = ``transformWithIndent(that.typeParameters)``;
                `` indent + indentLevel ``typeConstraints = ``transformWithIndent(that.typeConstraints)``;
                `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                ``indent``}";
    transformIntersectionType(IntersectionType that) => "IntersectionType(``transformWithIndent(that.children)``)";
    transformIntersectAssignmentOperation(IntersectAssignmentOperation that)
            => "IntersectAssignmentOperation {
                `` indent + indentLevel ``target = ``transformWithIndent(that.target)``;
                `` indent + indentLevel ``other = ``transformWithIndent(that.other)``;
                ``indent``}";
    transformIntersectionOperation(IntersectionOperation that)
            => "IntersectionOperation {
                `` indent + indentLevel ``leftOperand_ = ``transformWithIndent(that.leftOperand)``;
                `` indent + indentLevel ``rightOperand_ = ``transformWithIndent(that.rightOperand)``;
                ``indent``}";
    transformInvocation(Invocation that)
            => "Invocation {
                `` indent + indentLevel ``invoked = ``transformWithIndent(that.invoked)``;
                `` indent + indentLevel ``arguments = ``transformWithIndent(that.arguments)``;
                ``indent``}";
    transformInvocationStatement(InvocationStatement that) => "InvocationStatement(``transformWithIndent(that.expression)``)";
    transformIsCase(IsCase that) => "IsCase(``transformWithIndent(that.type)``)";
    transformIsCondition(IsCondition that)
            => "IsCondition {
                `` indent + indentLevel ``variable = ``transformWithIndent(that.variable)``;
                `` indent + indentLevel ``negated = ``that.negated``;
                ``indent``}";
    transformIsOperation(IsOperation that)
            => "IsOperation {
                `` indent + indentLevel ``operand_ = ``transformWithIndent(that.operand)``;
                `` indent + indentLevel ``type_ = ``transformWithIndent(that.type)``;
                ``indent``}";
    transformIterable(Iterable that) => "Iterable(``transformWithIndent(that.argumentList)``)";
    transformIterableType(IterableType that) => "IterableType(``transformWithIndent(that.variadicType)``)";
    transformKeySubscript(KeySubscript that) => "KeySubscript(``transformWithIndent(that.key)``)";
    transformKeyValueIterator(KeyValueIterator that)
            => "KeyValueIterator {
                `` indent + indentLevel ``keyVariable = ``transformWithIndent(that.keyVariable)``;
                `` indent + indentLevel ``valueVariable = ``transformWithIndent(that.valueVariable)``;
                `` indent + indentLevel ``iterated = ``transformWithIndent(that.iterated)``;
                ``indent``}";
    transformLIdentifier(LIdentifier that)
            => that.usePrefix
            then "LIdentifier(\"``that.name``\", true)"
            else "LIdentifier(\"``that.name``\")";
    transformLazySpecification(LazySpecification that)
            => "LazySpecification {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``specifier = ``transformWithIndent(that.specifier)``;
                `` indent + indentLevel ``parameterLists = ``transformWithIndent(that.parameterLists)``;
                ``indent``}";
    transformMatchCase(MatchCase that) => "MatchCase(``transformWithIndent(that.expressions)``)";
    transformMeasureSubscript(MeasureSubscript that)
            => "MeasureSubscript {
                `` indent + indentLevel ``from = ``transformWithIndent(that.from)``;
                `` indent + indentLevel ``length = ``transformWithIndent(that.length)``;
                ``indent``}";
    transformMemberNameWithTypeArguments(MemberNameWithTypeArguments that)
            => that.typeArguments exists
            then "MemberNameWithTypeArguments {
                  `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                  `` indent + indentLevel ``typeArguments = ``transformWithIndent(that.typeArguments)``;
                  ``indent``}"
            else "MemberNameWithTypeArguments(``transformWithIndent(that.name)``)";
    transformLargeAsOperation(LargeAsOperation that)
            => "LargeAsOperation {
                `` indent + indentLevel ``leftOperand_ = ``transformWithIndent(that.leftOperand)``;
                `` indent + indentLevel ``rightOperand_ = ``transformWithIndent(that.rightOperand)``;
                ``indent``}";
    transformLargerOperation(LargerOperation that)
            => "LargerOperation {
                `` indent + indentLevel ``leftOperand_ = ``transformWithIndent(that.leftOperand)``;
                `` indent + indentLevel ``rightOperand_ = ``transformWithIndent(that.rightOperand)``;
                ``indent``}";
    transformLazySpecifier(LazySpecifier that) => "LazySpecifier(``transformWithIndent(that.expression)``)";
    transformMeasureOperation(MeasureOperation that)
            => "MeasureOperation {
                `` indent + indentLevel ``first = ``transformWithIndent(that.first)``;
                `` indent + indentLevel ``size = ``transformWithIndent(that.size)``;
                ``indent``}";
    transformMemberMeta(MemberMeta that)
            => "MemberMeta {
                `` indent + indentLevel ``qualifier = ``transformWithIndent(that.qualifier)``;
                `` indent + indentLevel ``nameAndArgs = ``transformWithIndent(that.nameAndArgs)``;
                ``indent``}";
    transformMemberOperator(MemberOperator that) => "MemberOperator()";
    transformModuleBody(ModuleBody that) => "ModuleBody(``transformWithIndent(that.moduleImports)``)";
    transformModuleCompilationUnit(ModuleCompilationUnit that)
            => "ModuleCompilationUnit {
                `` indent + indentLevel ``moduleDescriptor = ``transformWithIndent(that.moduleDescriptor)``;
                `` indent + indentLevel ``imports = ``transformWithIndent(that.imports)``;
                ``indent``}";
    transformModuleDec(ModuleDec that) => "ModuleDec(``transformWithIndent(that.moduleName)``)";
    transformModuleDescriptor(ModuleDescriptor that)
            => "ModuleDescriptor {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``version = ``transformWithIndent(that.version)``;
                `` indent + indentLevel ``body = ``transformWithIndent(that.body)``;
                `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                ``indent``}";
    transformModuleImport(ModuleImport that)
            => "ModuleImport {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``version = ``transformWithIndent(that.version)``;
                `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                ``indent``}";
    transformMultiplyAssignmentOperation(MultiplyAssignmentOperation that)
            => "MultiplyAssignmentOperation {
                `` indent + indentLevel ``target = ``transformWithIndent(that.target)``;
                `` indent + indentLevel ``factor = ``transformWithIndent(that.factor)``;
                ``indent``}";
    transformNamedArguments(NamedArguments that)
            => that.iterableArgument.children nonempty
            then "NamedArguments {
                  `` indent + indentLevel ``namedArguments = ``transformWithIndent(that.namedArguments)``;
                  `` indent + indentLevel ``iterableArgument = ``transformWithIndent(that.iterableArgument)``;
                  ``indent``}"
            else (that.namedArguments nonempty
                then "NamedArguments(``transformWithIndent(that.namedArguments)``)"
                else "NamedArguments()");
    transformNegationOperation(NegationOperation that) => "NegationOperation(``transformWithIndent(that.operand)``)";
    transformNonemptyCondition(NonemptyCondition that) => "NonemptyCondition(``transformWithIndent(that.variable)``)";
    transformNonemptyOperation(NonemptyOperation that) => "NonemptyOperation(``transformWithIndent(that.operand)``)";
    transformNotEqualOperation(NotEqualOperation that)
            => "NotEqualOperation {
                `` indent + indentLevel ``leftOperand_ = ``transformWithIndent(that.leftOperand)``;
                `` indent + indentLevel ``rightOperand_ = ``transformWithIndent(that.rightOperand)``;
                ``indent``}";
    transformNotOperation(NotOperation that) => "NotOperation(``transformWithIndent(that.operand)``)";
    transformObjectArgument(ObjectArgument that)
            => "ObjectArgument {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``body = ``transformWithIndent(that.body)``;
                `` indent + indentLevel ``extendedType = ``transformWithIndent(that.extendedType)``;
                `` indent + indentLevel ``satisfiedTypes = ``transformWithIndent(that.satisfiedTypes)``;
                ``indent``}";
    transformObjectDefinition(ObjectDefinition that)
            => "ObjectDefinition {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``body = ``transformWithIndent(that.body)``;
                `` indent + indentLevel ``extendedType = ``transformWithIndent(that.extendedType)``;
                `` indent + indentLevel ``satisfiedTypes = ``transformWithIndent(that.satisfiedTypes)``;
                `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                ``indent``}";
    transformOfOperation(OfOperation that)
            => "OfOperation {
                `` indent + indentLevel ``operand_ = ``transformWithIndent(that.operand)``;
                `` indent + indentLevel ``type_ = ``transformWithIndent(that.type)``;
                ``indent``}";
    transformOpenBound(OpenBound that) => "OpenBound(``transformWithIndent(that.endpoint)``)";
    transformOperatorStyleInvocation(OperatorStyleInvocation that)
            => "OperatorStyleInvocation {
                `` indent + indentLevel ``receiverExpression = ``transformWithIndent(that.receiverExpression)``;
                `` indent + indentLevel ``nameAndArgs = ``transformWithIndent(that.nameAndArgs)``;
                `` indent + indentLevel ``argument = ``transformWithIndent(that.argument)``;
                ``indent``}";
    transformOperatorStyleMemberExpression(OperatorStyleMemberExpression that)
            => "OperatorStyleMemberExpression {
                `` indent + indentLevel ``receiverExpression = ``transformWithIndent(that.receiverExpression)``;
                `` indent + indentLevel ``nameAndArgs = ``transformWithIndent(that.nameAndArgs)``;
                ``indent``}";
    transformOptionalType(OptionalType that) => "OptionalType(``transformWithIndent(that.definiteType)``)";
    transformOrAssignmentOperation(OrAssignmentOperation that)
            => "OrAssignmentOperation {
                `` indent + indentLevel ``target = ``transformWithIndent(that.target)``;
                `` indent + indentLevel ``other = ``transformWithIndent(that.other)``;
                ``indent``}";
    transformOrOperation(OrOperation that)
            => "OrOperation {
                `` indent + indentLevel ``leftOperand_ = ``transformWithIndent(that.leftOperand)``;
                `` indent + indentLevel ``rightOperand_ = ``transformWithIndent(that.rightOperand)``;
                ``indent``}";
    transformOutModifier(OutModifier that) => "OutModifier()";
    transformOuter(Outer that) => "Outer()";
    transformPackage(Package that) => "Package()";
    transformPackageCompilationUnit(PackageCompilationUnit that)
            => "PackageCompilationUnit {
                `` indent + indentLevel ``packageDescriptor = ``transformWithIndent(that.packageDescriptor)``;
                `` indent + indentLevel ``imports = ``transformWithIndent(that.imports)``;
                ``indent``}";
    transformPackageDec(PackageDec that) => "PackageDec(``transformWithIndent(that.packageName)``)";
    transformPackageDescriptor(PackageDescriptor that)
            => "PackageDescriptor {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                ``indent``}";
    transformParameterReference(ParameterReference that) => "ParameterReference(``transformWithIndent(that.name)``)";
    transformParameters(Parameters that)
            => that.parameters nonempty
            then "Parameters(``transformWithIndent(that.parameters)``)"
            else "Parameters()";
    transformPositionalArguments(PositionalArguments that) => "PositionalArguments(``transformWithIndent(that.argumentList)``)";
    transformPostfixDecrementOperation(PostfixDecrementOperation that) => "PostfixDecrementOperation(``transformWithIndent(that.operand)``)";
    transformPostfixIncrementOperation(PostfixIncrementOperation that) => "PostfixIncrementOperation(``transformWithIndent(that.operand)``)";
    transformPrefixDecrementOperation(PrefixDecrementOperation that) => "PrefixDecrementOperation(``transformWithIndent(that.operand)``)";
    transformPrefixIncrementOperation(PrefixIncrementOperation that) => "PrefixIncrementOperation(``transformWithIndent(that.operand)``)";
    transformPrefixPostfixStatement(PrefixPostfixStatement that) => "PrefixPostfixStatement(``transformWithIndent(that.expression)``)";
    transformProductOperation(ProductOperation that)
            => "ProductOperation {
                `` indent + indentLevel ``leftFactor = ``transformWithIndent(that.leftFactor)``;
                `` indent + indentLevel ``rightFactor = ``transformWithIndent(that.rightFactor)``;
                ``indent``}";
    transformQualifiedExpression(QualifiedExpression that)
            => that.memberOperator is MemberOperator
            then "QualifiedExpression {
                  `` indent + indentLevel ``receiverExpression = ``transformWithIndent(that.receiverExpression)``;
                  `` indent + indentLevel ``nameAndArgs = ``transformWithIndent(that.nameAndArgs)``;
                  ``indent``}"
            else "QualifiedExpression {
                  `` indent + indentLevel ``receiverExpression = ``transformWithIndent(that.receiverExpression)``;
                  `` indent + indentLevel ``nameAndArgs = ``transformWithIndent(that.nameAndArgs)``;
                  `` indent + indentLevel ``memberOperator = ``transformWithIndent(that.memberOperator)``;
                  ``indent``}";
    transformQualifiedType(QualifiedType that)
            => "QualifiedType {
                `` indent + indentLevel ``qualifyingType = ``transformWithIndent(that.qualifyingType)``;
                `` indent + indentLevel ``nameAndArgs = ``transformWithIndent(that.nameAndArgs)``;
                ``indent``}";
    transformQuotientOperation(QuotientOperation that)
            => "QuotientOperation {
                `` indent + indentLevel ``dividend = ``transformWithIndent(that.dividend)``;
                `` indent + indentLevel ``divisor = ``transformWithIndent(that.divisor)``;
                ``indent``}";
    transformRemainderAssignmentOperation(RemainderAssignmentOperation that)
            => "RemainderAssignmentOperation {
                `` indent + indentLevel ``target = ``transformWithIndent(that.target)``;
                `` indent + indentLevel ``divisor = ``transformWithIndent(that.divisor)``;
                ``indent``}";
    transformRemainderOperation(RemainderOperation that)
            => "RemainderOperation {
                `` indent + indentLevel ``dividend = ``transformWithIndent(that.dividend)``;
                `` indent + indentLevel ``divisor = ``transformWithIndent(that.divisor)``;
                ``indent``}";
    transformResource(Resource that) => "Resource(``transformWithIndent(that.resource)``)";
    transformResources(Resources that) => "Resources(``transformWithIndent(that.resources)``)";
    transformReturn(Return that) => "Return(``transformWithIndent(that.result)``)";
    transformSafeMemberOperator(SafeMemberOperator that) => "SafeMemberOperator()";
    transformSatisfiedTypes(SatisfiedTypes that) => "SatisfiedTypes(``transformWithIndent(that.satisfiedTypes)``)";
    transformScaleOperation(ScaleOperation that)
            => "ScaleOperation {<commit_msg>CeylonExpressionTransformer: Improve returns<commit_after>"Builds a Ceylon expression string for an AST node;
 compiling and evaluating the resulting string will yield
 a copy of the transformed node.
 
 Usage:
 ~~~
 myNode.transform(CeylonExpressionTransformer());
 ~~~"
shared class CeylonExpressionTransformer(String indentLevel = "    ") satisfies ImmediateNarrowingTransformer<String> {
    
    variable String indent = "";
    
    String transformWithIndent(Node|Node[]|Null that) {
        switch (that)
        case (is Node) {
            value origIndent = indent;
            indent += indentLevel;
            value ret = that.transform(this);
            indent = origIndent;
            return ret;
        }
        case (is []) {
            return "[]";
        }
        case (null) {
            return "null";
        }
        else { // case (is [Node+]) { – but Node and [Node+] are not disjoint, because Sequence is a sealed interface, not a class
            assert (is [Node+] that);
            value origIndent = indent;
            indent += indentLevel + indentLevel;
            value firstString = that.first.transform(this);
            value multiLine = that.size > 1 || firstString.lines.longerThan(1);
            StringBuilder code = StringBuilder();
            code.append("[");
            if (multiLine) {
                code.appendNewline();
                code.append(indent);
            }
            code.append(firstString);
            for (node in that.rest) {
                code.append(",");
                code.appendNewline();
                code.append(indent);
                code.append(node.transform(this));
            }
            if (multiLine) {
                code.appendNewline();
                code.append(origIndent + indentLevel);
            }
            code.append("]");
            indent = origIndent;
            return code.string;
        }
    }
    
    transformAddAssignmentOperation(AddAssignmentOperation that)
            => "AddAssignmentOperation {
                `` indent + indentLevel ``target = ``transformWithIndent(that.target)``;
                `` indent + indentLevel ``summand = ``transformWithIndent(that.summand)``;
                ``indent``}";
    transformAliasDec(AliasDec that)
            => that.qualifier exists
            then "AliasDec {
                  `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                  `` indent + indentLevel ``qualifier = ``transformWithIndent(that.qualifier)``;
                  ``indent``}"
            else "AliasDec(``transformWithIndent(that.name)``)";
    transformAndAssignmentOperation(AndAssignmentOperation that)
            => "AndAssignmentOperation {
                `` indent + indentLevel ``target = ``transformWithIndent(that.target)``;
                `` indent + indentLevel ``other = ``transformWithIndent(that.other)``;
                ``indent``}";
    transformAndOperation(AndOperation that)
            => "AndOperation {
                `` indent + indentLevel ``leftOperand_ = ``transformWithIndent(that.leftOperand)``;
                `` indent + indentLevel ``rightOperand_ = ``transformWithIndent(that.rightOperand)``;
                ``indent``}";
    transformArgumentList(ArgumentList that)
            => that.sequenceArgument exists
            then "ArgumentList {
                  `` indent + indentLevel ``listedArguments = ``transformWithIndent(that.listedArguments)``;
                  `` indent + indentLevel ``sequenceArgument = ``transformWithIndent(that.sequenceArgument)``;
                  ``indent``}"
            else "ArgumentList(``transformWithIndent(that.listedArguments)``)";
    transformAnnotation(Annotation that)
            => that.arguments exists
            then "Annotation {
                  `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                  `` indent + indentLevel ``arguments = ``transformWithIndent(that.arguments)``;
                  ``indent``}"
            else "Annotation(``transformWithIndent(that.name)``)";
    transformAnnotations(Annotations that)
            => that.anonymousAnnotation exists
            then (that.annotations nonempty
                then "Annotations {
                      `` indent + indentLevel ``anonymousAnnotation = ``transformWithIndent(that.anonymousAnnotation)``;
                      `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                      ``indent``}"
                else "Annotations(``transformWithIndent(that.anonymousAnnotation)``)")
            else (that.annotations nonempty
                then "Annotations {
                      `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                      ``indent``}"
                else "Annotations()");
    transformAnonymousArgument(AnonymousArgument that) => "AnonymousArgument(``transformWithIndent(that.expression)``)";
    transformAssertion(Assertion that)
            => "Assertion {
                `` indent + indentLevel ``conditions = ``transformWithIndent(that.conditions)``;
                `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                ``indent``}";
    transformAssignOperation(AssignOperation that)
            => "AssignOperation {
                `` indent + indentLevel ``target = ``transformWithIndent(that.target)``;
                `` indent + indentLevel ``expression = ``transformWithIndent(that.expression)``;
                ``indent``}";
    transformAssignmentStatement(AssignmentStatement that) => "AssignmentStatement(``transformWithIndent(that.expression)``)";
    transformBaseExpression(BaseExpression that) => "BaseExpression(``transformWithIndent(that.nameAndArgs)``)";
    transformBaseMeta(BaseMeta that) => "BaseMeta(``transformWithIndent(that.nameAndArgs)``)";
    transformBaseType(BaseType that) => "BaseType(``transformWithIndent(that.nameAndArgs)``)";
    transformBlock(Block that) => "Block(``transformWithIndent(that.content)``)";
    transformBooleanCondition(BooleanCondition that) => "BooleanCondition(``transformWithIndent(that.condition)``)";
    transformBreak(Break that) => "Break()";
    transformCallableParameter(CallableParameter that)
            => "CallableParameter {
                `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                `` indent + indentLevel ``type = ``transformWithIndent(that.type)``;
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``parameterLists = ``transformWithIndent(that.parameterLists)``;
                ``indent``}";
    transformCallableType(CallableType that)
            => "CallableType {
                `` indent + indentLevel ``returnType = ``transformWithIndent(that.returnType)``;
                `` indent + indentLevel ``argumentTypes = ``transformWithIndent(that.argumentTypes)``;
                ``indent``}";
    transformCaseClause(CaseClause that)
            => "CaseClause {
                `` indent + indentLevel ``caseItem = ``transformWithIndent(that.caseItem)``;
                `` indent + indentLevel ``block = ``transformWithIndent(that.block)``;
                ``indent``}";
    transformCaseTypes(CaseTypes that) => "CaseTypes(``transformWithIndent(that.caseTypes)``)";
    transformCatchClause(CatchClause that)
            => "CatchClause {
                `` indent + indentLevel ``variable = ``transformWithIndent(that.variable)``;
                `` indent + indentLevel ``block = ``transformWithIndent(that.block)``;
                ``indent``}";
    transformCharacterLiteral(CharacterLiteral that) => "CharacterLiteral(\"\"\"``that.text``\"\"\")";
    transformClassAliasDefinition(ClassAliasDefinition that)
            => "ClassAliasDefinition {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``parameters = ``transformWithIndent(that.parameters)``;
                `` indent + indentLevel ``specifier = ``transformWithIndent(that.specifier)``;
                `` indent + indentLevel ``caseTypes = ``transformWithIndent(that.caseTypes)``;
                `` indent + indentLevel ``extendedType = ``transformWithIndent(that.extendedType)``;
                `` indent + indentLevel ``satisfiedTypes = ``transformWithIndent(that.satisfiedTypes)``;
                `` indent + indentLevel ``typeParameters = ``transformWithIndent(that.typeParameters)``;
                `` indent + indentLevel ``typeConstraints = ``transformWithIndent(that.typeConstraints)``;
                `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                ``indent``}";
    transformClassBody(ClassBody that) => "ClassBody(``transformWithIndent(that.content)``)";
    transformClassDec(ClassDec that)
            => that.qualifier exists
            then "ClassDec {
                  `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                  `` indent + indentLevel ``qualifier = ``transformWithIndent(that.qualifier)``;
                  ``indent``}"
            else "ClassDec(``transformWithIndent(that.name)``)";
    transformClassDefinition(ClassDefinition that)
            => "ClassDefinition {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``parameters = ``transformWithIndent(that.parameters)``;
                `` indent + indentLevel ``body = ``transformWithIndent(that.body)``;
                `` indent + indentLevel ``caseTypes = ``transformWithIndent(that.caseTypes)``;
                `` indent + indentLevel ``extendedType = ``transformWithIndent(that.extendedType)``;
                `` indent + indentLevel ``satisfiedTypes = ``transformWithIndent(that.satisfiedTypes)``;
                `` indent + indentLevel ``typeParameters = ``transformWithIndent(that.typeParameters)``;
                `` indent + indentLevel ``typeConstraints = ``transformWithIndent(that.typeConstraints)``;
                `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                ``indent``}";
    transformClassInstantiation(ClassInstantiation that)
            => "ClassInstantiation {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``arguments = ``transformWithIndent(that.arguments)``;
                `` indent + indentLevel ``qualifier = ``transformWithIndent(that.qualifier)``;
                ``indent``}";
    transformClassSpecifier(ClassSpecifier that) => "ClassSpecifier(``transformWithIndent(that.instantiation)``)";
    transformClosedBound(ClosedBound that) => "ClosedBound(``transformWithIndent(that.endpoint)``)";
    transformCompareOperation(CompareOperation that)
            => "CompareOperation {
                `` indent + indentLevel ``leftOperand_ = ``transformWithIndent(that.leftOperand)``;
                `` indent + indentLevel ``rightOperand_ = ``transformWithIndent(that.rightOperand)``;
                ``indent``}";
    transformCompilationUnit(CompilationUnit that)
            => "CompilationUnit {
                `` indent + indentLevel ``imports = ``transformWithIndent(that.imports)``;
                `` indent + indentLevel ``declarations = ``transformWithIndent(that.declarations)``;
                ``indent``}";
    transformComplementAssignmentOperation(ComplementAssignmentOperation that)
            => "ComplementAssignmentOperation {
                `` indent + indentLevel ``target = ``transformWithIndent(that.target)``;
                `` indent + indentLevel ``other = ``transformWithIndent(that.other)``;
                ``indent``}";
    transformComplementOperation(ComplementOperation that)
            => "ComplementOperation {
                `` indent + indentLevel ``leftOperand_ = ``transformWithIndent(that.leftOperand)``;
                `` indent + indentLevel ``rightOperand_ = ``transformWithIndent(that.rightOperand)``;
                ``indent``}";
    transformComprehension(Comprehension that) => "Comprehension(``transformWithIndent(that.clause)``)";
    transformConditions(Conditions that) => "Conditions(``transformWithIndent(that.conditions)``)";
    transformContinue(Continue that) => "Continue()";
    transformDecQualifier(DecQualifier that) => "DecQualifier(``transformWithIndent(that.components)``)";
    transformDefaultedCallableParameter(DefaultedCallableParameter that)
            => "DefaultedCallableParameter {
                `` indent + indentLevel ``parameter = ``transformWithIndent(that.parameter)``;
                `` indent + indentLevel ``specifier = ``transformWithIndent(that.specifier)``;
                ``indent``}";
    transformDefaultedParameterReference(DefaultedParameterReference that)
            => "DefaultedParameterReference {
                `` indent + indentLevel ``parameter = ``transformWithIndent(that.parameter)``;
                `` indent + indentLevel ``specifier = ``transformWithIndent(that.specifier)``;
                ``indent``}";
    transformDefaultedType(DefaultedType that) => "DefaultedType(``transformWithIndent(that.type)``)";
    transformDefaultedValueParameter(DefaultedValueParameter that)
            => "DefaultedValueParameter {
                `` indent + indentLevel ``parameter = ``transformWithIndent(that.parameter)``;
                `` indent + indentLevel ``specifier = ``transformWithIndent(that.specifier)``;
                ``indent``}";
    transformDifferenceOperation(DifferenceOperation that)
            => "DifferenceOperation {
                `` indent + indentLevel ``minuend = ``transformWithIndent(that.minuend)``;
                `` indent + indentLevel ``subtrahend = ``transformWithIndent(that.subtrahend)``;
                ``indent``}";
    transformDivideAssignmentOperation(DivideAssignmentOperation that)
            => "DivideAssignmentOperation {
                `` indent + indentLevel ``target = ``transformWithIndent(that.target)``;
                `` indent + indentLevel ``divisor = ``transformWithIndent(that.divisor)``;
                ``indent``}";
    transformDynamicBlock(DynamicBlock that) => "DynamicBlock(``transformWithIndent(that.block)``)";
    transformDynamicInterfaceDefinition(DynamicInterfaceDefinition that)
            => "DynamicInterfaceDefinition {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``body = ``transformWithIndent(that.body)``;
                `` indent + indentLevel ``caseTypes = ``transformWithIndent(that.caseTypes)``;
                `` indent + indentLevel ``satisfiedTypes = ``transformWithIndent(that.satisfiedTypes)``;
                `` indent + indentLevel ``typeParameters = ``transformWithIndent(that.typeParameters)``;
                `` indent + indentLevel ``typeConstraints = ``transformWithIndent(that.typeConstraints)``;
                `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                ``indent``}";
    transformDynamicModifier(DynamicModifier that) => "DynamicModifier()";
    transformDynamicValue(DynamicValue that)
            => "DynamicValue {
                `` indent + indentLevel ``namedArguments = ``transformWithIndent(that.namedArguments)``;
                `` indent + indentLevel ``iterableArgument = ``transformWithIndent(that.iterableArgument)``;
                `` indent + indentLevel ``modifier = ``transformWithIndent(that.modifier)``;
                ``indent``}";
    transformElementOrSubrangeExpression(ElementOrSubrangeExpression that)
            => "ElementOrSubrangeExpression {
                `` indent + indentLevel ``primary = ``transformWithIndent(that.primary)``;
                `` indent + indentLevel ``subscript = ``transformWithIndent(that.subscript)``;
                ``indent``}";
    transformElseCaseClause(ElseCaseClause that) => "ElseCaseClause(``transformWithIndent(that.block)``)";
    transformElseClause(ElseClause that) => "ElseClause(``transformWithIndent(that.child)``)";
    transformElseOperation(ElseOperation that)
            => "ElseOperation {
                `` indent + indentLevel ``optionalValue = ``transformWithIndent(that.leftOperand)``;
                `` indent + indentLevel ``defaultValue = ``transformWithIndent(that.rightOperand)``;
                ``indent``}";
    transformEntryOperation(EntryOperation that)
            => "EntryOperation {
                `` indent + indentLevel ``key = ``transformWithIndent(that.key)``;
                `` indent + indentLevel ``item = ``transformWithIndent(that.item)``;
                ``indent``}";
    transformEntryType(EntryType that)
            => "EntryType {
                `` indent + indentLevel ``key = ``transformWithIndent(that.key)``;
                `` indent + indentLevel ``item = ``transformWithIndent(that.item)``;
                ``indent``}";
    transformEqualOperation(EqualOperation that)
            => "EqualOperation {
                `` indent + indentLevel ``leftOperand_ = ``transformWithIndent(that.leftOperand)``;
                `` indent + indentLevel ``rightOperand_ = ``transformWithIndent(that.rightOperand)``;
                ``indent``}";
    transformExistsCondition(ExistsCondition that) => "ExistsCondition(``transformWithIndent(that.variable)``)";
    transformExistsOperation(ExistsOperation that) => "ExistsOperation(``transformWithIndent(that.operand)``)";
    transformExponentiationOperation(ExponentiationOperation that)
            => "ExponentiationOperation {
                `` indent + indentLevel ``base = ``transformWithIndent(that.base)``;
                `` indent + indentLevel ``exponent = ``transformWithIndent(that.exponent)``;
                ``indent``}";
    transformExpressionComprehensionClause(ExpressionComprehensionClause that) => "ExpressionComprehensionClause(``transformWithIndent(that.expression)``)";
    transformExtendedType(ExtendedType that) => "ExtendedType(``transformWithIndent(that.instantiation)``)";
    transformFailClause(FailClause that) => "FailClause(``transformWithIndent(that.block)``)";
    transformFinallyClause(FinallyClause that) => "FinallyClause(``transformWithIndent(that.block)``)";
    transformFloatLiteral(FloatLiteral that) => "FloatLiteral(\"``that.text``\")";
    transformForClause(ForClause that)
            => "ForClause {
                `` indent + indentLevel ``iterator = ``transformWithIndent(that.iterator)``;
                `` indent + indentLevel ``block = ``transformWithIndent(that.block)``;
                ``indent``}";
    transformForComprehensionClause(ForComprehensionClause that)
            => "ForComprehensionClause {
                `` indent + indentLevel ``iterator = ``transformWithIndent(that.iterator)``;
                `` indent + indentLevel ``clause = ``transformWithIndent(that.clause)``;
                ``indent``}";
    transformForFail(ForFail that)
            => "ForFail {
                `` indent + indentLevel ``forClause = ``transformWithIndent(that.forClause)``;
                `` indent + indentLevel ``failClause = ``transformWithIndent(that.failClause)``;
                ``indent``}";
    transformFullPackageName(FullPackageName that) => "FullPackageName(``transformWithIndent(that.components)``)";
    transformFunctionArgument(FunctionArgument that)
            => "FunctionArgument {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``type = ``transformWithIndent(that.type)``;
                `` indent + indentLevel ``parameterLists = ``transformWithIndent(that.parameterLists)``;
                `` indent + indentLevel ``definition = ``transformWithIndent(that.definition)``;
                ``indent``}";
    transformFunctionDec(FunctionDec that)
            => that.qualifier exists
            then "FunctionDec {
                  `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                  `` indent + indentLevel ``qualifier = ``transformWithIndent(that.qualifier)``;
                  ``indent``}"
            else "FunctionDec(``transformWithIndent(that.name)``)";
    transformFunctionDeclaration(FunctionDeclaration that)
            => "FunctionDeclaration {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``type = ``transformWithIndent(that.type)``;
                `` indent + indentLevel ``parameterLists = ``transformWithIndent(that.parameterLists)``;
                `` indent + indentLevel ``typeParameters = ``transformWithIndent(that.typeParameters)``;
                `` indent + indentLevel ``typeConstraints = ``transformWithIndent(that.typeConstraints)``;
                `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                ``indent``}";
    transformFunctionDefinition(FunctionDefinition that)
            => "FunctionDefinition {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``type = ``transformWithIndent(that.type)``;
                `` indent + indentLevel ``parameterLists = ``transformWithIndent(that.parameterLists)``;
                `` indent + indentLevel ``definition = ``transformWithIndent(that.definition)``;
                `` indent + indentLevel ``typeParameters = ``transformWithIndent(that.typeParameters)``;
                `` indent + indentLevel ``typeConstraints = ``transformWithIndent(that.typeConstraints)``;
                `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                ``indent``}";
    transformFunctionExpression(FunctionExpression that)
            => "FunctionExpression {
                `` indent + indentLevel ``parameterLists = ``transformWithIndent(that.parameterLists)``;
                `` indent + indentLevel ``definition = ``transformWithIndent(that.definition)``;
                `` indent + indentLevel ``type = ``transformWithIndent(that.type)``;
                ``indent``}";
    transformFunctionModifier(FunctionModifier that) => "FunctionModifier()";
    transformFunctionShortcutDefinition(FunctionShortcutDefinition that)
            => "FunctionShortcutDefinition {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``type = ``transformWithIndent(that.type)``;
                `` indent + indentLevel ``parameterLists = ``transformWithIndent(that.parameterLists)``;
                `` indent + indentLevel ``definition = ``transformWithIndent(that.definition)``;
                `` indent + indentLevel ``typeParameters = ``transformWithIndent(that.typeParameters)``;
                `` indent + indentLevel ``typeConstraints = ``transformWithIndent(that.typeConstraints)``;
                `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                ``indent``}";
    transformGivenDec(GivenDec that) => "GivenDec(``transformWithIndent(that.name)``)";
    transformGroupedExpression(GroupedExpression that) => "GroupedExpression(``transformWithIndent(that.innerExpression)``)";
    transformGroupedType(GroupedType that) => "GroupedType(``transformWithIndent(that.type)``)";
    transformIdenticalOperation(IdenticalOperation that)
            => "IdenticalOperation {
                `` indent + indentLevel ``leftOperand_ = ``transformWithIndent(that.leftOperand)``;
                `` indent + indentLevel ``rightOperand_ = ``transformWithIndent(that.rightOperand)``;
                ``indent``}";
    transformIdentityOperation(IdentityOperation that) => "IdentityOperation(``transformWithIndent(that.operand)``)";
    transformIfClause(IfClause that)
            => "IfClause {
                `` indent + indentLevel ``conditions = ``transformWithIndent(that.conditions)``;
                `` indent + indentLevel ``block = ``transformWithIndent(that.block)``;
                ``indent``}";
    transformIfComprehensionClause(IfComprehensionClause that)
            => "IfComprehensionClause {
                `` indent + indentLevel ``conditions = ``transformWithIndent(that.conditions)``;
                `` indent + indentLevel ``clause = ``transformWithIndent(that.clause)``;
                ``indent``}";
    transformIfElse(IfElse that)
            => "IfElse {
                `` indent + indentLevel ``ifClause = ``transformWithIndent(that.ifClause)``;
                `` indent + indentLevel ``elseClause = ``transformWithIndent(that.elseClause)``;
                ``indent``}";
    transformImport(Import that)
            => "Import {
                `` indent + indentLevel ``packageName = ``transformWithIndent(that.packageName)``;
                `` indent + indentLevel ``elements = ``transformWithIndent(that.elements)``;
                ``indent``}";
    transformImportElements(ImportElements that)
            => "ImportElements {
                `` indent + indentLevel ``elements = ``transformWithIndent(that.elements)``;
                `` indent + indentLevel ``wildcard = ``transformWithIndent(that.wildcard)``;
                ``indent``}";
    transformImportFunctionValueAlias(ImportFunctionValueAlias that) => "ImportFunctionValueAlias(``transformWithIndent(that.name)``)";
    transformImportFunctionValueElement(ImportFunctionValueElement that)
            => "ImportFunctionValueElement {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``importAlias = ``transformWithIndent(that.importAlias)``;
                `` indent + indentLevel ``nestedImports = ``transformWithIndent(that.nestedImports)``;
                ``indent``}";
    transformImportTypeAlias(ImportTypeAlias that) => "ImportTypeAlias(``transformWithIndent(that.name)``)";
    transformImportTypeElement(ImportTypeElement that)
            => "ImportTypeElement {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``importAlias = ``transformWithIndent(that.importAlias)``;
                `` indent + indentLevel ``nestedImports = ``transformWithIndent(that.nestedImports)``;
                ``indent``}";
    transformImportWildcard(ImportWildcard that) => "ImportWildcard()";
    transformInModifier(InModifier that) => "InModifier()";
    transformInOperation(InOperation that)
            => "InOperation {
                `` indent + indentLevel ``element = ``transformWithIndent(that.element)``;
                `` indent + indentLevel ``category = ``transformWithIndent(that.category)``;
                ``indent``}";
    transformIntegerLiteral(IntegerLiteral that) => "IntegerLiteral(\"``that.text``\")";
    transformInterfaceAliasDefinition(InterfaceAliasDefinition that)
            => "InterfaceAliasDefinition {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``specifier = ``transformWithIndent(that.specifier)``;
                `` indent + indentLevel ``caseTypes = ``transformWithIndent(that.caseTypes)``;
                `` indent + indentLevel ``satisfiedTypes = ``transformWithIndent(that.satisfiedTypes)``;
                `` indent + indentLevel ``typeParameters = ``transformWithIndent(that.typeParameters)``;
                `` indent + indentLevel ``typeConstraints = ``transformWithIndent(that.typeConstraints)``;
                `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                ``indent``}";
    transformInterfaceBody(InterfaceBody that) => "InterfaceBody(``transformWithIndent(that.content)``)";
    transformInterfaceDec(InterfaceDec that)
            => that.qualifier exists
            then "InterfaceDec {
                  `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                  `` indent + indentLevel ``qualifier = ``transformWithIndent(that.qualifier)``;
                  ``indent``}"
            else "InterfaceDec(``transformWithIndent(that.name)``)";
    transformInterfaceDefinition(InterfaceDefinition that)
            => "InterfaceDefinition {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``body = ``transformWithIndent(that.body)``;
                `` indent + indentLevel ``caseTypes = ``transformWithIndent(that.caseTypes)``;
                `` indent + indentLevel ``satisfiedTypes = ``transformWithIndent(that.satisfiedTypes)``;
                `` indent + indentLevel ``typeParameters = ``transformWithIndent(that.typeParameters)``;
                `` indent + indentLevel ``typeConstraints = ``transformWithIndent(that.typeConstraints)``;
                `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                ``indent``}";
    transformIntersectionType(IntersectionType that) => "IntersectionType(``transformWithIndent(that.children)``)";
    transformIntersectAssignmentOperation(IntersectAssignmentOperation that)
            => "IntersectAssignmentOperation {
                `` indent + indentLevel ``target = ``transformWithIndent(that.target)``;
                `` indent + indentLevel ``other = ``transformWithIndent(that.other)``;
                ``indent``}";
    transformIntersectionOperation(IntersectionOperation that)
            => "IntersectionOperation {
                `` indent + indentLevel ``leftOperand_ = ``transformWithIndent(that.leftOperand)``;
                `` indent + indentLevel ``rightOperand_ = ``transformWithIndent(that.rightOperand)``;
                ``indent``}";
    transformInvocation(Invocation that)
            => "Invocation {
                `` indent + indentLevel ``invoked = ``transformWithIndent(that.invoked)``;
                `` indent + indentLevel ``arguments = ``transformWithIndent(that.arguments)``;
                ``indent``}";
    transformInvocationStatement(InvocationStatement that) => "InvocationStatement(``transformWithIndent(that.expression)``)";
    transformIsCase(IsCase that) => "IsCase(``transformWithIndent(that.type)``)";
    transformIsCondition(IsCondition that)
            => "IsCondition {
                `` indent + indentLevel ``variable = ``transformWithIndent(that.variable)``;
                `` indent + indentLevel ``negated = ``that.negated``;
                ``indent``}";
    transformIsOperation(IsOperation that)
            => "IsOperation {
                `` indent + indentLevel ``operand_ = ``transformWithIndent(that.operand)``;
                `` indent + indentLevel ``type_ = ``transformWithIndent(that.type)``;
                ``indent``}";
    transformIterable(Iterable that) => "Iterable(``transformWithIndent(that.argumentList)``)";
    transformIterableType(IterableType that) => "IterableType(``transformWithIndent(that.variadicType)``)";
    transformKeySubscript(KeySubscript that) => "KeySubscript(``transformWithIndent(that.key)``)";
    transformKeyValueIterator(KeyValueIterator that)
            => "KeyValueIterator {
                `` indent + indentLevel ``keyVariable = ``transformWithIndent(that.keyVariable)``;
                `` indent + indentLevel ``valueVariable = ``transformWithIndent(that.valueVariable)``;
                `` indent + indentLevel ``iterated = ``transformWithIndent(that.iterated)``;
                ``indent``}";
    transformLIdentifier(LIdentifier that)
            => that.usePrefix
            then "LIdentifier(\"``that.name``\", true)"
            else "LIdentifier(\"``that.name``\")";
    transformLazySpecification(LazySpecification that)
            => "LazySpecification {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``specifier = ``transformWithIndent(that.specifier)``;
                `` indent + indentLevel ``parameterLists = ``transformWithIndent(that.parameterLists)``;
                ``indent``}";
    transformMatchCase(MatchCase that) => "MatchCase(``transformWithIndent(that.expressions)``)";
    transformMeasureSubscript(MeasureSubscript that)
            => "MeasureSubscript {
                `` indent + indentLevel ``from = ``transformWithIndent(that.from)``;
                `` indent + indentLevel ``length = ``transformWithIndent(that.length)``;
                ``indent``}";
    transformMemberNameWithTypeArguments(MemberNameWithTypeArguments that)
            => that.typeArguments exists
            then "MemberNameWithTypeArguments {
                  `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                  `` indent + indentLevel ``typeArguments = ``transformWithIndent(that.typeArguments)``;
                  ``indent``}"
            else "MemberNameWithTypeArguments(``transformWithIndent(that.name)``)";
    transformLargeAsOperation(LargeAsOperation that)
            => "LargeAsOperation {
                `` indent + indentLevel ``leftOperand_ = ``transformWithIndent(that.leftOperand)``;
                `` indent + indentLevel ``rightOperand_ = ``transformWithIndent(that.rightOperand)``;
                ``indent``}";
    transformLargerOperation(LargerOperation that)
            => "LargerOperation {
                `` indent + indentLevel ``leftOperand_ = ``transformWithIndent(that.leftOperand)``;
                `` indent + indentLevel ``rightOperand_ = ``transformWithIndent(that.rightOperand)``;
                ``indent``}";
    transformLazySpecifier(LazySpecifier that) => "LazySpecifier(``transformWithIndent(that.expression)``)";
    transformMeasureOperation(MeasureOperation that)
            => "MeasureOperation {
                `` indent + indentLevel ``first = ``transformWithIndent(that.first)``;
                `` indent + indentLevel ``size = ``transformWithIndent(that.size)``;
                ``indent``}";
    transformMemberMeta(MemberMeta that)
            => "MemberMeta {
                `` indent + indentLevel ``qualifier = ``transformWithIndent(that.qualifier)``;
                `` indent + indentLevel ``nameAndArgs = ``transformWithIndent(that.nameAndArgs)``;
                ``indent``}";
    transformMemberOperator(MemberOperator that) => "MemberOperator()";
    transformModuleBody(ModuleBody that) => "ModuleBody(``transformWithIndent(that.moduleImports)``)";
    transformModuleCompilationUnit(ModuleCompilationUnit that)
            => "ModuleCompilationUnit {
                `` indent + indentLevel ``moduleDescriptor = ``transformWithIndent(that.moduleDescriptor)``;
                `` indent + indentLevel ``imports = ``transformWithIndent(that.imports)``;
                ``indent``}";
    transformModuleDec(ModuleDec that) => "ModuleDec(``transformWithIndent(that.moduleName)``)";
    transformModuleDescriptor(ModuleDescriptor that)
            => "ModuleDescriptor {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``version = ``transformWithIndent(that.version)``;
                `` indent + indentLevel ``body = ``transformWithIndent(that.body)``;
                `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                ``indent``}";
    transformModuleImport(ModuleImport that)
            => "ModuleImport {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``version = ``transformWithIndent(that.version)``;
                `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                ``indent``}";
    transformMultiplyAssignmentOperation(MultiplyAssignmentOperation that)
            => "MultiplyAssignmentOperation {
                `` indent + indentLevel ``target = ``transformWithIndent(that.target)``;
                `` indent + indentLevel ``factor = ``transformWithIndent(that.factor)``;
                ``indent``}";
    transformNamedArguments(NamedArguments that)
            => that.iterableArgument.children nonempty
            then "NamedArguments {
                  `` indent + indentLevel ``namedArguments = ``transformWithIndent(that.namedArguments)``;
                  `` indent + indentLevel ``iterableArgument = ``transformWithIndent(that.iterableArgument)``;
                  ``indent``}"
            else (that.namedArguments nonempty
                then "NamedArguments(``transformWithIndent(that.namedArguments)``)"
                else "NamedArguments()");
    transformNegationOperation(NegationOperation that) => "NegationOperation(``transformWithIndent(that.operand)``)";
    transformNonemptyCondition(NonemptyCondition that) => "NonemptyCondition(``transformWithIndent(that.variable)``)";
    transformNonemptyOperation(NonemptyOperation that) => "NonemptyOperation(``transformWithIndent(that.operand)``)";
    transformNotEqualOperation(NotEqualOperation that)
            => "NotEqualOperation {
                `` indent + indentLevel ``leftOperand_ = ``transformWithIndent(that.leftOperand)``;
                `` indent + indentLevel ``rightOperand_ = ``transformWithIndent(that.rightOperand)``;
                ``indent``}";
    transformNotOperation(NotOperation that) => "NotOperation(``transformWithIndent(that.operand)``)";
    transformObjectArgument(ObjectArgument that)
            => "ObjectArgument {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``body = ``transformWithIndent(that.body)``;
                `` indent + indentLevel ``extendedType = ``transformWithIndent(that.extendedType)``;
                `` indent + indentLevel ``satisfiedTypes = ``transformWithIndent(that.satisfiedTypes)``;
                ``indent``}";
    transformObjectDefinition(ObjectDefinition that)
            => "ObjectDefinition {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``body = ``transformWithIndent(that.body)``;
                `` indent + indentLevel ``extendedType = ``transformWithIndent(that.extendedType)``;
                `` indent + indentLevel ``satisfiedTypes = ``transformWithIndent(that.satisfiedTypes)``;
                `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                ``indent``}";
    transformOfOperation(OfOperation that)
            => "OfOperation {
                `` indent + indentLevel ``operand_ = ``transformWithIndent(that.operand)``;
                `` indent + indentLevel ``type_ = ``transformWithIndent(that.type)``;
                ``indent``}";
    transformOpenBound(OpenBound that) => "OpenBound(``transformWithIndent(that.endpoint)``)";
    transformOperatorStyleInvocation(OperatorStyleInvocation that)
            => "OperatorStyleInvocation {
                `` indent + indentLevel ``receiverExpression = ``transformWithIndent(that.receiverExpression)``;
                `` indent + indentLevel ``nameAndArgs = ``transformWithIndent(that.nameAndArgs)``;
                `` indent + indentLevel ``argument = ``transformWithIndent(that.argument)``;
                ``indent``}";
    transformOperatorStyleMemberExpression(OperatorStyleMemberExpression that)
            => "OperatorStyleMemberExpression {
                `` indent + indentLevel ``receiverExpression = ``transformWithIndent(that.receiverExpression)``;
                `` indent + indentLevel ``nameAndArgs = ``transformWithIndent(that.nameAndArgs)``;
                ``indent``}";
    transformOptionalType(OptionalType that) => "OptionalType(``transformWithIndent(that.definiteType)``)";
    transformOrAssignmentOperation(OrAssignmentOperation that)
            => "OrAssignmentOperation {
                `` indent + indentLevel ``target = ``transformWithIndent(that.target)``;
                `` indent + indentLevel ``other = ``transformWithIndent(that.other)``;
                ``indent``}";
    transformOrOperation(OrOperation that)
            => "OrOperation {
                `` indent + indentLevel ``leftOperand_ = ``transformWithIndent(that.leftOperand)``;
                `` indent + indentLevel ``rightOperand_ = ``transformWithIndent(that.rightOperand)``;
                ``indent``}";
    transformOutModifier(OutModifier that) => "OutModifier()";
    transformOuter(Outer that) => "Outer()";
    transformPackage(Package that) => "Package()";
    transformPackageCompilationUnit(PackageCompilationUnit that)
            => "PackageCompilationUnit {
                `` indent + indentLevel ``packageDescriptor = ``transformWithIndent(that.packageDescriptor)``;
                `` indent + indentLevel ``imports = ``transformWithIndent(that.imports)``;
                ``indent``}";
    transformPackageDec(PackageDec that) => "PackageDec(``transformWithIndent(that.packageName)``)";
    transformPackageDescriptor(PackageDescriptor that)
            => "PackageDescriptor {
                `` indent + indentLevel ``name = ``transformWithIndent(that.name)``;
                `` indent + indentLevel ``annotations = ``transformWithIndent(that.annotations)``;
                ``indent``}";
    transformParameterReference(ParameterReference that) => "ParameterReference(``transformWithIndent(that.name)``)";
    transformParameters(Parameters that)
            => that.parameters nonempty
            then "Parameters(``transformWithIndent(that.parameters)``)"
            else "Parameters()";
    transformPositionalArguments(PositionalArguments that) => "PositionalArguments(``transformWithIndent(that.argumentList)``)";
    transformPostfixDecrementOperation(PostfixDecrementOperation that) => "PostfixDecrementOperation(``transformWithIndent(that.operand)``)";
    transformPostfixIncrementOperation(PostfixIncrementOperation that) => "PostfixIncrementOperation(``transformWithIndent(that.operand)``)";
    transformPrefixDecrementOperation(PrefixDecrementOperation that) => "PrefixDecrementOperation(``transformWithIndent(that.operand)``)";
    transformPrefixIncrementOperation(PrefixIncrementOperation that) => "PrefixIncrementOperation(``transformWithIndent(that.operand)``)";
    transformPrefixPostfixStatement(PrefixPostfixStatement that) => "PrefixPostfixStatement(``transformWithIndent(that.expression)``)";
    transformProductOperation(ProductOperation that)
            => "ProductOperation {
                `` indent + indentLevel ``leftFactor = ``transformWithIndent(that.leftFactor)``;
                `` indent + indentLevel ``rightFactor = ``transformWithIndent(that.rightFactor)``;
                ``indent``}";
    transformQualifiedExpression(QualifiedExpression that)
            => that.memberOperator is MemberOperator
            then "QualifiedExpression {
                  `` indent + indentLevel ``receiverExpression = ``transformWithIndent(that.receiverExpression)``;
                  `` indent + indentLevel ``nameAndArgs = ``transformWithIndent(that.nameAndArgs)``;
                  ``indent``}"
            else "QualifiedExpression {
                  `` indent + indentLevel ``receiverExpression = ``transformWithIndent(that.receiverExpression)``;
                  `` indent + indentLevel ``nameAndArgs = ``transformWithIndent(that.nameAndArgs)``;
                  `` indent + indentLevel ``memberOperator = ``transformWithIndent(that.memberOperator)``;
                  ``indent``}";
    transformQualifiedType(QualifiedType that)
            => "QualifiedType {
                `` indent + indentLevel ``qualifyingType = ``transformWithIndent(that.qualifyingType)``;
                `` indent + indentLevel ``nameAndArgs = ``transformWithIndent(that.nameAndArgs)``;
                ``indent``}";
    transformQuotientOperation(QuotientOperation that)
            => "QuotientOperation {
                `` indent + indentLevel ``dividend = ``transformWithIndent(that.dividend)``;
                `` indent + indentLevel ``divisor = ``transformWithIndent(that.divisor)``;
                ``indent``}";
    transformRemainderAssignmentOperation(RemainderAssignmentOperation that)
            => "RemainderAssignmentOperation {
                `` indent + indentLevel ``target = ``transformWithIndent(that.target)``;
                `` indent + indentLevel ``divisor = ``transformWithIndent(that.divisor)``;
                ``indent``}";
    transformRemainderOperation(RemainderOperation that)
            => "RemainderOperation {
                `` indent + indentLevel ``dividend = ``transformWithIndent(that.dividend)``;
                `` indent + indentLevel ``divisor = ``transformWithIndent(that.divisor)``;
                ``indent``}";
    transformResource(Resource that) => "Resource(``transformWithIndent(that.resource)``)";
    transformResources(Resources that) => "Resources(``transformWithIndent(that.resources)``)";
    transformReturn(Return that)
            => that.result exists
            then "Return(``transformWithIndent(that.result)``)"
            else "Return()";
    transformSafeMemberOperator(SafeMemberOperator that) => "SafeMemberOperator()";
    transformSatisfiedTypes(SatisfiedTypes that) => "SatisfiedTypes(``transformWithIndent(that.satisfiedTypes)``)";
    transformScaleOperation(ScaleOperation that)
            => "ScaleOperation {
{'fraction_non_alphanumeric': 0.13387663895369853, 'fraction_numerical': 4.381496938429014e-05, 'mean_word_length': 3.022293695202009, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 339, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '370848', 'n_tokens_mistral': 23083, 'n_tokens_neox': 22384, 'n_words': 3551}