mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-10-24 13:39:06 +07:00
IDEA-148873 Quick Doc can't navigate to another member's doc via anchor link
This commit is contained in:
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;
|
||||
|
||||
Reference in new issue
Block a user