diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirPredicateBasedProviderImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirPredicateBasedProviderImpl.kt index 9d950b2aa03..ed171e4506c 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirPredicateBasedProviderImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirPredicateBasedProviderImpl.kt @@ -90,6 +90,14 @@ class FirPredicateBasedProviderImpl(private val session: FirSession) : FirPredic // ---------------------------------- Matching ---------------------------------- override fun matches(predicate: AbstractPredicate<*>, declaration: FirDeclaration): Boolean { + /* + * If declaration came from the other source session we should delegate to provider from + * that session, because it stores all caches about its own declarations + */ + val declarationSession = declaration.moduleData.session + if (declarationSession.kind == FirSession.Kind.Source && declarationSession !== session) { + return declarationSession.predicateBasedProvider.matches(predicate, declaration) + } return when (predicate) { is DeclarationPredicate -> predicate.accept(declarationPredicateMatcher, declaration) is LookupPredicate -> predicate.accept(lookupPredicateMatcher, declaration) diff --git a/plugins/kotlinx-serialization/testData/diagnostics/serializerFromOtherModule.kt b/plugins/kotlinx-serialization/testData/diagnostics/serializerFromOtherModule.kt new file mode 100644 index 00000000000..0bd4ce6e413 --- /dev/null +++ b/plugins/kotlinx-serialization/testData/diagnostics/serializerFromOtherModule.kt @@ -0,0 +1,21 @@ +// FIR_DISABLE_LAZY_RESOLVE_CHECKS +// FIR_IDENTICAL +// WITH_STDLIB +// ISSUE: KT-57083 + +// MODULE: lib +// FILE: libtest.kt + +import kotlinx.serialization.* + +@Serializable +class Access(val message: String) + +// MODULE: main(lib) +// FILE: test.kt + +import kotlinx.serialization.* +import kotlinx.serialization.json.* + +@Serializable +class Usage(val access: Access) diff --git a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirPsiDiagnosticTestGenerated.java b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirPsiDiagnosticTestGenerated.java index d6bffa4fbe1..d24603be442 100644 --- a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirPsiDiagnosticTestGenerated.java +++ b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirPsiDiagnosticTestGenerated.java @@ -134,6 +134,12 @@ public class SerializationFirPsiDiagnosticTestGenerated extends AbstractSerializ runTest("plugins/kotlinx-serialization/testData/diagnostics/SerializableIgnored.kt"); } + @Test + @TestMetadata("serializerFromOtherModule.kt") + public void testSerializerFromOtherModule() throws Exception { + runTest("plugins/kotlinx-serialization/testData/diagnostics/serializerFromOtherModule.kt"); + } + @Test @TestMetadata("SerializerTypeCompatibleForSpecials.kt") public void testSerializerTypeCompatibleForSpecials() throws Exception { diff --git a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationPluginDiagnosticTestGenerated.java b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationPluginDiagnosticTestGenerated.java index c6fd7ef3bd9..b1b47bed33c 100644 --- a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationPluginDiagnosticTestGenerated.java +++ b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationPluginDiagnosticTestGenerated.java @@ -132,6 +132,12 @@ public class SerializationPluginDiagnosticTestGenerated extends AbstractSerializ runTest("plugins/kotlinx-serialization/testData/diagnostics/SerializableIgnored.kt"); } + @Test + @TestMetadata("serializerFromOtherModule.kt") + public void testSerializerFromOtherModule() throws Exception { + runTest("plugins/kotlinx-serialization/testData/diagnostics/serializerFromOtherModule.kt"); + } + @Test @TestMetadata("SerializerTypeCompatibleForSpecials.kt") public void testSerializerTypeCompatibleForSpecials() throws Exception {