From cd71a13b092ea49e0a43fe1eeb3abfda4b108a2a Mon Sep 17 00:00:00 2001 From: Roman Golyshev Date: Tue, 30 Jul 2024 22:46:04 +0200 Subject: [PATCH] KTIJ-30581 [kotlin] Optimize `isStaticallyImportedReceiver` by only considering object receiver types If the implicit dispatch receiver is not an object, it is definitely not statically imported, so no point in performing an expensive `scopeContext` call GitOrigin-RevId: a408d2a4432d6ed782e10854f0490cd911f1367e --- .../idea/k2/codeinsight/imports/UsedReferencesCollector.kt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/plugins/kotlin/code-insight/kotlin.code-insight.k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/imports/UsedReferencesCollector.kt b/plugins/kotlin/code-insight/kotlin.code-insight.k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/imports/UsedReferencesCollector.kt index 25c6becc0c86..7584f7ab5da8 100644 --- a/plugins/kotlin/code-insight/kotlin.code-insight.k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/imports/UsedReferencesCollector.kt +++ b/plugins/kotlin/code-insight/kotlin.code-insight.k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/imports/UsedReferencesCollector.kt @@ -173,6 +173,12 @@ internal class UsedReferencesCollector(private val file: KtFile) { implicitDispatchReceiver: KaImplicitReceiverValue, containingFile: KtFile ): Boolean { + val receiverTypeSymbol = implicitDispatchReceiver.type.symbol ?: return false + val receiverIsObject = receiverTypeSymbol is KaClassSymbol && receiverTypeSymbol.classKind.isObject + + // with static imports, the implicit receiver is either some object symbol or `Unit` in case of imports from Java classes + if (!receiverIsObject) return false + val regularImplicitReceivers = containingFile.scopeContext(element).implicitReceivers return regularImplicitReceivers.none { it.type.semanticallyEquals(implicitDispatchReceiver.type) }