void (PsiBuilder builder, @Nullable String tagName, boolean isInline, @NotNull AbstractBasicJavaDocElementTypeFactory.JavaDocElementTypeContainer javaDocElementTypeContainer) { IElementType tokenType = getTokenType(builder); if (tokenType == JavaDocTokenType.DOC_INLINE_TAG_START) { int braceScope = getBraceScope(builder); if (braceScope > 0) { setBraceScope(builder, braceScope + 1); builder.remapCurrentToken(JavaDocTokenType.DOC_COMMENT_DATA); builder.advanceLexer(); return; } PsiBuilder.Marker tag = builder.mark(); builder.advanceLexer(); tokenType = getTokenType(builder); if (tokenType != JavaDocTokenType.DOC_TAG_NAME && tokenType != JavaDocTokenType.DOC_COMMENT_BAD_CHARACTER) { tag.rollbackTo(); builder.remapCurrentToken(JavaDocTokenType.DOC_COMMENT_DATA); builder.advanceLexer(); return; } setBraceScope(builder, braceScope + 1); String inlineTagName = ""; while (true) { tokenType = getTokenType(builder); if (tokenType == JavaDocTokenType.DOC_TAG_NAME) { inlineTagName = builder.getTokenText(); } else if (tokenType == null || tokenType == JavaDocTokenType.DOC_COMMENT_END) { break; } parseDataItem(builder, inlineTagName, true, javaDocElementTypeContainer); if (tokenType == JavaDocTokenType.DOC_INLINE_TAG_END) { braceScope = getBraceScope(builder); if (braceScope > 0) setBraceScope(builder, --braceScope); if (braceScope == 0) break; } } if (SNIPPET_TAG.equals(inlineTagName)) { tag.done(javaDocElementTypeContainer.DOC_SNIPPET_TAG); } else { tag.done(javaDocElementTypeContainer.DOC_INLINE_TAG); } } else if (TAG_VALUES_SET.contains(tokenType)) { if (SEE_TAG.equals(tagName) && !isInline || LINK_TAG.equals(tagName) && isInline || BasicJavaParserUtil.getLanguageLevel(builder).isAtLeast(LanguageLevel.JDK_1_4) && LINK_PLAIN_TAG.equals(tagName) && isInline) { parseSeeTagValue(builder, false, javaDocElementTypeContainer); } else if (!isInline && tagName != null && REFERENCE_TAGS.contains(tagName)) { PsiBuilder.Marker tagValue = builder.mark(); builder.remapCurrentToken(javaDocElementTypeContainer.DOC_REFERENCE_HOLDER); builder.advanceLexer(); tagValue.done(javaDocElementTypeContainer.DOC_TAG_VALUE_ELEMENT); } else if (!isInline && PARAM_TAG.equals(tagName)) { parseParameterRef(builder, javaDocElementTypeContainer); } else if (BasicJavaParserUtil.getLanguageLevel(builder).isAtLeast(LanguageLevel.JDK_1_5) && VALUE_TAG.equals(tagName) && isInline) { parseSeeTagValue(builder, true, javaDocElementTypeContainer); } else if (SNIPPET_TAG.equals(tagName) && isInline) { parseSnippetTagValue(builder, javaDocElementTypeContainer); } else { parseSimpleTagValue(builder, javaDocElementTypeContainer); } } else { remapAndAdvance(builder); } }