IDEA-89450 Quick Documentation doesn't show package summary documentation

1. Minor refactoring;
2. Added support for package summary parsing;
3. Corresponding test is added;
This commit is contained in:
Denis.Zhdanov
2012-07-31 12:38:16 +04:00
parent b3d247ff20
commit 0cbfeac250
6 changed files with 1018 additions and 35 deletions
@@ -19,15 +19,19 @@ import com.intellij.codeInsight.documentation.AbstractExternalFilter;
import com.intellij.codeInsight.documentation.DocumentationManager;
import com.intellij.codeInsight.documentation.PlatformDocumentationUtil;
import com.intellij.ide.BrowserUtil;
import com.intellij.lang.java.JavaDocumentationProvider;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.NullableComputable;
import com.intellij.openapi.util.Trinity;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.JavaPsiFacade;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.search.GlobalSearchScope;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.regex.Matcher;
@@ -43,7 +47,13 @@ import java.util.regex.Pattern;
public class JavaDocExternalFilter extends AbstractExternalFilter {
private final Project myProject;
private static final Trinity<Pattern, Pattern, Boolean> ourPackageInfoSettings = Trinity.create(
Pattern.compile("package\\s+[^\\s]+\\s+description", Pattern.CASE_INSENSITIVE),
Pattern.compile("START OF BOTTOM NAVBAR", Pattern.CASE_INSENSITIVE),
Boolean.TRUE
);
protected static @NonNls final Pattern ourHTMLsuffix = Pattern.compile("[.][hH][tT][mM][lL]?");
protected static @NonNls final Pattern ourParentFolderprefix = Pattern.compile("^[.][.]/");
protected static @NonNls final Pattern ourAnchorsuffix = Pattern.compile("#(.*)$");
@@ -110,9 +120,11 @@ public class JavaDocExternalFilter extends AbstractExternalFilter {
if (externalDoc != null) {
if (element instanceof PsiMethod) {
final String className = ApplicationManager.getApplication().runReadAction(
new Computable<String>() {
new NullableComputable<String>() {
@Nullable
public String compute() {
return ((PsiMethod) element).getContainingClass().getQualifiedName();
PsiClass aClass = ((PsiMethod)element).getContainingClass();
return aClass == null ? null : aClass.getQualifiedName();
}
}
);
@@ -126,4 +138,9 @@ public class JavaDocExternalFilter extends AbstractExternalFilter {
return externalDoc;
}
@NotNull
@Override
protected Trinity<Pattern, Pattern, Boolean> getParseSettings(@NotNull String url) {
return url.endsWith(JavaDocumentationProvider.PACKAGE_SUMMARY_FILE) ? ourPackageInfoSettings : super.getParseSettings(url);
}
}
@@ -26,6 +26,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.psi.impl.JavaConstantExpressionEvaluator;