enable showing javadoc for packages in library sources

This commit is contained in:
Dmitry Batrak
2015-08-25 20:33:41 +03:00
parent 0bf5ad7a76
commit 55df687635
5 changed files with 37 additions and 2 deletions
@@ -683,7 +683,10 @@ public class JavaDocInfoGenerator {
}
private void generatePackageJavaDoc(final StringBuilder buffer, final PsiPackage psiPackage, boolean generatePrologueAndEpilogue) {
for(PsiDirectory directory: psiPackage.getDirectories()) {
VirtualFile[] dirs = PackageIndex.getInstance(myProject).getDirectoriesByPackageName(psiPackage.getQualifiedName(), true);
for (VirtualFile dir : dirs) {
PsiDirectory directory = PsiManager.getInstance(myProject).findDirectory(dir);
if (directory == null) continue;
final PsiFile packageInfoFile = directory.findFile(PsiPackage.PACKAGE_INFO_FILE);
if (packageInfoFile != null) {
final ASTNode node = packageInfoFile.getNode();
@@ -0,0 +1,2 @@
<html><head> <style type="text/css"> #error { background-color: #eeeeee; margin-bottom: 10px; } p { margin: 5px 0; } </style></head><body>
Description of com.jetbrains package</body></html>
@@ -118,7 +118,7 @@ public class JavaExternalDocumentationTest extends PlatformTestCase {
}
@NotNull
private static VirtualFile getJarFile(String name) {
public static VirtualFile getJarFile(String name) {
VirtualFile file = getVirtualFile(getDataFile(name));
assertNotNull(file);
VirtualFile jarFile = JarFileSystem.getInstance().getJarRootForLocalFile(file);
@@ -17,10 +17,19 @@ package com.intellij.codeInsight.javadoc;
import com.intellij.JavaTestUtil;
import com.intellij.codeInsight.CodeInsightTestCase;
import com.intellij.codeInsight.JavaExternalDocumentationTest;
import com.intellij.lang.java.JavaDocumentationProvider;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.roots.ModuleRootModificationUtil;
import com.intellij.openapi.roots.OrderRootType;
import com.intellij.openapi.roots.libraries.Library;
import com.intellij.openapi.roots.libraries.LibraryTablesRegistrar;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.util.PsiTreeUtil;
@@ -303,6 +312,27 @@ public class JavaDocInfoGeneratorTest extends CodeInsightTestCase {
assertNotNull(aClass);
verifyJavaDoc(aClass, Collections.singletonList("dummyUrl"));
}
public void testLibraryPackageDocumentation() throws Exception {
final VirtualFile libClasses = JavaExternalDocumentationTest.getJarFile("library.jar");
final VirtualFile libSources = JavaExternalDocumentationTest.getJarFile("library-src.jar");
ApplicationManager.getApplication().runWriteAction(() -> {
final Library library = LibraryTablesRegistrar.getInstance().getLibraryTable(myProject).createLibrary("myLib");
final Library.ModifiableModel model = library.getModifiableModel();
model.addRoot(libClasses, OrderRootType.CLASSES);
model.addRoot(libSources, OrderRootType.SOURCES);
model.commit();
Module[] modules = ModuleManager.getInstance(myProject).getModules();
assertSize(1, modules);
ModuleRootModificationUtil.addDependency(modules[0], library);
});
PsiPackage aPackage = JavaPsiFacade.getInstance(myProject).findPackage("com.jetbrains");
assertNotNull(aPackage);
verifyJavaDoc(aPackage);
}
@Override
protected String getTestDataPath() {