diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java index 212a8a9f660..deb12e952d4 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java @@ -3989,6 +3989,12 @@ public class DiagnosisCompilerFirTestdataTestGenerated extends AbstractDiagnosis runTest("compiler/fir/analysis-tests/testData/resolve/visibility/kotlinJavaKotlinHierarchy.kt"); } + @Test + @TestMetadata("privateAliasInSamePackage.kt") + public void testPrivateAliasInSamePackage() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolve/visibility/privateAliasInSamePackage.kt"); + } + @Test @TestMetadata("protectedInCompanion.kt") public void testProtectedInCompanion() throws Exception { diff --git a/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java b/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java index f121e9d32bc..fce8a5371a8 100644 --- a/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java +++ b/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java @@ -3574,6 +3574,11 @@ public class LazyBodyIsNotTouchedTilContractsPhaseTestGenerated extends Abstract runTest("compiler/fir/analysis-tests/testData/resolve/visibility/kotlinJavaKotlinHierarchy.kt"); } + @TestMetadata("privateAliasInSamePackage.kt") + public void testPrivateAliasInSamePackage() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolve/visibility/privateAliasInSamePackage.kt"); + } + @TestMetadata("protectedInCompanion.kt") public void testProtectedInCompanion() throws Exception { runTest("compiler/fir/analysis-tests/testData/resolve/visibility/protectedInCompanion.kt"); diff --git a/compiler/fir/analysis-tests/testData/resolve/visibility/privateAliasInSamePackage.fir.txt b/compiler/fir/analysis-tests/testData/resolve/visibility/privateAliasInSamePackage.fir.txt new file mode 100644 index 00000000000..9f6a4635e78 --- /dev/null +++ b/compiler/fir/analysis-tests/testData/resolve/visibility/privateAliasInSamePackage.fir.txt @@ -0,0 +1,26 @@ +FILE: First.kt + package first + + private final typealias Key = R|kotlin/String| +FILE: Third.kt + package first + + public open class Base : R|kotlin/Any| { + public constructor(): R|first/Base| { + super() + } + + public final fun get(): R|T?| { + ^get Null(null) + } + + } + public final class Derived : R|first/Base| { + public constructor(): R|first/Derived| { + super|>() + } + + } + public final fun test(d: R|first/Derived|): R|kotlin/Unit| { + R|/d|.R|SubstitutionOverride|()?.{ $subj$.R|second/Second.Key.foo|() } + } diff --git a/compiler/fir/analysis-tests/testData/resolve/visibility/privateAliasInSamePackage.kt b/compiler/fir/analysis-tests/testData/resolve/visibility/privateAliasInSamePackage.kt new file mode 100644 index 00000000000..ac3e5fe0b58 --- /dev/null +++ b/compiler/fir/analysis-tests/testData/resolve/visibility/privateAliasInSamePackage.kt @@ -0,0 +1,33 @@ +// ISSUE: KT-49652 +// FILE: First.kt +package first + +private typealias Key = String + +// FILE: second/Second.java +package second + +public class Second { + public static class Key { + public void foo() {} + } + + public void bar() {} +} + +// FILE: Third.kt +package first + +import second.Second.* +import second.Second + +open class Base { + fun get(): T? = null +} + +// Key is resolved to first.Key. In fact, should be second.Second.Key, because first.Key is private-in-file +class Derived : Base() + +fun test(d: Derived) { + d.get()?.foo() +} diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java index 5e34ec31c44..43cbe72d3d6 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java @@ -3989,6 +3989,12 @@ public class FirDiagnosticTestGenerated extends AbstractFirDiagnosticTest { runTest("compiler/fir/analysis-tests/testData/resolve/visibility/kotlinJavaKotlinHierarchy.kt"); } + @Test + @TestMetadata("privateAliasInSamePackage.kt") + public void testPrivateAliasInSamePackage() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolve/visibility/privateAliasInSamePackage.kt"); + } + @Test @TestMetadata("protectedInCompanion.kt") public void testProtectedInCompanion() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java index 9b1c43e88a3..0a7c0da773d 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java @@ -3989,6 +3989,12 @@ public class FirDiagnosticsWithLightTreeTestGenerated extends AbstractFirDiagnos runTest("compiler/fir/analysis-tests/testData/resolve/visibility/kotlinJavaKotlinHierarchy.kt"); } + @Test + @TestMetadata("privateAliasInSamePackage.kt") + public void testPrivateAliasInSamePackage() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolve/visibility/privateAliasInSamePackage.kt"); + } + @Test @TestMetadata("protectedInCompanion.kt") public void testProtectedInCompanion() throws Exception { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypesResolution.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypesResolution.kt index 7e74549d4cd..fcce7c0a645 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypesResolution.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypesResolution.kt @@ -211,7 +211,7 @@ open class FirSupertypeResolverVisitor( private val scopeForLocalClass: PersistentList? = null, private val localClassesNavigationInfo: LocalClassesNavigationInfo? = null, private val firProviderInterceptor: FirProviderInterceptor? = null, - private val useSiteFile: FirFile? = null, + private var useSiteFile: FirFile? = null, containingDeclarations: List = emptyList(), ) : FirDefaultVisitor() { private val supertypeGenerationExtensions = session.extensionService.supertypeGenerators @@ -225,6 +225,16 @@ open class FirSupertypeResolverVisitor( } } + private inline fun withFile(file: FirFile, block: () -> R): R { + val oldFile = useSiteFile + try { + useSiteFile = file + return block() + } finally { + useSiteFile = oldFile + } + } + private fun getFirClassifierContainerFileIfAny(symbol: FirClassLikeSymbol<*>): FirFile? = if (firProviderInterceptor != null) firProviderInterceptor.getFirClassifierContainerFileIfAny(symbol) else session.firProvider.getFirClassifierContainerFileIfAny(symbol.classId) @@ -454,7 +464,9 @@ open class FirSupertypeResolverVisitor( } override fun visitFile(file: FirFile, data: Any?) { - visitDeclarationContent(file, null) + withFile(file) { + visitDeclarationContent(file, null) + } } }