interface q {
  def a () {   }

  public q () {
    this()
  }
}
-----
Groovy script
  Interface definition
    Modifiers
      <empty list>
    PsiElement(interface)('interface')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('q')
    Extends clause
      <empty list>
    PsiWhiteSpace(' ')
    Type definition body
      PsiElement({)('{')
      PsiWhiteSpace('\n  ')
      Method
        Modifiers
          PsiElement(def)('def')
        PsiWhiteSpace(' ')
        PsiElement(identifier)('a')
        PsiWhiteSpace(' ')
        PsiElement(()('(')
        Parameter list
          <empty list>
        PsiElement())(')')
        Throw clause
          <empty list>
        PsiWhiteSpace(' ')
        Open block
          PsiElement({)('{')
          PsiWhiteSpace('   ')
          PsiElement(})('}')
      PsiElement(new line)('\n\n  ')
      Constructor
        Modifiers
          PsiElement(public)('public')
        PsiWhiteSpace(' ')
        PsiElement(identifier)('q')
        PsiWhiteSpace(' ')
        PsiElement(()('(')
        Parameter list
          <empty list>
        PsiElement())(')')
        Throw clause
          <empty list>
        PsiWhiteSpace(' ')
        Open block
          PsiElement({)('{')
          PsiWhiteSpace('\n    ')
          Constructor invocation
            Reference expression
              PsiElement(this)('this')
            Arguments
              PsiElement(()('(')
              PsiElement())(')')
          PsiElement(new line)('\n  ')
          PsiElement(})('}')
      PsiElement(new line)('\n')
      PsiElement(})('}')