From 849a9d5684091b091f24598884dcb0a444afa72f Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Thu, 28 Apr 2016 17:07:40 +0300 Subject: [PATCH] IDEA-155349 JDK exceptions are not resolved in Quick Documentation --- .../com/intellij/codeInsight/javadoc/JavaDocUtil.java | 5 ++++- ...ationForJdkClassWhenExternalDocIsNotAvailable.html | 4 ++-- ...orJdkClassWithReferencesToClassesFromJavaLang.html | 8 ++++++++ ...orJdkClassWithReferencesToClassesFromJavaLang.java | 6 ++++++ .../codeInsight/javadoc/JavaDocInfoGeneratorTest.java | 11 +++++++++++ 5 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/javadocIG/documentationForJdkClassWithReferencesToClassesFromJavaLang.html create mode 100644 java/java-tests/testData/codeInsight/javadocIG/documentationForJdkClassWithReferencesToClassesFromJavaLang.java diff --git a/java/java-psi-impl/src/com/intellij/codeInsight/javadoc/JavaDocUtil.java b/java/java-psi-impl/src/com/intellij/codeInsight/javadoc/JavaDocUtil.java index a93db9929de7..f8f5a3d122d5 100644 --- a/java/java-psi-impl/src/com/intellij/codeInsight/javadoc/JavaDocUtil.java +++ b/java/java-psi-impl/src/com/intellij/codeInsight/javadoc/JavaDocUtil.java @@ -71,6 +71,9 @@ public class JavaDocUtil { @Nullable public static PsiElement findReferenceTarget(PsiManager manager, String refText, PsiElement context, boolean useNavigationElement) { LOG.assertTrue(context == null || context.isValid()); + if (context != null) { + context = context.getNavigationElement(); + } int poundIndex = refText.indexOf('#'); final JavaPsiFacade facade = JavaPsiFacade.getInstance(manager.getProject()); @@ -268,7 +271,7 @@ public class JavaDocUtil { final PsiManager manager = aClass.getManager(); return manager.areElementsEquivalent(aClass, JavaPsiFacade.getInstance(manager.getProject()).getResolveHelper().resolveReferencedClass(shortName, context)) ? shortName - : qName; + : StringUtil.trimStart(qName, "java.lang."); } public static String getLabelText(Project project, PsiManager manager, String refText, PsiElement context) { diff --git a/java/java-tests/testData/codeInsight/javadocIG/documentationForJdkClassWhenExternalDocIsNotAvailable.html b/java/java-tests/testData/codeInsight/javadocIG/documentationForJdkClassWhenExternalDocIsNotAvailable.html index f601876a818d..e98e383bb3c7 100644 --- a/java/java-tests/testData/codeInsight/javadocIG/documentationForJdkClassWhenExternalDocIsNotAvailable.html +++ b/java/java-tests/testData/codeInsight/javadocIG/documentationForJdkClassWhenExternalDocIsNotAvailable.html @@ -1,6 +1,6 @@ java.lang
public final class String
-extends java.lang.Object
-implements java.io.Serializable, java.lang.Comparable<String>, java.lang.CharSequence
+extends Object +implements java.io.Serializable, Comparable<String>, CharSequence The String class represents character strings. All string literals in Java programs, such as "abc", are implemented as instances of this class. diff --git a/java/java-tests/testData/codeInsight/javadocIG/documentationForJdkClassWithReferencesToClassesFromJavaLang.html b/java/java-tests/testData/codeInsight/javadocIG/documentationForJdkClassWithReferencesToClassesFromJavaLang.html new file mode 100644 index 000000000000..88e173d53941 --- /dev/null +++ b/java/java-tests/testData/codeInsight/javadocIG/documentationForJdkClassWithReferencesToClassesFromJavaLang.html @@ -0,0 +1,8 @@ + java.util.List
public abstract boolean contains(Object o)
+ + Returns true if this list contains the specified element. + More formally, returns true if and only if this list contains + at least one element e such that + (o==null ? e==null : o.equals(e)). + +
Overrides:
contains in interface Collection
Parameters:
o - element whose presence in this list is to be tested.
Returns:
true if this list contains the specified element.
Throws:
ClassCastException - if the type of the specified element is incompatible with this list (optional).
NullPointerException - if the specified element is null and this list does not support null elements (optional).
\ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/javadocIG/documentationForJdkClassWithReferencesToClassesFromJavaLang.java b/java/java-tests/testData/codeInsight/javadocIG/documentationForJdkClassWithReferencesToClassesFromJavaLang.java new file mode 100644 index 000000000000..47d9f53041d4 --- /dev/null +++ b/java/java-tests/testData/codeInsight/javadocIG/documentationForJdkClassWithReferencesToClassesFromJavaLang.java @@ -0,0 +1,6 @@ +class C { + { + java.util.List l = null; + l.contains(null); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/javadoc/JavaDocInfoGeneratorTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/javadoc/JavaDocInfoGeneratorTest.java index 39e0a7267b92..70240f8cefba 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/javadoc/JavaDocInfoGeneratorTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/javadoc/JavaDocInfoGeneratorTest.java @@ -345,6 +345,17 @@ public class JavaDocInfoGeneratorTest extends CodeInsightTestCase { assertNotNull(aClass); verifyJavaDoc(aClass, Collections.singletonList("dummyUrl")); } + + public void testDocumentationForJdkClassWithReferencesToClassesFromJavaLang() throws Exception { + doTestAtCaret(); + } + + private void doTestAtCaret() throws Exception { + configureByFile("/codeInsight/javadocIG/" + getTestName(true) + ".java"); + String docInfo = JavaExternalDocumentationTest.getDocumentationText(myFile, myEditor.getCaretModel().getOffset()); + assertNotNull(docInfo); + assertEquals(exampleHtmlFileText(getTestName(true)), replaceEnvironmentDependentContent(docInfo)); + } public void testLibraryPackageDocumentation() throws Exception { final VirtualFile libClasses = JavaExternalDocumentationTest.getJarFile("library.jar");