private static final boolean s (A.B<int, String, T<boolean[]>> a) {}
-----
Groovy script
  Method
    Modifiers
      PsiElement(private)('private')
      PsiWhiteSpace(' ')
      PsiElement(static)('static')
      PsiWhiteSpace(' ')
      PsiElement(final)('final')
    PsiWhiteSpace(' ')
    Built in type
      PsiElement(boolean)('boolean')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('s')
    PsiWhiteSpace(' ')
    PsiElement(()('(')
    Parameter list
      Parameter
        Modifiers
          <empty list>
        Type element
          Reference element
            Reference element
              PsiElement(identifier)('A')
            PsiElement(.)('.')
            PsiElement(identifier)('B')
            Type arguments
              PsiElement(<)('<')
              Built in type
                PsiElement(int)('int')
              PsiElement(,)(',')
              PsiWhiteSpace(' ')
              Type element
                Reference element
                  PsiElement(identifier)('String')
              PsiElement(,)(',')
              PsiWhiteSpace(' ')
              Type element
                Reference element
                  PsiElement(identifier)('T')
                  Type arguments
                    PsiElement(<)('<')
                    Array type
                      Built in type
                        PsiElement(boolean)('boolean')
                      PsiElement([)('[')
                      PsiElement(])(']')
                    PsiElement(>)('>')
              PsiElement(>)('>')
        PsiWhiteSpace(' ')
        PsiElement(identifier)('a')
    PsiElement())(')')
    Throw clause
      <empty list>
    PsiWhiteSpace(' ')
    Open block
      PsiElement({)('{')
      PsiElement(})('}')