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 000000000000..694b46aa8dbc Binary files /dev/null and b/plugins/kotlin/idea/tests/testData/lib/HasDefaults.jar differ