JetFile: HashMap.jet
  NAMESPACE
    CLASS
      MODIFIER_LIST
        PsiElement(open)('open')
      PsiWhiteSpace(' ')
      PsiElement(class)('class')
      PsiWhiteSpace(' ')
      PsiElement(IDENTIFIER)('IEquality')
      PsiWhiteSpace(' ')
      TYPE_PARAMETER_LIST
        <empty list>
      CLASS_BODY
        PsiElement(LBRACE)('{')
        PsiWhiteSpace('\n  ')
        FUN
          PsiElement(fun)('fun')
          PsiWhiteSpace(' ')
          PsiElement(IDENTIFIER)('equals')
          VALUE_PARAMETER_LIST
            PsiElement(LPAR)('(')
            VALUE_PARAMETER
              PsiElement(IDENTIFIER)('other')
              PsiWhiteSpace(' ')
              PsiElement(COLON)(':')
              PsiWhiteSpace(' ')
              TYPE_REFERENCE
                USER_TYPE
                  REFERENCE_EXPRESSION
                    PsiElement(IDENTIFIER)('Any')
            PsiElement(RPAR)(')')
          PsiWhiteSpace(' ')
          PsiElement(COLON)(':')
          PsiWhiteSpace(' ')
          TYPE_REFERENCE
            USER_TYPE
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('Boolean')
          PsiWhiteSpace('\n    ')
          PsiElement(EQ)('=')
          PsiWhiteSpace(' ')
          DOT_QUALIFIED_EXPRESSION
            PARENTHESIZED
              PsiElement(LPAR)('(')
              BINARY_WITH_TYPE
                THIS_EXPRESSION
                  REFERENCE_EXPRESSION
                    PsiElement(this)('this')
                PsiWhiteSpace(' ')
                OPERATION_REFERENCE
                  PsiElement(as)('as')
                PsiWhiteSpace(' ')
                TYPE_REFERENCE
                  USER_TYPE
                    USER_TYPE
                      USER_TYPE
                        REFERENCE_EXPRESSION
                          PsiElement(IDENTIFIER)('java')
                      PsiElement(DOT)('.')
                      REFERENCE_EXPRESSION
                        PsiElement(IDENTIFIER)('lang')
                    PsiElement(DOT)('.')
                    REFERENCE_EXPRESSION
                      PsiElement(IDENTIFIER)('Object')
              PsiElement(RPAR)(')')
            PsiElement(DOT)('.')
            CALL_EXPRESSION
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('equals')
              VALUE_ARGUMENT_LIST
                PsiElement(LPAR)('(')
                VALUE_ARGUMENT
                  BINARY_WITH_TYPE
                    REFERENCE_EXPRESSION
                      PsiElement(IDENTIFIER)('other')
                    PsiWhiteSpace(' ')
                    OPERATION_REFERENCE
                      PsiElement(as)('as')
                    PsiWhiteSpace(' ')
                    TYPE_REFERENCE
                      USER_TYPE
                        USER_TYPE
                          USER_TYPE
                            REFERENCE_EXPRESSION
                              PsiElement(IDENTIFIER)('java')
                          PsiElement(DOT)('.')
                          REFERENCE_EXPRESSION
                            PsiElement(IDENTIFIER)('lang')
                        PsiElement(DOT)('.')
                        REFERENCE_EXPRESSION
                          PsiElement(IDENTIFIER)('Object')
                PsiElement(RPAR)(')')
        PsiWhiteSpace('\n')
        PsiElement(RBRACE)('}')
    PsiWhiteSpace('\n\n')
    CLASS
      MODIFIER_LIST
        PsiElement(open)('open')
      PsiWhiteSpace(' ')
      PsiElement(class)('class')
      PsiWhiteSpace(' ')
      PsiElement(IDENTIFIER)('IHashable')
      PsiWhiteSpace(' ')
      TYPE_PARAMETER_LIST
        <empty list>
      PsiElement(COLON)(':')
      PsiWhiteSpace(' ')
      DELEGATION_SPECIFIER_LIST
        DELEGATOR_SUPER_CLASS
          TYPE_REFERENCE
            USER_TYPE
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('IEquality')
      PsiWhiteSpace(' ')
      CLASS_BODY
        PsiElement(LBRACE)('{')
        PsiWhiteSpace('\n  ')
        PROPERTY
          PsiElement(val)('val')
          PsiWhiteSpace(' ')
          PsiElement(IDENTIFIER)('hashCode')
          PsiWhiteSpace(' ')
          PsiElement(COLON)(':')
          PsiWhiteSpace(' ')
          TYPE_REFERENCE
            USER_TYPE
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('Integer')
          PsiWhiteSpace('\n    ')
          PROPERTY_ACCESSOR
            PsiElement(get)('get')
            PsiElement(LPAR)('(')
            PsiElement(RPAR)(')')
            PsiWhiteSpace(' ')
            PsiElement(EQ)('=')
            PsiWhiteSpace(' ')
            DOT_QUALIFIED_EXPRESSION
              PARENTHESIZED
                PsiElement(LPAR)('(')
                BINARY_WITH_TYPE
                  THIS_EXPRESSION
                    REFERENCE_EXPRESSION
                      PsiElement(this)('this')
                  PsiWhiteSpace(' ')
                  OPERATION_REFERENCE
                    PsiElement(as)('as')
                  PsiWhiteSpace(' ')
                  TYPE_REFERENCE
                    USER_TYPE
                      USER_TYPE
                        USER_TYPE
                          REFERENCE_EXPRESSION
                            PsiElement(IDENTIFIER)('java')
                        PsiElement(DOT)('.')
                        REFERENCE_EXPRESSION
                          PsiElement(IDENTIFIER)('lang')
                      PsiElement(DOT)('.')
                      REFERENCE_EXPRESSION
                        PsiElement(IDENTIFIER)('Object')
                PsiElement(RPAR)(')')
              PsiElement(DOT)('.')
              CALL_EXPRESSION
                REFERENCE_EXPRESSION
                  PsiElement(IDENTIFIER)('hashCode')
                VALUE_ARGUMENT_LIST
                  PsiElement(LPAR)('(')
                  PsiElement(RPAR)(')')
        PsiWhiteSpace('\n\n')
        PsiElement(RBRACE)('}')
    PsiWhiteSpace('\n\n')
    CLASS
      MODIFIER_LIST
        PsiElement(open)('open')
      PsiWhiteSpace(' ')
      PsiElement(class)('class')
      PsiWhiteSpace(' ')
      PsiElement(IDENTIFIER)('IMap')
      TYPE_PARAMETER_LIST
        PsiElement(LT)('<')
        TYPE_PARAMETER
          PsiElement(IDENTIFIER)('K')
        PsiElement(COMMA)(',')
        PsiWhiteSpace(' ')
        TYPE_PARAMETER
          PsiElement(IDENTIFIER)('V')
        PsiElement(GT)('>')
      PsiWhiteSpace(' ')
      CLASS_BODY
        PsiElement(LBRACE)('{')
        PsiWhiteSpace('\n  ')
        FUN
          PsiElement(fun)('fun')
          PsiWhiteSpace(' ')
          PsiElement(IDENTIFIER)('get')
          VALUE_PARAMETER_LIST
            PsiElement(LPAR)('(')
            VALUE_PARAMETER
              PsiElement(IDENTIFIER)('key')
              PsiWhiteSpace(' ')
              PsiElement(COLON)(':')
              PsiWhiteSpace(' ')
              TYPE_REFERENCE
                USER_TYPE
                  REFERENCE_EXPRESSION
                    PsiElement(IDENTIFIER)('K')
            PsiElement(RPAR)(')')
          PsiWhiteSpace(' ')
          PsiElement(COLON)(':')
          PsiWhiteSpace(' ')
          TYPE_REFERENCE
            USER_TYPE
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('V')
        PsiWhiteSpace('\n  ')
        FUN
          PsiElement(fun)('fun')
          PsiWhiteSpace(' ')
          PsiElement(IDENTIFIER)('set')
          VALUE_PARAMETER_LIST
            PsiElement(LPAR)('(')
            VALUE_PARAMETER
              PsiElement(IDENTIFIER)('key')
              PsiWhiteSpace(' ')
              PsiElement(COLON)(':')
              PsiWhiteSpace(' ')
              TYPE_REFERENCE
                USER_TYPE
                  REFERENCE_EXPRESSION
                    PsiElement(IDENTIFIER)('K')
            PsiElement(COMMA)(',')
            PsiWhiteSpace(' ')
            VALUE_PARAMETER
              PsiElement(IDENTIFIER)('value')
              PsiWhiteSpace(' ')
              PsiElement(COLON)(':')
              PsiWhiteSpace(' ')
              TYPE_REFERENCE
                USER_TYPE
                  REFERENCE_EXPRESSION
                    PsiElement(IDENTIFIER)('V')
            PsiElement(RPAR)(')')
          PsiWhiteSpace(' ')
          PsiElement(COLON)(':')
          PsiWhiteSpace(' ')
          TYPE_REFERENCE
            USER_TYPE
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('V')
        PsiWhiteSpace('\n  ')
        FUN
          PsiElement(fun)('fun')
          PsiWhiteSpace(' ')
          PsiElement(IDENTIFIER)('remove')
          VALUE_PARAMETER_LIST
            PsiElement(LPAR)('(')
            VALUE_PARAMETER
              PsiElement(IDENTIFIER)('key')
              PsiWhiteSpace(' ')
              PsiElement(COLON)(':')
              PsiWhiteSpace(' ')
              TYPE_REFERENCE
                USER_TYPE
                  REFERENCE_EXPRESSION
                    PsiElement(IDENTIFIER)('K')
            PsiElement(RPAR)(')')
          PsiWhiteSpace(' ')
          PsiElement(COLON)(':')
          PsiWhiteSpace(' ')
          TYPE_REFERENCE
            USER_TYPE
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('V')
        PsiWhiteSpace('\n  ')
        FUN
          PsiElement(fun)('fun')
          PsiWhiteSpace(' ')
          PsiElement(IDENTIFIER)('containsKey')
          VALUE_PARAMETER_LIST
            PsiElement(LPAR)('(')
            VALUE_PARAMETER
              PsiElement(IDENTIFIER)('key')
              PsiWhiteSpace(' ')
              PsiElement(COLON)(':')
              PsiWhiteSpace(' ')
              TYPE_REFERENCE
                USER_TYPE
                  REFERENCE_EXPRESSION
                    PsiElement(IDENTIFIER)('K')
            PsiElement(RPAR)(')')
          PsiWhiteSpace(' ')
          PsiElement(COLON)(':')
          PsiWhiteSpace(' ')
          TYPE_REFERENCE
            USER_TYPE
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('Boolean')
        PsiWhiteSpace('\n')
        PsiElement(RBRACE)('}')
    PsiWhiteSpace('\n\n')
    CLASS
      PsiElement(class)('class')
      PsiWhiteSpace(' ')
      PsiElement(IDENTIFIER)('HashableWrapper')
      TYPE_PARAMETER_LIST
        <empty list>
      VALUE_PARAMETER_LIST
        PsiElement(LPAR)('(')
        VALUE_PARAMETER
          PsiElement(val)('val')
          PsiWhiteSpace(' ')
          PsiElement(IDENTIFIER)('obj')
          PsiWhiteSpace(' ')
          PsiElement(COLON)(':')
          PsiWhiteSpace(' ')
          TYPE_REFERENCE
            USER_TYPE
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('Any')
        PsiElement(RPAR)(')')
      PsiWhiteSpace(' ')
      PsiElement(COLON)(':')
      PsiWhiteSpace(' ')
      DELEGATION_SPECIFIER_LIST
        DELEGATOR_SUPER_CLASS
          TYPE_REFERENCE
            USER_TYPE
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('IHashable')
    PsiWhiteSpace('\n  ')
    PsiComment(EOL_COMMENT)('// equals and hashCode implementations are inherited')
    PsiWhiteSpace('\n\n')
    FUN
      MODIFIER_LIST
        ANNOTATION
          PsiElement(LBRACKET)('[')
          ANNOTATION_ENTRY
            CONSTRUCTOR_CALLEE
              TYPE_REFERENCE
                USER_TYPE
                  REFERENCE_EXPRESSION
                    PsiElement(IDENTIFIER)('inline')
          PsiElement(RBRACKET)(']')
      PsiWhiteSpace(' ')
      PsiElement(fun)('fun')
      PsiWhiteSpace(' ')
      TYPE_REFERENCE
        USER_TYPE
          REFERENCE_EXPRESSION
            PsiElement(IDENTIFIER)('Any')
      PsiElement(DOT)('.')
      PsiElement(IDENTIFIER)('hashable')
      VALUE_PARAMETER_LIST
        PsiElement(LPAR)('(')
        PsiElement(RPAR)(')')
      PsiWhiteSpace(' ')
      PsiElement(COLON)(':')
      PsiWhiteSpace(' ')
      TYPE_REFERENCE
        USER_TYPE
          REFERENCE_EXPRESSION
            PsiElement(IDENTIFIER)('HashableWrapper')
      PsiWhiteSpace(' ')
      PsiElement(EQ)('=')
      PsiWhiteSpace(' ')
      CALL_EXPRESSION
        REFERENCE_EXPRESSION
          PsiElement(IDENTIFIER)('HashableWrapper')
        VALUE_ARGUMENT_LIST
          PsiElement(LPAR)('(')
          VALUE_ARGUMENT
            THIS_EXPRESSION
              REFERENCE_EXPRESSION
                PsiElement(this)('this')
          PsiElement(RPAR)(')')
    PsiWhiteSpace('\n\n')
    CLASS
      MODIFIER_LIST
        PsiElement(open)('open')
      PsiWhiteSpace(' ')
      PsiElement(class)('class')
      PsiWhiteSpace(' ')
      PsiElement(IDENTIFIER)('IHashingStrategy')
      TYPE_PARAMETER_LIST
        PsiElement(LT)('<')
        TYPE_PARAMETER
          PsiElement(IDENTIFIER)('K')
        PsiElement(GT)('>')
      PsiWhiteSpace(' ')
      CLASS_BODY
        PsiElement(LBRACE)('{')
        PsiWhiteSpace('\n  ')
        FUN
          PsiElement(fun)('fun')
          PsiWhiteSpace(' ')
          PsiElement(IDENTIFIER)('equals')
          VALUE_PARAMETER_LIST
            PsiElement(LPAR)('(')
            VALUE_PARAMETER
              PsiElement(IDENTIFIER)('a')
              PsiWhiteSpace(' ')
              PsiElement(COLON)(':')
              PsiWhiteSpace(' ')
              TYPE_REFERENCE
                USER_TYPE
                  REFERENCE_EXPRESSION
                    PsiElement(IDENTIFIER)('K')
            PsiElement(COMMA)(',')
            PsiWhiteSpace(' ')
            VALUE_PARAMETER
              PsiElement(IDENTIFIER)('b')
              PsiWhiteSpace(' ')
              PsiElement(COLON)(':')
              PsiWhiteSpace(' ')
              TYPE_REFERENCE
                USER_TYPE
                  REFERENCE_EXPRESSION
                    PsiElement(IDENTIFIER)('K')
            PsiElement(RPAR)(')')
          PsiWhiteSpace(' ')
          PsiElement(COLON)(':')
          PsiWhiteSpace(' ')
          TYPE_REFERENCE
            USER_TYPE
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('Boolean')
        PsiWhiteSpace('\n  ')
        FUN
          PsiElement(fun)('fun')
          PsiWhiteSpace(' ')
          PsiElement(IDENTIFIER)('hashCode')
          VALUE_PARAMETER_LIST
            PsiElement(LPAR)('(')
            VALUE_PARAMETER
              PsiElement(IDENTIFIER)('a')
              PsiWhiteSpace(' ')
              PsiElement(COLON)(':')
              PsiWhiteSpace(' ')
              TYPE_REFERENCE
                USER_TYPE
                  REFERENCE_EXPRESSION
                    PsiElement(IDENTIFIER)('K')
            PsiElement(RPAR)(')')
          PsiWhiteSpace(' ')
          PsiElement(COLON)(':')
          PsiWhiteSpace(' ')
          TYPE_REFERENCE
            USER_TYPE
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('Integer')
        PsiWhiteSpace('\n')
        PsiElement(RBRACE)('}')
    PsiWhiteSpace('\n\n')
    CLASS
      PsiElement(class)('class')
      PsiWhiteSpace(' ')
      PsiElement(IDENTIFIER)('DefaultHashingStrategy')
      TYPE_PARAMETER_LIST
        PsiElement(LT)('<')
        TYPE_PARAMETER
          MODIFIER_LIST
            PsiElement(in)('in')
          PsiWhiteSpace(' ')
          PsiElement(IDENTIFIER)('K')
          PsiWhiteSpace(' ')
          PsiElement(COLON)(':')
          PsiWhiteSpace(' ')
          TYPE_REFERENCE
            USER_TYPE
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('IHashable')
        PsiElement(GT)('>')
      PsiWhiteSpace(' ')
      PsiElement(COLON)(':')
      PsiWhiteSpace(' ')
      DELEGATION_SPECIFIER_LIST
        DELEGATOR_SUPER_CLASS
          TYPE_REFERENCE
            USER_TYPE
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('IHashingStrategy')
              TYPE_ARGUMENT_LIST
                PsiElement(LT)('<')
                TYPE_PROJECTION
                  TYPE_REFERENCE
                    USER_TYPE
                      REFERENCE_EXPRESSION
                        PsiElement(IDENTIFIER)('K')
                PsiElement(GT)('>')
      PsiWhiteSpace(' ')
      CLASS_BODY
        PsiElement(LBRACE)('{')
        PsiWhiteSpace('\n  ')
        FUN
          MODIFIER_LIST
            PsiElement(override)('override')
          PsiWhiteSpace(' ')
          PsiElement(fun)('fun')
          PsiWhiteSpace(' ')
          PsiElement(IDENTIFIER)('equals')
          VALUE_PARAMETER_LIST
            PsiElement(LPAR)('(')
            VALUE_PARAMETER
              PsiElement(IDENTIFIER)('a')
              PsiWhiteSpace(' ')
              PsiElement(COLON)(':')
              PsiWhiteSpace(' ')
              TYPE_REFERENCE
                USER_TYPE
                  REFERENCE_EXPRESSION
                    PsiElement(IDENTIFIER)('K')
            PsiElement(COMMA)(',')
            PsiWhiteSpace(' ')
            VALUE_PARAMETER
              PsiElement(IDENTIFIER)('b')
              PsiWhiteSpace(' ')
              PsiElement(COLON)(':')
              PsiWhiteSpace(' ')
              TYPE_REFERENCE
                USER_TYPE
                  REFERENCE_EXPRESSION
                    PsiElement(IDENTIFIER)('K')
            PsiElement(RPAR)(')')
          PsiWhiteSpace(' ')
          PsiElement(COLON)(':')
          PsiWhiteSpace(' ')
          TYPE_REFERENCE
            USER_TYPE
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('Boolean')
          PsiWhiteSpace(' ')
          PsiElement(EQ)('=')
          PsiWhiteSpace(' ')
          DOT_QUALIFIED_EXPRESSION
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('a')
            PsiElement(DOT)('.')
            CALL_EXPRESSION
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('equals')
              VALUE_ARGUMENT_LIST
                PsiElement(LPAR)('(')
                VALUE_ARGUMENT
                  REFERENCE_EXPRESSION
                    PsiElement(IDENTIFIER)('b')
                PsiElement(RPAR)(')')
        PsiWhiteSpace('\n  ')
        FUN
          MODIFIER_LIST
            PsiElement(override)('override')
          PsiWhiteSpace(' ')
          PsiElement(fun)('fun')
          PsiWhiteSpace(' ')
          PsiElement(IDENTIFIER)('hashCode')
          VALUE_PARAMETER_LIST
            PsiElement(LPAR)('(')
            VALUE_PARAMETER
              PsiElement(IDENTIFIER)('a')
              PsiWhiteSpace(' ')
              PsiElement(COLON)(':')
              PsiWhiteSpace(' ')
              TYPE_REFERENCE
                USER_TYPE
                  REFERENCE_EXPRESSION
                    PsiElement(IDENTIFIER)('K')
            PsiElement(RPAR)(')')
          PsiWhiteSpace(' ')
          PsiElement(COLON)(':')
          PsiWhiteSpace(' ')
          TYPE_REFERENCE
            USER_TYPE
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('Integer')
          PsiWhiteSpace(' ')
          PsiElement(EQ)('=')
          PsiWhiteSpace(' ')
          DOT_QUALIFIED_EXPRESSION
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('a')
            PsiElement(DOT)('.')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('hashCode')
        PsiWhiteSpace('\n')
        PsiElement(RBRACE)('}')
    PsiWhiteSpace('\n\n')
    CLASS
      PsiElement(class)('class')
      PsiWhiteSpace(' ')
      PsiElement(IDENTIFIER)('JavaObjectHashingStrategy')
      TYPE_PARAMETER_LIST
        PsiElement(LT)('<')
        TYPE_PARAMETER
          PsiElement(IDENTIFIER)('K')
        PsiElement(GT)('>')
      PsiWhiteSpace(' ')
      PsiElement(COLON)(':')
      PsiWhiteSpace(' ')
      DELEGATION_SPECIFIER_LIST
        DELEGATOR_SUPER_CLASS
          TYPE_REFERENCE
            USER_TYPE
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('IHashingStrategy')
              TYPE_ARGUMENT_LIST
                PsiElement(LT)('<')
                TYPE_PROJECTION
                  TYPE_REFERENCE
                    USER_TYPE
                      REFERENCE_EXPRESSION
                        PsiElement(IDENTIFIER)('K')
                PsiElement(GT)('>')
      PsiWhiteSpace(' ')
      CLASS_BODY
        PsiElement(LBRACE)('{')
        PsiWhiteSpace('\n  ')
        FUN
          MODIFIER_LIST
            PsiElement(override)('override')
          PsiWhiteSpace(' ')
          PsiElement(fun)('fun')
          PsiWhiteSpace(' ')
          PsiElement(IDENTIFIER)('equals')
          VALUE_PARAMETER_LIST
            PsiElement(LPAR)('(')
            VALUE_PARAMETER
              PsiElement(IDENTIFIER)('a')
              PsiWhiteSpace(' ')
              PsiElement(COLON)(':')
              PsiWhiteSpace(' ')
              TYPE_REFERENCE
                USER_TYPE
                  REFERENCE_EXPRESSION
                    PsiElement(IDENTIFIER)('K')
            PsiElement(COMMA)(',')
            PsiWhiteSpace(' ')
            VALUE_PARAMETER
              PsiElement(IDENTIFIER)('b')
              PsiWhiteSpace(' ')
              PsiElement(COLON)(':')
              PsiWhiteSpace(' ')
              TYPE_REFERENCE
                USER_TYPE
                  REFERENCE_EXPRESSION
                    PsiElement(IDENTIFIER)('K')
            PsiElement(RPAR)(')')
          PsiWhiteSpace(' ')
          PsiElement(COLON)(':')
          PsiWhiteSpace(' ')
          TYPE_REFERENCE
            USER_TYPE
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('Boolean')
          PsiWhiteSpace('\n    ')
          PsiElement(EQ)('=')
          PsiWhiteSpace(' ')
          DOT_QUALIFIED_EXPRESSION
            DOT_QUALIFIED_EXPRESSION
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('a')
              PsiElement(DOT)('.')
              CALL_EXPRESSION
                REFERENCE_EXPRESSION
                  PsiElement(IDENTIFIER)('hashable')
                VALUE_ARGUMENT_LIST
                  PsiElement(LPAR)('(')
                  PsiElement(RPAR)(')')
            PsiElement(DOT)('.')
            CALL_EXPRESSION
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('equals')
              VALUE_ARGUMENT_LIST
                PsiElement(LPAR)('(')
                VALUE_ARGUMENT
                  REFERENCE_EXPRESSION
                    PsiElement(IDENTIFIER)('b')
                PsiElement(RPAR)(')')
        PsiWhiteSpace('\n  ')
        FUN
          MODIFIER_LIST
            PsiElement(override)('override')
          PsiWhiteSpace(' ')
          PsiElement(fun)('fun')
          PsiWhiteSpace(' ')
          PsiElement(IDENTIFIER)('hashCode')
          VALUE_PARAMETER_LIST
            PsiElement(LPAR)('(')
            VALUE_PARAMETER
              PsiElement(IDENTIFIER)('a')
              PsiWhiteSpace(' ')
              PsiElement(COLON)(':')
              PsiWhiteSpace(' ')
              TYPE_REFERENCE
                USER_TYPE
                  REFERENCE_EXPRESSION
                    PsiElement(IDENTIFIER)('K')
            PsiElement(RPAR)(')')
          PsiWhiteSpace(' ')
          PsiElement(COLON)(':')
          PsiWhiteSpace(' ')
          TYPE_REFERENCE
            USER_TYPE
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('Integer')
          PsiWhiteSpace('\n    ')
          PsiElement(EQ)('=')
          PsiWhiteSpace(' ')
          DOT_QUALIFIED_EXPRESSION
            DOT_QUALIFIED_EXPRESSION
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('a')
              PsiElement(DOT)('.')
              CALL_EXPRESSION
                REFERENCE_EXPRESSION
                  PsiElement(IDENTIFIER)('hashable')
                VALUE_ARGUMENT_LIST
                  PsiElement(LPAR)('(')
                  PsiElement(RPAR)(')')
            PsiElement(DOT)('.')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('hashCode')
        PsiWhiteSpace('\n')
        PsiElement(RBRACE)('}')
    PsiWhiteSpace('\n\n')
    CLASS
      PsiElement(class)('class')
      PsiWhiteSpace(' ')
      PsiElement(IDENTIFIER)('HashMap')
      TYPE_PARAMETER_LIST
        PsiElement(LT)('<')
        TYPE_PARAMETER
          PsiElement(IDENTIFIER)('K')
        PsiElement(COMMA)(',')
        PsiWhiteSpace(' ')
        TYPE_PARAMETER
          PsiElement(IDENTIFIER)('V')
        PsiElement(GT)('>')
      PsiWhiteSpace(' ')
      PsiElement(COLON)(':')
      PsiWhiteSpace(' ')
      DELEGATION_SPECIFIER_LIST
        DELEGATOR_SUPER_CLASS
          TYPE_REFERENCE
            USER_TYPE
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('IMap')
              TYPE_ARGUMENT_LIST
                PsiElement(LT)('<')
                TYPE_PROJECTION
                  TYPE_REFERENCE
                    USER_TYPE
                      REFERENCE_EXPRESSION
                        PsiElement(IDENTIFIER)('K')
                PsiElement(COMMA)(',')
                PsiWhiteSpace(' ')
                TYPE_PROJECTION
                  TYPE_REFERENCE
                    USER_TYPE
                      REFERENCE_EXPRESSION
                        PsiElement(IDENTIFIER)('V')
                PsiElement(GT)('>')
      PsiWhiteSpace(' ')
      CLASS_BODY
        PsiElement(LBRACE)('{')
        PsiWhiteSpace('\n  ')
        FUN
          MODIFIER_LIST
            PsiElement(private)('private')
            PsiWhiteSpace(' ')
            ANNOTATION
              PsiElement(LBRACKET)('[')
              ANNOTATION_ENTRY
                CONSTRUCTOR_CALLEE
                  TYPE_REFERENCE
                    USER_TYPE
                      REFERENCE_EXPRESSION
                        PsiElement(IDENTIFIER)('inline')
              PsiElement(RBRACKET)(']')
          PsiWhiteSpace(' ')
          PsiElement(fun)('fun')
          PsiWhiteSpace(' ')
          PsiElement(IDENTIFIER)('hashCode')
          VALUE_PARAMETER_LIST
            PsiElement(LPAR)('(')
            VALUE_PARAMETER
              PsiElement(IDENTIFIER)('a')
              PsiWhiteSpace(' ')
              PsiElement(COLON)(':')
              PsiWhiteSpace(' ')
              TYPE_REFERENCE
                USER_TYPE
                  REFERENCE_EXPRESSION
                    PsiElement(IDENTIFIER)('K')
            PsiElement(RPAR)(')')
          PsiWhiteSpace(' ')
          PsiElement(EQ)('=')
          PsiWhiteSpace(' ')
          DOT_QUALIFIED_EXPRESSION
            DOT_QUALIFIED_EXPRESSION
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('a')
              PsiElement(DOT)('.')
              CALL_EXPRESSION
                REFERENCE_EXPRESSION
                  PsiElement(IDENTIFIER)('hashable')
                VALUE_ARGUMENT_LIST
                  PsiElement(LPAR)('(')
                  PsiElement(RPAR)(')')
            PsiElement(DOT)('.')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('hashCode')
        PsiWhiteSpace('\n  ')
        FUN
          MODIFIER_LIST
            PsiElement(private)('private')
            PsiWhiteSpace(' ')
            ANNOTATION
              PsiElement(LBRACKET)('[')
              ANNOTATION_ENTRY
                CONSTRUCTOR_CALLEE
                  TYPE_REFERENCE
                    USER_TYPE
                      REFERENCE_EXPRESSION
                        PsiElement(IDENTIFIER)('inline')
              PsiElement(RBRACKET)(']')
          PsiWhiteSpace(' ')
          PsiElement(fun)('fun')
          PsiWhiteSpace(' ')
          PsiElement(IDENTIFIER)('equals')
          VALUE_PARAMETER_LIST
            PsiElement(LPAR)('(')
            VALUE_PARAMETER
              PsiElement(IDENTIFIER)('a')
              PsiWhiteSpace(' ')
              PsiElement(COLON)(':')
              PsiWhiteSpace(' ')
              TYPE_REFERENCE
                USER_TYPE
                  REFERENCE_EXPRESSION
                    PsiElement(IDENTIFIER)('K')
            PsiElement(COMMA)(',')
            PsiWhiteSpace(' ')
            VALUE_PARAMETER
              PsiElement(IDENTIFIER)('b')
              PsiWhiteSpace(' ')
              PsiElement(COLON)(':')
              PsiWhiteSpace(' ')
              TYPE_REFERENCE
                USER_TYPE
                  REFERENCE_EXPRESSION
                    PsiElement(IDENTIFIER)('K')
            PsiElement(RPAR)(')')
          PsiWhiteSpace(' ')
          PsiElement(EQ)('=')
          PsiWhiteSpace(' ')
          BINARY_EXPRESSION
            DOT_QUALIFIED_EXPRESSION
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('a')
              PsiElement(DOT)('.')
              CALL_EXPRESSION
                REFERENCE_EXPRESSION
                  PsiElement(IDENTIFIER)('hashable')
                VALUE_ARGUMENT_LIST
                  PsiElement(LPAR)('(')
                  PsiElement(RPAR)(')')
            PsiWhiteSpace(' ')
            OPERATION_REFERENCE
              PsiElement(EQEQ)('==')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('b')
        PsiWhiteSpace('\n\n  ')
        PsiComment(EOL_COMMENT)('// everything else uses these equals() and hashCode()... ')
        PsiWhiteSpace('\n\n')
        PsiElement(RBRACE)('}')
    PsiWhiteSpace('\n\n')
    CLASS
      PsiElement(class)('class')
      PsiWhiteSpace(' ')
      PsiElement(IDENTIFIER)('StrategyHashMap')
      TYPE_PARAMETER_LIST
        PsiElement(LT)('<')
        TYPE_PARAMETER
          PsiElement(IDENTIFIER)('K')
        PsiElement(COMMA)(',')
        PsiWhiteSpace(' ')
        TYPE_PARAMETER
          PsiElement(IDENTIFIER)('V')
        PsiElement(GT)('>')
      VALUE_PARAMETER_LIST
        PsiElement(LPAR)('(')
        VALUE_PARAMETER
          PsiElement(IDENTIFIER)('hashingStrategy')
          PsiWhiteSpace(' ')
          PsiElement(COLON)(':')
          PsiWhiteSpace(' ')
          TYPE_REFERENCE
            USER_TYPE
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('IHashingStrategy')
              TYPE_ARGUMENT_LIST
                PsiElement(LT)('<')
                TYPE_PROJECTION
                  TYPE_REFERENCE
                    USER_TYPE
                      REFERENCE_EXPRESSION
                        PsiElement(IDENTIFIER)('K')
                PsiElement(GT)('>')
        PsiElement(RPAR)(')')
      PsiWhiteSpace(' ')
      PsiElement(COLON)(':')
      PsiWhiteSpace(' ')
      DELEGATION_SPECIFIER_LIST
        DELEGATOR_SUPER_CLASS
          TYPE_REFERENCE
            USER_TYPE
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('IMap')
              TYPE_ARGUMENT_LIST
                PsiElement(LT)('<')
                TYPE_PROJECTION
                  TYPE_REFERENCE
                    USER_TYPE
                      REFERENCE_EXPRESSION
                        PsiElement(IDENTIFIER)('K')
                PsiElement(COMMA)(',')
                PsiWhiteSpace(' ')
                TYPE_PROJECTION
                  TYPE_REFERENCE
                    USER_TYPE
                      REFERENCE_EXPRESSION
                        PsiElement(IDENTIFIER)('V')
                PsiElement(GT)('>')
      PsiWhiteSpace(' ')
      CLASS_BODY
        PsiElement(LBRACE)('{')
        PsiWhiteSpace('\n\n\n  ')
        PsiComment(EOL_COMMENT)('// where !(K : IHashable)')
        PsiWhiteSpace('\n  ')
        CONSTRUCTOR
          PsiElement(this)('this')
          VALUE_PARAMETER_LIST
            PsiElement(LPAR)('(')
            PsiElement(RPAR)(')')
          PsiWhiteSpace(' ')
          PsiElement(COLON)(':')
          PsiWhiteSpace(' ')
          INITIALIZER_LIST
            THIS_CALL
              THIS_CONSTRUCTOR_REFERENCE
                PsiElement(this)('this')
              VALUE_ARGUMENT_LIST
                PsiElement(LPAR)('(')
                VALUE_ARGUMENT
                  CALL_EXPRESSION
                    REFERENCE_EXPRESSION
                      PsiElement(IDENTIFIER)('JavaObjectHashingStrategy')
                    TYPE_ARGUMENT_LIST
                      PsiElement(LT)('<')
                      TYPE_PROJECTION
                        TYPE_REFERENCE
                          USER_TYPE
                            REFERENCE_EXPRESSION
                              PsiElement(IDENTIFIER)('K')
                      PsiElement(GT)('>')
                    VALUE_ARGUMENT_LIST
                      PsiElement(LPAR)('(')
                      PsiElement(RPAR)(')')
                PsiElement(RPAR)(')')
          PsiWhiteSpace(' ')
          BLOCK
            PsiElement(LBRACE)('{')
            PsiElement(RBRACE)('}')
        PsiWhiteSpace('\n\n  ')
        PsiComment(EOL_COMMENT)('//this() where (K : IHashable) : this(DefaultHashingStrategy<K>()) {}')
        PsiWhiteSpace('\n  ')
        PsiComment(EOL_COMMENT)('//...')
        PsiWhiteSpace('\n\n')
        PsiElement(RBRACE)('}')