class d {
  def int[][][] foo = for

  {if (true) {

  @Property def a () {}
  }
}
-----
Groovy script
  Class definition
    Modifiers
      <empty list>
    PsiElement(class)('class')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('d')
    Extends clause
      <empty list>
    Implements clause
      <empty list>
    PsiWhiteSpace(' ')
    Type definition body
      PsiElement({)('{')
      PsiWhiteSpace('\n  ')
      Variable definitions
        Modifiers
          PsiElement(def)('def')
        PsiWhiteSpace(' ')
        Array type
          Array type
            Array type
              Built in type
                PsiElement(int)('int')
              PsiElement([)('[')
              PsiElement(])(']')
            PsiElement([)('[')
            PsiElement(])(']')
          PsiElement([)('[')
          PsiElement(])(']')
        PsiWhiteSpace(' ')
        Field
          PsiElement(identifier)('foo')
          PsiWhiteSpace(' ')
          PsiElement(=)('=')
          PsiErrorElement:Expression expected
            <empty list>
      PsiWhiteSpace(' ')
      PsiElement(for)('for')
      PsiErrorElement:';', '}' or new line expected
        <empty list>
      PsiElement(new line)('\n\n  ')
      Class initializer
        Modifiers
          <empty list>
        Open block
          PsiElement({)('{')
          IF statement
            PsiElement(if)('if')
            PsiWhiteSpace(' ')
            PsiElement(()('(')
            Literal
              PsiElement(true)('true')
            PsiElement())(')')
            PsiWhiteSpace(' ')
            Block statement
              Open block
                PsiElement({)('{')
                PsiWhiteSpace('\n\n  ')
                Method
                  Modifiers
                    Annotation
                      PsiElement(@)('@')
                      Reference element
                        PsiElement(identifier)('Property')
                      Annotation arguments
                        <empty list>
                    PsiWhiteSpace(' ')
                    PsiElement(def)('def')
                  PsiWhiteSpace(' ')
                  PsiElement(identifier)('a')
                  PsiWhiteSpace(' ')
                  PsiElement(()('(')
                  Parameter list
                    <empty list>
                  PsiElement())(')')
                  Throw clause
                    <empty list>
                  PsiWhiteSpace(' ')
                  Open block
                    PsiElement({)('{')
                    PsiElement(})('}')
                PsiElement(new line)('\n  ')
                PsiElement(})('}')
          PsiElement(new line)('\n')
          PsiElement(})('}')
      PsiErrorElement:';', '}' or new line expected
        <empty list>