+- CompilationUnit[]
   +- ClassDeclaration[@TypeMirror = "Example"]
      +- ModifierList[]
      +- ClassBody[]
         +- MethodDeclaration[@Name = "foo"]
            +- ModifierList[]
            +- ClassType[@TypeMirror = "java.lang.String"]
            +- FormalParameters[]
            |  +- FormalParameter[@TypeMirror = "java.lang.Object"]
            |     +- ModifierList[]
            |     +- ClassType[@TypeMirror = "java.lang.Object"]
            |     +- VariableId[@Name = "foo", @TypeMirror = "java.lang.Object"]
            +- Block[]
               +- ReturnStatement[]
                  +- SwitchExpression[@TypeMirror = "java.lang.String"]
                     +- VariableAccess[@Name = "foo", @TypeMirror = "java.lang.Object"]
                     +- SwitchArrowBranch[]
                     |  +- SwitchLabel[]
                     |  |  +- TypePattern[@TypeMirror = "char[]"]
                     |  |     +- ModifierList[]
                     |  |     +- ArrayType[@TypeMirror = "char[]"]
                     |  |     |  +- PrimitiveType[@TypeMirror = "char"]
                     |  |     |  +- ArrayDimensions[]
                     |  |     |     +- ArrayTypeDim[]
                     |  |     +- VariableId[@Name = "array", @TypeMirror = "char[]"]
                     |  +- ConstructorCall[@Failed = false, @Function = "java.lang.String.new(char[]) -> java.lang.String", @MethodName = "new", @TypeMirror = "java.lang.String", @Unchecked = false, @VarargsCall = false]
                     |     +- ClassType[@TypeMirror = "java.lang.String"]
                     |     +- ArgumentList[]
                     |        +- VariableAccess[@Name = "array", @TypeMirror = "char[]"]
                     +- SwitchArrowBranch[]
                     |  +- SwitchLabel[]
                     |  |  +- TypePattern[@TypeMirror = "java.lang.String"]
                     |  |     +- ModifierList[]
                     |  |     +- ClassType[@TypeMirror = "java.lang.String"]
                     |  |     +- VariableId[@Name = "string", @TypeMirror = "java.lang.String"]
                     |  +- VariableAccess[@Name = "string", @TypeMirror = "java.lang.String"]
                     +- SwitchArrowBranch[]
                        +- SwitchLabel[]
                        +- ThrowStatement[]
                           +- ConstructorCall[@Failed = false, @Function = "java.lang.RuntimeException.new() -> java.lang.RuntimeException", @MethodName = "new", @TypeMirror = "java.lang.RuntimeException", @Unchecked = false, @VarargsCall = false]
                              +- ClassType[@TypeMirror = "java.lang.RuntimeException"]
                              +- ArgumentList[]
