PsiJavaFile:TypeAnnotations.java
  PsiImportList
    PsiImportStatement
      PsiKeyword:import('import')
      PsiWhiteSpace(' ')
      PsiJavaCodeReferenceElement:java.util.@NotAllowed Date
        PsiJavaCodeReferenceElement:java.util
          PsiJavaCodeReferenceElement:java
            PsiIdentifier:java('java')
            PsiReferenceParameterList
              <empty list>
          PsiJavaToken:DOT('.')
          PsiIdentifier:util('util')
          PsiReferenceParameterList
            <empty list>
        PsiJavaToken:DOT('.')
        PsiAnnotation
          PsiJavaToken:AT('@')
          PsiJavaCodeReferenceElement:NotAllowed
            PsiIdentifier:NotAllowed('NotAllowed')
            PsiReferenceParameterList
              <empty list>
          PsiAnnotationParameterList
            <empty list>
        PsiWhiteSpace(' ')
        PsiIdentifier:Date('Date')
        PsiReferenceParameterList
          <empty list>
      PsiJavaToken:SEMICOLON(';')
      PsiWhiteSpace('      ')
      PsiComment(END_OF_LINE_COMMENT)('// illegal')
    PsiWhiteSpace('\n')
    PsiImportStatement
      PsiKeyword:import('import')
      PsiWhiteSpace(' ')
      PsiJavaCodeReferenceElement:@IllegalSyntax java.util.Date
        PsiJavaCodeReferenceElement:@IllegalSyntax java.util
          PsiJavaCodeReferenceElement:@IllegalSyntax java
            PsiAnnotation
              PsiJavaToken:AT('@')
              PsiJavaCodeReferenceElement:IllegalSyntax
                PsiIdentifier:IllegalSyntax('IllegalSyntax')
                PsiReferenceParameterList
                  <empty list>
              PsiAnnotationParameterList
                <empty list>
            PsiWhiteSpace(' ')
            PsiIdentifier:java('java')
            PsiReferenceParameterList
              <empty list>
          PsiJavaToken:DOT('.')
          PsiIdentifier:util('util')
          PsiReferenceParameterList
            <empty list>
        PsiJavaToken:DOT('.')
        PsiIdentifier:Date('Date')
        PsiReferenceParameterList
          <empty list>
      PsiJavaToken:SEMICOLON(';')
      PsiWhiteSpace('   ')
      PsiComment(END_OF_LINE_COMMENT)('// illegal')
  PsiWhiteSpace('\n\n')
  PsiClass:SpecSamples
    PsiModifierList:
      <empty list>
    PsiKeyword:class('class')
    PsiWhiteSpace(' ')
    PsiIdentifier:SpecSamples('SpecSamples')
    PsiTypeParameterList
      <empty list>
    PsiReferenceList
      <empty list>
    PsiReferenceList
      <empty list>
    PsiWhiteSpace(' ')
    PsiJavaToken:LBRACE('{')
    PsiWhiteSpace('\n\n  ')
    PsiComment(END_OF_LINE_COMMENT)('//')
    PsiWhiteSpace('\n  ')
    PsiComment(END_OF_LINE_COMMENT)('// 1. A type annotation appears before the type’s simple name ...')
    PsiWhiteSpace('\n  ')
    PsiComment(END_OF_LINE_COMMENT)('//')
    PsiWhiteSpace('\n\n  ')
    PsiField:files
      PsiModifierList:
        <empty list>
      PsiTypeElement:Map<@NonNull String, @NonEmpty List<@Readonly Document>>
        PsiJavaCodeReferenceElement:Map<@NonNull String, @NonEmpty List<@Readonly Document>>
          PsiIdentifier:Map('Map')
          PsiReferenceParameterList
            PsiJavaToken:LT('<')
            PsiTypeElement:@NonNull String
              PsiAnnotation
                PsiJavaToken:AT('@')
                PsiJavaCodeReferenceElement:NonNull
                  PsiIdentifier:NonNull('NonNull')
                  PsiReferenceParameterList
                    <empty list>
                PsiAnnotationParameterList
                  <empty list>
              PsiWhiteSpace(' ')
              PsiJavaCodeReferenceElement:String
                PsiIdentifier:String('String')
                PsiReferenceParameterList
                  <empty list>
            PsiJavaToken:COMMA(',')
            PsiWhiteSpace(' ')
            PsiTypeElement:@NonEmpty List<@Readonly Document>
              PsiAnnotation
                PsiJavaToken:AT('@')
                PsiJavaCodeReferenceElement:NonEmpty
                  PsiIdentifier:NonEmpty('NonEmpty')
                  PsiReferenceParameterList
                    <empty list>
                PsiAnnotationParameterList
                  <empty list>
              PsiWhiteSpace(' ')
              PsiJavaCodeReferenceElement:List<@Readonly Document>
                PsiIdentifier:List('List')
                PsiReferenceParameterList
                  PsiJavaToken:LT('<')
                  PsiTypeElement:@Readonly Document
                    PsiAnnotation
                      PsiJavaToken:AT('@')
                      PsiJavaCodeReferenceElement:Readonly
                        PsiIdentifier:Readonly('Readonly')
                        PsiReferenceParameterList
                          <empty list>
                      PsiAnnotationParameterList
                        <empty list>
                    PsiWhiteSpace(' ')
                    PsiJavaCodeReferenceElement:Document
                      PsiIdentifier:Document('Document')
                      PsiReferenceParameterList
                        <empty list>
                  PsiJavaToken:GT('>')
            PsiJavaToken:GT('>')
      PsiWhiteSpace(' ')
      PsiIdentifier:files('files')
      PsiJavaToken:SEMICOLON(';')
    PsiWhiteSpace('\n\n  ')
    PsiClassInitializer
      PsiModifierList:
        <empty list>
      PsiCodeBlock
        PsiJavaToken:LBRACE('{')
        PsiWhiteSpace(' ')
        PsiExpressionStatement
          PsiMethodCallExpression:o.<@NonNull String>m("...")
            PsiReferenceExpression:o.<@NonNull String>m
              PsiReferenceExpression:o
                PsiReferenceParameterList
                  <empty list>
                PsiIdentifier:o('o')
              PsiJavaToken:DOT('.')
              PsiReferenceParameterList
                PsiJavaToken:LT('<')
                PsiTypeElement:@NonNull String
                  PsiAnnotation
                    PsiJavaToken:AT('@')
                    PsiJavaCodeReferenceElement:NonNull
                      PsiIdentifier:NonNull('NonNull')
                      PsiReferenceParameterList
                        <empty list>
                    PsiAnnotationParameterList
                      <empty list>
                  PsiWhiteSpace(' ')
                  PsiJavaCodeReferenceElement:String
                    PsiIdentifier:String('String')
                    PsiReferenceParameterList
                      <empty list>
                PsiJavaToken:GT('>')
              PsiIdentifier:m('m')
            PsiExpressionList
              PsiJavaToken:LPARENTH('(')
              PsiLiteralExpression:"..."
                PsiJavaToken:STRING_LITERAL('"..."')
              PsiJavaToken:RPARENTH(')')
          PsiJavaToken:SEMICOLON(';')
        PsiWhiteSpace(' ')
        PsiJavaToken:RBRACE('}')
    PsiWhiteSpace('\n\n  ')
    PsiClass:Folder
      PsiModifierList:
        <empty list>
      PsiKeyword:class('class')
      PsiWhiteSpace(' ')
      PsiIdentifier:Folder('Folder')
      PsiTypeParameterList
        PsiJavaToken:LT('<')
        PsiTypeParameter:F
          PsiIdentifier:F('F')
          PsiWhiteSpace(' ')
          PsiElement(EXTENDS_BOUND_LIST)
            PsiKeyword:extends('extends')
            PsiWhiteSpace(' ')
            PsiJavaCodeReferenceElement:@Existing File
              PsiAnnotation
                PsiJavaToken:AT('@')
                PsiJavaCodeReferenceElement:Existing
                  PsiIdentifier:Existing('Existing')
                  PsiReferenceParameterList
                    <empty list>
                PsiAnnotationParameterList
                  <empty list>
              PsiWhiteSpace(' ')
              PsiIdentifier:File('File')
              PsiReferenceParameterList
                <empty list>
        PsiJavaToken:GT('>')
      PsiReferenceList
        <empty list>
      PsiReferenceList
        <empty list>
      PsiWhiteSpace(' ')
      PsiJavaToken:LBRACE('{')
      PsiWhiteSpace(' ')
      PsiJavaToken:RBRACE('}')
    PsiWhiteSpace('\n\n  ')
    PsiField:files
      PsiModifierList:
        <empty list>
      PsiTypeElement:Collection<? super @Existing File>
        PsiJavaCodeReferenceElement:Collection<? super @Existing File>
          PsiIdentifier:Collection('Collection')
          PsiReferenceParameterList
            PsiJavaToken:LT('<')
            PsiTypeElement:? super @Existing File
              PsiJavaToken:QUEST('?')
              PsiWhiteSpace(' ')
              PsiKeyword:super('super')
              PsiWhiteSpace(' ')
              PsiTypeElement:@Existing File
                PsiAnnotation
                  PsiJavaToken:AT('@')
                  PsiJavaCodeReferenceElement:Existing
                    PsiIdentifier:Existing('Existing')
                    PsiReferenceParameterList
                      <empty list>
                  PsiAnnotationParameterList
                    <empty list>
                PsiWhiteSpace(' ')
                PsiJavaCodeReferenceElement:File
                  PsiIdentifier:File('File')
                  PsiReferenceParameterList
                    <empty list>
            PsiJavaToken:GT('>')
      PsiWhiteSpace(' ')
      PsiIdentifier:files('files')
      PsiJavaToken:SEMICOLON(';')
    PsiWhiteSpace('\n\n  ')
    PsiClass:UnmodifiableList
      PsiModifierList:
        <empty list>
      PsiKeyword:class('class')
      PsiWhiteSpace(' ')
      PsiIdentifier:UnmodifiableList('UnmodifiableList')
      PsiTypeParameterList
        PsiJavaToken:LT('<')
        PsiTypeParameter:T
          PsiIdentifier:T('T')
          PsiElement(EXTENDS_BOUND_LIST)
            <empty list>
        PsiJavaToken:GT('>')
      PsiReferenceList
        <empty list>
      PsiWhiteSpace(' ')
      PsiReferenceList
        PsiKeyword:implements('implements')
        PsiWhiteSpace(' ')
        PsiJavaCodeReferenceElement:@Readonly List<@Readonly T>
          PsiAnnotation
            PsiJavaToken:AT('@')
            PsiJavaCodeReferenceElement:Readonly
              PsiIdentifier:Readonly('Readonly')
              PsiReferenceParameterList
                <empty list>
            PsiAnnotationParameterList
              <empty list>
          PsiWhiteSpace(' ')
          PsiIdentifier:List('List')
          PsiReferenceParameterList
            PsiJavaToken:LT('<')
            PsiTypeElement:@Readonly T
              PsiAnnotation
                PsiJavaToken:AT('@')
                PsiJavaCodeReferenceElement:Readonly
                  PsiIdentifier:Readonly('Readonly')
                  PsiReferenceParameterList
                    <empty list>
                PsiAnnotationParameterList
                  <empty list>
              PsiWhiteSpace(' ')
              PsiJavaCodeReferenceElement:T
                PsiIdentifier:T('T')
                PsiReferenceParameterList
                  <empty list>
            PsiJavaToken:GT('>')
      PsiWhiteSpace(' ')
      PsiJavaToken:LBRACE('{')
      PsiWhiteSpace(' ')
      PsiJavaToken:RBRACE('}')
    PsiWhiteSpace('\n\n  ')
    PsiMethod:monitorTemperature
      PsiModifierList:
        <empty list>
      PsiTypeParameterList
        <empty list>
      PsiTypeElement:void
        PsiKeyword:void('void')
      PsiWhiteSpace(' ')
      PsiIdentifier:monitorTemperature('monitorTemperature')
      PsiParameterList:()
        PsiJavaToken:LPARENTH('(')
        PsiJavaToken:RPARENTH(')')
      PsiWhiteSpace(' ')
      PsiReferenceList
        PsiKeyword:throws('throws')
        PsiWhiteSpace(' ')
        PsiJavaCodeReferenceElement:@Critical TemperatureException
          PsiAnnotation
            PsiJavaToken:AT('@')
            PsiJavaCodeReferenceElement:Critical
              PsiIdentifier:Critical('Critical')
              PsiReferenceParameterList
                <empty list>
            PsiAnnotationParameterList
              <empty list>
          PsiWhiteSpace(' ')
          PsiIdentifier:TemperatureException('TemperatureException')
          PsiReferenceParameterList
            <empty list>
      PsiWhiteSpace(' ')
      PsiCodeBlock
        PsiJavaToken:LBRACE('{')
        PsiWhiteSpace(' ')
        PsiJavaToken:RBRACE('}')
    PsiWhiteSpace('\n\n  ')
    PsiClassInitializer
      PsiModifierList:
        <empty list>
      PsiCodeBlock
        PsiJavaToken:LBRACE('{')
        PsiWhiteSpace('\n    ')
        PsiExpressionStatement
          PsiNewExpression:new @Interned MyObject()
            PsiKeyword:new('new')
            PsiReferenceParameterList
              <empty list>
            PsiWhiteSpace(' ')
            PsiJavaCodeReferenceElement:@Interned MyObject
              PsiAnnotation
                PsiJavaToken:AT('@')
                PsiJavaCodeReferenceElement:Interned
                  PsiIdentifier:Interned('Interned')
                  PsiReferenceParameterList
                    <empty list>
                PsiAnnotationParameterList
                  <empty list>
              PsiWhiteSpace(' ')
              PsiIdentifier:MyObject('MyObject')
              PsiReferenceParameterList
                <empty list>
            PsiExpressionList
              PsiJavaToken:LPARENTH('(')
              PsiJavaToken:RPARENTH(')')
          PsiJavaToken:SEMICOLON(';')
        PsiWhiteSpace('\n    ')
        PsiExpressionStatement
          PsiNewExpression:new @NonEmpty @Readonly List<String>(myNonEmptyStringSet)
            PsiKeyword:new('new')
            PsiReferenceParameterList
              <empty list>
            PsiWhiteSpace(' ')
            PsiJavaCodeReferenceElement:@NonEmpty @Readonly List<String>
              PsiAnnotation
                PsiJavaToken:AT('@')
                PsiJavaCodeReferenceElement:NonEmpty
                  PsiIdentifier:NonEmpty('NonEmpty')
                  PsiReferenceParameterList
                    <empty list>
                PsiAnnotationParameterList
                  <empty list>
              PsiWhiteSpace(' ')
              PsiAnnotation
                PsiJavaToken:AT('@')
                PsiJavaCodeReferenceElement:Readonly
                  PsiIdentifier:Readonly('Readonly')
                  PsiReferenceParameterList
                    <empty list>
                PsiAnnotationParameterList
                  <empty list>
              PsiWhiteSpace(' ')
              PsiIdentifier:List('List')
              PsiReferenceParameterList
                PsiJavaToken:LT('<')
                PsiTypeElement:String
                  PsiJavaCodeReferenceElement:String
                    PsiIdentifier:String('String')
                    PsiReferenceParameterList
                      <empty list>
                PsiJavaToken:GT('>')
            PsiExpressionList
              PsiJavaToken:LPARENTH('(')
              PsiReferenceExpression:myNonEmptyStringSet
                PsiReferenceParameterList
                  <empty list>
                PsiIdentifier:myNonEmptyStringSet('myNonEmptyStringSet')
              PsiJavaToken:RPARENTH(')')
          PsiJavaToken:SEMICOLON(';')
        PsiWhiteSpace('\n    ')
        PsiExpressionStatement
          PsiNewExpression:myVar.new @Tainted NestedClass()
            PsiReferenceExpression:myVar
              PsiReferenceParameterList
                <empty list>
              PsiIdentifier:myVar('myVar')
            PsiJavaToken:DOT('.')
            PsiKeyword:new('new')
            PsiReferenceParameterList
              <empty list>
            PsiWhiteSpace(' ')
            PsiJavaCodeReferenceElement:@Tainted NestedClass
              PsiAnnotation
                PsiJavaToken:AT('@')
                PsiJavaCodeReferenceElement:Tainted
                  PsiIdentifier:Tainted('Tainted')
                  PsiReferenceParameterList
                    <empty list>
                PsiAnnotationParameterList
                  <empty list>
              PsiWhiteSpace(' ')
              PsiIdentifier:NestedClass('NestedClass')
              PsiReferenceParameterList
                <empty list>
            PsiExpressionList
              PsiJavaToken:LPARENTH('(')
              PsiJavaToken:RPARENTH(')')
          PsiJavaToken:SEMICOLON(';')
        PsiWhiteSpace('\n\n    ')
        PsiExpressionStatement
          PsiNewExpression:new <String> @Interned MyObject()
            PsiKeyword:new('new')
            PsiWhiteSpace(' ')
            PsiReferenceParameterList
              PsiJavaToken:LT('<')
              PsiTypeElement:String
                PsiJavaCodeReferenceElement:String
                  PsiIdentifier:String('String')
                  PsiReferenceParameterList
                    <empty list>
              PsiJavaToken:GT('>')
            PsiWhiteSpace(' ')
            PsiJavaCodeReferenceElement:@Interned MyObject
              PsiAnnotation
                PsiJavaToken:AT('@')
                PsiJavaCodeReferenceElement:Interned
                  PsiIdentifier:Interned('Interned')
                  PsiReferenceParameterList
                    <empty list>
                PsiAnnotationParameterList
                  <empty list>
              PsiWhiteSpace(' ')
              PsiIdentifier:MyObject('MyObject')
              PsiReferenceParameterList
                <empty list>
            PsiExpressionList
              PsiJavaToken:LPARENTH('(')
              PsiJavaToken:RPARENTH(')')
          PsiJavaToken:SEMICOLON(';')
        PsiWhiteSpace('\n\n    ')
        PsiDeclarationStatement
          PsiLocalVariable:ee
            PsiModifierList:
              <empty list>
            PsiTypeElement:Map.@NonNull Entry
              PsiJavaCodeReferenceElement:Map.@NonNull Entry
                PsiJavaCodeReferenceElement:Map
                  PsiIdentifier:Map('Map')
                  PsiReferenceParameterList
                    <empty list>
                PsiJavaToken:DOT('.')
                PsiAnnotation
                  PsiJavaToken:AT('@')
                  PsiJavaCodeReferenceElement:NonNull
                    PsiIdentifier:NonNull('NonNull')
                    PsiReferenceParameterList
                      <empty list>
                  PsiAnnotationParameterList
                    <empty list>
                PsiWhiteSpace(' ')
                PsiIdentifier:Entry('Entry')
                PsiReferenceParameterList
                  <empty list>
            PsiWhiteSpace(' ')
            PsiIdentifier:ee('ee')
            PsiJavaToken:SEMICOLON(';')
        PsiWhiteSpace('\n\n    ')
        PsiExpressionStatement
          PsiAssignmentExpression:myString = (@NonNull String) myObject
            PsiReferenceExpression:myString
              PsiReferenceParameterList
                <empty list>
              PsiIdentifier:myString('myString')
            PsiWhiteSpace(' ')
            PsiJavaToken:EQ('=')
            PsiWhiteSpace(' ')
            PsiTypeCastExpression:(@NonNull String) myObject
              PsiJavaToken:LPARENTH('(')
              PsiTypeElement:@NonNull String
                PsiAnnotation
                  PsiJavaToken:AT('@')
                  PsiJavaCodeReferenceElement:NonNull
                    PsiIdentifier:NonNull('NonNull')
                    PsiReferenceParameterList
                      <empty list>
                  PsiAnnotationParameterList
                    <empty list>
                PsiWhiteSpace(' ')
                PsiJavaCodeReferenceElement:String
                  PsiIdentifier:String('String')
                  PsiReferenceParameterList
                    <empty list>
              PsiJavaToken:RPARENTH(')')
              PsiWhiteSpace(' ')
              PsiReferenceExpression:myObject
                PsiReferenceParameterList
                  <empty list>
                PsiIdentifier:myObject('myObject')
          PsiJavaToken:SEMICOLON(';')
        PsiWhiteSpace('\n    ')
        PsiExpressionStatement
          PsiAssignmentExpression:myString = (@NonNull) myObject
            PsiReferenceExpression:myString
              PsiReferenceParameterList
                <empty list>
              PsiIdentifier:myString('myString')
            PsiWhiteSpace(' ')
            PsiJavaToken:EQ('=')
            PsiWhiteSpace(' ')
            PsiTypeCastExpression:(@NonNull) myObject
              PsiJavaToken:LPARENTH('(')
              PsiAnnotation
                PsiJavaToken:AT('@')
                PsiJavaCodeReferenceElement:NonNull
                  PsiIdentifier:NonNull('NonNull')
                  PsiReferenceParameterList
                    <empty list>
                PsiAnnotationParameterList
                  <empty list>
              PsiErrorElement:Type expected
                <empty list>
              PsiJavaToken:RPARENTH(')')
              PsiWhiteSpace(' ')
              PsiReferenceExpression:myObject
                PsiReferenceParameterList
                  <empty list>
                PsiIdentifier:myObject('myObject')
          PsiJavaToken:SEMICOLON(';')
          PsiWhiteSpace(' ')
          PsiComment(END_OF_LINE_COMMENT)('// error: type omitted')
        PsiWhiteSpace('\n\n    ')
        PsiExpressionStatement
          PsiAssignmentExpression:isNonNull = myString instanceof @NonNull String
            PsiReferenceExpression:isNonNull
              PsiReferenceParameterList
                <empty list>
              PsiIdentifier:isNonNull('isNonNull')
            PsiWhiteSpace(' ')
            PsiJavaToken:EQ('=')
            PsiWhiteSpace(' ')
            PsiInstanceofExpression:myString instanceof @NonNull String
              PsiReferenceExpression:myString
                PsiReferenceParameterList
                  <empty list>
                PsiIdentifier:myString('myString')
              PsiWhiteSpace(' ')
              PsiKeyword:instanceof('instanceof')
              PsiWhiteSpace(' ')
              PsiTypeElement:@NonNull String
                PsiAnnotation
                  PsiJavaToken:AT('@')
                  PsiJavaCodeReferenceElement:NonNull
                    PsiIdentifier:NonNull('NonNull')
                    PsiReferenceParameterList
                      <empty list>
                  PsiAnnotationParameterList
                    <empty list>
                PsiWhiteSpace(' ')
                PsiJavaCodeReferenceElement:String
                  PsiIdentifier:String('String')
                  PsiReferenceParameterList
                    <empty list>
          PsiJavaToken:SEMICOLON(';')
        PsiWhiteSpace('\n    ')
        PsiExpressionStatement
          PsiAssignmentExpression:isNonNull = myString instanceof @NonNull
            PsiReferenceExpression:isNonNull
              PsiReferenceParameterList
                <empty list>
              PsiIdentifier:isNonNull('isNonNull')
            PsiWhiteSpace(' ')
            PsiJavaToken:EQ('=')
            PsiWhiteSpace(' ')
            PsiInstanceofExpression:myString instanceof @NonNull
              PsiReferenceExpression:myString
                PsiReferenceParameterList
                  <empty list>
                PsiIdentifier:myString('myString')
              PsiWhiteSpace(' ')
              PsiKeyword:instanceof('instanceof')
              PsiWhiteSpace(' ')
              PsiAnnotation
                PsiJavaToken:AT('@')
                PsiJavaCodeReferenceElement:NonNull
                  PsiIdentifier:NonNull('NonNull')
                  PsiReferenceParameterList
                    <empty list>
                PsiAnnotationParameterList
                  <empty list>
              PsiErrorElement:Type expected
                <empty list>
          PsiJavaToken:SEMICOLON(';')
          PsiWhiteSpace(' ')
          PsiComment(END_OF_LINE_COMMENT)('// error: type omitted')
        PsiWhiteSpace('\n\n    ')
        PsiExpressionStatement
          PsiMethodCallExpression:m(@Vernal Date::getDay)
            PsiReferenceExpression:m
              PsiReferenceParameterList
                <empty list>
              PsiIdentifier:m('m')
            PsiExpressionList
              PsiJavaToken:LPARENTH('(')
              PsiMethodReferenceExpression:@Vernal Date::getDay
                PsiReferenceExpression:@Vernal Date
                  PsiReferenceParameterList
                    <empty list>
                  PsiAnnotation
                    PsiJavaToken:AT('@')
                    PsiJavaCodeReferenceElement:Vernal
                      PsiIdentifier:Vernal('Vernal')
                      PsiReferenceParameterList
                        <empty list>
                    PsiAnnotationParameterList
                      <empty list>
                  PsiWhiteSpace(' ')
                  PsiIdentifier:Date('Date')
                PsiJavaToken:DOUBLE_COLON('::')
                PsiReferenceParameterList
                  <empty list>
                PsiIdentifier:getDay('getDay')
              PsiJavaToken:RPARENTH(')')
          PsiJavaToken:SEMICOLON(';')
        PsiWhiteSpace('\n    ')
        PsiExpressionStatement
          PsiMethodCallExpression:m(@IllegalAnnotation java.util.@Vernal Date::getDay)
            PsiReferenceExpression:m
              PsiReferenceParameterList
                <empty list>
              PsiIdentifier:m('m')
            PsiExpressionList
              PsiJavaToken:LPARENTH('(')
              PsiMethodReferenceExpression:@IllegalAnnotation java.util.@Vernal Date::getDay
                PsiReferenceExpression:@IllegalAnnotation java.util.@Vernal Date
                  PsiReferenceExpression:@IllegalAnnotation java.util
                    PsiReferenceExpression:@IllegalAnnotation java
                      PsiReferenceParameterList
                        <empty list>
                      PsiAnnotation
                        PsiJavaToken:AT('@')
                        PsiJavaCodeReferenceElement:IllegalAnnotation
                          PsiIdentifier:IllegalAnnotation('IllegalAnnotation')
                          PsiReferenceParameterList
                            <empty list>
                        PsiAnnotationParameterList
                          <empty list>
                      PsiWhiteSpace(' ')
                      PsiIdentifier:java('java')
                    PsiJavaToken:DOT('.')
                    PsiReferenceParameterList
                      <empty list>
                    PsiIdentifier:util('util')
                  PsiJavaToken:DOT('.')
                  PsiAnnotation
                    PsiJavaToken:AT('@')
                    PsiJavaCodeReferenceElement:Vernal
                      PsiIdentifier:Vernal('Vernal')
                      PsiReferenceParameterList
                        <empty list>
                    PsiAnnotationParameterList
                      <empty list>
                  PsiReferenceParameterList
                    <empty list>
                  PsiWhiteSpace(' ')
                  PsiIdentifier:Date('Date')
                PsiJavaToken:DOUBLE_COLON('::')
                PsiReferenceParameterList
                  <empty list>
                PsiIdentifier:getDay('getDay')
              PsiJavaToken:RPARENTH(')')
          PsiJavaToken:SEMICOLON(';')
        PsiWhiteSpace('\n    ')
        PsiExpressionStatement
          PsiMethodCallExpression:m(List<@English String>::size)
            PsiReferenceExpression:m
              PsiReferenceParameterList
                <empty list>
              PsiIdentifier:m('m')
            PsiExpressionList
              PsiJavaToken:LPARENTH('(')
              PsiMethodReferenceExpression:List<@English String>::size
                PsiTypeElement:List<@English String>
                  PsiJavaCodeReferenceElement:List<@English String>
                    PsiIdentifier:List('List')
                    PsiReferenceParameterList
                      PsiJavaToken:LT('<')
                      PsiTypeElement:@English String
                        PsiAnnotation
                          PsiJavaToken:AT('@')
                          PsiJavaCodeReferenceElement:English
                            PsiIdentifier:English('English')
                            PsiReferenceParameterList
                              <empty list>
                          PsiAnnotationParameterList
                            <empty list>
                        PsiWhiteSpace(' ')
                        PsiJavaCodeReferenceElement:String
                          PsiIdentifier:String('String')
                          PsiReferenceParameterList
                            <empty list>
                      PsiJavaToken:GT('>')
                PsiJavaToken:DOUBLE_COLON('::')
                PsiReferenceParameterList
                  <empty list>
                PsiIdentifier:size('size')
              PsiJavaToken:RPARENTH(')')
          PsiJavaToken:SEMICOLON(';')
        PsiWhiteSpace('\n    ')
        PsiExpressionStatement
          PsiMethodCallExpression:m(Arrays::<@NonNegative Integer>sort)
            PsiReferenceExpression:m
              PsiReferenceParameterList
                <empty list>
              PsiIdentifier:m('m')
            PsiExpressionList
              PsiJavaToken:LPARENTH('(')
              PsiMethodReferenceExpression:Arrays::<@NonNegative Integer>sort
                PsiReferenceExpression:Arrays
                  PsiReferenceParameterList
                    <empty list>
                  PsiIdentifier:Arrays('Arrays')
                PsiJavaToken:DOUBLE_COLON('::')
                PsiReferenceParameterList
                  PsiJavaToken:LT('<')
                  PsiTypeElement:@NonNegative Integer
                    PsiAnnotation
                      PsiJavaToken:AT('@')
                      PsiJavaCodeReferenceElement:NonNegative
                        PsiIdentifier:NonNegative('NonNegative')
                        PsiReferenceParameterList
                          <empty list>
                      PsiAnnotationParameterList
                        <empty list>
                    PsiWhiteSpace(' ')
                    PsiJavaCodeReferenceElement:Integer
                      PsiIdentifier:Integer('Integer')
                      PsiReferenceParameterList
                        <empty list>
                  PsiJavaToken:GT('>')
                PsiIdentifier:sort('sort')
              PsiJavaToken:RPARENTH(')')
          PsiJavaToken:SEMICOLON(';')
        PsiWhiteSpace('\n\n    ')
        PsiExpressionStatement
          PsiMethodCallExpression:m((@TA Object x, @TB Object y) -> { System.out.println("x=" + x + " y=" + y); })
            PsiReferenceExpression:m
              PsiReferenceParameterList
                <empty list>
              PsiIdentifier:m('m')
            PsiExpressionList
              PsiJavaToken:LPARENTH('(')
              PsiLambdaExpression:(@TA Object x, @TB Object y) -> { System.out.println("x=" + x + " y=" + y); }
                PsiParameterList:(@TA Object x, @TB Object y)
                  PsiJavaToken:LPARENTH('(')
                  PsiParameter:x
                    PsiModifierList:@TA
                      PsiAnnotation
                        PsiJavaToken:AT('@')
                        PsiJavaCodeReferenceElement:TA
                          PsiIdentifier:TA('TA')
                          PsiReferenceParameterList
                            <empty list>
                        PsiAnnotationParameterList
                          <empty list>
                    PsiWhiteSpace(' ')
                    PsiTypeElement:Object
                      PsiJavaCodeReferenceElement:Object
                        PsiIdentifier:Object('Object')
                        PsiReferenceParameterList
                          <empty list>
                    PsiWhiteSpace(' ')
                    PsiIdentifier:x('x')
                  PsiJavaToken:COMMA(',')
                  PsiWhiteSpace(' ')
                  PsiParameter:y
                    PsiModifierList:@TB
                      PsiAnnotation
                        PsiJavaToken:AT('@')
                        PsiJavaCodeReferenceElement:TB
                          PsiIdentifier:TB('TB')
                          PsiReferenceParameterList
                            <empty list>
                        PsiAnnotationParameterList
                          <empty list>
                    PsiWhiteSpace(' ')
                    PsiTypeElement:Object
                      PsiJavaCodeReferenceElement:Object
                        PsiIdentifier:Object('Object')
                        PsiReferenceParameterList
                          <empty list>
                    PsiWhiteSpace(' ')
                    PsiIdentifier:y('y')
                  PsiJavaToken:RPARENTH(')')
                PsiWhiteSpace(' ')
                PsiJavaToken:ARROW('->')
                PsiWhiteSpace(' ')
                PsiCodeBlock
                  PsiJavaToken:LBRACE('{')
                  PsiWhiteSpace(' ')
                  PsiExpressionStatement
                    PsiMethodCallExpression:System.out.println("x=" + x + " y=" + y)
                      PsiReferenceExpression:System.out.println
                        PsiReferenceExpression:System.out
                          PsiReferenceExpression:System
                            PsiReferenceParameterList
                              <empty list>
                            PsiIdentifier:System('System')
                          PsiJavaToken:DOT('.')
                          PsiReferenceParameterList
                            <empty list>
                          PsiIdentifier:out('out')
                        PsiJavaToken:DOT('.')
                        PsiReferenceParameterList
                          <empty list>
                        PsiIdentifier:println('println')
                      PsiExpressionList
                        PsiJavaToken:LPARENTH('(')
                        PsiPolyadicExpression: "x=" + x + " y=" + y
                          PsiLiteralExpression:"x="
                            PsiJavaToken:STRING_LITERAL('"x="')
                          PsiWhiteSpace(' ')
                          PsiJavaToken:PLUS('+')
                          PsiWhiteSpace(' ')
                          PsiReferenceExpression:x
                            PsiReferenceParameterList
                              <empty list>
                            PsiIdentifier:x('x')
                          PsiWhiteSpace(' ')
                          PsiJavaToken:PLUS('+')
                          PsiWhiteSpace(' ')
                          PsiLiteralExpression:" y="
                            PsiJavaToken:STRING_LITERAL('" y="')
                          PsiWhiteSpace(' ')
                          PsiJavaToken:PLUS('+')
                          PsiWhiteSpace(' ')
                          PsiReferenceExpression:y
                            PsiReferenceParameterList
                              <empty list>
                            PsiIdentifier:y('y')
                        PsiJavaToken:RPARENTH(')')
                    PsiJavaToken:SEMICOLON(';')
                  PsiWhiteSpace(' ')
                  PsiJavaToken:RBRACE('}')
              PsiJavaToken:RPARENTH(')')
          PsiJavaToken:SEMICOLON(';')
        PsiWhiteSpace('\n\n    ')
        PsiTryStatement
          PsiKeyword:try('try')
          PsiWhiteSpace(' ')
          PsiCodeBlock
            PsiJavaToken:LBRACE('{')
            PsiWhiteSpace(' ')
            PsiExpressionStatement
              PsiMethodCallExpression:m()
                PsiReferenceExpression:m
                  PsiReferenceParameterList
                    <empty list>
                  PsiIdentifier:m('m')
                PsiExpressionList
                  PsiJavaToken:LPARENTH('(')
                  PsiJavaToken:RPARENTH(')')
              PsiJavaToken:SEMICOLON(';')
            PsiWhiteSpace(' ')
            PsiJavaToken:RBRACE('}')
          PsiWhiteSpace('\n    ')
          PsiCatchSection
            PsiKeyword:catch('catch')
            PsiWhiteSpace(' ')
            PsiJavaToken:LPARENTH('(')
            PsiParameter:e
              PsiModifierList:@A1
                PsiAnnotation
                  PsiJavaToken:AT('@')
                  PsiJavaCodeReferenceElement:A1
                    PsiIdentifier:A1('A1')
                    PsiReferenceParameterList
                      <empty list>
                  PsiAnnotationParameterList
                    <empty list>
              PsiWhiteSpace(' ')
              PsiTypeElement:NullPointerException | @A2 IllegalArgumentException
                PsiTypeElement:NullPointerException
                  PsiJavaCodeReferenceElement:NullPointerException
                    PsiIdentifier:NullPointerException('NullPointerException')
                    PsiReferenceParameterList
                      <empty list>
                PsiWhiteSpace(' ')
                PsiJavaToken:OR('|')
                PsiWhiteSpace(' ')
                PsiTypeElement:@A2 IllegalArgumentException
                  PsiAnnotation
                    PsiJavaToken:AT('@')
                    PsiJavaCodeReferenceElement:A2
                      PsiIdentifier:A2('A2')
                      PsiReferenceParameterList
                        <empty list>
                    PsiAnnotationParameterList
                      <empty list>
                  PsiWhiteSpace(' ')
                  PsiJavaCodeReferenceElement:IllegalArgumentException
                    PsiIdentifier:IllegalArgumentException('IllegalArgumentException')
                    PsiReferenceParameterList
                      <empty list>
              PsiWhiteSpace(' ')
              PsiIdentifier:e('e')
            PsiJavaToken:RPARENTH(')')
            PsiWhiteSpace(' ')
            PsiCodeBlock
              PsiJavaToken:LBRACE('{')
              PsiWhiteSpace(' ')
              PsiJavaToken:RBRACE('}')
        PsiWhiteSpace('\n\n    ')
        PsiTryStatement
          PsiKeyword:try('try')
          PsiWhiteSpace(' ')
          PsiResourceList:(@A Reader r = new @B FileReader("/dev/zero"); @A Writer w = new @B FileWriter("/dev/null"))
            PsiJavaToken:LPARENTH('(')
            PsiResourceVariable:r
              PsiModifierList:@A
                PsiAnnotation
                  PsiJavaToken:AT('@')
                  PsiJavaCodeReferenceElement:A
                    PsiIdentifier:A('A')
                    PsiReferenceParameterList
                      <empty list>
                  PsiAnnotationParameterList
                    <empty list>
              PsiWhiteSpace(' ')
              PsiTypeElement:Reader
                PsiJavaCodeReferenceElement:Reader
                  PsiIdentifier:Reader('Reader')
                  PsiReferenceParameterList
                    <empty list>
              PsiWhiteSpace(' ')
              PsiIdentifier:r('r')
              PsiWhiteSpace(' ')
              PsiJavaToken:EQ('=')
              PsiWhiteSpace(' ')
              PsiNewExpression:new @B FileReader("/dev/zero")
                PsiKeyword:new('new')
                PsiReferenceParameterList
                  <empty list>
                PsiWhiteSpace(' ')
                PsiJavaCodeReferenceElement:@B FileReader
                  PsiAnnotation
                    PsiJavaToken:AT('@')
                    PsiJavaCodeReferenceElement:B
                      PsiIdentifier:B('B')
                      PsiReferenceParameterList
                        <empty list>
                    PsiAnnotationParameterList
                      <empty list>
                  PsiWhiteSpace(' ')
                  PsiIdentifier:FileReader('FileReader')
                  PsiReferenceParameterList
                    <empty list>
                PsiExpressionList
                  PsiJavaToken:LPARENTH('(')
                  PsiLiteralExpression:"/dev/zero"
                    PsiJavaToken:STRING_LITERAL('"/dev/zero"')
                  PsiJavaToken:RPARENTH(')')
            PsiJavaToken:SEMICOLON(';')
            PsiWhiteSpace(' ')
            PsiResourceVariable:w
              PsiModifierList:@A
                PsiAnnotation
                  PsiJavaToken:AT('@')
                  PsiJavaCodeReferenceElement:A
                    PsiIdentifier:A('A')
                    PsiReferenceParameterList
                      <empty list>
                  PsiAnnotationParameterList
                    <empty list>
              PsiWhiteSpace(' ')
              PsiTypeElement:Writer
                PsiJavaCodeReferenceElement:Writer
                  PsiIdentifier:Writer('Writer')
                  PsiReferenceParameterList
                    <empty list>
              PsiWhiteSpace(' ')
              PsiIdentifier:w('w')
              PsiWhiteSpace(' ')
              PsiJavaToken:EQ('=')
              PsiWhiteSpace(' ')
              PsiNewExpression:new @B FileWriter("/dev/null")
                PsiKeyword:new('new')
                PsiReferenceParameterList
                  <empty list>
                PsiWhiteSpace(' ')
                PsiJavaCodeReferenceElement:@B FileWriter
                  PsiAnnotation
                    PsiJavaToken:AT('@')
                    PsiJavaCodeReferenceElement:B
                      PsiIdentifier:B('B')
                      PsiReferenceParameterList
                        <empty list>
                    PsiAnnotationParameterList
                      <empty list>
                  PsiWhiteSpace(' ')
                  PsiIdentifier:FileWriter('FileWriter')
                  PsiReferenceParameterList
                    <empty list>
                PsiExpressionList
                  PsiJavaToken:LPARENTH('(')
                  PsiLiteralExpression:"/dev/null"
                    PsiJavaToken:STRING_LITERAL('"/dev/null"')
                  PsiJavaToken:RPARENTH(')')
            PsiJavaToken:RPARENTH(')')
          PsiWhiteSpace(' ')
          PsiCodeBlock
            PsiJavaToken:LBRACE('{')
            PsiWhiteSpace(' ')
            PsiJavaToken:RBRACE('}')
        PsiWhiteSpace('\n  ')
        PsiJavaToken:RBRACE('}')
    PsiWhiteSpace('\n\n  ')
    PsiComment(END_OF_LINE_COMMENT)('//')
    PsiWhiteSpace('\n  ')
    PsiComment(END_OF_LINE_COMMENT)('// 2. An annotation on a wildcard type argument appears before the wildcard ...')
    PsiWhiteSpace('\n  ')
    PsiComment(END_OF_LINE_COMMENT)('//')
    PsiWhiteSpace('\n\n  ')
    PsiMethod:m
      PsiModifierList:
        <empty list>
      PsiTypeParameterList
        <empty list>
      PsiTypeElement:void
        PsiKeyword:void('void')
      PsiWhiteSpace(' ')
      PsiIdentifier:m('m')
      PsiParameterList:(MyClass<@Immutable ? extends Comparable<MyClass>> p)
        PsiJavaToken:LPARENTH('(')
        PsiParameter:p
          PsiModifierList:
            <empty list>
          PsiTypeElement:MyClass<@Immutable ? extends Comparable<MyClass>>
            PsiJavaCodeReferenceElement:MyClass<@Immutable ? extends Comparable<MyClass>>
              PsiIdentifier:MyClass('MyClass')
              PsiReferenceParameterList
                PsiJavaToken:LT('<')
                PsiTypeElement:@Immutable ? extends Comparable<MyClass>
                  PsiAnnotation
                    PsiJavaToken:AT('@')
                    PsiJavaCodeReferenceElement:Immutable
                      PsiIdentifier:Immutable('Immutable')
                      PsiReferenceParameterList
                        <empty list>
                    PsiAnnotationParameterList
                      <empty list>
                  PsiWhiteSpace(' ')
                  PsiJavaToken:QUEST('?')
                  PsiWhiteSpace(' ')
                  PsiKeyword:extends('extends')
                  PsiWhiteSpace(' ')
                  PsiTypeElement:Comparable<MyClass>
                    PsiJavaCodeReferenceElement:Comparable<MyClass>
                      PsiIdentifier:Comparable('Comparable')
                      PsiReferenceParameterList
                        PsiJavaToken:LT('<')
                        PsiTypeElement:MyClass
                          PsiJavaCodeReferenceElement:MyClass
                            PsiIdentifier:MyClass('MyClass')
                            PsiReferenceParameterList
                              <empty list>
                        PsiJavaToken:GT('>')
                PsiJavaToken:GT('>')
          PsiWhiteSpace(' ')
          PsiIdentifier:p('p')
        PsiJavaToken:RPARENTH(')')
      PsiReferenceList
        <empty list>
      PsiWhiteSpace(' ')
      PsiCodeBlock
        PsiJavaToken:LBRACE('{')
        PsiWhiteSpace(' ')
        PsiJavaToken:RBRACE('}')
    PsiWhiteSpace('\n\n  ')
    PsiComment(END_OF_LINE_COMMENT)('//')
    PsiWhiteSpace('\n  ')
    PsiComment(END_OF_LINE_COMMENT)('// 3. The annotation on a given array level prefixes the brackets that introduce that level ...')
    PsiWhiteSpace('\n  ')
    PsiComment(END_OF_LINE_COMMENT)('//')
    PsiWhiteSpace('\n\n  ')
    PsiMethod:m
      PsiModifierList:
        <empty list>
      PsiTypeParameterList
        <empty list>
      PsiTypeElement:void
        PsiKeyword:void('void')
      PsiWhiteSpace(' ')
      PsiIdentifier:m('m')
      PsiParameterList:(Document @Readonly ... docs)
        PsiJavaToken:LPARENTH('(')
        PsiParameter:docs
          PsiModifierList:
            <empty list>
          PsiTypeElement:Document @Readonly ...
            PsiTypeElement:Document
              PsiJavaCodeReferenceElement:Document
                PsiIdentifier:Document('Document')
                PsiReferenceParameterList
                  <empty list>
            PsiWhiteSpace(' ')
            PsiAnnotation
              PsiJavaToken:AT('@')
              PsiJavaCodeReferenceElement:Readonly
                PsiIdentifier:Readonly('Readonly')
                PsiReferenceParameterList
                  <empty list>
              PsiAnnotationParameterList
                <empty list>
            PsiWhiteSpace(' ')
            PsiJavaToken:ELLIPSIS('...')
          PsiWhiteSpace(' ')
          PsiIdentifier:docs('docs')
        PsiJavaToken:RPARENTH(')')
      PsiReferenceList
        <empty list>
      PsiWhiteSpace(' ')
      PsiCodeBlock
        PsiJavaToken:LBRACE('{')
        PsiWhiteSpace('\n    ')
        PsiDeclarationStatement
          PsiLocalVariable:docs1
            PsiModifierList:@Readonly
              PsiAnnotation
                PsiJavaToken:AT('@')
                PsiJavaCodeReferenceElement:Readonly
                  PsiIdentifier:Readonly('Readonly')
                  PsiReferenceParameterList
                    <empty list>
                PsiAnnotationParameterList
                  <empty list>
            PsiWhiteSpace(' ')
            PsiTypeElement:Document [][]
              PsiTypeElement:Document []
                PsiTypeElement:Document
                  PsiJavaCodeReferenceElement:Document
                    PsiIdentifier:Document('Document')
                    PsiReferenceParameterList
                      <empty list>
                PsiWhiteSpace(' ')
                PsiJavaToken:LBRACKET('[')
                PsiJavaToken:RBRACKET(']')
              PsiJavaToken:LBRACKET('[')
              PsiJavaToken:RBRACKET(']')
            PsiWhiteSpace(' ')
            PsiIdentifier:docs1('docs1')
            PsiWhiteSpace(' ')
            PsiJavaToken:EQ('=')
            PsiWhiteSpace(' ')
            PsiNewExpression:new @Readonly Document [2][12]
              PsiKeyword:new('new')
              PsiReferenceParameterList
                <empty list>
              PsiWhiteSpace(' ')
              PsiJavaCodeReferenceElement:@Readonly Document
                PsiAnnotation
                  PsiJavaToken:AT('@')
                  PsiJavaCodeReferenceElement:Readonly
                    PsiIdentifier:Readonly('Readonly')
                    PsiReferenceParameterList
                      <empty list>
                  PsiAnnotationParameterList
                    <empty list>
                PsiWhiteSpace(' ')
                PsiIdentifier:Document('Document')
                PsiReferenceParameterList
                  <empty list>
              PsiWhiteSpace(' ')
              PsiJavaToken:LBRACKET('[')
              PsiLiteralExpression:2
                PsiJavaToken:INTEGER_LITERAL('2')
              PsiJavaToken:RBRACKET(']')
              PsiJavaToken:LBRACKET('[')
              PsiLiteralExpression:12
                PsiJavaToken:INTEGER_LITERAL('12')
              PsiJavaToken:RBRACKET(']')
            PsiJavaToken:SEMICOLON(';')
          PsiWhiteSpace(' ')
          PsiComment(END_OF_LINE_COMMENT)('// array of arrays of read-only documents')
        PsiWhiteSpace('\n    ')
        PsiDeclarationStatement
          PsiLocalVariable:docs2
            PsiModifierList:
              <empty list>
            PsiTypeElement:Document @Readonly [][]
              PsiTypeElement:Document @Readonly []
                PsiTypeElement:Document
                  PsiJavaCodeReferenceElement:Document
                    PsiIdentifier:Document('Document')
                    PsiReferenceParameterList
                      <empty list>
                PsiWhiteSpace(' ')
                PsiAnnotation
                  PsiJavaToken:AT('@')
                  PsiJavaCodeReferenceElement:Readonly
                    PsiIdentifier:Readonly('Readonly')
                    PsiReferenceParameterList
                      <empty list>
                  PsiAnnotationParameterList
                    <empty list>
                PsiWhiteSpace(' ')
                PsiJavaToken:LBRACKET('[')
                PsiJavaToken:RBRACKET(']')
              PsiJavaToken:LBRACKET('[')
              PsiJavaToken:RBRACKET(']')
            PsiWhiteSpace(' ')
            PsiIdentifier:docs2('docs2')
            PsiWhiteSpace(' ')
            PsiJavaToken:EQ('=')
            PsiWhiteSpace(' ')
            PsiNewExpression:new Document @Readonly [2][12]
              PsiKeyword:new('new')
              PsiReferenceParameterList
                <empty list>
              PsiWhiteSpace(' ')
              PsiJavaCodeReferenceElement:Document
                PsiIdentifier:Document('Document')
                PsiReferenceParameterList
                  <empty list>
              PsiWhiteSpace(' ')
              PsiAnnotation
                PsiJavaToken:AT('@')
                PsiJavaCodeReferenceElement:Readonly
                  PsiIdentifier:Readonly('Readonly')
                  PsiReferenceParameterList
                    <empty list>
                PsiAnnotationParameterList
                  <empty list>
              PsiWhiteSpace(' ')
              PsiJavaToken:LBRACKET('[')
              PsiLiteralExpression:2
                PsiJavaToken:INTEGER_LITERAL('2')
              PsiJavaToken:RBRACKET(']')
              PsiJavaToken:LBRACKET('[')
              PsiLiteralExpression:12
                PsiJavaToken:INTEGER_LITERAL('12')
              PsiJavaToken:RBRACKET(']')
            PsiJavaToken:SEMICOLON(';')
          PsiWhiteSpace(' ')
          PsiComment(END_OF_LINE_COMMENT)('// read-only array of arrays of documents')
        PsiWhiteSpace('\n    ')
        PsiDeclarationStatement
          PsiLocalVariable:docs3
            PsiModifierList:
              <empty list>
            PsiTypeElement:Document[] @Readonly []
              PsiTypeElement:Document[]
                PsiTypeElement:Document
                  PsiJavaCodeReferenceElement:Document
                    PsiIdentifier:Document('Document')
                    PsiReferenceParameterList
                      <empty list>
                PsiJavaToken:LBRACKET('[')
                PsiJavaToken:RBRACKET(']')
              PsiWhiteSpace(' ')
              PsiAnnotation
                PsiJavaToken:AT('@')
                PsiJavaCodeReferenceElement:Readonly
                  PsiIdentifier:Readonly('Readonly')
                  PsiReferenceParameterList
                    <empty list>
                PsiAnnotationParameterList
                  <empty list>
              PsiWhiteSpace(' ')
              PsiJavaToken:LBRACKET('[')
              PsiJavaToken:RBRACKET(']')
            PsiWhiteSpace(' ')
            PsiIdentifier:docs3('docs3')
            PsiWhiteSpace(' ')
            PsiJavaToken:EQ('=')
            PsiWhiteSpace(' ')
            PsiNewExpression:new Document[2] @Readonly [12]
              PsiKeyword:new('new')
              PsiReferenceParameterList
                <empty list>
              PsiWhiteSpace(' ')
              PsiJavaCodeReferenceElement:Document
                PsiIdentifier:Document('Document')
                PsiReferenceParameterList
                  <empty list>
              PsiJavaToken:LBRACKET('[')
              PsiLiteralExpression:2
                PsiJavaToken:INTEGER_LITERAL('2')
              PsiJavaToken:RBRACKET(']')
              PsiWhiteSpace(' ')
              PsiAnnotation
                PsiJavaToken:AT('@')
                PsiJavaCodeReferenceElement:Readonly
                  PsiIdentifier:Readonly('Readonly')
                  PsiReferenceParameterList
                    <empty list>
                PsiAnnotationParameterList
                  <empty list>
              PsiWhiteSpace(' ')
              PsiJavaToken:LBRACKET('[')
              PsiLiteralExpression:12
                PsiJavaToken:INTEGER_LITERAL('12')
              PsiJavaToken:RBRACKET(']')
            PsiJavaToken:SEMICOLON(';')
          PsiWhiteSpace(' ')
          PsiComment(END_OF_LINE_COMMENT)('// array of read-only arrays of documents')
        PsiWhiteSpace('\n\n    ')
        PsiDeclarationStatement
          PsiLocalVariable:ints
            PsiModifierList:@NonNegative
              PsiAnnotation
                PsiJavaToken:AT('@')
                PsiJavaCodeReferenceElement:NonNegative
                  PsiIdentifier:NonNegative('NonNegative')
                  PsiReferenceParameterList
                    <empty list>
                PsiAnnotationParameterList
                  <empty list>
            PsiWhiteSpace(' ')
            PsiTypeElement:int @NonEmpty []
              PsiTypeElement:int
                PsiKeyword:int('int')
              PsiWhiteSpace(' ')
              PsiAnnotation
                PsiJavaToken:AT('@')
                PsiJavaCodeReferenceElement:NonEmpty
                  PsiIdentifier:NonEmpty('NonEmpty')
                  PsiReferenceParameterList
                    <empty list>
                PsiAnnotationParameterList
                  <empty list>
              PsiWhiteSpace(' ')
              PsiJavaToken:LBRACKET('[')
              PsiJavaToken:RBRACKET(']')
            PsiWhiteSpace(' ')
            PsiIdentifier:ints('ints')
            PsiWhiteSpace(' ')
            PsiJavaToken:EQ('=')
            PsiWhiteSpace(' ')
            PsiNewExpression:new @NonNegative int @MinSize(2) [2]
              PsiKeyword:new('new')
              PsiReferenceParameterList
                <empty list>
              PsiWhiteSpace(' ')
              PsiAnnotation
                PsiJavaToken:AT('@')
                PsiJavaCodeReferenceElement:NonNegative
                  PsiIdentifier:NonNegative('NonNegative')
                  PsiReferenceParameterList
                    <empty list>
                PsiAnnotationParameterList
                  <empty list>
              PsiWhiteSpace(' ')
              PsiKeyword:int('int')
              PsiWhiteSpace(' ')
              PsiAnnotation
                PsiJavaToken:AT('@')
                PsiJavaCodeReferenceElement:MinSize
                  PsiIdentifier:MinSize('MinSize')
                  PsiReferenceParameterList
                    <empty list>
                PsiAnnotationParameterList
                  PsiJavaToken:LPARENTH('(')
                  PsiNameValuePair
                    PsiLiteralExpression:2
                      PsiJavaToken:INTEGER_LITERAL('2')
                  PsiJavaToken:RPARENTH(')')
              PsiWhiteSpace(' ')
              PsiJavaToken:LBRACKET('[')
              PsiLiteralExpression:2
                PsiJavaToken:INTEGER_LITERAL('2')
              PsiJavaToken:RBRACKET(']')
            PsiJavaToken:SEMICOLON(';')
        PsiWhiteSpace('\n  ')
        PsiJavaToken:RBRACE('}')
    PsiWhiteSpace('\n\n  ')
    PsiMethod:m
      PsiModifierList:
        <empty list>
      PsiTypeParameterList
        <empty list>
      PsiTypeElement:int
        PsiKeyword:int('int')
      PsiWhiteSpace(' ')
      PsiIdentifier:m('m')
      PsiParameterList:()
        PsiJavaToken:LPARENTH('(')
        PsiJavaToken:RPARENTH(')')
      PsiWhiteSpace(' ')
      PsiAnnotation
        PsiJavaToken:AT('@')
        PsiJavaCodeReferenceElement:Slowpoke
          PsiIdentifier:Slowpoke('Slowpoke')
          PsiReferenceParameterList
            <empty list>
        PsiAnnotationParameterList
          <empty list>
      PsiWhiteSpace(' ')
      PsiJavaToken:LBRACKET('[')
      PsiJavaToken:RBRACKET(']')
      PsiWhiteSpace(' ')
      PsiAnnotation
        PsiJavaToken:AT('@')
        PsiJavaCodeReferenceElement:Slowbro
          PsiIdentifier:Slowbro('Slowbro')
          PsiReferenceParameterList
            <empty list>
        PsiAnnotationParameterList
          <empty list>
      PsiWhiteSpace(' ')
      PsiJavaToken:LBRACKET('[')
      PsiJavaToken:RBRACKET(']')
      PsiReferenceList
        <empty list>
      PsiWhiteSpace(' ')
      PsiCodeBlock
        PsiJavaToken:LBRACE('{')
        PsiWhiteSpace(' ')
        PsiReturnStatement
          PsiKeyword:return('return')
          PsiWhiteSpace(' ')
          PsiLiteralExpression:null
            PsiJavaToken:NULL_KEYWORD('null')
          PsiJavaToken:SEMICOLON(';')
        PsiWhiteSpace(' ')
        PsiJavaToken:RBRACE('}')
    PsiWhiteSpace('\n\n  ')
    PsiComment(END_OF_LINE_COMMENT)('//')
    PsiWhiteSpace('\n  ')
    PsiComment(END_OF_LINE_COMMENT)('// 4. A type annotation is permitted in front of a constructor declaration ...')
    PsiWhiteSpace('\n  ')
    PsiComment(END_OF_LINE_COMMENT)('//')
    PsiWhiteSpace('\n\n  ')
    PsiMethod:SpecSamples
      PsiModifierList:@Immutable
        PsiAnnotation
          PsiJavaToken:AT('@')
          PsiJavaCodeReferenceElement:Immutable
            PsiIdentifier:Immutable('Immutable')
            PsiReferenceParameterList
              <empty list>
          PsiAnnotationParameterList
            <empty list>
      PsiTypeParameterList
        <empty list>
      PsiWhiteSpace(' ')
      PsiIdentifier:SpecSamples('SpecSamples')
      PsiParameterList:()
        PsiJavaToken:LPARENTH('(')
        PsiJavaToken:RPARENTH(')')
      PsiReferenceList
        <empty list>
      PsiWhiteSpace(' ')
      PsiCodeBlock
        PsiJavaToken:LBRACE('{')
        PsiWhiteSpace(' ')
        PsiJavaToken:RBRACE('}')
    PsiWhiteSpace('\n\n  ')
    PsiComment(END_OF_LINE_COMMENT)('//')
    PsiWhiteSpace('\n  ')
    PsiComment(END_OF_LINE_COMMENT)('// todo [r.sh] 5. It is permitted to explicitly declare the method receiver as the first formal parameter ...')
    PsiWhiteSpace('\n  ')
    PsiComment(END_OF_LINE_COMMENT)('//')
    PsiWhiteSpace('\n\n  ')
    PsiComment(C_STYLE_COMMENT)('/*public String toString(@Readonly MyClass this) {  }\n\n  public boolean equals(@Readonly MyClass this, @Readonly Object other) {  }\n\n  SpecSamples(@Receiver SpecSamples this, boolean b) { }\n\n  class Outer {\n    class Middle {\n      class Inner {\n        void innerMethod(@A Outer. @B Middle. @C Inner this) { }\n      }\n    }\n  }\n\n  void replace(@Readonly Object other, @Mutable MyClass this) {  } // illegal */')
    PsiWhiteSpace('\n\n  ')
    PsiComment(END_OF_LINE_COMMENT)('//')
    PsiWhiteSpace('\n  ')
    PsiComment(END_OF_LINE_COMMENT)('// 6. It is permitted to write an annotation on a type parameter declaration ...')
    PsiWhiteSpace('\n  ')
    PsiComment(END_OF_LINE_COMMENT)('//')
    PsiWhiteSpace('\n\n  ')
    PsiClass:MyClass
      PsiModifierList:
        <empty list>
      PsiKeyword:class('class')
      PsiWhiteSpace(' ')
      PsiIdentifier:MyClass('MyClass')
      PsiTypeParameterList
        PsiJavaToken:LT('<')
        PsiTypeParameter:T
          PsiAnnotation
            PsiJavaToken:AT('@')
            PsiJavaCodeReferenceElement:Immutable
              PsiIdentifier:Immutable('Immutable')
              PsiReferenceParameterList
                <empty list>
            PsiAnnotationParameterList
              <empty list>
          PsiWhiteSpace(' ')
          PsiIdentifier:T('T')
          PsiElement(EXTENDS_BOUND_LIST)
            <empty list>
        PsiJavaToken:GT('>')
      PsiReferenceList
        <empty list>
      PsiReferenceList
        <empty list>
      PsiWhiteSpace(' ')
      PsiJavaToken:LBRACE('{')
      PsiWhiteSpace(' ')
      PsiJavaToken:RBRACE('}')
    PsiWhiteSpace('\n\n  ')
    PsiClass:WonderfulList
      PsiModifierList:
        <empty list>
      PsiKeyword:interface('interface')
      PsiWhiteSpace(' ')
      PsiIdentifier:WonderfulList('WonderfulList')
      PsiTypeParameterList
        PsiJavaToken:LT('<')
        PsiTypeParameter:E
          PsiAnnotation
            PsiJavaToken:AT('@')
            PsiJavaCodeReferenceElement:Reified
              PsiIdentifier:Reified('Reified')
              PsiReferenceParameterList
                <empty list>
            PsiAnnotationParameterList
              <empty list>
          PsiWhiteSpace(' ')
          PsiIdentifier:E('E')
          PsiElement(EXTENDS_BOUND_LIST)
            <empty list>
        PsiJavaToken:GT('>')
      PsiReferenceList
        <empty list>
      PsiReferenceList
        <empty list>
      PsiWhiteSpace(' ')
      PsiJavaToken:LBRACE('{')
      PsiWhiteSpace(' ')
      PsiJavaToken:RBRACE('}')
    PsiWhiteSpace('\n\n')
    PsiJavaToken:RBRACE('}')