From afda5f8f45788560c5cc1928d5ece9107ea0d41d Mon Sep 17 00:00:00 2001 From: Roman Golyshev Date: Wed, 13 Aug 2025 14:15:22 +0200 Subject: [PATCH] KTIJ-35225 [kotlin] Account for all types of qualified callable symbols in KDocs in Import Optimizer Before that, only the functions were accounted for by mistake ^KTIJ-35225 Fixed GitOrigin-RevId: 747cf88412e9d675b2a1d1d0fb0a8387b2564fc8 --- .../jetbrains/kotlin/idea/references/referenceUtil.kt | 2 +- .../kDocReferences_qualifiedExtensions.Dependency.kt | 7 +++++++ .../basic/kDocReferences_qualifiedExtensions.kt | 11 +++++++++++ .../idea/k2/codeinsight/imports/ReferencedSymbol.kt | 2 +- 4 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 plugins/kotlin/code-insight/inspections-shared/tests/testData/inspections/unusedImport/basic/kDocReferences_qualifiedExtensions.Dependency.kt create mode 100644 plugins/kotlin/code-insight/inspections-shared/tests/testData/inspections/unusedImport/basic/kDocReferences_qualifiedExtensions.kt diff --git a/plugins/kotlin/base/fe10/analysis/src/org/jetbrains/kotlin/idea/references/referenceUtil.kt b/plugins/kotlin/base/fe10/analysis/src/org/jetbrains/kotlin/idea/references/referenceUtil.kt index 64a0423a66a9..208c9d4878a6 100644 --- a/plugins/kotlin/base/fe10/analysis/src/org/jetbrains/kotlin/idea/references/referenceUtil.kt +++ b/plugins/kotlin/base/fe10/analysis/src/org/jetbrains/kotlin/idea/references/referenceUtil.kt @@ -85,7 +85,7 @@ fun KtReference.canBeResolvedViaImport(target: DeclarationDescriptor, bindingCon if (this is KDocReference) { val qualifier = element.getQualifier() ?: return true return if (target.isExtension) { - val elementHasFunctionDescriptor = element.resolveMainReferenceToDescriptors().any { it is FunctionDescriptor } + val elementHasFunctionDescriptor = element.resolveMainReferenceToDescriptors().any { it is CallableDescriptor } val qualifierHasClassDescriptor = qualifier.resolveMainReferenceToDescriptors().any { it is ClassDescriptor } elementHasFunctionDescriptor && qualifierHasClassDescriptor } else { diff --git a/plugins/kotlin/code-insight/inspections-shared/tests/testData/inspections/unusedImport/basic/kDocReferences_qualifiedExtensions.Dependency.kt b/plugins/kotlin/code-insight/inspections-shared/tests/testData/inspections/unusedImport/basic/kDocReferences_qualifiedExtensions.Dependency.kt new file mode 100644 index 000000000000..590d23541418 --- /dev/null +++ b/plugins/kotlin/code-insight/inspections-shared/tests/testData/inspections/unusedImport/basic/kDocReferences_qualifiedExtensions.Dependency.kt @@ -0,0 +1,7 @@ +package kDocReferences_qualifiedExtensions.dependency + +class Foo + +fun Foo.extensionFunction() {} + +val Foo.extensionProperty: String get() = "extension property" diff --git a/plugins/kotlin/code-insight/inspections-shared/tests/testData/inspections/unusedImport/basic/kDocReferences_qualifiedExtensions.kt b/plugins/kotlin/code-insight/inspections-shared/tests/testData/inspections/unusedImport/basic/kDocReferences_qualifiedExtensions.kt new file mode 100644 index 000000000000..47ed2a217a26 --- /dev/null +++ b/plugins/kotlin/code-insight/inspections-shared/tests/testData/inspections/unusedImport/basic/kDocReferences_qualifiedExtensions.kt @@ -0,0 +1,11 @@ +package kDocReferences_qualifiedExtensions + +import kDocReferences_qualifiedExtensions.dependency.Foo +import kDocReferences_qualifiedExtensions.dependency.extensionFunction +import kDocReferences_qualifiedExtensions.dependency.extensionProperty + +/** + * Reference to [Foo.extensionFunction] + * Reference to [Foo.extensionProperty] + */ +fun foo() {} diff --git a/plugins/kotlin/code-insight/kotlin.code-insight.k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/imports/ReferencedSymbol.kt b/plugins/kotlin/code-insight/kotlin.code-insight.k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/imports/ReferencedSymbol.kt index 344b73206707..25975841c618 100644 --- a/plugins/kotlin/code-insight/kotlin.code-insight.k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/imports/ReferencedSymbol.kt +++ b/plugins/kotlin/code-insight/kotlin.code-insight.k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/imports/ReferencedSymbol.kt @@ -211,7 +211,7 @@ private fun canBeResolvedViaImport(reference: KDocReference, target: KaSymbol): val qualifier = reference.element.getQualifier() ?: return true return if (target is KaCallableSymbol && target.isExtension) { - val elementHasFunctionDescriptor = reference.element.mainReference.resolveToSymbols().any { it is KaFunctionSymbol } + val elementHasFunctionDescriptor = reference.element.mainReference.resolveToSymbols().any { it is KaCallableSymbol } val qualifierHasClassDescriptor = qualifier.mainReference.resolveToSymbols().any { it is KaClassLikeSymbol } elementHasFunctionDescriptor && qualifierHasClassDescriptor } else {