+- CompilationUnit[@Compact = true, @PackageName = ""]
   +- ImportDeclaration[@ImportOnDemand = false, @ImportedName = "java.util.Arrays", @ImportedSimpleName = "Arrays", @ModuleImport = false, @PackageName = "java.util", @Static = false]
   +- ImportDeclaration[@ImportOnDemand = false, @ImportedName = "java.util.stream.Collectors", @ImportedSimpleName = "Collectors", @ModuleImport = false, @PackageName = "java.util.stream", @Static = false]
   +- ImportDeclaration[@ImportOnDemand = false, @ImportedName = "java.lang.IO.println", @ImportedSimpleName = "println", @ModuleImport = false, @PackageName = "java.lang.IO", @Static = true]
   +- ImplicitClassDeclaration[@Abstract = false, @Annotation = false, @Anonymous = false, @BinaryName = "", @CanonicalName = null, @EffectiveVisibility = Visibility.V_PACKAGE, @Enum = false, @Final = false, @Interface = false, @Local = false, @Nested = false, @PackageName = "", @Record = false, @RegularClass = false, @RegularInterface = false, @SimpleName = "", @Static = false, @TopLevel = true, @UnnamedToplevelClass = true, @Visibility = Visibility.V_PACKAGE]
      +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
      +- ClassBody[@Empty = false, @Size = 4]
         +- FieldDeclaration[@EffectiveVisibility = Visibility.V_PACKAGE, @Static = false, @Visibility = Visibility.V_PACKAGE]
         |  +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "String"]
         |  +- VariableDeclarator[@Initializer = true, @Name = "greetingField"]
         |     +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_PACKAGE, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = true, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = false, @LambdaParameter = false, @LocalVariable = false, @Name = "greetingField", @PatternBinding = false, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_PACKAGE]
         |     +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "Hello, World! (Field)", @Empty = false, @Image = "\"Hello, World! (Field)\"", @Length = 21, @LiteralText = "\"Hello, World! (Field)\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         +- MethodDeclaration[@Abstract = false, @Arity = 0, @EffectiveVisibility = Visibility.V_PACKAGE, @Final = false, @Name = "greeting", @Override = false, @Static = false, @Varargs = false, @Visibility = Visibility.V_PACKAGE, @Void = false]
         |  +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "String"]
         |  +- FormalParameters[@Empty = true, @Size = 0]
         |  +- Block[@Empty = false, @Size = 1, @containsComment = false]
         |     +- ReturnStatement[]
         |        +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "Hello, World! (Method)", @Empty = false, @Image = "\"Hello, World! (Method)\"", @Length = 22, @LiteralText = "\"Hello, World! (Method)\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         +- FieldDeclaration[@EffectiveVisibility = Visibility.V_PACKAGE, @Static = false, @Visibility = Visibility.V_PACKAGE]
         |  +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "String"]
         |  +- VariableDeclarator[@Initializer = true, @Name = "greetingText2"]
         |     +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_PACKAGE, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = true, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = false, @LambdaParameter = false, @LocalVariable = false, @Name = "greetingText2", @PatternBinding = false, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_PACKAGE]
         |     +- MethodCall[@CompileTimeConstant = false, @Image = "collect", @MethodName = "collect", @ParenthesisDepth = 0, @Parenthesized = false]
         |        +- MethodCall[@CompileTimeConstant = false, @Image = "stream", @MethodName = "stream", @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  +- MethodCall[@CompileTimeConstant = false, @Image = "asList", @MethodName = "asList", @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |  +- TypeExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |  |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Arrays"]
         |        |  |  +- ArgumentList[@Empty = false, @Size = 3]
         |        |  |     +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "Hello", @Empty = false, @Image = "\"Hello\"", @Length = 5, @LiteralText = "\"Hello\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        |  |     +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "World!", @Empty = false, @Image = "\"World!\"", @Length = 6, @LiteralText = "\"World!\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        |  |     +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "(with imports)", @Empty = false, @Image = "\"(with imports)\"", @Length = 14, @LiteralText = "\"(with imports)\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        |  +- ArgumentList[@Empty = true, @Size = 0]
         |        +- ArgumentList[@Empty = false, @Size = 1]
         |           +- MethodCall[@CompileTimeConstant = false, @Image = "joining", @MethodName = "joining", @ParenthesisDepth = 0, @Parenthesized = false]
         |              +- TypeExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false]
         |              |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Collectors"]
         |              +- ArgumentList[@Empty = false, @Size = 1]
         |                 +- StringLiteral[@CompileTimeConstant = true, @ConstValue = ", ", @Empty = false, @Image = "\", \"", @Length = 2, @LiteralText = "\", \"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         +- MethodDeclaration[@Abstract = false, @Arity = 0, @EffectiveVisibility = Visibility.V_PACKAGE, @Final = false, @MainMethod = true, @Name = "main", @Override = false, @Static = false, @Varargs = false, @Visibility = Visibility.V_PACKAGE, @Void = true]
            +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
            +- VoidType[]
            +- FormalParameters[@Empty = true, @Size = 0]
            +- Block[@Empty = false, @Size = 8, @containsComment = false]
               +- ExpressionStatement[]
               |  +- MethodCall[@CompileTimeConstant = false, @Image = "println", @MethodName = "println", @ParenthesisDepth = 0, @Parenthesized = false]
               |     +- FieldAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "out", @Name = "out", @ParenthesisDepth = 0, @Parenthesized = false]
               |     |  +- TypeExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false]
               |     |     +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "System"]
               |     +- ArgumentList[@Empty = false, @Size = 1]
               |        +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "greetingField", @Name = "greetingField", @ParenthesisDepth = 0, @Parenthesized = false]
               +- ExpressionStatement[]
               |  +- MethodCall[@CompileTimeConstant = false, @Image = "println", @MethodName = "println", @ParenthesisDepth = 0, @Parenthesized = false]
               |     +- TypeExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false]
               |     |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "IO"]
               |     +- ArgumentList[@Empty = false, @Size = 1]
               |        +- MethodCall[@CompileTimeConstant = false, @Image = "greeting", @MethodName = "greeting", @ParenthesisDepth = 0, @Parenthesized = false]
               |           +- ArgumentList[@Empty = true, @Size = 0]
               +- ExpressionStatement[]
               |  +- MethodCall[@CompileTimeConstant = false, @Image = "println", @MethodName = "println", @ParenthesisDepth = 0, @Parenthesized = false]
               |     +- ArgumentList[@Empty = false, @Size = 1]
               |        +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "greetingText2", @Name = "greetingText2", @ParenthesisDepth = 0, @Parenthesized = false]
               +- LocalVariableDeclaration[@EffectiveVisibility = Visibility.V_LOCAL, @Final = false, @TypeInferred = false, @Visibility = Visibility.V_LOCAL]
               |  +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
               |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "String"]
               |  +- VariableDeclarator[@Initializer = true, @Name = "name"]
               |     +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = false, @LambdaParameter = false, @LocalVariable = true, @Name = "name", @PatternBinding = false, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_LOCAL]
               |     +- MethodCall[@CompileTimeConstant = false, @Image = "readln", @MethodName = "readln", @ParenthesisDepth = 0, @Parenthesized = false]
               |        +- TypeExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false]
               |        |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "IO"]
               |        +- ArgumentList[@Empty = false, @Size = 1]
               |           +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "Please enter your name: ", @Empty = false, @Image = "\"Please enter your name: \"", @Length = 24, @LiteralText = "\"Please enter your name: \"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
               +- ExpressionStatement[]
               |  +- MethodCall[@CompileTimeConstant = false, @Image = "print", @MethodName = "print", @ParenthesisDepth = 0, @Parenthesized = false]
               |     +- TypeExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false]
               |     |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "IO"]
               |     +- ArgumentList[@Empty = false, @Size = 1]
               |        +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "Pleased to meet you, ", @Empty = false, @Image = "\"Pleased to meet you, \"", @Length = 21, @LiteralText = "\"Pleased to meet you, \"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
               +- ExpressionStatement[]
               |  +- MethodCall[@CompileTimeConstant = false, @Image = "println", @MethodName = "println", @ParenthesisDepth = 0, @Parenthesized = false]
               |     +- ArgumentList[@Empty = false, @Size = 1]
               |        +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "name", @Name = "name", @ParenthesisDepth = 0, @Parenthesized = false]
               +- LocalVariableDeclaration[@EffectiveVisibility = Visibility.V_LOCAL, @Final = false, @TypeInferred = true, @Visibility = Visibility.V_LOCAL]
               |  +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
               |  +- VariableDeclarator[@Initializer = true, @Name = "authors"]
               |     +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = false, @LambdaParameter = false, @LocalVariable = true, @Name = "authors", @PatternBinding = false, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = true, @Unnamed = false, @Visibility = Visibility.V_LOCAL]
               |     +- MethodCall[@CompileTimeConstant = false, @Image = "of", @MethodName = "of", @ParenthesisDepth = 0, @Parenthesized = false]
               |        +- TypeExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false]
               |        |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "List"]
               |        +- ArgumentList[@Empty = false, @Size = 6]
               |           +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "James", @Empty = false, @Image = "\"James\"", @Length = 5, @LiteralText = "\"James\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
               |           +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "Bill", @Empty = false, @Image = "\"Bill\"", @Length = 4, @LiteralText = "\"Bill\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
               |           +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "Guy", @Empty = false, @Image = "\"Guy\"", @Length = 3, @LiteralText = "\"Guy\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
               |           +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "Alex", @Empty = false, @Image = "\"Alex\"", @Length = 4, @LiteralText = "\"Alex\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
               |           +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "Dan", @Empty = false, @Image = "\"Dan\"", @Length = 3, @LiteralText = "\"Dan\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
               |           +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "Gavin", @Empty = false, @Image = "\"Gavin\"", @Length = 5, @LiteralText = "\"Gavin\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
               +- ForeachStatement[]
                  +- LocalVariableDeclaration[@EffectiveVisibility = Visibility.V_LOCAL, @Final = false, @TypeInferred = true, @Visibility = Visibility.V_LOCAL]
                  |  +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
                  |  +- VariableDeclarator[@Initializer = false, @Name = "authorName"]
                  |     +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = false, @ForLoopVariable = false, @ForeachVariable = true, @FormalParameter = false, @LambdaParameter = false, @LocalVariable = false, @Name = "authorName", @PatternBinding = false, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = true, @Unnamed = false, @Visibility = Visibility.V_LOCAL]
                  +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "authors", @Name = "authors", @ParenthesisDepth = 0, @Parenthesized = false]
                  +- Block[@Empty = false, @Size = 1, @containsComment = false]
                     +- ExpressionStatement[]
                        +- MethodCall[@CompileTimeConstant = false, @Image = "println", @MethodName = "println", @ParenthesisDepth = 0, @Parenthesized = false]
                           +- ArgumentList[@Empty = false, @Size = 1]
                              +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.ADD, @ParenthesisDepth = 0, @Parenthesized = false]
                                 +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.ADD, @ParenthesisDepth = 0, @Parenthesized = false]
                                 |  +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "authorName", @Name = "authorName", @ParenthesisDepth = 0, @Parenthesized = false]
                                 |  +- StringLiteral[@CompileTimeConstant = true, @ConstValue = ": ", @Empty = false, @Image = "\": \"", @Length = 2, @LiteralText = "\": \"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
                                 +- MethodCall[@CompileTimeConstant = false, @Image = "length", @MethodName = "length", @ParenthesisDepth = 0, @Parenthesized = false]
                                    +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "authorName", @Name = "authorName", @ParenthesisDepth = 0, @Parenthesized = false]
                                    +- ArgumentList[@Empty = true, @Size = 0]
