+- CompilationUnit[@PackageName = ""]
   +- ClassDeclaration[@Abstract = false, @Annotation = false, @Anonymous = false, @BinaryName = "ExhaustiveSwitch", @CanonicalName = "ExhaustiveSwitch", @EffectiveVisibility = Visibility.V_PUBLIC, @Enum = false, @Final = false, @Interface = false, @Local = false, @Nested = false, @PackageName = "", @Record = false, @RegularClass = true, @RegularInterface = false, @SimpleName = "ExhaustiveSwitch", @Static = false, @TopLevel = true, @UnnamedToplevelClass = false, @Visibility = Visibility.V_PUBLIC]
      +- ModifierList[@EffectiveModifiers = (JModifier.PUBLIC), @ExplicitModifiers = (JModifier.PUBLIC)]
      +- ClassBody[@Empty = false, @Size = 13]
         +- MethodDeclaration[@Abstract = false, @Arity = 1, @EffectiveVisibility = Visibility.V_PACKAGE, @Final = false, @Name = "coverage", @Overridden = false, @Static = true, @Varargs = false, @Visibility = Visibility.V_PACKAGE, @Void = false]
         |  +- ModifierList[@EffectiveModifiers = (JModifier.STATIC), @ExplicitModifiers = (JModifier.STATIC)]
         |  +- PrimitiveType[@Kind = PrimitiveTypeKind.INT]
         |  +- FormalParameters[@Empty = false, @Size = 1]
         |  |  +- FormalParameter[@EffectiveVisibility = Visibility.V_LOCAL, @Final = false, @Varargs = false, @Visibility = Visibility.V_LOCAL]
         |  |     +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |  |     +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Object"]
         |  |     +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = true, @LambdaParameter = false, @LocalVariable = false, @Name = "obj", @PatternBinding = false, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_LOCAL]
         |  +- Block[@Empty = false, @Size = 1, @containsComment = false]
         |     +- ReturnStatement[]
         |        +- SwitchExpression[@CompileTimeConstant = false, @DefaultCase = true, @EnumSwitch = false, @ExhaustiveEnumSwitch = false, @FallthroughSwitch = false, @ParenthesisDepth = 0, @Parenthesized = false]
         |           +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "obj", @Name = "obj", @ParenthesisDepth = 0, @Parenthesized = false]
         |           +- SwitchArrowBranch[@Default = false]
         |           |  +- SwitchLabel[@Default = false, @PatternLabel = true]
         |           |  |  +- TypePattern[@EffectiveVisibility = Visibility.V_PACKAGE, @Visibility = Visibility.V_PACKAGE]
         |           |  |     +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |           |  |     +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "String"]
         |           |  |     +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = false, @LambdaParameter = false, @LocalVariable = false, @Name = "s", @PatternBinding = true, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_LOCAL]
         |           |  +- MethodCall[@CompileTimeConstant = false, @Image = "length", @MethodName = "length", @ParenthesisDepth = 0, @Parenthesized = false]
         |           |     +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false]
         |           |     +- ArgumentList[@Empty = true, @Size = 0]
         |           +- SwitchArrowBranch[@Default = false]
         |           |  +- SwitchLabel[@Default = false, @PatternLabel = true]
         |           |  |  +- TypePattern[@EffectiveVisibility = Visibility.V_PACKAGE, @Visibility = Visibility.V_PACKAGE]
         |           |  |     +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |           |  |     +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Integer"]
         |           |  |     +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = false, @LambdaParameter = false, @LocalVariable = false, @Name = "i", @PatternBinding = true, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_LOCAL]
         |           |  +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "i", @Name = "i", @ParenthesisDepth = 0, @Parenthesized = false]
         |           +- SwitchArrowBranch[@Default = true]
         |              +- SwitchLabel[@Default = true, @PatternLabel = false]
         |              +- NumericLiteral[@Base = 10, @CompileTimeConstant = true, @DoubleLiteral = false, @FloatLiteral = false, @Image = "0", @IntLiteral = true, @Integral = true, @LiteralText = "0", @LongLiteral = false, @ParenthesisDepth = 0, @Parenthesized = false, @ValueAsDouble = 0.0, @ValueAsFloat = 0.0, @ValueAsInt = 0, @ValueAsLong = 0]
         +- MethodDeclaration[@Abstract = false, @Arity = 1, @EffectiveVisibility = Visibility.V_PACKAGE, @Final = false, @Name = "coverageStatement", @Overridden = false, @Static = true, @Varargs = false, @Visibility = Visibility.V_PACKAGE, @Void = true]
         |  +- ModifierList[@EffectiveModifiers = (JModifier.STATIC), @ExplicitModifiers = (JModifier.STATIC)]
         |  +- VoidType[]
         |  +- FormalParameters[@Empty = false, @Size = 1]
         |  |  +- FormalParameter[@EffectiveVisibility = Visibility.V_LOCAL, @Final = false, @Varargs = false, @Visibility = Visibility.V_LOCAL]
         |  |     +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |  |     +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Object"]
         |  |     +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = true, @LambdaParameter = false, @LocalVariable = false, @Name = "o", @PatternBinding = false, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_LOCAL]
         |  +- Block[@Empty = false, @Size = 1, @containsComment = false]
         |     +- SwitchStatement[@DefaultCase = true, @EnumSwitch = false, @ExhaustiveEnumSwitch = false, @FallthroughSwitch = true]
         |        +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "o", @Name = "o", @ParenthesisDepth = 0, @Parenthesized = false]
         |        +- SwitchFallthroughBranch[@Default = false]
         |        |  +- SwitchLabel[@Default = false, @PatternLabel = true]
         |        |  |  +- TypePattern[@EffectiveVisibility = Visibility.V_PACKAGE, @Visibility = Visibility.V_PACKAGE]
         |        |  |     +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |        |  |     +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "String"]
         |        |  |     +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = false, @LambdaParameter = false, @LocalVariable = false, @Name = "s", @PatternBinding = true, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_LOCAL]
         |        |  +- 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 = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  +- BreakStatement[@Label = null]
         |        +- SwitchFallthroughBranch[@Default = false]
         |        |  +- SwitchLabel[@Default = false, @PatternLabel = true]
         |        |  |  +- TypePattern[@EffectiveVisibility = Visibility.V_PACKAGE, @Visibility = Visibility.V_PACKAGE]
         |        |  |     +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |        |  |     +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Integer"]
         |        |  |     +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = false, @LambdaParameter = false, @LocalVariable = false, @Name = "i", @PatternBinding = true, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_LOCAL]
         |        |  +- 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]
         |        |  |        +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "Integer", @Empty = false, @Image = "\"Integer\"", @Length = 7, @LiteralText = "\"Integer\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        |  +- BreakStatement[@Label = null]
         |        +- SwitchFallthroughBranch[@Default = true]
         |           +- SwitchLabel[@Default = true, @PatternLabel = false]
         |           +- BreakStatement[@Label = null]
         +- ClassDeclaration[@Abstract = true, @Annotation = false, @Anonymous = false, @BinaryName = "ExhaustiveSwitch$S", @CanonicalName = "ExhaustiveSwitch.S", @EffectiveVisibility = Visibility.V_PACKAGE, @Enum = false, @Final = false, @Interface = true, @Local = false, @Nested = true, @PackageName = "", @Record = false, @RegularClass = false, @RegularInterface = true, @SimpleName = "S", @Static = true, @TopLevel = false, @UnnamedToplevelClass = false, @Visibility = Visibility.V_PACKAGE]
         |  +- ModifierList[@EffectiveModifiers = (JModifier.SEALED, JModifier.ABSTRACT, JModifier.STATIC), @ExplicitModifiers = (JModifier.SEALED)]
         |  +- PermitsList[@Empty = false, @Size = 3]
         |  |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "A"]
         |  |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "B"]
         |  |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "C"]
         |  +- ClassBody[@Empty = true, @Size = 0]
         +- ClassDeclaration[@Abstract = false, @Annotation = false, @Anonymous = false, @BinaryName = "ExhaustiveSwitch$A", @CanonicalName = "ExhaustiveSwitch.A", @EffectiveVisibility = Visibility.V_PACKAGE, @Enum = false, @Final = true, @Interface = false, @Local = false, @Nested = true, @PackageName = "", @Record = false, @RegularClass = true, @RegularInterface = false, @SimpleName = "A", @Static = true, @TopLevel = false, @UnnamedToplevelClass = false, @Visibility = Visibility.V_PACKAGE]
         |  +- ModifierList[@EffectiveModifiers = (JModifier.STATIC, JModifier.FINAL), @ExplicitModifiers = (JModifier.STATIC, JModifier.FINAL)]
         |  +- ImplementsList[@Empty = false, @Size = 1]
         |  |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "S"]
         |  +- ClassBody[@Empty = true, @Size = 0]
         +- ClassDeclaration[@Abstract = false, @Annotation = false, @Anonymous = false, @BinaryName = "ExhaustiveSwitch$B", @CanonicalName = "ExhaustiveSwitch.B", @EffectiveVisibility = Visibility.V_PACKAGE, @Enum = false, @Final = true, @Interface = false, @Local = false, @Nested = true, @PackageName = "", @Record = false, @RegularClass = true, @RegularInterface = false, @SimpleName = "B", @Static = true, @TopLevel = false, @UnnamedToplevelClass = false, @Visibility = Visibility.V_PACKAGE]
         |  +- ModifierList[@EffectiveModifiers = (JModifier.STATIC, JModifier.FINAL), @ExplicitModifiers = (JModifier.STATIC, JModifier.FINAL)]
         |  +- ImplementsList[@Empty = false, @Size = 1]
         |  |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "S"]
         |  +- ClassBody[@Empty = true, @Size = 0]
         +- RecordDeclaration[@Abstract = false, @Annotation = false, @Anonymous = false, @BinaryName = "ExhaustiveSwitch$C", @CanonicalName = "ExhaustiveSwitch.C", @EffectiveVisibility = Visibility.V_PACKAGE, @Enum = false, @Final = true, @Interface = false, @Local = false, @Nested = true, @PackageName = "", @Record = true, @RegularClass = false, @RegularInterface = false, @SimpleName = "C", @Static = true, @TopLevel = false, @UnnamedToplevelClass = false, @Visibility = Visibility.V_PACKAGE]
         |  +- ModifierList[@EffectiveModifiers = (JModifier.STATIC, JModifier.FINAL), @ExplicitModifiers = ()]
         |  +- RecordComponentList[@Empty = false, @Size = 1, @Varargs = false]
         |  |  +- RecordComponent[@EffectiveVisibility = Visibility.V_PRIVATE, @Varargs = false, @Visibility = Visibility.V_PRIVATE]
         |  |     +- ModifierList[@EffectiveModifiers = (JModifier.PRIVATE, JModifier.FINAL), @ExplicitModifiers = ()]
         |  |     +- PrimitiveType[@Kind = PrimitiveTypeKind.INT]
         |  |     +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_PRIVATE, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = true, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = false, @LambdaParameter = false, @LocalVariable = false, @Name = "i", @PatternBinding = false, @RecordComponent = true, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_PRIVATE]
         |  +- ImplementsList[@Empty = false, @Size = 1]
         |  |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "S"]
         |  +- RecordBody[@Empty = true, @Size = 0]
         +- MethodDeclaration[@Abstract = false, @Arity = 1, @EffectiveVisibility = Visibility.V_PACKAGE, @Final = false, @Name = "testSealedExhaustive", @Overridden = false, @Static = true, @Varargs = false, @Visibility = Visibility.V_PACKAGE, @Void = false]
         |  +- ModifierList[@EffectiveModifiers = (JModifier.STATIC), @ExplicitModifiers = (JModifier.STATIC)]
         |  +- PrimitiveType[@Kind = PrimitiveTypeKind.INT]
         |  +- FormalParameters[@Empty = false, @Size = 1]
         |  |  +- FormalParameter[@EffectiveVisibility = Visibility.V_LOCAL, @Final = false, @Varargs = false, @Visibility = Visibility.V_LOCAL]
         |  |     +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |  |     +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "S"]
         |  |     +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = true, @LambdaParameter = false, @LocalVariable = false, @Name = "s", @PatternBinding = false, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_LOCAL]
         |  +- Block[@Empty = false, @Size = 1, @containsComment = false]
         |     +- ReturnStatement[]
         |        +- SwitchExpression[@CompileTimeConstant = false, @DefaultCase = false, @EnumSwitch = false, @ExhaustiveEnumSwitch = false, @FallthroughSwitch = false, @ParenthesisDepth = 0, @Parenthesized = false]
         |           +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false]
         |           +- SwitchArrowBranch[@Default = false]
         |           |  +- SwitchLabel[@Default = false, @PatternLabel = true]
         |           |  |  +- TypePattern[@EffectiveVisibility = Visibility.V_PACKAGE, @Visibility = Visibility.V_PACKAGE]
         |           |  |     +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |           |  |     +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "A"]
         |           |  |     +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = false, @LambdaParameter = false, @LocalVariable = false, @Name = "a", @PatternBinding = true, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_LOCAL]
         |           |  +- NumericLiteral[@Base = 10, @CompileTimeConstant = true, @DoubleLiteral = false, @FloatLiteral = false, @Image = "1", @IntLiteral = true, @Integral = true, @LiteralText = "1", @LongLiteral = false, @ParenthesisDepth = 0, @Parenthesized = false, @ValueAsDouble = 1.0, @ValueAsFloat = 1.0, @ValueAsInt = 1, @ValueAsLong = 1]
         |           +- SwitchArrowBranch[@Default = false]
         |           |  +- SwitchLabel[@Default = false, @PatternLabel = true]
         |           |  |  +- TypePattern[@EffectiveVisibility = Visibility.V_PACKAGE, @Visibility = Visibility.V_PACKAGE]
         |           |  |     +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |           |  |     +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "B"]
         |           |  |     +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = false, @LambdaParameter = false, @LocalVariable = false, @Name = "b", @PatternBinding = true, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_LOCAL]
         |           |  +- NumericLiteral[@Base = 10, @CompileTimeConstant = true, @DoubleLiteral = false, @FloatLiteral = false, @Image = "2", @IntLiteral = true, @Integral = true, @LiteralText = "2", @LongLiteral = false, @ParenthesisDepth = 0, @Parenthesized = false, @ValueAsDouble = 2.0, @ValueAsFloat = 2.0, @ValueAsInt = 2, @ValueAsLong = 2]
         |           +- SwitchArrowBranch[@Default = false]
         |              +- SwitchLabel[@Default = false, @PatternLabel = true]
         |              |  +- TypePattern[@EffectiveVisibility = Visibility.V_PACKAGE, @Visibility = Visibility.V_PACKAGE]
         |              |     +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |              |     +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "C"]
         |              |     +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = false, @LambdaParameter = false, @LocalVariable = false, @Name = "c", @PatternBinding = true, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_LOCAL]
         |              +- NumericLiteral[@Base = 10, @CompileTimeConstant = true, @DoubleLiteral = false, @FloatLiteral = false, @Image = "3", @IntLiteral = true, @Integral = true, @LiteralText = "3", @LongLiteral = false, @ParenthesisDepth = 0, @Parenthesized = false, @ValueAsDouble = 3.0, @ValueAsFloat = 3.0, @ValueAsInt = 3, @ValueAsLong = 3]
         +- MethodDeclaration[@Abstract = false, @Arity = 1, @EffectiveVisibility = Visibility.V_PACKAGE, @Final = false, @Name = "switchStatementExhaustive", @Overridden = false, @Static = true, @Varargs = false, @Visibility = Visibility.V_PACKAGE, @Void = true]
         |  +- ModifierList[@EffectiveModifiers = (JModifier.STATIC), @ExplicitModifiers = (JModifier.STATIC)]
         |  +- VoidType[]
         |  +- FormalParameters[@Empty = false, @Size = 1]
         |  |  +- FormalParameter[@EffectiveVisibility = Visibility.V_LOCAL, @Final = false, @Varargs = false, @Visibility = Visibility.V_LOCAL]
         |  |     +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |  |     +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "S"]
         |  |     +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = true, @LambdaParameter = false, @LocalVariable = false, @Name = "s", @PatternBinding = false, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_LOCAL]
         |  +- Block[@Empty = false, @Size = 2, @containsComment = false]
         |     +- SwitchStatement[@DefaultCase = true, @EnumSwitch = false, @ExhaustiveEnumSwitch = false, @FallthroughSwitch = true]
         |     |  +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  +- SwitchFallthroughBranch[@Default = false]
         |     |  |  +- SwitchLabel[@Default = false, @PatternLabel = true]
         |     |  |  |  +- TypePattern[@EffectiveVisibility = Visibility.V_PACKAGE, @Visibility = Visibility.V_PACKAGE]
         |     |  |  |     +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |     |  |  |     +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "A"]
         |     |  |  |     +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = false, @LambdaParameter = false, @LocalVariable = false, @Name = "a", @PatternBinding = true, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_LOCAL]
         |     |  |  +- 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]
         |     |  |  |        +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "A", @Empty = false, @Image = "\"A\"", @Length = 1, @LiteralText = "\"A\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |     |  |  +- BreakStatement[@Label = null]
         |     |  +- SwitchFallthroughBranch[@Default = false]
         |     |  |  +- SwitchLabel[@Default = false, @PatternLabel = true]
         |     |  |  |  +- TypePattern[@EffectiveVisibility = Visibility.V_PACKAGE, @Visibility = Visibility.V_PACKAGE]
         |     |  |  |     +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |     |  |  |     +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "C"]
         |     |  |  |     +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = false, @LambdaParameter = false, @LocalVariable = false, @Name = "c", @PatternBinding = true, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_LOCAL]
         |     |  |  +- 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]
         |     |  |  |        +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "C", @Empty = false, @Image = "\"C\"", @Length = 1, @LiteralText = "\"C\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |     |  |  +- BreakStatement[@Label = null]
         |     |  +- SwitchFallthroughBranch[@Default = true]
         |     |     +- SwitchLabel[@Default = true, @PatternLabel = 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]
         |     |     |        +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "default case, should be B", @Empty = false, @Image = "\"default case, should be B\"", @Length = 25, @LiteralText = "\"default case, should be B\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |     |     +- BreakStatement[@Label = null]
         |     +- EmptyStatement[]
         +- ClassDeclaration[@Abstract = true, @Annotation = false, @Anonymous = false, @BinaryName = "ExhaustiveSwitch$I", @CanonicalName = "ExhaustiveSwitch.I", @EffectiveVisibility = Visibility.V_PACKAGE, @Enum = false, @Final = false, @Interface = true, @Local = false, @Nested = true, @PackageName = "", @Record = false, @RegularClass = false, @RegularInterface = true, @SimpleName = "I", @Static = true, @TopLevel = false, @UnnamedToplevelClass = false, @Visibility = Visibility.V_PACKAGE]
         |  +- ModifierList[@EffectiveModifiers = (JModifier.SEALED, JModifier.ABSTRACT, JModifier.STATIC), @ExplicitModifiers = (JModifier.SEALED)]
         |  +- TypeParameters[@Empty = false, @Size = 1]
         |  |  +- TypeParameter[@Image = "T", @Name = "T", @TypeBound = false]
         |  +- PermitsList[@Empty = false, @Size = 2]
         |  |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "E"]
         |  |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "F"]
         |  +- ClassBody[@Empty = true, @Size = 0]
         +- ClassDeclaration[@Abstract = false, @Annotation = false, @Anonymous = false, @BinaryName = "ExhaustiveSwitch$E", @CanonicalName = "ExhaustiveSwitch.E", @EffectiveVisibility = Visibility.V_PACKAGE, @Enum = false, @Final = true, @Interface = false, @Local = false, @Nested = true, @PackageName = "", @Record = false, @RegularClass = true, @RegularInterface = false, @SimpleName = "E", @Static = true, @TopLevel = false, @UnnamedToplevelClass = false, @Visibility = Visibility.V_PACKAGE]
         |  +- ModifierList[@EffectiveModifiers = (JModifier.STATIC, JModifier.FINAL), @ExplicitModifiers = (JModifier.STATIC, JModifier.FINAL)]
         |  +- TypeParameters[@Empty = false, @Size = 1]
         |  |  +- TypeParameter[@Image = "X", @Name = "X", @TypeBound = false]
         |  +- ImplementsList[@Empty = false, @Size = 1]
         |  |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "I"]
         |  |     +- TypeArguments[@Diamond = false, @Empty = false, @Size = 1]
         |  |        +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "String"]
         |  +- ClassBody[@Empty = true, @Size = 0]
         +- ClassDeclaration[@Abstract = false, @Annotation = false, @Anonymous = false, @BinaryName = "ExhaustiveSwitch$F", @CanonicalName = "ExhaustiveSwitch.F", @EffectiveVisibility = Visibility.V_PACKAGE, @Enum = false, @Final = true, @Interface = false, @Local = false, @Nested = true, @PackageName = "", @Record = false, @RegularClass = true, @RegularInterface = false, @SimpleName = "F", @Static = true, @TopLevel = false, @UnnamedToplevelClass = false, @Visibility = Visibility.V_PACKAGE]
         |  +- ModifierList[@EffectiveModifiers = (JModifier.STATIC, JModifier.FINAL), @ExplicitModifiers = (JModifier.STATIC, JModifier.FINAL)]
         |  +- TypeParameters[@Empty = false, @Size = 1]
         |  |  +- TypeParameter[@Image = "Y", @Name = "Y", @TypeBound = false]
         |  +- ImplementsList[@Empty = false, @Size = 1]
         |  |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "I"]
         |  |     +- TypeArguments[@Diamond = false, @Empty = false, @Size = 1]
         |  |        +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Y"]
         |  +- ClassBody[@Empty = true, @Size = 0]
         +- MethodDeclaration[@Abstract = false, @Arity = 1, @EffectiveVisibility = Visibility.V_PACKAGE, @Final = false, @Name = "testGenericSealedExhaustive", @Overridden = false, @Static = true, @Varargs = false, @Visibility = Visibility.V_PACKAGE, @Void = false]
         |  +- ModifierList[@EffectiveModifiers = (JModifier.STATIC), @ExplicitModifiers = (JModifier.STATIC)]
         |  +- PrimitiveType[@Kind = PrimitiveTypeKind.INT]
         |  +- FormalParameters[@Empty = false, @Size = 1]
         |  |  +- FormalParameter[@EffectiveVisibility = Visibility.V_LOCAL, @Final = false, @Varargs = false, @Visibility = Visibility.V_LOCAL]
         |  |     +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |  |     +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "I"]
         |  |     |  +- TypeArguments[@Diamond = false, @Empty = false, @Size = 1]
         |  |     |     +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Integer"]
         |  |     +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = true, @LambdaParameter = false, @LocalVariable = false, @Name = "i", @PatternBinding = false, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_LOCAL]
         |  +- Block[@Empty = false, @Size = 1, @containsComment = false]
         |     +- ReturnStatement[]
         |        +- SwitchExpression[@CompileTimeConstant = false, @DefaultCase = false, @EnumSwitch = false, @ExhaustiveEnumSwitch = false, @FallthroughSwitch = false, @ParenthesisDepth = 0, @Parenthesized = false]
         |           +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "i", @Name = "i", @ParenthesisDepth = 0, @Parenthesized = false]
         |           +- SwitchArrowBranch[@Default = false]
         |              +- SwitchLabel[@Default = false, @PatternLabel = true]
         |              |  +- TypePattern[@EffectiveVisibility = Visibility.V_PACKAGE, @Visibility = Visibility.V_PACKAGE]
         |              |     +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |              |     +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "F"]
         |              |     |  +- TypeArguments[@Diamond = false, @Empty = false, @Size = 1]
         |              |     |     +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Integer"]
         |              |     +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = false, @LambdaParameter = false, @LocalVariable = false, @Name = "bi", @PatternBinding = true, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_LOCAL]
         |              +- NumericLiteral[@Base = 10, @CompileTimeConstant = true, @DoubleLiteral = false, @FloatLiteral = false, @Image = "42", @IntLiteral = true, @Integral = true, @LiteralText = "42", @LongLiteral = false, @ParenthesisDepth = 0, @Parenthesized = false, @ValueAsDouble = 42.0, @ValueAsFloat = 42.0, @ValueAsInt = 42, @ValueAsLong = 42]
         +- MethodDeclaration[@Abstract = false, @Arity = 1, @EffectiveVisibility = Visibility.V_PUBLIC, @Final = false, @MainMethod = true, @Name = "main", @Overridden = false, @Static = true, @Varargs = false, @Visibility = Visibility.V_PUBLIC, @Void = true]
            +- ModifierList[@EffectiveModifiers = (JModifier.PUBLIC, JModifier.STATIC), @ExplicitModifiers = (JModifier.PUBLIC, JModifier.STATIC)]
            +- VoidType[]
            +- FormalParameters[@Empty = false, @Size = 1]
            |  +- FormalParameter[@EffectiveVisibility = Visibility.V_LOCAL, @Final = false, @Varargs = false, @Visibility = Visibility.V_LOCAL]
            |     +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
            |     +- ArrayType[@ArrayDepth = 1]
            |     |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "String"]
            |     |  +- ArrayDimensions[@Empty = false, @Size = 1]
            |     |     +- ArrayTypeDim[@Varargs = false]
            |     +- VariableId[@ArrayType = true, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = true, @LambdaParameter = false, @LocalVariable = false, @Name = "args", @PatternBinding = false, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_LOCAL]
            +- Block[@Empty = false, @Size = 13, @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]
               |        +- MethodCall[@CompileTimeConstant = false, @Image = "coverage", @MethodName = "coverage", @ParenthesisDepth = 0, @Parenthesized = false]
               |           +- ArgumentList[@Empty = false, @Size = 1]
               |              +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "a string", @Empty = false, @Image = "\"a string\"", @Length = 8, @LiteralText = "\"a string\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = 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]
               |        +- MethodCall[@CompileTimeConstant = false, @Image = "coverage", @MethodName = "coverage", @ParenthesisDepth = 0, @Parenthesized = false]
               |           +- ArgumentList[@Empty = false, @Size = 1]
               |              +- NumericLiteral[@Base = 10, @CompileTimeConstant = true, @DoubleLiteral = false, @FloatLiteral = false, @Image = "42", @IntLiteral = true, @Integral = true, @LiteralText = "42", @LongLiteral = false, @ParenthesisDepth = 0, @Parenthesized = false, @ValueAsDouble = 42.0, @ValueAsFloat = 42.0, @ValueAsInt = 42, @ValueAsLong = 42]
               +- 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]
               |        +- MethodCall[@CompileTimeConstant = false, @Image = "coverage", @MethodName = "coverage", @ParenthesisDepth = 0, @Parenthesized = false]
               |           +- ArgumentList[@Empty = false, @Size = 1]
               |              +- ConstructorCall[@AnonymousClass = false, @CompileTimeConstant = false, @DiamondTypeArgs = false, @MethodName = "new", @ParenthesisDepth = 0, @Parenthesized = false, @QualifiedInstanceCreation = false]
               |                 +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Object"]
               |                 +- ArgumentList[@Empty = true, @Size = 0]
               +- ExpressionStatement[]
               |  +- MethodCall[@CompileTimeConstant = false, @Image = "coverageStatement", @MethodName = "coverageStatement", @ParenthesisDepth = 0, @Parenthesized = false]
               |     +- ArgumentList[@Empty = false, @Size = 1]
               |        +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "a string", @Empty = false, @Image = "\"a string\"", @Length = 8, @LiteralText = "\"a string\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
               +- ExpressionStatement[]
               |  +- MethodCall[@CompileTimeConstant = false, @Image = "coverageStatement", @MethodName = "coverageStatement", @ParenthesisDepth = 0, @Parenthesized = false]
               |     +- ArgumentList[@Empty = false, @Size = 1]
               |        +- NumericLiteral[@Base = 10, @CompileTimeConstant = true, @DoubleLiteral = false, @FloatLiteral = false, @Image = "21", @IntLiteral = true, @Integral = true, @LiteralText = "21", @LongLiteral = false, @ParenthesisDepth = 0, @Parenthesized = false, @ValueAsDouble = 21.0, @ValueAsFloat = 21.0, @ValueAsInt = 21, @ValueAsLong = 21]
               +- ExpressionStatement[]
               |  +- MethodCall[@CompileTimeConstant = false, @Image = "coverageStatement", @MethodName = "coverageStatement", @ParenthesisDepth = 0, @Parenthesized = false]
               |     +- ArgumentList[@Empty = false, @Size = 1]
               |        +- ConstructorCall[@AnonymousClass = false, @CompileTimeConstant = false, @DiamondTypeArgs = false, @MethodName = "new", @ParenthesisDepth = 0, @Parenthesized = false, @QualifiedInstanceCreation = false]
               |           +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Object"]
               |           +- ArgumentList[@Empty = true, @Size = 0]
               +- 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]
               |        +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.ADD, @ParenthesisDepth = 0, @Parenthesized = false]
               |           +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "A:", @Empty = false, @Image = "\"A:\"", @Length = 2, @LiteralText = "\"A:\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
               |           +- MethodCall[@CompileTimeConstant = false, @Image = "testSealedExhaustive", @MethodName = "testSealedExhaustive", @ParenthesisDepth = 0, @Parenthesized = false]
               |              +- ArgumentList[@Empty = false, @Size = 1]
               |                 +- ConstructorCall[@AnonymousClass = false, @CompileTimeConstant = false, @DiamondTypeArgs = false, @MethodName = "new", @ParenthesisDepth = 0, @Parenthesized = false, @QualifiedInstanceCreation = false]
               |                    +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "A"]
               |                    +- ArgumentList[@Empty = true, @Size = 0]
               +- 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]
               |        +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.ADD, @ParenthesisDepth = 0, @Parenthesized = false]
               |           +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "B:", @Empty = false, @Image = "\"B:\"", @Length = 2, @LiteralText = "\"B:\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
               |           +- MethodCall[@CompileTimeConstant = false, @Image = "testSealedExhaustive", @MethodName = "testSealedExhaustive", @ParenthesisDepth = 0, @Parenthesized = false]
               |              +- ArgumentList[@Empty = false, @Size = 1]
               |                 +- ConstructorCall[@AnonymousClass = false, @CompileTimeConstant = false, @DiamondTypeArgs = false, @MethodName = "new", @ParenthesisDepth = 0, @Parenthesized = false, @QualifiedInstanceCreation = false]
               |                    +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "B"]
               |                    +- ArgumentList[@Empty = true, @Size = 0]
               +- 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]
               |        +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.ADD, @ParenthesisDepth = 0, @Parenthesized = false]
               |           +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "C:", @Empty = false, @Image = "\"C:\"", @Length = 2, @LiteralText = "\"C:\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
               |           +- MethodCall[@CompileTimeConstant = false, @Image = "testSealedExhaustive", @MethodName = "testSealedExhaustive", @ParenthesisDepth = 0, @Parenthesized = false]
               |              +- ArgumentList[@Empty = false, @Size = 1]
               |                 +- ConstructorCall[@AnonymousClass = false, @CompileTimeConstant = false, @DiamondTypeArgs = false, @MethodName = "new", @ParenthesisDepth = 0, @Parenthesized = false, @QualifiedInstanceCreation = false]
               |                    +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "C"]
               |                    +- ArgumentList[@Empty = false, @Size = 1]
               |                       +- NumericLiteral[@Base = 10, @CompileTimeConstant = true, @DoubleLiteral = false, @FloatLiteral = false, @Image = "1", @IntLiteral = true, @Integral = true, @LiteralText = "1", @LongLiteral = false, @ParenthesisDepth = 0, @Parenthesized = false, @ValueAsDouble = 1.0, @ValueAsFloat = 1.0, @ValueAsInt = 1, @ValueAsLong = 1]
               +- ExpressionStatement[]
               |  +- MethodCall[@CompileTimeConstant = false, @Image = "switchStatementExhaustive", @MethodName = "switchStatementExhaustive", @ParenthesisDepth = 0, @Parenthesized = false]
               |     +- ArgumentList[@Empty = false, @Size = 1]
               |        +- ConstructorCall[@AnonymousClass = false, @CompileTimeConstant = false, @DiamondTypeArgs = false, @MethodName = "new", @ParenthesisDepth = 0, @Parenthesized = false, @QualifiedInstanceCreation = false]
               |           +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "A"]
               |           +- ArgumentList[@Empty = true, @Size = 0]
               +- ExpressionStatement[]
               |  +- MethodCall[@CompileTimeConstant = false, @Image = "switchStatementExhaustive", @MethodName = "switchStatementExhaustive", @ParenthesisDepth = 0, @Parenthesized = false]
               |     +- ArgumentList[@Empty = false, @Size = 1]
               |        +- ConstructorCall[@AnonymousClass = false, @CompileTimeConstant = false, @DiamondTypeArgs = false, @MethodName = "new", @ParenthesisDepth = 0, @Parenthesized = false, @QualifiedInstanceCreation = false]
               |           +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "B"]
               |           +- ArgumentList[@Empty = true, @Size = 0]
               +- ExpressionStatement[]
               |  +- MethodCall[@CompileTimeConstant = false, @Image = "switchStatementExhaustive", @MethodName = "switchStatementExhaustive", @ParenthesisDepth = 0, @Parenthesized = false]
               |     +- ArgumentList[@Empty = false, @Size = 1]
               |        +- ConstructorCall[@AnonymousClass = false, @CompileTimeConstant = false, @DiamondTypeArgs = false, @MethodName = "new", @ParenthesisDepth = 0, @Parenthesized = false, @QualifiedInstanceCreation = false]
               |           +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "C"]
               |           +- ArgumentList[@Empty = false, @Size = 1]
               |              +- NumericLiteral[@Base = 10, @CompileTimeConstant = true, @DoubleLiteral = false, @FloatLiteral = false, @Image = "2", @IntLiteral = true, @Integral = true, @LiteralText = "2", @LongLiteral = false, @ParenthesisDepth = 0, @Parenthesized = false, @ValueAsDouble = 2.0, @ValueAsFloat = 2.0, @ValueAsInt = 2, @ValueAsLong = 2]
               +- 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]
                        +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.ADD, @ParenthesisDepth = 0, @Parenthesized = false]
                           +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "F:", @Empty = false, @Image = "\"F:\"", @Length = 2, @LiteralText = "\"F:\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
                           +- MethodCall[@CompileTimeConstant = false, @Image = "testGenericSealedExhaustive", @MethodName = "testGenericSealedExhaustive", @ParenthesisDepth = 0, @Parenthesized = false]
                              +- ArgumentList[@Empty = false, @Size = 1]
                                 +- ConstructorCall[@AnonymousClass = false, @CompileTimeConstant = false, @DiamondTypeArgs = false, @MethodName = "new", @ParenthesisDepth = 0, @Parenthesized = false, @QualifiedInstanceCreation = false]
                                    +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "F"]
                                    |  +- TypeArguments[@Diamond = false, @Empty = false, @Size = 1]
                                    |     +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Integer"]
                                    +- ArgumentList[@Empty = true, @Size = 0]
