From 41c5934d4e6f0d054d341a1e5af351670d68c236 Mon Sep 17 00:00:00 2001 From: Nikolay Lunyak Date: Mon, 30 Oct 2023 14:29:04 +0200 Subject: [PATCH] [FIR] Don't forget to ignore hidden imports ^KT-59874 --- ...FirSingleLevelDefaultStarImportingScope.kt | 8 +++++ .../kotlin/fir/scopes/ImportingScopes.kt | 16 +++++----- .../impl/FirDefaultSimpleImportingScope.kt | 12 +++++--- .../RenameOnImportHidesDefaultImport.fir.kt | 4 +-- ...odifierFormForBuiltInRenameOnImport.fir.kt | 29 ------------------- ...nonModifierFormForBuiltInRenameOnImport.kt | 1 + 6 files changed, 28 insertions(+), 42 deletions(-) delete mode 100644 compiler/testData/diagnostics/testsWithStdLib/coroutines/nonModifierFormForBuiltInRenameOnImport.fir.kt diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirSingleLevelDefaultStarImportingScope.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirSingleLevelDefaultStarImportingScope.kt index 816f5b8d33f..967bf45b33f 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirSingleLevelDefaultStarImportingScope.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirSingleLevelDefaultStarImportingScope.kt @@ -50,6 +50,10 @@ class FirSingleLevelDefaultStarImportingScope( override fun processFunctionsByName(name: Name, processor: (FirNamedFunctionSymbol) -> Unit) { if (name.isSpecial || name.identifier.isNotEmpty()) { for (import in starImports) { + if (isExcluded(import, name)) { + continue + } + for (symbol in provider.getTopLevelFunctionSymbols(import.packageFqName, name)) { processor(symbol) } @@ -60,6 +64,10 @@ class FirSingleLevelDefaultStarImportingScope( override fun processPropertiesByName(name: Name, processor: (FirVariableSymbol<*>) -> Unit) { if (name.isSpecial || name.identifier.isNotEmpty()) { for (import in starImports) { + if (isExcluded(import, name)) { + continue + } + for (symbol in provider.getTopLevelPropertySymbols(import.packageFqName, name)) { processor(symbol) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/ImportingScopes.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/ImportingScopes.kt index 8ee04394f0e..e745695423d 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/ImportingScopes.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/ImportingScopes.kt @@ -19,10 +19,12 @@ import org.jetbrains.kotlin.name.FqName private val ALL_IMPORTS = scopeSessionKey() private val DEFAULT_STAR_IMPORT = scopeSessionKey() -private val DEFAULT_SIMPLE_IMPORT = scopeSessionKey() +private val DEFAULT_SIMPLE_IMPORT = scopeSessionKey() private data class DefaultStarImportKey(val priority: DefaultImportPriority, val excludedImportNames: Set) +private data class DefaultSimpleImportKey(val priority: DefaultImportPriority, val excludedImportNames: Set) + fun createImportingScopes( file: FirFile, session: FirSession, @@ -69,19 +71,19 @@ internal fun computeImportingScopes( }, ) - this += scopeSession.getOrBuild(DefaultImportPriority.KOTLIN_THROWS, DEFAULT_SIMPLE_IMPORT) { - FirDefaultSimpleImportingScope(session, scopeSession, priority = DefaultImportPriority.KOTLIN_THROWS) + this += scopeSession.getOrBuild(DefaultSimpleImportKey(DefaultImportPriority.KOTLIN_THROWS, excludedImportNames), DEFAULT_SIMPLE_IMPORT) { + FirDefaultSimpleImportingScope(session, scopeSession, priority = DefaultImportPriority.KOTLIN_THROWS, excludedImportNames) } } this += FirExplicitStarImportingScope(file.imports, session, scopeSession, excludedImportNames) if (includeDefaultImports) { - this += scopeSession.getOrBuild(DefaultImportPriority.LOW, DEFAULT_SIMPLE_IMPORT) { - FirDefaultSimpleImportingScope(session, scopeSession, priority = DefaultImportPriority.LOW) + this += scopeSession.getOrBuild(DefaultSimpleImportKey(DefaultImportPriority.LOW, excludedImportNames), DEFAULT_SIMPLE_IMPORT) { + FirDefaultSimpleImportingScope(session, scopeSession, priority = DefaultImportPriority.LOW, excludedImportNames) } - this += scopeSession.getOrBuild(DefaultImportPriority.HIGH, DEFAULT_SIMPLE_IMPORT) { - FirDefaultSimpleImportingScope(session, scopeSession, priority = DefaultImportPriority.HIGH) + this += scopeSession.getOrBuild(DefaultSimpleImportKey(DefaultImportPriority.HIGH, excludedImportNames), DEFAULT_SIMPLE_IMPORT) { + FirDefaultSimpleImportingScope(session, scopeSession, priority = DefaultImportPriority.HIGH, excludedImportNames) } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirDefaultSimpleImportingScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirDefaultSimpleImportingScope.kt index 96ceebdb0ce..421988ad4e8 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirDefaultSimpleImportingScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirDefaultSimpleImportingScope.kt @@ -13,11 +13,13 @@ import org.jetbrains.kotlin.fir.declarations.builder.buildImport import org.jetbrains.kotlin.fir.moduleData import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.transformers.FirImportResolveTransformer +import org.jetbrains.kotlin.name.FqName class FirDefaultSimpleImportingScope( session: FirSession, scopeSession: ScopeSession, - priority: DefaultImportPriority + priority: DefaultImportPriority, + private val excludedImportNames: Set, ) : FirAbstractSimpleImportingScope(session, scopeSession) { private fun FirImport.resolve(importResolveTransformer: FirImportResolveTransformer) = @@ -28,12 +30,14 @@ class FirDefaultSimpleImportingScope( val analyzerServices = session.moduleData.analyzerServices val allDefaultImports = priority.getAllDefaultImports(analyzerServices, LanguageVersionSettingsImpl.DEFAULT) allDefaultImports - ?.filter { !it.isAllUnder } - ?.map { + ?.filter { !it.isAllUnder && it.fqName !in excludedImportNames } + ?.mapNotNull { buildImport { importedFqName = it.fqName isAllUnder = false }.resolve(importResolveTransformer) - }?.filterNotNull()?.groupBy { it.importedName!! } ?: emptyMap() + } + ?.groupBy { it.importedName!! } + ?: emptyMap() } } diff --git a/compiler/testData/diagnostics/testsWithStdLib/RenameOnImportHidesDefaultImport.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/RenameOnImportHidesDefaultImport.fir.kt index fa01f93f89c..42bf893b3fd 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/RenameOnImportHidesDefaultImport.fir.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/RenameOnImportHidesDefaultImport.fir.kt @@ -3,7 +3,7 @@ import kotlin.Array as KotlinArray fun f() { listOf(1).map1 { it.hashCode() } - listOf(1).map { it.hashCode() } + listOf(1).map { it.hashCode() } } -fun g(a1: KotlinArray, a2: Array){} \ No newline at end of file +fun g(a1: KotlinArray, a2: Array){} diff --git a/compiler/testData/diagnostics/testsWithStdLib/coroutines/nonModifierFormForBuiltInRenameOnImport.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/coroutines/nonModifierFormForBuiltInRenameOnImport.fir.kt deleted file mode 100644 index 5ee1d225f23..00000000000 --- a/compiler/testData/diagnostics/testsWithStdLib/coroutines/nonModifierFormForBuiltInRenameOnImport.fir.kt +++ /dev/null @@ -1,29 +0,0 @@ -// SKIP_TXT - -import kotlin.suspend as suspendLambda - -fun bar() { - suspend { - println() - } - - kotlin.suspend { - - } - - suspendLambda { - println() - } - - suspendLambda() { - println() - } - - suspendLambda({ println() }) - - suspendLambda { - println() - } - - val w: (suspend () -> Int) -> Any? = ::suspendLambda -} diff --git a/compiler/testData/diagnostics/testsWithStdLib/coroutines/nonModifierFormForBuiltInRenameOnImport.kt b/compiler/testData/diagnostics/testsWithStdLib/coroutines/nonModifierFormForBuiltInRenameOnImport.kt index 3e421f7a054..5b8f287315c 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/coroutines/nonModifierFormForBuiltInRenameOnImport.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/coroutines/nonModifierFormForBuiltInRenameOnImport.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // SKIP_TXT import kotlin.suspend as suspendLambda