IDEA-130011 (javadoc asterisks stripped from generated doc info)

This commit is contained in:
Roman Shevchenko
2015-07-06 17:34:39 +03:00
parent 7c7a5a4a81
commit 0fe588d76f
2 changed files with 56 additions and 8 deletions

View File

@@ -1436,23 +1436,35 @@ public class JavaDocInfoGenerator {
}
private static String createLinkText(final PsiElement[] tagElements) {
int predictOffset = tagElements.length > 0
? tagElements[0].getTextOffset() + tagElements[0].getText().length()
: 0;
StringBuilder buffer1 = new StringBuilder();
int predictOffset = tagElements.length > 0 ? tagElements[0].getTextOffset() + tagElements[0].getText().length() : 0;
StringBuilder buffer = new StringBuilder();
for (int j = 0; j < tagElements.length; j++) {
PsiElement tagElement = tagElements[j];
if (tagElement.getTextOffset() > predictOffset) buffer1.append(" ");
if (tagElement.getTextOffset() > predictOffset) buffer.append(" ");
predictOffset = tagElement.getTextOffset() + tagElement.getText().length();
buffer1.append(tagElement.getText());
collectElementText(buffer, tagElement);
if (j < tagElements.length - 1) {
buffer1.append(" ");
buffer.append(" ");
}
}
return buffer1.toString().trim();
return buffer.toString().trim();
}
private static void collectElementText(final StringBuilder buffer, PsiElement element) {
element.accept(new PsiRecursiveElementWalkingVisitor() {
@Override
public void visitElement(PsiElement element) {
super.visitElement(element);
if (element instanceof PsiWhiteSpace ||
element instanceof PsiJavaToken ||
element instanceof PsiDocToken && ((PsiDocToken)element).getTokenType() != JavaDocTokenType.DOC_COMMENT_LEADING_ASTERISKS) {
buffer.append(element.getText());
}
}
});
}
@SuppressWarnings({"HardCodedStringLiteral"})

View File

@@ -19,6 +19,7 @@ import com.intellij.codeInsight.documentation.DocumentationManager
import com.intellij.codeInsight.navigation.CtrlMouseHandler
import com.intellij.lang.java.JavaDocumentationProvider
import com.intellij.psi.PsiExpressionList
import com.intellij.psi.PsiMethod
import com.intellij.psi.util.PsiTreeUtil
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase
@@ -147,6 +148,41 @@ class JavaDocumentationTest extends LightCodeInsightFixtureTestCase {
assert doc == "private void m ()"
}
public void testAsterisksFiltering() {
configure """\
class C {
/**
* For example, {@link String#String(byte[],
* int, int,
* String)}.
*/
public void <caret>m() { }
}""".stripIndent()
def method = PsiTreeUtil.getParentOfType(myFixture.file.findElementAt(myFixture.editor.caretModel.offset), PsiMethod.class)
def doc = new JavaDocumentationProvider().generateDoc(method, null)
def expected =
"<html><head>" +
" <style type=\"text/css\">" +
" #error {" +
" background-color: #eeeeee;" +
" margin-bottom: 10px;" +
" }" +
" p {" +
" margin: 5px 0;" +
" }" +
" </style>" +
"</head><body>" +
"<small><b><a href=\"psi_element://C\"><code>C</code></a></b></small>" +
"<PRE>public&nbsp;void&nbsp;<b>m</b>()</PRE>\n " +
"For example, <a href=\"psi_element://java.lang.String#String(byte[], int, int, java.lang.String)\">" +
"<code>String.String(byte[], int, int, String)</code>" +
"</a>.</body></html>"
assert doc == expected
}
private void configure(String text) {
myFixture.configureByText 'a.java', text
}