diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java index fb2004dcc15..42d604bf23f 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java @@ -24437,6 +24437,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag runTest("compiler/testData/diagnostics/tests/resolve/kt36264.kt"); } + @Test + @TestMetadata("kt49736.kt") + public void testKt49736() throws Exception { + runTest("compiler/testData/diagnostics/tests/resolve/kt49736.kt"); + } + @Test @TestMetadata("localObject.kt") public void testLocalObject() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java index 713ff1a60e7..c877b88be57 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java @@ -24437,6 +24437,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti runTest("compiler/testData/diagnostics/tests/resolve/kt36264.kt"); } + @Test + @TestMetadata("kt49736.kt") + public void testKt49736() throws Exception { + runTest("compiler/testData/diagnostics/tests/resolve/kt49736.kt"); + } + @Test @TestMetadata("localObject.kt") public void testLocalObject() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java index b252487d249..c3796125be5 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java @@ -24437,6 +24437,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac runTest("compiler/testData/diagnostics/tests/resolve/kt36264.kt"); } + @Test + @TestMetadata("kt49736.kt") + public void testKt49736() throws Exception { + runTest("compiler/testData/diagnostics/tests/resolve/kt49736.kt"); + } + @Test @TestMetadata("localObject.kt") public void testLocalObject() throws Exception { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/NewResolutionOldInference.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/NewResolutionOldInference.kt index faef82cb818..979ede09524 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/NewResolutionOldInference.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/NewResolutionOldInference.kt @@ -370,6 +370,9 @@ class NewResolutionOldInference( cache.getOrPut(it) { resolutionContext.transformToReceiverWithSmartCastInfo(it) } } + override fun getNameForGivenImportAlias(name: Name): Name? = + resolutionContext.call.callElement.containingKtFile.getNameForGivenImportAlias(name) + override val lexicalScope: LexicalScope get() = resolutionContext.scope override val isDebuggerContext: Boolean get() = resolutionContext.isDebuggerContext diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/PSICallResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/PSICallResolver.kt index 6256c501660..8fe148521e1 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/PSICallResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/PSICallResolver.kt @@ -408,6 +408,9 @@ class PSICallResolver( } } + override fun getNameForGivenImportAlias(name: Name): Name? = + context.call.callElement.containingKtFile.getNameForGivenImportAlias(name) + override fun interceptFunctionCandidates( resolutionScope: ResolutionScope, name: Name, diff --git a/compiler/psi/src/org/jetbrains/kotlin/psi/KtFile.kt b/compiler/psi/src/org/jetbrains/kotlin/psi/KtFile.kt index 2b090001660..648cdc47538 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/psi/KtFile.kt +++ b/compiler/psi/src/org/jetbrains/kotlin/psi/KtFile.kt @@ -30,6 +30,7 @@ import org.jetbrains.kotlin.KtNodeTypes import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.idea.KotlinLanguage import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.parsing.KotlinParserDefinition import org.jetbrains.kotlin.psi.psiUtil.getChildOfType import org.jetbrains.kotlin.psi.psiUtil.hasExpectModifier @@ -179,6 +180,9 @@ open class KtFile(viewProvider: FileViewProvider, val isCompiled: Boolean) : it.alias != null && fqName == it.importedFqName }?.alias + fun getNameForGivenImportAlias(name: Name): Name? = + importDirectives.find { it.importedName == name }?.importedFqName?.pathSegments()?.last() + @Deprecated("") // getPackageFqName should be used instead override fun getPackageName(): String { return packageFqName.asString() diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/ImplicitScopeTower.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/ImplicitScopeTower.kt index d621eb10237..3e642619ac9 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/ImplicitScopeTower.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/ImplicitScopeTower.kt @@ -39,6 +39,8 @@ interface ImplicitScopeTower { fun getImplicitReceiver(scope: LexicalScope): ReceiverValueWithSmartCastInfo? + fun getNameForGivenImportAlias(name: Name): Name? + val dynamicScope: MemberScope val syntheticScopes: SyntheticScopes diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/TowerLevels.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/TowerLevels.kt index a8d31c18d08..ad3a1e637e6 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/TowerLevels.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/TowerLevels.kt @@ -358,7 +358,8 @@ internal class HidesMembersTowerLevel(scopeTower: ImplicitScopeTower) : Abstract extensionReceiver: ReceiverValueWithSmartCastInfo?, collectCandidates: LexicalScope.(Name, LookupLocation) -> Collection ): Collection { - if (extensionReceiver == null || name !in HIDES_MEMBERS_NAME_LIST) return emptyList() + if (extensionReceiver == null) return emptyList() + if (name !in HIDES_MEMBERS_NAME_LIST && scopeTower.getNameForGivenImportAlias(name) !in HIDES_MEMBERS_NAME_LIST) return emptyList() return scopeTower.lexicalScope.collectCandidates(name, location).filter { it.extensionReceiverParameter != null && it.hasHidesMembersAnnotation() diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/TowerResolver.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/TowerResolver.kt index 6dfc48d0e17..a9daacefd42 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/TowerResolver.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/TowerResolver.kt @@ -107,7 +107,8 @@ class TowerResolver { private val useOrder: Boolean, private val name: Name ) { - private val isNameForHidesMember = name in HIDES_MEMBERS_NAME_LIST + private val isNameForHidesMember = + name in HIDES_MEMBERS_NAME_LIST || implicitScopeTower.getNameForGivenImportAlias(name) in HIDES_MEMBERS_NAME_LIST private val skippedDataForLookup = mutableListOf() private val localLevels: Collection by lazy(LazyThreadSafetyMode.NONE) { diff --git a/compiler/testData/diagnostics/tests/resolve/kt49736.fir.kt b/compiler/testData/diagnostics/tests/resolve/kt49736.fir.kt new file mode 100644 index 00000000000..4e6a6681103 --- /dev/null +++ b/compiler/testData/diagnostics/tests/resolve/kt49736.fir.kt @@ -0,0 +1,7 @@ +// WITH_RUNTIME + +import kotlin.collections.forEach as forEach1 + +fun foo() { + z.a.forEach1 { } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/resolve/kt49736.kt b/compiler/testData/diagnostics/tests/resolve/kt49736.kt new file mode 100644 index 00000000000..d27c465a288 --- /dev/null +++ b/compiler/testData/diagnostics/tests/resolve/kt49736.kt @@ -0,0 +1,7 @@ +// WITH_RUNTIME + +import kotlin.collections.forEach as forEach1 + +fun foo() { + z.a.forEach1 { } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/resolve/kt49736.txt b/compiler/testData/diagnostics/tests/resolve/kt49736.txt new file mode 100644 index 00000000000..65a6ac47e1f --- /dev/null +++ b/compiler/testData/diagnostics/tests/resolve/kt49736.txt @@ -0,0 +1,3 @@ +package + +public fun foo(): kotlin.Unit diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index ec09934f0b2..a3732383278 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -24449,6 +24449,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/resolve/kt36264.kt"); } + @Test + @TestMetadata("kt49736.kt") + public void testKt49736() throws Exception { + runTest("compiler/testData/diagnostics/tests/resolve/kt49736.kt"); + } + @Test @TestMetadata("localObject.kt") public void testLocalObject() throws Exception {