From 3a90cb00c79ddcd3aeb0eca5f98ce93ff3fd0776 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Mon, 15 Jan 2024 11:44:47 +0100 Subject: [PATCH] [LL FIR] reuse the same function for registering K/N FIR session components as in the compiler So, if a new component is registered in the compiler, it's not forgotten for the LL FIR This registers `FirDelegatedMembersFilter` for K/N modules and fixes KT-64528 ^KT-64528 fixed --- .../based/LLFirNativeTestGenerated.java | 6 +++++ .../LLFirReversedNativeTestGenerated.java | 6 +++++ .../fir/sessions/LLFirNativeSessionFactory.kt | 27 +++++++------------ .../nativeTests/forwardDeclarations.ll.kt | 14 +++++----- .../nativeTests/resolveToDelegatedProperty.kt | 15 +++++++++++ .../DiagnosticsNativeTestGenerated.java | 6 +++++ ...rontendNativeDiagnosticsTestGenerated.java | 6 +++++ ...rontendNativeDiagnosticsTestGenerated.java | 6 +++++ 8 files changed, 62 insertions(+), 24 deletions(-) create mode 100644 compiler/testData/diagnostics/nativeTests/resolveToDelegatedProperty.kt diff --git a/analysis/low-level-api-fir/low-level-api-fir-native/tests-gen/org/jetbrains/kotlin/analysis/low/level/api/fir/konan/compiler/based/LLFirNativeTestGenerated.java b/analysis/low-level-api-fir/low-level-api-fir-native/tests-gen/org/jetbrains/kotlin/analysis/low/level/api/fir/konan/compiler/based/LLFirNativeTestGenerated.java index be207f5e2dc..dbf132931de 100644 --- a/analysis/low-level-api-fir/low-level-api-fir-native/tests-gen/org/jetbrains/kotlin/analysis/low/level/api/fir/konan/compiler/based/LLFirNativeTestGenerated.java +++ b/analysis/low-level-api-fir/low-level-api-fir-native/tests-gen/org/jetbrains/kotlin/analysis/low/level/api/fir/konan/compiler/based/LLFirNativeTestGenerated.java @@ -80,6 +80,12 @@ public class LLFirNativeTestGenerated extends AbstractLLFirNativeTest { runTest("compiler/testData/diagnostics/nativeTests/objCRefinement.kt"); } + @Test + @TestMetadata("resolveToDelegatedProperty.kt") + public void testResolveToDelegatedProperty() throws Exception { + runTest("compiler/testData/diagnostics/nativeTests/resolveToDelegatedProperty.kt"); + } + @Test @TestMetadata("sharedImmutable.kt") public void testSharedImmutable() throws Exception { diff --git a/analysis/low-level-api-fir/low-level-api-fir-native/tests-gen/org/jetbrains/kotlin/analysis/low/level/api/fir/konan/compiler/based/LLFirReversedNativeTestGenerated.java b/analysis/low-level-api-fir/low-level-api-fir-native/tests-gen/org/jetbrains/kotlin/analysis/low/level/api/fir/konan/compiler/based/LLFirReversedNativeTestGenerated.java index 1aeb89de416..c0b95a9382d 100644 --- a/analysis/low-level-api-fir/low-level-api-fir-native/tests-gen/org/jetbrains/kotlin/analysis/low/level/api/fir/konan/compiler/based/LLFirReversedNativeTestGenerated.java +++ b/analysis/low-level-api-fir/low-level-api-fir-native/tests-gen/org/jetbrains/kotlin/analysis/low/level/api/fir/konan/compiler/based/LLFirReversedNativeTestGenerated.java @@ -80,6 +80,12 @@ public class LLFirReversedNativeTestGenerated extends AbstractLLFirReversedNativ runTest("compiler/testData/diagnostics/nativeTests/objCRefinement.kt"); } + @Test + @TestMetadata("resolveToDelegatedProperty.kt") + public void testResolveToDelegatedProperty() throws Exception { + runTest("compiler/testData/diagnostics/nativeTests/resolveToDelegatedProperty.kt"); + } + @Test @TestMetadata("sharedImmutable.kt") public void testSharedImmutable() throws Exception { diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirNativeSessionFactory.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirNativeSessionFactory.kt index 3dac1ee219f..4527f870e71 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirNativeSessionFactory.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirNativeSessionFactory.kt @@ -16,24 +16,21 @@ import org.jetbrains.kotlin.analysis.project.structure.KtModule import org.jetbrains.kotlin.analysis.project.structure.KtSourceModule import org.jetbrains.kotlin.analysis.providers.createPackagePartProvider import org.jetbrains.kotlin.fir.BuiltinTypes -import org.jetbrains.kotlin.fir.FirVisibilityChecker import org.jetbrains.kotlin.fir.SessionConfiguration -import org.jetbrains.kotlin.fir.analysis.FirDefaultOverridesBackwardCompatibilityHelper -import org.jetbrains.kotlin.fir.analysis.FirOverridesBackwardCompatibilityHelper import org.jetbrains.kotlin.fir.deserialization.SingleModuleDataProvider import org.jetbrains.kotlin.fir.java.deserialization.OptionalAnnotationClassesProvider -import org.jetbrains.kotlin.fir.resolve.calls.ConeCallConflictResolverFactory import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider -import org.jetbrains.kotlin.fir.scopes.FirPlatformClassMapper -import org.jetbrains.kotlin.fir.session.DefaultCallConflictResolverFactory +import org.jetbrains.kotlin.fir.session.FirNativeSessionFactory.registerNativeComponents +import org.jetbrains.kotlin.fir.session.FirSessionFactoryHelper.registerDefaultComponents import org.jetbrains.kotlin.utils.addIfNotNull @OptIn(SessionConfiguration::class) internal class LLFirNativeSessionFactory(project: Project) : LLFirAbstractSessionFactory(project) { override fun createSourcesSession(module: KtSourceModule): LLFirSourcesSession { return doCreateSourcesSession(module) { context -> - registerModuleIndependentNativeComponents() + registerDefaultComponents() + registerNativeComponents() register( FirSymbolProvider::class, @@ -52,7 +49,8 @@ internal class LLFirNativeSessionFactory(project: Project) : LLFirAbstractSessio override fun createLibrarySession(module: KtModule): LLFirLibraryOrLibrarySourceResolvableModuleSession { return doCreateLibrarySession(module) { context -> - registerModuleIndependentNativeComponents() + registerDefaultComponents() + registerNativeComponents() register( FirSymbolProvider::class, LLFirModuleWithDependenciesSymbolProvider( @@ -68,13 +66,15 @@ internal class LLFirNativeSessionFactory(project: Project) : LLFirAbstractSessio override fun createBinaryLibrarySession(module: KtBinaryModule): LLFirLibrarySession { return doCreateBinaryLibrarySession(module) { - registerModuleIndependentNativeComponents() + registerDefaultComponents() + registerNativeComponents() } } override fun createDanglingFileSession(module: KtDanglingFileModule, contextSession: LLFirSession): LLFirSession { return doCreateDanglingFileSession(module, contextSession) { - registerModuleIndependentNativeComponents() + registerDefaultComponents() + registerNativeComponents() register( FirSymbolProvider::class, @@ -123,11 +123,4 @@ internal class LLFirNativeSessionFactory(project: Project) : LLFirAbstractSessio ) } } - - private fun LLFirSession.registerModuleIndependentNativeComponents() { - register(FirVisibilityChecker::class, FirVisibilityChecker.Default) - register(ConeCallConflictResolverFactory::class, DefaultCallConflictResolverFactory) - register(FirPlatformClassMapper::class, FirPlatformClassMapper.Default) - register(FirOverridesBackwardCompatibilityHelper::class, FirDefaultOverridesBackwardCompatibilityHelper) - } } diff --git a/compiler/testData/diagnostics/nativeTests/forwardDeclarations.ll.kt b/compiler/testData/diagnostics/nativeTests/forwardDeclarations.ll.kt index 1162695eb4a..7fbf9d5627f 100644 --- a/compiler/testData/diagnostics/nativeTests/forwardDeclarations.ll.kt +++ b/compiler/testData/diagnostics/nativeTests/forwardDeclarations.ll.kt @@ -95,15 +95,15 @@ fun testInline4() { val c : (objcnames.protocols.FwdProtocol) -> Unit = ::inlineF } -fun testCheckedAs1(x : lib.FwdStruct) = x as cnames.structs.FwdStruct -fun testCheckedAs2(x : lib.FwdObjcClass) = x as objcnames.classes.FwdObjcClass +fun testCheckedAs1(x : lib.FwdStruct) = x as cnames.structs.FwdStruct +fun testCheckedAs2(x : lib.FwdObjcClass) = x as objcnames.classes.FwdObjcClass fun testCheckedAs3(x : lib.FwdProtocol) = x as objcnames.protocols.FwdProtocol -fun testCheckedSafeAs4(x : lib.FwdStruct) = x as? cnames.structs.FwdStruct -fun testCheckedSafeAs5(x : lib.FwdObjcClass) = x as? objcnames.classes.FwdObjcClass +fun testCheckedSafeAs4(x : lib.FwdStruct) = x as? cnames.structs.FwdStruct +fun testCheckedSafeAs5(x : lib.FwdObjcClass) = x as? objcnames.classes.FwdObjcClass fun testCheckedSafeAs6(x : lib.FwdProtocol) = x as? objcnames.protocols.FwdProtocol -fun testUnCheckedAs1(x : lib2.FwdStruct) = x as cnames.structs.FwdStruct -fun testUnCheckedAs2(x : lib2.FwdObjcClass) = x as objcnames.classes.FwdObjcClass +fun testUnCheckedAs1(x : lib2.FwdStruct) = x as cnames.structs.FwdStruct +fun testUnCheckedAs2(x : lib2.FwdObjcClass) = x as objcnames.classes.FwdObjcClass fun testUnCheckedAs3(x : lib2.FwdProtocol) = x as objcnames.protocols.FwdProtocol -fun testUnCheckedAs4(x : lib.FwdStruct) = x as objcnames.classes.FwdObjcClass +fun testUnCheckedAs4(x : lib.FwdStruct) = x as objcnames.classes.FwdObjcClass diff --git a/compiler/testData/diagnostics/nativeTests/resolveToDelegatedProperty.kt b/compiler/testData/diagnostics/nativeTests/resolveToDelegatedProperty.kt new file mode 100644 index 00000000000..65e7cb4da7a --- /dev/null +++ b/compiler/testData/diagnostics/nativeTests/resolveToDelegatedProperty.kt @@ -0,0 +1,15 @@ +// FIR_IDENTICAL + +interface A { + val bar: String +} + +interface B : A { + override val bar: String +} + +abstract class C(a: A) : B, A by a + +fun foo(c: C) { + c.bar +} \ No newline at end of file diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/diagnostics/DiagnosticsNativeTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/diagnostics/DiagnosticsNativeTestGenerated.java index ed6d4e31fca..90191e45766 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/diagnostics/DiagnosticsNativeTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/diagnostics/DiagnosticsNativeTestGenerated.java @@ -78,6 +78,12 @@ public class DiagnosticsNativeTestGenerated extends AbstractDiagnosticsNativeTes runTest("compiler/testData/diagnostics/nativeTests/objCRefinement.kt"); } + @Test + @TestMetadata("resolveToDelegatedProperty.kt") + public void testResolveToDelegatedProperty() throws Exception { + runTest("compiler/testData/diagnostics/nativeTests/resolveToDelegatedProperty.kt"); + } + @Test @TestMetadata("sharedImmutable.kt") public void testSharedImmutable() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/diagnostics/FirLightTreeOldFrontendNativeDiagnosticsTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/diagnostics/FirLightTreeOldFrontendNativeDiagnosticsTestGenerated.java index f66e20cf052..bd242767b25 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/diagnostics/FirLightTreeOldFrontendNativeDiagnosticsTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/diagnostics/FirLightTreeOldFrontendNativeDiagnosticsTestGenerated.java @@ -82,6 +82,12 @@ public class FirLightTreeOldFrontendNativeDiagnosticsTestGenerated extends Abstr runTest("compiler/testData/diagnostics/nativeTests/objCRefinement.kt"); } + @Test + @TestMetadata("resolveToDelegatedProperty.kt") + public void testResolveToDelegatedProperty() throws Exception { + runTest("compiler/testData/diagnostics/nativeTests/resolveToDelegatedProperty.kt"); + } + @Test @TestMetadata("sharedImmutable.kt") public void testSharedImmutable() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/diagnostics/FirPsiOldFrontendNativeDiagnosticsTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/diagnostics/FirPsiOldFrontendNativeDiagnosticsTestGenerated.java index 58809415daf..efc2137e0e5 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/diagnostics/FirPsiOldFrontendNativeDiagnosticsTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/diagnostics/FirPsiOldFrontendNativeDiagnosticsTestGenerated.java @@ -82,6 +82,12 @@ public class FirPsiOldFrontendNativeDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/nativeTests/objCRefinement.kt"); } + @Test + @TestMetadata("resolveToDelegatedProperty.kt") + public void testResolveToDelegatedProperty() throws Exception { + runTest("compiler/testData/diagnostics/nativeTests/resolveToDelegatedProperty.kt"); + } + @Test @TestMetadata("sharedImmutable.kt") public void testSharedImmutable() throws Exception {