From 47c47be3d35e9a207d3b7804714dec705d5e4df2 Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Sun, 2 Aug 2020 23:50:24 -0700 Subject: [PATCH] FIR serializer: serialize annotations on FirTypeRef, not ConeKotlinType --- .../kotlin/fir/serialization/FirElementSerializer.kt | 10 +++++----- .../kotlin/fir/serialization/FirSerializerExtension.kt | 4 ++-- .../fir/backend/jvm/FirJvmSerializerExtension.kt | 10 ++++------ 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt index 9f902605b9f..000f72f74cc 100644 --- a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt +++ b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt @@ -543,11 +543,13 @@ class FirElementSerializer private constructor( fun typeId(type: ConeKotlinType): Int = typeTable[typeProto(type)] - internal fun typeProto(typeRef: FirTypeRef): ProtoBuf.Type.Builder { - return typeProto(typeRef.coneType) + private fun typeProto(typeRef: FirTypeRef): ProtoBuf.Type.Builder { + return typeProto(typeRef.coneType).also { + extension.serializeType(typeRef, it) + } } - internal fun typeProto(type: ConeKotlinType): ProtoBuf.Type.Builder { + private fun typeProto(type: ConeKotlinType): ProtoBuf.Type.Builder { val builder = ProtoBuf.Type.newBuilder() when (type) { @@ -602,8 +604,6 @@ class FirElementSerializer private constructor( // } // } - extension.serializeType(type, builder) - return builder } diff --git a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirSerializerExtension.kt b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirSerializerExtension.kt index 90b88bacb90..cf49979611c 100644 --- a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirSerializerExtension.kt +++ b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirSerializerExtension.kt @@ -9,7 +9,7 @@ import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.types.ConeFlexibleType import org.jetbrains.kotlin.fir.types.ConeKotlinErrorType -import org.jetbrains.kotlin.fir.types.ConeKotlinType +import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion import org.jetbrains.kotlin.metadata.serialization.MutableVersionRequirementTable @@ -74,7 +74,7 @@ abstract class FirSerializerExtension { open fun serializeFlexibleType(type: ConeFlexibleType, lowerProto: ProtoBuf.Type.Builder, upperProto: ProtoBuf.Type.Builder) { } - open fun serializeType(type: ConeKotlinType, proto: ProtoBuf.Type.Builder) { + open fun serializeType(type: FirTypeRef, proto: ProtoBuf.Type.Builder) { } open fun serializeTypeParameter(typeParameter: FirTypeParameter, proto: ProtoBuf.TypeParameter.Builder) { diff --git a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmSerializerExtension.kt b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmSerializerExtension.kt index dff8b026d92..c0e428e1219 100644 --- a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmSerializerExtension.kt +++ b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmSerializerExtension.kt @@ -14,7 +14,6 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.descriptors.Visibilities -import org.jetbrains.kotlin.fir.FirEffectiveVisibilityImpl import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.backend.FirMetadataSource import org.jetbrains.kotlin.fir.declarations.* @@ -183,12 +182,11 @@ class FirJvmSerializerExtension @JvmOverloads constructor( } } - override fun serializeType(type: ConeKotlinType, proto: ProtoBuf.Type.Builder) { + override fun serializeType(type: FirTypeRef, proto: ProtoBuf.Type.Builder) { // TODO: don't store type annotations in our binary metadata on Java 8, use *TypeAnnotations attributes instead - // TODO: (FIR) ConeKotlinType does not store annotations, see KT-30066 -// for (annotation in type.annotations) { -// proto.addExtension(JvmProtoBuf.typeAnnotation, annotationSerializer.serializeAnnotation(annotation)) -// } + for (annotation in type.annotations) { + proto.addExtension(JvmProtoBuf.typeAnnotation, annotationSerializer.serializeAnnotation(annotation)) + } } override fun serializeTypeParameter(typeParameter: FirTypeParameter, proto: ProtoBuf.TypeParameter.Builder) {