+- CompilationUnit[@PackageName = ""]
   +- ClassDeclaration[@Abstract = false, @Annotation = false, @Anonymous = false, @BinaryName = "Jep441_PatternMatchingForSwitch", @CanonicalName = "Jep441_PatternMatchingForSwitch", @EffectiveVisibility = Visibility.V_PACKAGE, @Enum = false, @Final = false, @Interface = false, @Local = false, @Nested = false, @PackageName = "", @Record = false, @RegularClass = true, @RegularInterface = false, @SimpleName = "Jep441_PatternMatchingForSwitch", @Static = false, @TopLevel = true, @UnnamedToplevelClass = false, @Visibility = Visibility.V_PACKAGE]
      +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
      +- ClassBody[@Empty = false, @Size = 13]
         +- MethodDeclaration[@Abstract = false, @Arity = 1, @EffectiveVisibility = Visibility.V_PACKAGE, @Final = false, @Name = "formatterPatternSwitch", @Overridden = false, @Static = true, @Varargs = false, @Visibility = Visibility.V_PACKAGE, @Void = false]
         |  +- ModifierList[@EffectiveModifiers = (JModifier.STATIC), @ExplicitModifiers = (JModifier.STATIC)]
         |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "String"]
         |  +- 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]
         |           |  |  +- 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]
         |           |  +- MethodCall[@CompileTimeConstant = false, @Image = "format", @MethodName = "format", @ParenthesisDepth = 0, @Parenthesized = false]
         |           |     +- TypeExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false]
         |           |     |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "String"]
         |           |     +- ArgumentList[@Empty = false, @Size = 2]
         |           |        +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "int %d", @Empty = false, @Image = "\"int %d\"", @Length = 6, @LiteralText = "\"int %d\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |           |        +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "i", @Name = "i", @ParenthesisDepth = 0, @Parenthesized = false]
         |           +- SwitchArrowBranch[@Default = false]
         |           |  +- SwitchLabel[@Default = false]
         |           |  |  +- TypePattern[@EffectiveVisibility = Visibility.V_PACKAGE, @Visibility = Visibility.V_PACKAGE]
         |           |  |     +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |           |  |     +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Long"]
         |           |  |     +- 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 = "l", @PatternBinding = true, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_LOCAL]
         |           |  +- MethodCall[@CompileTimeConstant = false, @Image = "format", @MethodName = "format", @ParenthesisDepth = 0, @Parenthesized = false]
         |           |     +- TypeExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false]
         |           |     |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "String"]
         |           |     +- ArgumentList[@Empty = false, @Size = 2]
         |           |        +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "long %d", @Empty = false, @Image = "\"long %d\"", @Length = 7, @LiteralText = "\"long %d\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |           |        +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "l", @Name = "l", @ParenthesisDepth = 0, @Parenthesized = false]
         |           +- SwitchArrowBranch[@Default = false]
         |           |  +- SwitchLabel[@Default = false]
         |           |  |  +- TypePattern[@EffectiveVisibility = Visibility.V_PACKAGE, @Visibility = Visibility.V_PACKAGE]
         |           |  |     +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |           |  |     +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Double"]
         |           |  |     +- 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 = "d", @PatternBinding = true, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_LOCAL]
         |           |  +- MethodCall[@CompileTimeConstant = false, @Image = "format", @MethodName = "format", @ParenthesisDepth = 0, @Parenthesized = false]
         |           |     +- TypeExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false]
         |           |     |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "String"]
         |           |     +- ArgumentList[@Empty = false, @Size = 2]
         |           |        +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "double %f", @Empty = false, @Image = "\"double %f\"", @Length = 9, @LiteralText = "\"double %f\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |           |        +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "d", @Name = "d", @ParenthesisDepth = 0, @Parenthesized = false]
         |           +- SwitchArrowBranch[@Default = false]
         |           |  +- SwitchLabel[@Default = false]
         |           |  |  +- 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 = "format", @MethodName = "format", @ParenthesisDepth = 0, @Parenthesized = false]
         |           |     +- TypeExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false]
         |           |     |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "String"]
         |           |     +- ArgumentList[@Empty = false, @Size = 2]
         |           |        +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "String %s", @Empty = false, @Image = "\"String %s\"", @Length = 9, @LiteralText = "\"String %s\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |           |        +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false]
         |           +- SwitchArrowBranch[@Default = true]
         |              +- SwitchLabel[@Default = true]
         |              +- MethodCall[@CompileTimeConstant = false, @Image = "toString", @MethodName = "toString", @ParenthesisDepth = 0, @Parenthesized = false]
         |                 +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "obj", @Name = "obj", @ParenthesisDepth = 0, @Parenthesized = false]
         |                 +- ArgumentList[@Empty = true, @Size = 0]
         +- MethodDeclaration[@Abstract = false, @Arity = 1, @EffectiveVisibility = Visibility.V_PACKAGE, @Final = false, @Name = "testFooBarNew", @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 = "String"]
         |  |     +- 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]
         |     +- SwitchStatement[@DefaultCase = true, @EnumSwitch = false, @ExhaustiveEnumSwitch = false, @FallthroughSwitch = false]
         |        +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false]
         |        +- SwitchArrowBranch[@Default = false]
         |        |  +- SwitchLabel[@Default = false]
         |        |  |  +- NullLiteral[@CompileTimeConstant = false, @LiteralText = "null", @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  +- 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 = "Oops", @Empty = false, @Image = "\"Oops\"", @Length = 4, @LiteralText = "\"Oops\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        +- SwitchArrowBranch[@Default = false]
         |        |  +- SwitchLabel[@Default = false]
         |        |  |  +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "Foo", @Empty = false, @Image = "\"Foo\"", @Length = 3, @LiteralText = "\"Foo\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        |  |  +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "Bar", @Empty = false, @Image = "\"Bar\"", @Length = 3, @LiteralText = "\"Bar\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        |  +- 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 = "Great", @Empty = false, @Image = "\"Great\"", @Length = 5, @LiteralText = "\"Great\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        +- SwitchArrowBranch[@Default = true]
         |           +- SwitchLabel[@Default = true]
         |           +- 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 = "Ok", @Empty = false, @Image = "\"Ok\"", @Length = 2, @LiteralText = "\"Ok\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         +- MethodDeclaration[@Abstract = false, @Arity = 1, @EffectiveVisibility = Visibility.V_PACKAGE, @Final = false, @Name = "testStringNew", @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 = "String"]
         |  |     +- 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 = "response", @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 = false, @EnumSwitch = false, @ExhaustiveEnumSwitch = false, @FallthroughSwitch = false]
         |        +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "response", @Name = "response", @ParenthesisDepth = 0, @Parenthesized = false]
         |        +- SwitchArrowBranch[@Default = false]
         |        |  +- SwitchLabel[@Default = false]
         |        |  |  +- NullLiteral[@CompileTimeConstant = false, @LiteralText = "null", @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  +- Block[@Empty = true, @Size = 0, @containsComment = false]
         |        +- SwitchArrowBranch[@Default = false]
         |        |  +- SwitchLabel[@Default = false]
         |        |  |  +- 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]
         |        |  |  +- Guard[]
         |        |  |     +- MethodCall[@CompileTimeConstant = false, @Image = "equalsIgnoreCase", @MethodName = "equalsIgnoreCase", @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |        +- AmbiguousName[@CompileTimeConstant = false, @Image = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |        +- ArgumentList[@Empty = false, @Size = 1]
         |        |  |           +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "YES", @Empty = false, @Image = "\"YES\"", @Length = 3, @LiteralText = "\"YES\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        |  +- Block[@Empty = false, @Size = 1, @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]
         |        |              +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "You got it", @Empty = false, @Image = "\"You got it\"", @Length = 10, @LiteralText = "\"You got it\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        +- SwitchArrowBranch[@Default = false]
         |        |  +- SwitchLabel[@Default = false]
         |        |  |  +- 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]
         |        |  |  +- Guard[]
         |        |  |     +- MethodCall[@CompileTimeConstant = false, @Image = "equalsIgnoreCase", @MethodName = "equalsIgnoreCase", @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |        +- AmbiguousName[@CompileTimeConstant = false, @Image = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |        +- ArgumentList[@Empty = false, @Size = 1]
         |        |  |           +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "NO", @Empty = false, @Image = "\"NO\"", @Length = 2, @LiteralText = "\"NO\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        |  +- Block[@Empty = false, @Size = 1, @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]
         |        |              +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "Shame", @Empty = false, @Image = "\"Shame\"", @Length = 5, @LiteralText = "\"Shame\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        +- SwitchArrowBranch[@Default = false]
         |           +- SwitchLabel[@Default = false]
         |           |  +- 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]
         |           +- Block[@Empty = false, @Size = 1, @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]
         |                       +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "Sorry?", @Empty = false, @Image = "\"Sorry?\"", @Length = 6, @LiteralText = "\"Sorry?\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         +- MethodDeclaration[@Abstract = false, @Arity = 1, @EffectiveVisibility = Visibility.V_PACKAGE, @Final = false, @Name = "testStringEnhanced", @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 = "String"]
         |  |     +- 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 = "response", @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 = false, @EnumSwitch = false, @ExhaustiveEnumSwitch = false, @FallthroughSwitch = false]
         |        +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "response", @Name = "response", @ParenthesisDepth = 0, @Parenthesized = false]
         |        +- SwitchArrowBranch[@Default = false]
         |        |  +- SwitchLabel[@Default = false]
         |        |  |  +- NullLiteral[@CompileTimeConstant = false, @LiteralText = "null", @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  +- Block[@Empty = true, @Size = 0, @containsComment = false]
         |        +- SwitchArrowBranch[@Default = false]
         |        |  +- SwitchLabel[@Default = false]
         |        |  |  +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "y", @Empty = false, @Image = "\"y\"", @Length = 1, @LiteralText = "\"y\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        |  |  +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "Y", @Empty = false, @Image = "\"Y\"", @Length = 1, @LiteralText = "\"Y\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        |  +- Block[@Empty = false, @Size = 1, @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]
         |        |              +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "You got it", @Empty = false, @Image = "\"You got it\"", @Length = 10, @LiteralText = "\"You got it\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        +- SwitchArrowBranch[@Default = false]
         |        |  +- SwitchLabel[@Default = false]
         |        |  |  +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "n", @Empty = false, @Image = "\"n\"", @Length = 1, @LiteralText = "\"n\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        |  |  +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "N", @Empty = false, @Image = "\"N\"", @Length = 1, @LiteralText = "\"N\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        |  +- Block[@Empty = false, @Size = 1, @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]
         |        |              +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "Shame", @Empty = false, @Image = "\"Shame\"", @Length = 5, @LiteralText = "\"Shame\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        +- SwitchArrowBranch[@Default = false]
         |        |  +- SwitchLabel[@Default = false]
         |        |  |  +- 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]
         |        |  |  +- Guard[]
         |        |  |     +- MethodCall[@CompileTimeConstant = false, @Image = "equalsIgnoreCase", @MethodName = "equalsIgnoreCase", @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |        +- AmbiguousName[@CompileTimeConstant = false, @Image = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |        +- ArgumentList[@Empty = false, @Size = 1]
         |        |  |           +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "YES", @Empty = false, @Image = "\"YES\"", @Length = 3, @LiteralText = "\"YES\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        |  +- Block[@Empty = false, @Size = 1, @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]
         |        |              +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "You got it", @Empty = false, @Image = "\"You got it\"", @Length = 10, @LiteralText = "\"You got it\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        +- SwitchArrowBranch[@Default = false]
         |        |  +- SwitchLabel[@Default = false]
         |        |  |  +- 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]
         |        |  |  +- Guard[]
         |        |  |     +- MethodCall[@CompileTimeConstant = false, @Image = "equalsIgnoreCase", @MethodName = "equalsIgnoreCase", @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |        +- AmbiguousName[@CompileTimeConstant = false, @Image = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |        +- ArgumentList[@Empty = false, @Size = 1]
         |        |  |           +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "NO", @Empty = false, @Image = "\"NO\"", @Length = 2, @LiteralText = "\"NO\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        |  +- Block[@Empty = false, @Size = 1, @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]
         |        |              +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "Shame", @Empty = false, @Image = "\"Shame\"", @Length = 5, @LiteralText = "\"Shame\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        +- SwitchArrowBranch[@Default = false]
         |           +- SwitchLabel[@Default = false]
         |           |  +- 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]
         |           +- Block[@Empty = false, @Size = 1, @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]
         |                       +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "Sorry?", @Empty = false, @Image = "\"Sorry?\"", @Length = 6, @LiteralText = "\"Sorry?\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         +- ClassDeclaration[@Abstract = true, @Annotation = false, @Anonymous = false, @BinaryName = "Jep441_PatternMatchingForSwitch$CardClassification", @CanonicalName = "Jep441_PatternMatchingForSwitch.CardClassification", @EffectiveVisibility = Visibility.V_PACKAGE, @Enum = false, @Final = false, @Interface = true, @Local = false, @Nested = true, @PackageName = "", @Record = false, @RegularClass = false, @RegularInterface = true, @SimpleName = "CardClassification", @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 = 2]
         |  |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Suit"]
         |  |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Tarot"]
         |  +- ClassBody[@Empty = true, @Size = 0]
         +- EnumDeclaration[@Abstract = false, @Annotation = false, @Anonymous = false, @BinaryName = "Jep441_PatternMatchingForSwitch$Suit", @CanonicalName = "Jep441_PatternMatchingForSwitch.Suit", @EffectiveVisibility = Visibility.V_PACKAGE, @Enum = true, @Final = true, @Interface = false, @Local = false, @Nested = true, @PackageName = "", @Record = false, @RegularClass = false, @RegularInterface = false, @SimpleName = "Suit", @Static = true, @TopLevel = false, @UnnamedToplevelClass = false, @Visibility = Visibility.V_PUBLIC]
         |  +- ModifierList[@EffectiveModifiers = (JModifier.PUBLIC, JModifier.STATIC, JModifier.FINAL), @ExplicitModifiers = (JModifier.PUBLIC)]
         |  +- ImplementsList[@Empty = false, @Size = 1]
         |  |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "CardClassification"]
         |  +- EnumBody[@Empty = false, @SeparatorSemi = false, @Size = 4, @TrailingComma = false]
         |     +- EnumConstant[@AnonymousClass = false, @EffectiveVisibility = Visibility.V_PACKAGE, @Image = "CLUBS", @MethodName = "new", @Name = "CLUBS", @Visibility = Visibility.V_PUBLIC]
         |     |  +- ModifierList[@EffectiveModifiers = (JModifier.PUBLIC, JModifier.STATIC, JModifier.FINAL), @ExplicitModifiers = ()]
         |     |  +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_PACKAGE, @EnumConstant = true, @ExceptionBlockParameter = false, @Field = false, @Final = true, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = false, @LambdaParameter = false, @LocalVariable = false, @Name = "CLUBS", @PatternBinding = false, @RecordComponent = false, @ResourceDeclaration = false, @Static = true, @TypeInferred = true, @Unnamed = false, @Visibility = Visibility.V_PUBLIC]
         |     +- EnumConstant[@AnonymousClass = false, @EffectiveVisibility = Visibility.V_PACKAGE, @Image = "DIAMONDS", @MethodName = "new", @Name = "DIAMONDS", @Visibility = Visibility.V_PUBLIC]
         |     |  +- ModifierList[@EffectiveModifiers = (JModifier.PUBLIC, JModifier.STATIC, JModifier.FINAL), @ExplicitModifiers = ()]
         |     |  +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_PACKAGE, @EnumConstant = true, @ExceptionBlockParameter = false, @Field = false, @Final = true, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = false, @LambdaParameter = false, @LocalVariable = false, @Name = "DIAMONDS", @PatternBinding = false, @RecordComponent = false, @ResourceDeclaration = false, @Static = true, @TypeInferred = true, @Unnamed = false, @Visibility = Visibility.V_PUBLIC]
         |     +- EnumConstant[@AnonymousClass = false, @EffectiveVisibility = Visibility.V_PACKAGE, @Image = "HEARTS", @MethodName = "new", @Name = "HEARTS", @Visibility = Visibility.V_PUBLIC]
         |     |  +- ModifierList[@EffectiveModifiers = (JModifier.PUBLIC, JModifier.STATIC, JModifier.FINAL), @ExplicitModifiers = ()]
         |     |  +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_PACKAGE, @EnumConstant = true, @ExceptionBlockParameter = false, @Field = false, @Final = true, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = false, @LambdaParameter = false, @LocalVariable = false, @Name = "HEARTS", @PatternBinding = false, @RecordComponent = false, @ResourceDeclaration = false, @Static = true, @TypeInferred = true, @Unnamed = false, @Visibility = Visibility.V_PUBLIC]
         |     +- EnumConstant[@AnonymousClass = false, @EffectiveVisibility = Visibility.V_PACKAGE, @Image = "SPADES", @MethodName = "new", @Name = "SPADES", @Visibility = Visibility.V_PUBLIC]
         |        +- ModifierList[@EffectiveModifiers = (JModifier.PUBLIC, JModifier.STATIC, JModifier.FINAL), @ExplicitModifiers = ()]
         |        +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_PACKAGE, @EnumConstant = true, @ExceptionBlockParameter = false, @Field = false, @Final = true, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = false, @LambdaParameter = false, @LocalVariable = false, @Name = "SPADES", @PatternBinding = false, @RecordComponent = false, @ResourceDeclaration = false, @Static = true, @TypeInferred = true, @Unnamed = false, @Visibility = Visibility.V_PUBLIC]
         +- ClassDeclaration[@Abstract = false, @Annotation = false, @Anonymous = false, @BinaryName = "Jep441_PatternMatchingForSwitch$Tarot", @CanonicalName = "Jep441_PatternMatchingForSwitch.Tarot", @EffectiveVisibility = Visibility.V_PACKAGE, @Enum = false, @Final = true, @Interface = false, @Local = false, @Nested = true, @PackageName = "", @Record = false, @RegularClass = true, @RegularInterface = false, @SimpleName = "Tarot", @Static = false, @TopLevel = false, @UnnamedToplevelClass = false, @Visibility = Visibility.V_PACKAGE]
         |  +- ModifierList[@EffectiveModifiers = (JModifier.FINAL), @ExplicitModifiers = (JModifier.FINAL)]
         |  +- ImplementsList[@Empty = false, @Size = 1]
         |  |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "CardClassification"]
         |  +- ClassBody[@Empty = true, @Size = 0]
         +- MethodDeclaration[@Abstract = false, @Arity = 1, @EffectiveVisibility = Visibility.V_PACKAGE, @Final = false, @Name = "exhaustiveSwitchWithoutEnumSupport", @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 = "CardClassification"]
         |  |     +- 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 = "c", @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 = false, @EnumSwitch = false, @ExhaustiveEnumSwitch = false, @FallthroughSwitch = false]
         |        +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "c", @Name = "c", @ParenthesisDepth = 0, @Parenthesized = false]
         |        +- SwitchArrowBranch[@Default = false]
         |        |  +- SwitchLabel[@Default = false]
         |        |  |  +- TypePattern[@EffectiveVisibility = Visibility.V_PACKAGE, @Visibility = Visibility.V_PACKAGE]
         |        |  |  |  +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |        |  |  |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Suit"]
         |        |  |  |  +- 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]
         |        |  |  +- Guard[]
         |        |  |     +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.EQ, @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |        +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |        +- FieldAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "CLUBS", @Name = "CLUBS", @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |           +- TypeExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |              +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Suit"]
         |        |  +- Block[@Empty = false, @Size = 1, @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]
         |        |              +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "It\'s clubs", @Empty = false, @Image = "\"It\'s clubs\"", @Length = 10, @LiteralText = "\"It\'s clubs\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        +- SwitchArrowBranch[@Default = false]
         |        |  +- SwitchLabel[@Default = false]
         |        |  |  +- TypePattern[@EffectiveVisibility = Visibility.V_PACKAGE, @Visibility = Visibility.V_PACKAGE]
         |        |  |  |  +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |        |  |  |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Suit"]
         |        |  |  |  +- 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]
         |        |  |  +- Guard[]
         |        |  |     +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.EQ, @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |        +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |        +- FieldAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "DIAMONDS", @Name = "DIAMONDS", @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |           +- TypeExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |              +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Suit"]
         |        |  +- Block[@Empty = false, @Size = 1, @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]
         |        |              +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "It\'s diamonds", @Empty = false, @Image = "\"It\'s diamonds\"", @Length = 13, @LiteralText = "\"It\'s diamonds\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        +- SwitchArrowBranch[@Default = false]
         |        |  +- SwitchLabel[@Default = false]
         |        |  |  +- TypePattern[@EffectiveVisibility = Visibility.V_PACKAGE, @Visibility = Visibility.V_PACKAGE]
         |        |  |  |  +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |        |  |  |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Suit"]
         |        |  |  |  +- 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]
         |        |  |  +- Guard[]
         |        |  |     +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.EQ, @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |        +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |        +- FieldAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "HEARTS", @Name = "HEARTS", @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |           +- TypeExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |              +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Suit"]
         |        |  +- Block[@Empty = false, @Size = 1, @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]
         |        |              +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "It\'s hearts", @Empty = false, @Image = "\"It\'s hearts\"", @Length = 11, @LiteralText = "\"It\'s hearts\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        +- SwitchArrowBranch[@Default = false]
         |        |  +- SwitchLabel[@Default = false]
         |        |  |  +- TypePattern[@EffectiveVisibility = Visibility.V_PACKAGE, @Visibility = Visibility.V_PACKAGE]
         |        |  |     +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |        |  |     +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Suit"]
         |        |  |     +- 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]
         |        |  +- Block[@Empty = false, @Size = 1, @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]
         |        |              +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "It\'s spades", @Empty = false, @Image = "\"It\'s spades\"", @Length = 11, @LiteralText = "\"It\'s spades\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        +- SwitchArrowBranch[@Default = false]
         |           +- SwitchLabel[@Default = false]
         |           |  +- TypePattern[@EffectiveVisibility = Visibility.V_PACKAGE, @Visibility = Visibility.V_PACKAGE]
         |           |     +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |           |     +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Tarot"]
         |           |     +- 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 = "t", @PatternBinding = true, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_LOCAL]
         |           +- Block[@Empty = false, @Size = 1, @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]
         |                       +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "It\'s a tarot", @Empty = false, @Image = "\"It\'s a tarot\"", @Length = 12, @LiteralText = "\"It\'s a tarot\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         +- MethodDeclaration[@Abstract = false, @Arity = 1, @EffectiveVisibility = Visibility.V_PACKAGE, @Final = false, @Name = "exhaustiveSwitchWithBetterEnumSupport", @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 = "CardClassification"]
         |  |     +- 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 = "c", @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 = false, @EnumSwitch = false, @ExhaustiveEnumSwitch = false, @FallthroughSwitch = false]
         |        +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "c", @Name = "c", @ParenthesisDepth = 0, @Parenthesized = false]
         |        +- SwitchArrowBranch[@Default = false]
         |        |  +- SwitchLabel[@Default = false]
         |        |  |  +- FieldAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "CLUBS", @Name = "CLUBS", @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |     +- TypeExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |        +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Suit"]
         |        |  +- Block[@Empty = false, @Size = 1, @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]
         |        |              +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "It\'s clubs", @Empty = false, @Image = "\"It\'s clubs\"", @Length = 10, @LiteralText = "\"It\'s clubs\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        +- SwitchArrowBranch[@Default = false]
         |        |  +- SwitchLabel[@Default = false]
         |        |  |  +- FieldAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "DIAMONDS", @Name = "DIAMONDS", @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |     +- TypeExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |        +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Suit"]
         |        |  +- Block[@Empty = false, @Size = 1, @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]
         |        |              +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "It\'s diamonds", @Empty = false, @Image = "\"It\'s diamonds\"", @Length = 13, @LiteralText = "\"It\'s diamonds\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        +- SwitchArrowBranch[@Default = false]
         |        |  +- SwitchLabel[@Default = false]
         |        |  |  +- FieldAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "HEARTS", @Name = "HEARTS", @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |     +- TypeExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |        +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Suit"]
         |        |  +- Block[@Empty = false, @Size = 1, @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]
         |        |              +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "It\'s hearts", @Empty = false, @Image = "\"It\'s hearts\"", @Length = 11, @LiteralText = "\"It\'s hearts\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        +- SwitchArrowBranch[@Default = false]
         |        |  +- SwitchLabel[@Default = false]
         |        |  |  +- FieldAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "SPADES", @Name = "SPADES", @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |     +- TypeExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |        +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Suit"]
         |        |  +- Block[@Empty = false, @Size = 1, @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]
         |        |              +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "It\'s spades", @Empty = false, @Image = "\"It\'s spades\"", @Length = 11, @LiteralText = "\"It\'s spades\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        +- SwitchArrowBranch[@Default = false]
         |           +- SwitchLabel[@Default = false]
         |           |  +- TypePattern[@EffectiveVisibility = Visibility.V_PACKAGE, @Visibility = Visibility.V_PACKAGE]
         |           |     +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |           |     +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Tarot"]
         |           |     +- 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 = "t", @PatternBinding = true, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_LOCAL]
         |           +- Block[@Empty = false, @Size = 1, @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]
         |                       +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "It\'s a tarot", @Empty = false, @Image = "\"It\'s a tarot\"", @Length = 12, @LiteralText = "\"It\'s a tarot\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         +- ClassDeclaration[@Abstract = true, @Annotation = false, @Anonymous = false, @BinaryName = "Jep441_PatternMatchingForSwitch$Currency", @CanonicalName = "Jep441_PatternMatchingForSwitch.Currency", @EffectiveVisibility = Visibility.V_PACKAGE, @Enum = false, @Final = false, @Interface = true, @Local = false, @Nested = true, @PackageName = "", @Record = false, @RegularClass = false, @RegularInterface = true, @SimpleName = "Currency", @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 = 1]
         |  |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Coin"]
         |  +- ClassBody[@Empty = true, @Size = 0]
         +- EnumDeclaration[@Abstract = false, @Annotation = false, @Anonymous = false, @BinaryName = "Jep441_PatternMatchingForSwitch$Coin", @CanonicalName = "Jep441_PatternMatchingForSwitch.Coin", @EffectiveVisibility = Visibility.V_PACKAGE, @Enum = true, @Final = true, @Interface = false, @Local = false, @Nested = true, @PackageName = "", @Record = false, @RegularClass = false, @RegularInterface = false, @SimpleName = "Coin", @Static = true, @TopLevel = false, @UnnamedToplevelClass = false, @Visibility = Visibility.V_PACKAGE]
         |  +- ModifierList[@EffectiveModifiers = (JModifier.STATIC, JModifier.FINAL), @ExplicitModifiers = ()]
         |  +- ImplementsList[@Empty = false, @Size = 1]
         |  |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Currency"]
         |  +- EnumBody[@Empty = false, @SeparatorSemi = false, @Size = 2, @TrailingComma = false]
         |     +- EnumConstant[@AnonymousClass = false, @EffectiveVisibility = Visibility.V_PACKAGE, @Image = "HEADS", @MethodName = "new", @Name = "HEADS", @Visibility = Visibility.V_PUBLIC]
         |     |  +- ModifierList[@EffectiveModifiers = (JModifier.PUBLIC, JModifier.STATIC, JModifier.FINAL), @ExplicitModifiers = ()]
         |     |  +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_PACKAGE, @EnumConstant = true, @ExceptionBlockParameter = false, @Field = false, @Final = true, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = false, @LambdaParameter = false, @LocalVariable = false, @Name = "HEADS", @PatternBinding = false, @RecordComponent = false, @ResourceDeclaration = false, @Static = true, @TypeInferred = true, @Unnamed = false, @Visibility = Visibility.V_PUBLIC]
         |     +- EnumConstant[@AnonymousClass = false, @EffectiveVisibility = Visibility.V_PACKAGE, @Image = "TAILS", @MethodName = "new", @Name = "TAILS", @Visibility = Visibility.V_PUBLIC]
         |        +- ModifierList[@EffectiveModifiers = (JModifier.PUBLIC, JModifier.STATIC, JModifier.FINAL), @ExplicitModifiers = ()]
         |        +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_PACKAGE, @EnumConstant = true, @ExceptionBlockParameter = false, @Field = false, @Final = true, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = false, @LambdaParameter = false, @LocalVariable = false, @Name = "TAILS", @PatternBinding = false, @RecordComponent = false, @ResourceDeclaration = false, @Static = true, @TypeInferred = true, @Unnamed = false, @Visibility = Visibility.V_PUBLIC]
         +- MethodDeclaration[@Abstract = false, @Arity = 1, @EffectiveVisibility = Visibility.V_PACKAGE, @Final = false, @Name = "goodEnumSwitch1", @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 = "Currency"]
         |  |     +- 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 = "c", @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 = false, @EnumSwitch = false, @ExhaustiveEnumSwitch = false, @FallthroughSwitch = false]
         |        +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "c", @Name = "c", @ParenthesisDepth = 0, @Parenthesized = false]
         |        +- SwitchArrowBranch[@Default = false]
         |        |  +- SwitchLabel[@Default = false]
         |        |  |  +- FieldAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "HEADS", @Name = "HEADS", @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |     +- TypeExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  |        +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Coin"]
         |        |  +- Block[@Empty = false, @Size = 1, @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]
         |        |              +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "Heads", @Empty = false, @Image = "\"Heads\"", @Length = 5, @LiteralText = "\"Heads\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        +- SwitchArrowBranch[@Default = false]
         |           +- SwitchLabel[@Default = false]
         |           |  +- FieldAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "TAILS", @Name = "TAILS", @ParenthesisDepth = 0, @Parenthesized = false]
         |           |     +- TypeExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false]
         |           |        +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Coin"]
         |           +- Block[@Empty = false, @Size = 1, @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]
         |                       +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "Tails", @Empty = false, @Image = "\"Tails\"", @Length = 5, @LiteralText = "\"Tails\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         +- MethodDeclaration[@Abstract = false, @Arity = 1, @EffectiveVisibility = Visibility.V_PACKAGE, @Final = false, @Name = "goodEnumSwitch2", @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 = "Coin"]
            |     +- 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 = "c", @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 = false, @EnumSwitch = true, @ExhaustiveEnumSwitch = true, @FallthroughSwitch = false]
                  +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "c", @Name = "c", @ParenthesisDepth = 0, @Parenthesized = false]
                  +- SwitchArrowBranch[@Default = false]
                  |  +- SwitchLabel[@Default = false]
                  |  |  +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "HEADS", @Name = "HEADS", @ParenthesisDepth = 0, @Parenthesized = false]
                  |  +- Block[@Empty = false, @Size = 1, @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]
                  |              +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "Heads", @Empty = false, @Image = "\"Heads\"", @Length = 5, @LiteralText = "\"Heads\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
                  +- SwitchArrowBranch[@Default = false]
                     +- SwitchLabel[@Default = false]
                     |  +- FieldAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "TAILS", @Name = "TAILS", @ParenthesisDepth = 0, @Parenthesized = false]
                     |     +- TypeExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false]
                     |        +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Coin"]
                     +- Block[@Empty = false, @Size = 1, @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]
                                 +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "Tails", @Empty = false, @Image = "\"Tails\"", @Length = 5, @LiteralText = "\"Tails\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
