From 8dcd4efbc13c74c7d1193d36371aef2c23b82c10 Mon Sep 17 00:00:00 2001 From: Ivan Kochurkin Date: Tue, 5 Dec 2023 16:27:01 +0100 Subject: [PATCH] [FIR] Get rid of not needed set allocation in `getSingleVisibleClassifier` --- .../fir/resolve/calls/ConstructorProcessing.kt | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConstructorProcessing.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConstructorProcessing.kt index 6b94308477a..c3e1f494ff0 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConstructorProcessing.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConstructorProcessing.kt @@ -76,13 +76,22 @@ fun FirScope.getSingleVisibleClassifier( session: FirSession, bodyResolveComponents: BodyResolveComponents, name: Name -): FirClassifierSymbol<*>? = mutableSetOf>().apply { +): FirClassifierSymbol<*>? { + var result: FirClassifierSymbol<*>? = null + var isAmbiguousResult = false processClassifiersByName(name) { classifierSymbol -> if (!classifierSymbol.fir.isInvisibleOrHidden(session, bodyResolveComponents)) { - this.add(classifierSymbol) + if (result == classifierSymbol) return@processClassifiersByName + + if (result == null) { + result = classifierSymbol + } else { + isAmbiguousResult = true + } } } -}.singleOrNull() + return result.takeUnless { isAmbiguousResult } +} private fun FirDeclaration.isInvisibleOrHidden(session: FirSession, bodyResolveComponents: BodyResolveComponents): Boolean { if (this is FirMemberDeclaration) {