From bdd94dddaa7f852be18a544d23bc617febfc5ca1 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 1 Aug 2023 15:29:56 +0200 Subject: [PATCH] K2: remove dependency fir-deserialization -> deserialization.common.jvm Move FirConstDeserializer to fir:java. --- compiler/fir/fir-deserialization/build.gradle.kts | 1 - .../fir/deserialization/ClassDeserialization.kt | 14 +++++--------- .../deserialization/FirDeserializationExtension.kt | 8 ++++++++ .../deserialization/FirJvmConstDeserializer.kt | 11 +++++++---- .../FirJvmDeserializationExtension.kt | 14 ++++++++++++++ 5 files changed, 34 insertions(+), 14 deletions(-) rename compiler/fir/{fir-deserialization/src/org/jetbrains/kotlin/fir => java/src/org/jetbrains/kotlin/fir/java}/deserialization/FirJvmConstDeserializer.kt (84%) diff --git a/compiler/fir/fir-deserialization/build.gradle.kts b/compiler/fir/fir-deserialization/build.gradle.kts index 988cd130418..fff90062a69 100644 --- a/compiler/fir/fir-deserialization/build.gradle.kts +++ b/compiler/fir/fir-deserialization/build.gradle.kts @@ -7,7 +7,6 @@ dependencies { implementation(project(":core:metadata")) implementation(project(":core:metadata.jvm")) implementation(project(":core:deserialization.common")) - implementation(project(":core:deserialization.common.jvm")) implementation(project(":core:compiler.common")) api(project(":compiler:fir:cones")) diff --git a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt index 084c38473a6..ee0dd73fd94 100644 --- a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt +++ b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt @@ -31,7 +31,6 @@ import org.jetbrains.kotlin.fir.types.coneTypeSafe import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl import org.jetbrains.kotlin.fir.types.toLookupTag -import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinarySourceElement import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.SerializationPluginMetadataExtensions import org.jetbrains.kotlin.metadata.deserialization.* @@ -81,12 +80,9 @@ fun deserializeClassToSymbol( } val isSealed = modality == Modality.SEALED val annotationDeserializer = defaultAnnotationDeserializer ?: FirBuiltinAnnotationDeserializer(session) - val jvmBinaryClass = (containerSource as? KotlinJvmBinarySourceElement)?.binaryClass - val constDeserializer = if (jvmBinaryClass != null) { - FirJvmConstDeserializer(session, jvmBinaryClass, serializerExtensionProtocol) - } else { - FirConstDeserializer(session, serializerExtensionProtocol) - } + val platformConstDeserializer = + session.deserializationExtension?.createConstDeserializer(containerSource, session, serializerExtensionProtocol) + val constDeserializer = platformConstDeserializer ?: FirConstDeserializer(session, serializerExtensionProtocol) val context = parentContext?.childContext( classProto.typeParameterList, @@ -98,8 +94,8 @@ fun deserializeClassToSymbol( outerClassSymbol = symbol, annotationDeserializer, when { - status.isCompanion || jvmBinaryClass == null -> parentContext.constDeserializer - else -> constDeserializer // jvmBinaryClass != null => FirJvmConstDeserializer will be used + status.isCompanion || platformConstDeserializer == null -> parentContext.constDeserializer + else -> constDeserializer // platformConstDeserializer != null => FirJvmConstDeserializer will be used on JVM }, status.isInner ) ?: FirDeserializationContext.createForClass( diff --git a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirDeserializationExtension.kt b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirDeserializationExtension.kt index 745d046e0d0..0b09d100bc3 100644 --- a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirDeserializationExtension.kt +++ b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirDeserializationExtension.kt @@ -9,7 +9,15 @@ import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSessionComponent import org.jetbrains.kotlin.fir.declarations.builder.FirRegularClassBuilder import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.serialization.SerializerExtensionProtocol +import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource abstract class FirDeserializationExtension(val session: FirSession) : FirSessionComponent { + open fun createConstDeserializer( + containerSource: DeserializedContainerSource?, + session: FirSession, + serializerExtensionProtocol: SerializerExtensionProtocol, + ): FirConstDeserializer? = null + open fun FirRegularClassBuilder.configureDeserializedClass(classId: ClassId) {} } diff --git a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirJvmConstDeserializer.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/FirJvmConstDeserializer.kt similarity index 84% rename from compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirJvmConstDeserializer.kt rename to compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/FirJvmConstDeserializer.kt index 2ed31242724..16fa8bbdaf6 100644 --- a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirJvmConstDeserializer.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/FirJvmConstDeserializer.kt @@ -1,17 +1,20 @@ /* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.fir.deserialization +package org.jetbrains.kotlin.fir.java.deserialization import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.deserialization.FirConstDeserializer +import org.jetbrains.kotlin.fir.deserialization.buildFirConstant +import org.jetbrains.kotlin.fir.deserialization.replaceName import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryClass import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.deserialization.Flags import org.jetbrains.kotlin.metadata.deserialization.NameResolver +import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.serialization.SerializerExtensionProtocol @@ -38,4 +41,4 @@ class FirJvmConstDeserializer( return constantCache[callableId] } -} \ No newline at end of file +} diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/FirJvmDeserializationExtension.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/FirJvmDeserializationExtension.kt index 232d0aeba42..9fee78adcfc 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/FirJvmDeserializationExtension.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/FirJvmDeserializationExtension.kt @@ -8,14 +8,28 @@ package org.jetbrains.kotlin.fir.java.deserialization import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSignatures import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.builder.FirRegularClassBuilder +import org.jetbrains.kotlin.fir.deserialization.FirConstDeserializer import org.jetbrains.kotlin.fir.deserialization.FirDeserializationExtension import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl import org.jetbrains.kotlin.fir.types.toLookupTag +import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinarySourceElement import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.serialization.SerializerExtensionProtocol +import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource class FirJvmDeserializationExtension(session: FirSession) : FirDeserializationExtension(session) { + override fun createConstDeserializer( + containerSource: DeserializedContainerSource?, + session: FirSession, + serializerExtensionProtocol: SerializerExtensionProtocol, + ): FirConstDeserializer? = + if (containerSource is KotlinJvmBinarySourceElement) + FirJvmConstDeserializer(session, containerSource.binaryClass, serializerExtensionProtocol) + else + null + override fun FirRegularClassBuilder.configureDeserializedClass(classId: ClassId) { addSerializableIfNeeded(classId) }