private void parseDef()

in src/java/org/jetbrains/plugins/clojure/parser/ClojureParser.java [363:380]


  private void parseDef(PsiBuilder builder, PsiBuilder.Marker marker) {
    final String text = builder.getTokenText();
    if (!DEF_TOKENS.contains(text) || builder.getTokenType() != symATOM) {
      internalError(ClojureBundle.message("expected.element"));
    }

    parseSymbol(builder);
    for (IElementType token = builder.getTokenType(); token != RIGHT_PAREN && token != null; token = builder.getTokenType()) {
      parseExpression(builder);
    }

    if (builder.getTokenType() != RIGHT_PAREN) {
      builder.error(ClojureBundle.message("expected.token", RIGHT_PAREN.toString()));
    } else {
      advanceLexerOrEOF(builder);
    }
    marker.done("defmethod".equals(text) ? ClojureElementTypes.DEFMETHOD : ClojureElementTypes.DEF);
  }