+- CompilationUnit[@PackageName = ""]
   +- ImportDeclaration[@ImportOnDemand = false, @ImportedName = "java.lang.annotation.ElementType.CONSTRUCTOR", @ImportedSimpleName = "CONSTRUCTOR", @ModuleImport = false, @PackageName = "java.lang.annotation.ElementType", @Static = true]
   +- ImportDeclaration[@ImportOnDemand = false, @ImportedName = "java.lang.annotation.ElementType.FIELD", @ImportedSimpleName = "FIELD", @ModuleImport = false, @PackageName = "java.lang.annotation.ElementType", @Static = true]
   +- ImportDeclaration[@ImportOnDemand = false, @ImportedName = "java.lang.annotation.ElementType.LOCAL_VARIABLE", @ImportedSimpleName = "LOCAL_VARIABLE", @ModuleImport = false, @PackageName = "java.lang.annotation.ElementType", @Static = true]
   +- ImportDeclaration[@ImportOnDemand = false, @ImportedName = "java.lang.annotation.ElementType.METHOD", @ImportedSimpleName = "METHOD", @ModuleImport = false, @PackageName = "java.lang.annotation.ElementType", @Static = true]
   +- ImportDeclaration[@ImportOnDemand = false, @ImportedName = "java.lang.annotation.ElementType.MODULE", @ImportedSimpleName = "MODULE", @ModuleImport = false, @PackageName = "java.lang.annotation.ElementType", @Static = true]
   +- ImportDeclaration[@ImportOnDemand = false, @ImportedName = "java.lang.annotation.ElementType.PACKAGE", @ImportedSimpleName = "PACKAGE", @ModuleImport = false, @PackageName = "java.lang.annotation.ElementType", @Static = true]
   +- ImportDeclaration[@ImportOnDemand = false, @ImportedName = "java.lang.annotation.ElementType.PARAMETER", @ImportedSimpleName = "PARAMETER", @ModuleImport = false, @PackageName = "java.lang.annotation.ElementType", @Static = true]
   +- ImportDeclaration[@ImportOnDemand = false, @ImportedName = "java.lang.annotation.ElementType.TYPE", @ImportedSimpleName = "TYPE", @ModuleImport = false, @PackageName = "java.lang.annotation.ElementType", @Static = true]
   +- ImportDeclaration[@ImportOnDemand = false, @ImportedName = "java.lang.annotation.ElementType", @ImportedSimpleName = "ElementType", @ModuleImport = false, @PackageName = "java.lang.annotation", @Static = false]
   +- ImportDeclaration[@ImportOnDemand = false, @ImportedName = "java.lang.annotation.Target", @ImportedSimpleName = "Target", @ModuleImport = false, @PackageName = "java.lang.annotation", @Static = false]
   +- ClassDeclaration[@Abstract = false, @Annotation = false, @Anonymous = false, @BinaryName = "PatternMatchingInstanceof", @CanonicalName = "PatternMatchingInstanceof", @EffectiveVisibility = Visibility.V_PUBLIC, @Enum = false, @Final = false, @Interface = false, @Local = false, @Nested = false, @PackageName = "", @Record = false, @RegularClass = true, @RegularInterface = false, @SimpleName = "PatternMatchingInstanceof", @Static = false, @TopLevel = true, @UnnamedToplevelClass = false, @Visibility = Visibility.V_PUBLIC]
      +- ModifierList[@EffectiveModifiers = (JModifier.PUBLIC), @ExplicitModifiers = (JModifier.PUBLIC)]
      +- ClassBody[@Empty = false, @Size = 5]
         +- FieldDeclaration[@EffectiveVisibility = Visibility.V_PRIVATE, @Static = false, @Visibility = Visibility.V_PRIVATE]
         |  +- ModifierList[@EffectiveModifiers = (JModifier.PRIVATE), @ExplicitModifiers = (JModifier.PRIVATE)]
         |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "String"]
         |  +- VariableDeclarator[@Initializer = true, @Name = "s"]
         |     +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_PRIVATE, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = true, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = false, @LambdaParameter = false, @LocalVariable = false, @Name = "s", @PatternBinding = false, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_PRIVATE]
         |     +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "other string", @Empty = false, @Image = "\"other string\"", @Length = 12, @LiteralText = "\"other string\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         +- MethodDeclaration[@Abstract = false, @Arity = 0, @EffectiveVisibility = Visibility.V_PUBLIC, @Final = false, @Name = "test", @Overridden = false, @Static = false, @Varargs = false, @Visibility = Visibility.V_PUBLIC, @Void = true]
         |  +- ModifierList[@EffectiveModifiers = (JModifier.PUBLIC), @ExplicitModifiers = (JModifier.PUBLIC)]
         |  +- VoidType[]
         |  +- FormalParameters[@Empty = true, @Size = 0]
         |  +- Block[@Empty = false, @Size = 8, @containsComment = false]
         |     +- LocalVariableDeclaration[@EffectiveVisibility = Visibility.V_LOCAL, @Final = false, @TypeInferred = false, @Visibility = Visibility.V_LOCAL]
         |     |  +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |     |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Object"]
         |     |  +- VariableDeclarator[@Initializer = true, @Name = "obj"]
         |     |     +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = false, @LambdaParameter = false, @LocalVariable = true, @Name = "obj", @PatternBinding = false, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_LOCAL]
         |     |     +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "abc", @Empty = false, @Image = "\"abc\"", @Length = 3, @LiteralText = "\"abc\"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |     +- IfStatement[@Else = true]
         |     |  +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.INSTANCEOF, @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |  +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "obj", @Name = "obj", @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |  +- PatternExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = 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 = 3, @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]
         |     |  |  |        +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.ADD, @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |  |           +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "a) obj == s: ", @Empty = false, @Image = "\"a) obj == s: \"", @Length = 13, @LiteralText = "\"a) obj == s: \"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |     |  |  |           +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.EQ, @ParenthesisDepth = 1, @Parenthesized = true]
         |     |  |  |              +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "obj", @Name = "obj", @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |  |              +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |  +- ExpressionStatement[]
         |     |  |  |  +- AssignmentExpression[@CompileTimeConstant = false, @Compound = false, @Operator = AssignmentOp.ASSIGN, @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |  |     +- VariableAccess[@AccessType = AccessType.WRITE, @CompileTimeConstant = false, @Image = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |  |     +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "other value", @Empty = false, @Image = "\"other value\"", @Length = 11, @LiteralText = "\"other value\"", @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]
         |     |  |           +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.ADD, @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |              +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.ADD, @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |              |  +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.ADD, @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |              |  |  +- StringLiteral[@CompileTimeConstant = true, @ConstValue = "changed s to ", @Empty = false, @Image = "\"changed s to \"", @Length = 13, @LiteralText = "\"changed s to \"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |     |  |              |  |  +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |              |  +- StringLiteral[@CompileTimeConstant = true, @ConstValue = ": obj == s: ", @Empty = false, @Image = "\": obj == s: \"", @Length = 12, @LiteralText = "\": obj == s: \"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |     |  |              +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.EQ, @ParenthesisDepth = 1, @Parenthesized = true]
         |     |  |                 +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "obj", @Name = "obj", @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |                 +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  +- Block[@Empty = false, @Size = 1, @containsComment = true]
         |     |     +- 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) obj == s: ", @Empty = false, @Image = "\"b) obj == s: \"", @Length = 13, @LiteralText = "\"b) obj == s: \"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |     |                 +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.EQ, @ParenthesisDepth = 1, @Parenthesized = true]
         |     |                    +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "obj", @Name = "obj", @ParenthesisDepth = 0, @Parenthesized = false]
         |     |                    +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false]
         |     +- IfStatement[@Else = true]
         |     |  +- UnaryExpression[@CompileTimeConstant = false, @Operator = UnaryOp.NEGATION, @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |  +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.INSTANCEOF, @ParenthesisDepth = 1, @Parenthesized = true]
         |     |  |     +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "obj", @Name = "obj", @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |     +- PatternExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = 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 = true]
         |     |  |  +- 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) obj == s: ", @Empty = false, @Image = "\"c) obj == s: \"", @Length = 13, @LiteralText = "\"c) obj == s: \"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |     |  |              +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.EQ, @ParenthesisDepth = 1, @Parenthesized = true]
         |     |  |                 +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "obj", @Name = "obj", @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |                 +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  +- Block[@Empty = false, @Size = 1, @containsComment = true]
         |     |     +- 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 = "d) obj == s: ", @Empty = false, @Image = "\"d) obj == s: \"", @Length = 13, @LiteralText = "\"d) obj == s: \"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |     |                 +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.EQ, @ParenthesisDepth = 1, @Parenthesized = true]
         |     |                    +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "obj", @Name = "obj", @ParenthesisDepth = 0, @Parenthesized = false]
         |     |                    +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false]
         |     +- IfStatement[@Else = false]
         |     |  +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.CONDITIONAL_AND, @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |  +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.INSTANCEOF, @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |  |  +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "obj", @Name = "obj", @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |  |  +- PatternExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = 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]
         |     |  |  +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.GT, @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |     +- 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]
         |     |  |     +- 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]
         |     |  +- Block[@Empty = false, @Size = 1, @containsComment = true]
         |     |     +- 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 = "e) obj == s: ", @Empty = false, @Image = "\"e) obj == s: \"", @Length = 13, @LiteralText = "\"e) obj == s: \"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |     |                 +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.EQ, @ParenthesisDepth = 1, @Parenthesized = true]
         |     |                    +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "obj", @Name = "obj", @ParenthesisDepth = 0, @Parenthesized = false]
         |     |                    +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false]
         |     +- IfStatement[@Else = false]
         |     |  +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.CONDITIONAL_OR, @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |  +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.INSTANCEOF, @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |  |  +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "obj", @Name = "obj", @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |  |  +- PatternExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = 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]
         |     |  |  +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.GT, @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |     +- 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]
         |     |  |     +- NumericLiteral[@Base = 10, @CompileTimeConstant = true, @DoubleLiteral = false, @FloatLiteral = false, @Image = "5", @IntLiteral = true, @Integral = true, @LiteralText = "5", @LongLiteral = false, @ParenthesisDepth = 0, @Parenthesized = false, @ValueAsDouble = 5.0, @ValueAsFloat = 5.0, @ValueAsInt = 5, @ValueAsLong = 5]
         |     |  +- Block[@Empty = false, @Size = 1, @containsComment = true]
         |     |     +- 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) obj == s: ", @Empty = false, @Image = "\"f) obj == s: \"", @Length = 13, @LiteralText = "\"f) obj == s: \"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |     |                 +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.EQ, @ParenthesisDepth = 1, @Parenthesized = true]
         |     |                    +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "obj", @Name = "obj", @ParenthesisDepth = 0, @Parenthesized = false]
         |     |                    +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false]
         |     +- IfStatement[@Else = true]
         |     |  +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.INSTANCEOF, @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |  +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "obj", @Name = "obj", @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |  +- PatternExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |     +- TypePattern[@EffectiveVisibility = Visibility.V_PACKAGE, @Visibility = Visibility.V_PACKAGE]
         |     |  |        +- ModifierList[@EffectiveModifiers = (JModifier.FINAL), @ExplicitModifiers = (JModifier.FINAL)]
         |     |  |        +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "String"]
         |     |  |        +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = true, @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 = true]
         |     |  |  +- 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 = "g) obj == s: ", @Empty = false, @Image = "\"g) obj == s: \"", @Length = 13, @LiteralText = "\"g) obj == s: \"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |     |  |              +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.EQ, @ParenthesisDepth = 1, @Parenthesized = true]
         |     |  |                 +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "obj", @Name = "obj", @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |                 +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  +- Block[@Empty = false, @Size = 1, @containsComment = true]
         |     |     +- 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 = "h) obj == s: ", @Empty = false, @Image = "\"h) obj == s: \"", @Length = 13, @LiteralText = "\"h) obj == s: \"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |     |                 +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.EQ, @ParenthesisDepth = 1, @Parenthesized = true]
         |     |                    +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "obj", @Name = "obj", @ParenthesisDepth = 0, @Parenthesized = false]
         |     |                    +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false]
         |     +- IfStatement[@Else = true]
         |     |  +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.INSTANCEOF, @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |  +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "obj", @Name = "obj", @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |  +- PatternExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |     +- TypePattern[@EffectiveVisibility = Visibility.V_PACKAGE, @Visibility = Visibility.V_PACKAGE]
         |     |  |        +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |     |  |        |  +- Annotation[@SimpleName = "Deprecated"]
         |     |  |        |     +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Deprecated"]
         |     |  |        +- 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 = true]
         |     |  |  +- 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 = "i) obj == s: ", @Empty = false, @Image = "\"i) obj == s: \"", @Length = 13, @LiteralText = "\"i) obj == s: \"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |     |  |              +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.EQ, @ParenthesisDepth = 1, @Parenthesized = true]
         |     |  |                 +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "obj", @Name = "obj", @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  |                 +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false]
         |     |  +- Block[@Empty = false, @Size = 1, @containsComment = true]
         |     |     +- 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 = "j) obj == s: ", @Empty = false, @Image = "\"j) obj == s: \"", @Length = 13, @LiteralText = "\"j) obj == s: \"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |     |                 +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.EQ, @ParenthesisDepth = 1, @Parenthesized = true]
         |     |                    +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "obj", @Name = "obj", @ParenthesisDepth = 0, @Parenthesized = false]
         |     |                    +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false]
         |     +- IfStatement[@Else = true]
         |        +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.INSTANCEOF, @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "obj", @Name = "obj", @ParenthesisDepth = 0, @Parenthesized = false]
         |        |  +- PatternExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false]
         |        |     +- TypePattern[@EffectiveVisibility = Visibility.V_PACKAGE, @Visibility = Visibility.V_PACKAGE]
         |        |        +- ModifierList[@EffectiveModifiers = (JModifier.FINAL), @ExplicitModifiers = (JModifier.FINAL)]
         |        |        |  +- Annotation[@SimpleName = "Deprecated"]
         |        |        |     +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Deprecated"]
         |        |        +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "String"]
         |        |        +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = true, @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 = true]
         |        |  +- 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 = "k) obj == s: ", @Empty = false, @Image = "\"k) obj == s: \"", @Length = 13, @LiteralText = "\"k) obj == s: \"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |        |              +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.EQ, @ParenthesisDepth = 1, @Parenthesized = true]
         |        |                 +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "obj", @Name = "obj", @ParenthesisDepth = 0, @Parenthesized = false]
         |        |                 +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false]
         |        +- Block[@Empty = false, @Size = 1, @containsComment = true]
         |           +- 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 = "l) obj == s: ", @Empty = false, @Image = "\"l) obj == s: \"", @Length = 13, @LiteralText = "\"l) obj == s: \"", @ParenthesisDepth = 0, @Parenthesized = false, @TextBlock = false]
         |                       +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.EQ, @ParenthesisDepth = 1, @Parenthesized = true]
         |                          +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "obj", @Name = "obj", @ParenthesisDepth = 0, @Parenthesized = false]
         |                          +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "s", @Name = "s", @ParenthesisDepth = 0, @Parenthesized = false]
         +- 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 = 1, @containsComment = false]
         |     +- ExpressionStatement[]
         |        +- MethodCall[@CompileTimeConstant = false, @Image = "test", @MethodName = "test", @ParenthesisDepth = 0, @Parenthesized = false]
         |           +- ConstructorCall[@AnonymousClass = false, @CompileTimeConstant = false, @DiamondTypeArgs = false, @MethodName = "new", @ParenthesisDepth = 0, @Parenthesized = false, @QualifiedInstanceCreation = false]
         |           |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "PatternMatchingInstanceof"]
         |           |  +- ArgumentList[@Empty = true, @Size = 0]
         |           +- ArgumentList[@Empty = true, @Size = 0]
         +- ClassDeclaration[@Abstract = false, @Annotation = false, @Anonymous = false, @BinaryName = "PatternMatchingInstanceof$Foo", @CanonicalName = "PatternMatchingInstanceof.Foo", @EffectiveVisibility = Visibility.V_PACKAGE, @Enum = false, @Final = false, @Interface = false, @Local = false, @Nested = true, @PackageName = "", @Record = false, @RegularClass = true, @RegularInterface = false, @SimpleName = "Foo", @Static = false, @TopLevel = false, @UnnamedToplevelClass = false, @Visibility = Visibility.V_PACKAGE]
         |  +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |  +- ClassBody[@Empty = false, @Size = 1]
         |     +- Initializer[@Static = false]
         |        +- Block[@Empty = false, @Size = 2, @containsComment = false]
         |           +- LocalVariableDeclaration[@EffectiveVisibility = Visibility.V_LOCAL, @Final = false, @TypeInferred = false, @Visibility = Visibility.V_LOCAL]
         |           |  +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |           |  +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Object"]
         |           |  +- VariableDeclarator[@Initializer = true, @Name = "f"]
         |           |     +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = false, @LambdaParameter = false, @LocalVariable = true, @Name = "f", @PatternBinding = false, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_LOCAL]
         |           |     +- NullLiteral[@CompileTimeConstant = false, @LiteralText = "null", @ParenthesisDepth = 0, @Parenthesized = false]
         |           +- LocalVariableDeclaration[@EffectiveVisibility = Visibility.V_LOCAL, @Final = false, @TypeInferred = false, @Visibility = Visibility.V_LOCAL]
         |              +- ModifierList[@EffectiveModifiers = (), @ExplicitModifiers = ()]
         |              +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Object"]
         |              +- VariableDeclarator[@Initializer = true, @Name = "o"]
         |                 +- VariableId[@ArrayType = false, @EffectiveVisibility = Visibility.V_LOCAL, @EnumConstant = false, @ExceptionBlockParameter = false, @Field = false, @Final = false, @ForLoopVariable = false, @ForeachVariable = false, @FormalParameter = false, @LambdaParameter = false, @LocalVariable = true, @Name = "o", @PatternBinding = false, @RecordComponent = false, @ResourceDeclaration = false, @Static = false, @TypeInferred = false, @Unnamed = false, @Visibility = Visibility.V_LOCAL]
         |                 +- InfixExpression[@CompileTimeConstant = false, @Operator = BinaryOp.INSTANCEOF, @ParenthesisDepth = 0, @Parenthesized = false]
         |                    +- VariableAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "f", @Name = "f", @ParenthesisDepth = 0, @Parenthesized = false]
         |                    +- TypeExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false]
         |                       +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Foo"]
         |                          +- Annotation[@SimpleName = "Nullable"]
         |                             +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Nullable"]
         +- AnnotationTypeDeclaration[@Abstract = true, @Annotation = true, @Anonymous = false, @BinaryName = "PatternMatchingInstanceof$Nullable", @CanonicalName = "PatternMatchingInstanceof.Nullable", @EffectiveVisibility = Visibility.V_PACKAGE, @Enum = false, @Final = false, @Interface = true, @Local = false, @Nested = true, @PackageName = "", @Record = false, @RegularClass = false, @RegularInterface = false, @SimpleName = "Nullable", @Static = true, @TopLevel = false, @UnnamedToplevelClass = false, @Visibility = Visibility.V_PACKAGE]
            +- ModifierList[@EffectiveModifiers = (JModifier.ABSTRACT, JModifier.STATIC), @ExplicitModifiers = ()]
            |  +- Annotation[@SimpleName = "Target"]
            |     +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "Target"]
            |     +- AnnotationMemberList[@Empty = false, @Size = 1]
            |        +- MemberValuePair[@Image = "value", @Name = "value", @Shorthand = false]
            |           +- FieldAccess[@AccessType = AccessType.READ, @CompileTimeConstant = false, @Image = "TYPE_USE", @Name = "TYPE_USE", @ParenthesisDepth = 0, @Parenthesized = false]
            |              +- TypeExpression[@CompileTimeConstant = false, @ParenthesisDepth = 0, @Parenthesized = false]
            |                 +- ClassType[@FullyQualified = false, @PackageQualifier = null, @SimpleName = "ElementType"]
            +- AnnotationTypeBody[@Empty = true, @Size = 0]
