boolean (PsiBuilder builder) { PsiBuilder.Marker marker = builder.mark(); if (isInInlinedTag) { ParserUtils.getToken(builder, GroovyDocTokenTypes.mGDOC_INLINE_TAG_START); } assert builder.getTokenType() == GroovyDocTokenTypes.mGDOC_TAG_NAME; String tagName = builder.getTokenText(); builder.advanceLexer(); if (isInInlinedTag) { if (LINK_TAG.equals(tagName) || LINKPLAIN_TAG.equals(tagName) || VALUE_TAG.equals(tagName)) { parseSeeOrLinkTagReference(builder); } } else { if (THROWS_TAG.equals(tagName) || EXCEPTION_TAG.equals(tagName)) { parseReferenceOrType(builder); } else if (SEE_TAG.equals(tagName)) { parseSeeOrLinkTagReference(builder); } else if (PARAM_TAG.equals(tagName)) { parseParamTagReference(builder); } } while (!timeToEnd(builder)) { if (isInInlinedTag) { if (builder.getTokenType() == GroovyDocTokenTypes.mGDOC_INLINE_TAG_START) { myBraceCounter++; builder.advanceLexer(); } else if (builder.getTokenType() == GroovyDocTokenTypes.mGDOC_INLINE_TAG_END) { if (myBraceCounter > 0) { myBraceCounter--; builder.advanceLexer(); } else { builder.advanceLexer(); isInInlinedTag = false; marker.done(GroovyDocElementTypes.GDOC_INLINED_TAG); return true; } } else { builder.advanceLexer(); } } else if (ParserUtils.lookAhead(builder, GroovyDocTokenTypes.mGDOC_INLINE_TAG_START, GroovyDocTokenTypes.mGDOC_TAG_NAME)) { isInInlinedTag = true; parseTag(builder); } else if (GroovyDocTokenTypes.mGDOC_TAG_NAME == builder.getTokenType()) { marker.done(GroovyDocElementTypes.GDOC_TAG); return true; } else { builder.advanceLexer(); } } marker.done(isInInlinedTag ? GroovyDocElementTypes.GDOC_INLINED_TAG : GroovyDocElementTypes.GDOC_TAG); isInInlinedTag = false; return true; }