IDEA-148873 Quick Doc can't navigate to another member's doc via anchor link

This commit is contained in:
Dmitry Batrak committed 2015-12-07 20:41:41 +03:00
1 parent 2defa12259
commit 71c0deeae0
7 files changed
+48 -13

No files matched your search

@@ -24,6 +24,7 @@ import com.intellij.codeInsight.documentation.DocumentationManagerUtil;
import com.intellij.javadoc.JavadocGeneratorRunProfile;
import com.intellij.lang.ASTNode;
import com.intellij.lang.LangBundle;
import com.intellij.lang.java.JavaDocumentationProvider;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.projectRoots.JavaSdk;
@@ -328,24 +329,28 @@ public class JavaDocInfoGenerator {
}
if (targetElement == null) return null;
String rawFragment = null;
if (fragment != null && targetElement instanceof PsiClass) {
if (fragment.contains("-") || fragment.contains("(")) {
rawFragment = fragment;
fragment = null; // reference to a method
for (PsiMethod method : ((PsiClass)targetElement).getMethods()) {
Set<String> signatures = JavaDocumentationProvider.getHtmlMethodSignatures(method, true);
if (signatures.contains(fragment)) {
targetElement = method;
fragment = null;
break;
}
}
}
else {
for (PsiField field : ((PsiClass)targetElement).getFields()) {
if (fragment.equals(field.getName())) {
rawFragment = fragment;
fragment = null; // reference to a field
targetElement = field;
fragment = null;
break;
}
}
}
}
return DocumentationManagerProtocol.PSI_ELEMENT_PROTOCOL + JavaDocUtil.getReferenceText(targetElement.getProject(), targetElement) +
(rawFragment == null ? "" : ('#' + rawFragment)) +
(fragment == null ? "" : DocumentationManagerProtocol.PSI_ELEMENT_PROTOCOL_REF_SEPARATOR + fragment);
}
@@ -637,13 +637,7 @@ public class JavaDocumentationProvider extends DocumentationProviderEx implement
final boolean useJava8Format = PsiUtil.isLanguageLevel8OrHigher(method);
final Set<String> signatures = new LinkedHashSet<String>();
signatures.add(formatMethodSignature(method, true, useJava8Format));
signatures.add(formatMethodSignature(method, false, useJava8Format));
signatures.add(formatMethodSignature(method, true, !useJava8Format));
signatures.add(formatMethodSignature(method, false, !useJava8Format));
final Set<String> signatures = getHtmlMethodSignatures(method, useJava8Format);
for (String signature : signatures) {
for (String classUrl : classUrls) {
urls.add(classUrl + "#" + signature);
@@ -673,6 +667,16 @@ public class JavaDocumentationProvider extends DocumentationProviderEx implement
}
}
public static Set<String> getHtmlMethodSignatures(PsiMethod method, boolean java8FormatFirst) {
final Set<String> signatures = new LinkedHashSet<String>();
signatures.add(formatMethodSignature(method, true, java8FormatFirst));
signatures.add(formatMethodSignature(method, false, java8FormatFirst));
signatures.add(formatMethodSignature(method, true, !java8FormatFirst));
signatures.add(formatMethodSignature(method, false, !java8FormatFirst));
return signatures;
}
private static String formatMethodSignature(PsiMethod method, boolean raw, boolean java8Format) {
int options = PsiFormatUtilBase.SHOW_NAME | PsiFormatUtilBase.SHOW_PARAMETERS;
int parameterOptions = PsiFormatUtilBase.SHOW_TYPE | PsiFormatUtilBase.SHOW_FQ_CLASS_NAMES;