From 6ef597a4ee28ce76e9b04fb44e0d5d2694e30bb2 Mon Sep 17 00:00:00 2001 From: Leonid Startsev Date: Tue, 30 Jun 2020 17:21:11 +0300 Subject: [PATCH] Split ContextualSerialization annotation in two --- .../backend/common/AbstractSerialGenerator.kt | 7 ++++++- .../compiler/backend/common/TypeUtil.kt | 19 ++++--------------- .../SerializationPluginErrorsRendering.kt | 2 +- .../compiler/resolve/NamingConventions.kt | 4 +++- 4 files changed, 14 insertions(+), 18 deletions(-) diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/common/AbstractSerialGenerator.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/common/AbstractSerialGenerator.kt index 76c46f666f4..dda81c7cc1a 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/common/AbstractSerialGenerator.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/common/AbstractSerialGenerator.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2020 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. */ @@ -38,6 +38,11 @@ abstract class AbstractSerialGenerator(val bindingContext: BindingContext, val c getKClassListFromFileAnnotation( SerializationAnnotations.contextualFqName, currentDeclaration + ).plus( + getKClassListFromFileAnnotation( + SerializationAnnotations.contextualOnFileFqName, + currentDeclaration + ) ).toSet() } diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/common/TypeUtil.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/common/TypeUtil.kt index 938e044c214..032e637a2f3 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/common/TypeUtil.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/common/TypeUtil.kt @@ -1,17 +1,6 @@ /* - * Copyright 2010-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Copyright 2010-2020 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.kotlinx.serialization.compiler.backend.common @@ -118,7 +107,7 @@ fun analyzeSpecialSerializers( moduleDescriptor: ModuleDescriptor, annotations: Annotations ): ClassDescriptor? = when { - annotations.hasAnnotation(SerializationAnnotations.contextualFqName) -> + annotations.hasAnnotation(SerializationAnnotations.contextualFqName) || annotations.hasAnnotation(SerializationAnnotations.contextualOnPropertyFqName) -> moduleDescriptor.getClassFromSerializationPackage(SpecialBuiltins.contextSerializer) // can be annotation on type usage, e.g. List<@Polymorphic Any> annotations.hasAnnotation(SerializationAnnotations.polymorphicFqName) -> @@ -147,7 +136,7 @@ fun AbstractSerialGenerator.findTypeSerializerOrContext( if (kType.isTypeParameter()) return null return findTypeSerializerOrContextUnchecked(module, kType) ?: throw CompilationException( "Serializer for element of type $kType has not been found.\n" + - "To use context serializer as fallback, explicitly annotate element with @ContextualSerialization", + "To use context serializer as fallback, explicitly annotate element with @Contextual", null, sourceElement ) diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/diagnostic/SerializationPluginErrorsRendering.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/diagnostic/SerializationPluginErrorsRendering.kt index 0289440de4d..f541b3ec908 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/diagnostic/SerializationPluginErrorsRendering.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/diagnostic/SerializationPluginErrorsRendering.kt @@ -48,7 +48,7 @@ object SerializationPluginErrorsRendering : DefaultErrorMessages.Extension { MAP.put( SerializationErrors.SERIALIZER_NOT_FOUND, "Serializer has not been found for type ''{0}''. " + - "To use context serializer as fallback, explicitly annotate type or property with @ContextualSerialization", + "To use context serializer as fallback, explicitly annotate type or property with @Contextual", Renderers.RENDER_TYPE_WITH_ANNOTATIONS ) MAP.put( diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/resolve/NamingConventions.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/resolve/NamingConventions.kt index 29cfbe3d6e4..cac1db59996 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/resolve/NamingConventions.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/resolve/NamingConventions.kt @@ -26,7 +26,9 @@ object SerializationAnnotations { internal val serialTransientFqName = FqName("kotlinx.serialization.Transient") internal val serialInfoFqName = FqName("kotlinx.serialization.SerialInfo") - internal val contextualFqName = FqName("kotlinx.serialization.ContextualSerialization") + internal val contextualFqName = FqName("kotlinx.serialization.ContextualSerialization") // this one is deprecated + internal val contextualOnFileFqName = FqName("kotlinx.serialization.UseContextualSerialization") + internal val contextualOnPropertyFqName = FqName("kotlinx.serialization.Contextual") internal val polymorphicFqName = FqName("kotlinx.serialization.Polymorphic") internal val additionalSerializersFqName = FqName("kotlinx.serialization.UseSerializers") }