mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-13 21:55:01 +07:00
IDEA-148873 Quick Doc can't navigate to another member's doc via anchor link
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
<HTML><base href="placeholder"><style type="text/css"> ul.inheritance {
|
||||
margin:0;
|
||||
padding:0;
|
||||
}
|
||||
ul.inheritance li {
|
||||
display:inline;
|
||||
list-style:none;
|
||||
}
|
||||
ul.inheritance li ul.inheritance {
|
||||
margin-left:15px;
|
||||
padding-left:15px;
|
||||
padding-top:1px;
|
||||
}
|
||||
</style><a name="m1--">
|
||||
<!-- -->
|
||||
</a>
|
||||
<h3><a href="psi_element://com.jetbrains.LinkBetweenMethods"><code>com.jetbrains.LinkBetweenMethods</code></a></h3>
|
||||
<pre>public void m1()</pre>
|
||||
<div class="block"><a href="psi_element://com.jetbrains.LinkBetweenMethods#m2()"><code>m2()</code></a></div>
|
||||
</li>
|
||||
</ul>
|
||||
</HTML>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -104,6 +104,10 @@ public class JavaExternalDocumentationTest extends PlatformTestCase {
|
||||
public void testLinkToPackageSummaryWithReference() throws Exception {
|
||||
doTest("class Foo implements com.jetbrains.<caret>SimpleInterface {}");
|
||||
}
|
||||
|
||||
public void testLinkBetweenMethods() throws Exception {
|
||||
doTest("class Foo {{ new com.jetbrains.LinkBetweenMethods().<caret>m1(); }}");
|
||||
}
|
||||
|
||||
private void doTest(String text) throws Exception {
|
||||
String actualText = getDocumentationText(text);
|
||||
|
||||
Reference in New Issue
Block a user