void (@NotNull PsiBuilder builder, @NotNull AbstractBasicJavaDocElementTypeFactory.JavaDocElementTypeContainer javaDocElementTypeContainer) { // we are right after @snippet PsiBuilder.Marker snippetValue = builder.mark(); snippetValue.setCustomEdgeTokenBinders(WhitespacesBinders.GREEDY_LEFT_BINDER, WhitespacesBinders.GREEDY_RIGHT_BINDER); // recovery, when "foo" goes right after @snippet while (true) { IElementType token = getTokenType(builder); if (token != JavaDocTokenType.DOC_TAG_VALUE_QUOTE) { break; } builder.advanceLexer(); } IElementType tokenType = getTokenType(builder); if (tokenType == JavaDocTokenType.DOC_TAG_VALUE_COLON) { BasicJavaParserUtil.emptyElement(builder, javaDocElementTypeContainer.DOC_SNIPPET_ATTRIBUTE_LIST); parseSnippetTagBody(builder, javaDocElementTypeContainer); } else if (tokenType == JavaDocTokenType.DOC_TAG_VALUE_TOKEN) { parseSnippetAttributeList(builder, javaDocElementTypeContainer); if (builder.getTokenType() == JavaDocTokenType.DOC_TAG_VALUE_COLON) { parseSnippetTagBody(builder, javaDocElementTypeContainer); } } else { BasicJavaParserUtil.emptyElement(builder, javaDocElementTypeContainer.DOC_SNIPPET_ATTRIBUTE_LIST); IElementType current = getTokenType(builder); while (current != null && current != JavaDocTokenType.DOC_INLINE_TAG_END) { builder.advanceLexer(); current = getTokenType(builder); } } snippetValue.done(javaDocElementTypeContainer.DOC_SNIPPET_TAG_VALUE); }