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);
}