diff --git a/java/java-impl/src/com/intellij/codeInsight/javadoc/JavaDocInfoGenerator.java b/java/java-impl/src/com/intellij/codeInsight/javadoc/JavaDocInfoGenerator.java index bd39b5f96f47..51f5789ff5b5 100644 --- a/java/java-impl/src/com/intellij/codeInsight/javadoc/JavaDocInfoGenerator.java +++ b/java/java-impl/src/com/intellij/codeInsight/javadoc/JavaDocInfoGenerator.java @@ -41,6 +41,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.psi.impl.JavaConstantExpressionEvaluator; import com.intellij.psi.impl.source.tree.JavaDocElementType; +import com.intellij.psi.impl.source.tree.JavaElementType; import com.intellij.psi.javadoc.*; import com.intellij.psi.search.EverythingGlobalScope; import com.intellij.psi.util.PsiFormatUtil; @@ -732,7 +733,7 @@ public class JavaDocInfoGenerator { if (packageInfoFile != null) { final ASTNode node = packageInfoFile.getNode(); if (node != null) { - final ASTNode docCommentNode = node.findChildByType(JavaDocElementType.DOC_COMMENT); + final ASTNode docCommentNode = findRelevantCommentNode(node); if (docCommentNode != null) { final PsiDocComment docComment = (PsiDocComment)docCommentNode.getPsi(); @@ -755,6 +756,19 @@ public class JavaDocInfoGenerator { } } + /** + * Finds doc comment immediately preceding package statement + */ + @Nullable + private static ASTNode findRelevantCommentNode(@NotNull ASTNode fileNode) { + ASTNode node = fileNode.findChildByType(JavaElementType.PACKAGE_STATEMENT); + if (node == null) node = fileNode.getLastChildNode(); + while (node != null && node.getElementType() != JavaDocElementType.DOC_COMMENT) { + node = node.getTreePrev(); + } + return node; + } + public void generateCommonSection(StringBuilder buffer, PsiDocComment docComment) { generateDescription(buffer, docComment); generateApiSection(buffer, docComment); diff --git a/java/java-tests/testData/codeInsight/javadocIG/packageInfoWithCopyright/package-info.java b/java/java-tests/testData/codeInsight/javadocIG/packageInfoWithCopyright/package-info.java new file mode 100644 index 000000000000..5ee475914eef --- /dev/null +++ b/java/java-tests/testData/codeInsight/javadocIG/packageInfoWithCopyright/package-info.java @@ -0,0 +1,8 @@ +/** + * Copyright + */ + +/** + * This package contains nothing but package-info.java + */ +package packageInfoWithCopyright; \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/javadocIG/packageInfoWithCopyright/packageInfo.html b/java/java-tests/testData/codeInsight/javadocIG/packageInfoWithCopyright/packageInfo.html new file mode 100644 index 000000000000..3c7ff895009c --- /dev/null +++ b/java/java-tests/testData/codeInsight/javadocIG/packageInfoWithCopyright/packageInfo.html @@ -0,0 +1,2 @@ + + This package contains nothing but package-info.java \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/javadoc/JavaDocInfoGeneratorTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/javadoc/JavaDocInfoGeneratorTest.java index 3174a67bc707..694108ce80ab 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/javadoc/JavaDocInfoGeneratorTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/javadoc/JavaDocInfoGeneratorTest.java @@ -252,13 +252,21 @@ public class JavaDocInfoGeneratorTest extends CodeInsightTestCase { } public void testPackageInfoFromComment() throws Exception { + doTestPackageInfo("some"); + } + + public void testPackageInfoWithCopyright() throws Exception { + doTestPackageInfo("packageInfoWithCopyright"); + } + + private void doTestPackageInfo(String caretPositionedAt) throws Exception { final String rootPath = getTestDataPath() + "/codeInsight/javadocIG/"; VirtualFile root = PsiTestUtil.createTestProjectStructure(myProject, myModule, rootPath, myFilesToDelete); - VirtualFile piFile = root.findFileByRelativePath("packageInfoFromComment/package-info.java"); + VirtualFile piFile = root.findFileByRelativePath(getTestName(true) + "/package-info.java"); assertNotNull(piFile); PsiFile psiFile = PsiManager.getInstance(myProject).findFile(piFile); assertNotNull(psiFile); - final String info = JavaExternalDocumentationTest.getDocumentationText(psiFile, psiFile.getText().indexOf("some")); + final String info = JavaExternalDocumentationTest.getDocumentationText(psiFile, psiFile.getText().indexOf(caretPositionedAt)); String htmlText = FileUtil.loadFile(new File(rootPath + getTestName(true) + File.separator + "packageInfo.html")); assertEquals(StringUtil.convertLineSeparators(htmlText.trim()), replaceEnvironmentDependentContent(info)); }