Groovy script
  PsiElement(new line)('\n')
  Method
    Modifiers
      PsiElement(def)('def')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('foo')
    Parameter list
      PsiElement(()('(')
      PsiElement())(')')
    Throw clause
      <empty list>
    PsiWhiteSpace(' ')
    Open block
      PsiElement({)('{')
      PsiWhiteSpace('\n    ')
      Switch statement
        PsiElement(switch)('switch')
        PsiWhiteSpace(' ')
        PsiElement(()('(')
        Reference expression
          PsiElement(identifier)('w')
        PsiElement())(')')
        PsiWhiteSpace(' ')
        PsiElement({)('{')
        PsiWhiteSpace('\n      ')
        Case section
          PsiElement(case)('case')
          PsiWhiteSpace(' ')
          Expression list
            Literal
              PsiElement(Integer)('2')
          PsiElement(:)(':')
          PsiElement(new line)('\n        ')
          Variable definitions
            Modifiers
              PsiElement(def)('def')
            PsiWhiteSpace(' ')
            Variable
              PsiElement(identifier)('x')
              PsiWhiteSpace(' ')
              PsiElement(=)('=')
              PsiWhiteSpace(' ')
              Reference expression
                PsiElement(identifier)('xxx')
          PsiElement(new line)('\n        ')
          IF statement
            PsiElement(if)('if')
            PsiWhiteSpace(' ')
            PsiElement(()('(')
            PsiErrorElement:<expression> expected, got ')'
              <empty list>
            PsiElement())(')')
            PsiWhiteSpace(' ')
            Block statement
              Open block
                PsiElement({)('{')
                PsiWhiteSpace('\n        ')
                PsiElement(})('}')
          PsiElement(new line)('\n        ')
          RETURN statement
            PsiElement(return)('return')
            PsiWhiteSpace(' ')
            Literal
              PsiElement(Integer)('2')
          PsiElement(new line)('\n\n    ')
        PsiElement(})('}')
      PsiElement(new line)('\n    ')
      RETURN statement
        PsiElement(return)('return')
        PsiWhiteSpace(' ')
        Reference expression
          PsiElement(identifier)('state')
      PsiElement(new line)('\n  ')
      PsiElement(})('}')
  PsiElement(new line)('\n')
---
Groovy script
  PsiElement(new line)('\n')
  Method
    Modifiers
      PsiElement(def)('def')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('foo')
    Parameter list
      PsiElement(()('(')
      PsiElement())(')')
    Throw clause
      <empty list>
    PsiWhiteSpace(' ')
    Open block
      PsiElement({)('{')
      PsiWhiteSpace('\n    ')
      Switch statement
        PsiElement(switch)('switch')
        PsiWhiteSpace(' ')
        PsiElement(()('(')
        Reference expression
          PsiElement(identifier)('w')
        PsiElement())(')')
        PsiWhiteSpace(' ')
        PsiElement({)('{')
        PsiWhiteSpace('\n      ')
        Case section
          PsiElement(case)('case')
          PsiWhiteSpace(' ')
          Expression list
            Literal
              PsiElement(Integer)('2')
          PsiElement(:)(':')
          PsiElement(new line)('\n        ')
          Modifiers
            PsiElement(def)('def')
          PsiErrorElement:identifier expected, got '='
            <empty list>
          PsiWhiteSpace('  ')
          PsiElement(=)('=')
          PsiWhiteSpace(' ')
          Reference expression
            PsiElement(identifier)('xxx')
          PsiElement(new line)('\n        ')
          IF statement
            PsiElement(if)('if')
            PsiWhiteSpace(' ')
            PsiElement(()('(')
            PsiErrorElement:<expression> expected, got ')'
              <empty list>
            PsiElement())(')')
            PsiWhiteSpace(' ')
            Block statement
              Open block
                PsiElement({)('{')
                PsiWhiteSpace('\n        ')
                PsiElement(})('}')
          PsiElement(new line)('\n        ')
          RETURN statement
            PsiElement(return)('return')
            PsiWhiteSpace(' ')
            Literal
              PsiElement(Integer)('2')
          PsiElement(new line)('\n\n    ')
        PsiElement(})('}')
      PsiElement(new line)('\n    ')
      RETURN statement
        PsiElement(return)('return')
        PsiWhiteSpace(' ')
        Reference expression
          PsiElement(identifier)('state')
      PsiElement(new line)('\n  ')
      PsiElement(})('}')
  PsiElement(new line)('\n')