void (@NotNull StringBuilder buffer, @NotNull PsiInlineDocTag tag) { if (!(tag instanceof PsiSnippetDocTagImpl)) { LOG.error("Snippet tag must have type PsiSnippetDocTag, but was" + tag.getClass(), tag.getText()); return; } PsiSnippetDocTag snippetTag = (PsiSnippetDocTag)tag; PsiSnippetDocTagValue value = snippetTag.getValueElement(); if (value == null) { appendPlainText(buffer, snippetTag.getText()); return; } PsiSnippetDocTagBody body = value.getBody(); PsiSnippetAttributeList list = value.getAttributeList(); PsiSnippetAttribute regionAttribute = list.getAttribute(PsiSnippetAttribute.REGION_ATTRIBUTE); String region = regionAttribute == null || regionAttribute.getValue() == null ? null : regionAttribute.getValue().getValue(); PsiSnippetAttribute idAttr = list.getAttribute(PsiSnippetAttribute.ID_ATTRIBUTE); String id = idAttr == null || idAttr.getValue() == null ? null : idAttr.getValue().getValue(); String preTag = id == null ? "<pre>" : "<pre id=\"" + StringUtil.escapeXmlEntities(id) + "\">"; if (body != null) { List<Pair<PsiElement, TextRange>> files = InjectedLanguageManager.getInstance(snippetTag.getProject()).getInjectedPsiFiles(snippetTag); PsiElement element = files != null ? files.get(0).first : null; buffer.append(preTag); generateSnippetBody(buffer, element != null ? element : body, region); buffer.append("</pre>"); } else { PsiSnippetAttribute refAttribute = list.getAttribute(PsiSnippetAttribute.CLASS_ATTRIBUTE); if (refAttribute == null) { refAttribute = list.getAttribute(PsiSnippetAttribute.FILE_ATTRIBUTE); } if (refAttribute != null) { PsiSnippetAttributeValue attrValue = refAttribute.getValue(); if (attrValue != null) { PsiReference ref = attrValue.getReference(); PsiElement resolved = ref == null ? null : ref.resolve(); if (resolved instanceof PsiFile file) { buffer.append(preTag); generateSnippetBody(buffer, file, region); buffer.append("</pre>"); } else { buffer.append(getSpanForUnresolvedItem()).append(JavaBundle.message("javadoc.snippet.not.found", attrValue.getValue())) .append("</span>"); } } } } }