From d5edfd31000dd7e7e433d79b3ac9d33ad2ca9114 Mon Sep 17 00:00:00 2001 From: Kurt Dresner Date: Wed, 1 Nov 2023 13:42:54 -0700 Subject: [PATCH] [kotlin] Use the Kotlin source instead of the decompiled source if available closes https://github.com/JetBrains/intellij-community/pull/2602 #KTIJ-27688 Fixed GitOrigin-RevId: 8da49d7049a003434eba604c55114de74ad2ea47 --- .../idea/KotlinDocumentationProvider.kt | 4 +++ .../idea/editor/quickDoc/QuickDocJarTest.kt | 34 ++++++++++++++++++ .../editor/quickDoc/MethodFromStdLib.kt | 2 +- .../idea/tests/testData/lib/HasDefaults.jar | Bin 0 -> 17313 bytes 4 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/editor/quickDoc/QuickDocJarTest.kt create mode 100644 plugins/kotlin/idea/tests/testData/lib/HasDefaults.jar diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/KotlinDocumentationProvider.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/KotlinDocumentationProvider.kt index f55131d30edc..900a6e566da5 100644 --- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/KotlinDocumentationProvider.kt +++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/KotlinDocumentationProvider.kt @@ -337,6 +337,10 @@ class KotlinDocumentationProvider : AbstractDocumentationProvider(), ExternalDoc @Nls private fun getTextImpl(element: PsiElement, originalElement: PsiElement?, quickNavigation: Boolean): String? { + (element as? KtElement)?.navigationElement.takeIf { it != element }?.let { + return getTextImpl(it, originalElement, quickNavigation) + } + if (element is PsiWhiteSpace) { val itElement = findElementWithText(originalElement, StandardNames.IMPLICIT_LAMBDA_PARAMETER_NAME.identifier) val itReference = itElement?.getParentOfType(false) diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/editor/quickDoc/QuickDocJarTest.kt b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/editor/quickDoc/QuickDocJarTest.kt new file mode 100644 index 000000000000..319c55795558 --- /dev/null +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/editor/quickDoc/QuickDocJarTest.kt @@ -0,0 +1,34 @@ +// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package org.jetbrains.kotlin.idea.editor.quickDoc + +import com.intellij.openapi.vfs.JarFileSystem +import com.intellij.testFramework.PsiTestUtil +import org.jetbrains.kotlin.idea.KotlinDocumentationProvider +import org.jetbrains.kotlin.idea.test.IDEA_TEST_DATA_DIR +import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase +import org.junit.Assert + +class QuickDocJarTest : KotlinLightCodeInsightFixtureTestCase() { + fun testWithSources_showsDefaults() { + val classesRoot = JarFileSystem.getInstance().refreshAndFindFileByPath("$IDEA_TEST_DATA_DIR/lib/HasDefaults.jar!/") + PsiTestUtil.addProjectLibrary(myFixture.module, "mylib", listOf(classesRoot), listOf(classesRoot)) + + val psiFile = myFixture.addFileToProject("my/great/app/MyFile.kt", """ + package my.great.app + import com.example.HasDefaults + + fun myFunction() { + HasDefaults.method( + } + """.trimIndent()) + myFixture.configureFromExistingVirtualFile(psiFile.virtualFile) + + val element = myFixture.elementAtCaret + + val html = KotlinDocumentationProvider().generateDoc(element, null) + checkNotNull(html) + Assert.assertFalse(html.contains("...")) + Assert.assertTrue(html.contains("A_DEFAULT")) + Assert.assertTrue(html.contains("B_DEFAULT")) + } +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/editor/quickDoc/MethodFromStdLib.kt b/plugins/kotlin/idea/tests/testData/editor/quickDoc/MethodFromStdLib.kt index d85bbca69271..d4f37fb23e5b 100644 --- a/plugins/kotlin/idea/tests/testData/editor/quickDoc/MethodFromStdLib.kt +++ b/plugins/kotlin/idea/tests/testData/editor/quickDoc/MethodFromStdLib.kt @@ -4,4 +4,4 @@ fun test() { //INFO:
public inline fun <T> Iterable<T>.filter(
 //INFO:     predicate: (T) -> Boolean
-//INFO: ): List<T>

Returns a list containing only elements matching the given predicate.

Samples:

samples.collections.Collections.Filtering.filter

// Unresolved
 kotlin.collections
 CollectionsKt.class
+//INFO: ): List<T>

Returns a list containing only elements matching the given predicate.

Samples:

samples.collections.Collections.Filtering.filter

// Unresolved
 kotlin.collections
 _Collections.kt
diff --git a/plugins/kotlin/idea/tests/testData/lib/HasDefaults.jar b/plugins/kotlin/idea/tests/testData/lib/HasDefaults.jar new file mode 100644 index 0000000000000000000000000000000000000000..694b46aa8dbc31c0b7b3e416bf0746e8ebbcd72b GIT binary patch literal 17313 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 literal 0 HcmV?d00001