Skip to content

Commit

Permalink
Mark @SerialName, @required and @transient with @MustBeDocumented (#2407
Browse files Browse the repository at this point in the history
)

Documentation for @serializable classes describes not only the class itself, but its serializable form, which might/is used as the reference for external API/REST-like documentation.

Thus, all properties that constrain or change serialized form are explicitly marked with @MBD in order to highlight that fact in the documentation

Fixes #2386
  • Loading branch information
qwwdfsad authored Aug 10, 2023
1 parent e68f08e commit 7bf105e
Showing 1 changed file with 5 additions and 4 deletions.
9 changes: 5 additions & 4 deletions core/commonMain/src/kotlinx/serialization/Annotations.kt
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
/*
* Copyright 2017-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
* Copyright 2017-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/

@file:Suppress("NO_EXPLICIT_VISIBILITY_IN_API_MODE_WARNING") // Parameters of annotations should probably be ignored, too

package kotlinx.serialization

import kotlinx.serialization.descriptors.*
Expand Down Expand Up @@ -149,13 +147,15 @@ public annotation class Serializer(
* If a name of class or property is overridden with this annotation, original source code name is not available for the library.
* Tools like `JsonNamingStrategy` and `ProtoBufSchemaGenerator` would see and transform [value] from [SerialName] annotation.
*/
@MustBeDocumented
@Target(AnnotationTarget.PROPERTY, AnnotationTarget.CLASS)
// @Retention(AnnotationRetention.RUNTIME) still runtime, but KT-41082
public annotation class SerialName(val value: String)

/**
* Indicates that property must be present during deserialization process, despite having a default value.
*/
@MustBeDocumented
@Target(AnnotationTarget.PROPERTY)
// @Retention(AnnotationRetention.RUNTIME) still runtime, but KT-41082
public annotation class Required
Expand All @@ -164,6 +164,7 @@ public annotation class Required
* Marks this property invisible for the whole serialization process, including [serial descriptors][SerialDescriptor].
* Transient properties must have default values.
*/
@MustBeDocumented
@Target(AnnotationTarget.PROPERTY)
// @Retention(AnnotationRetention.RUNTIME) still runtime, but KT-41082
public annotation class Transient
Expand All @@ -189,6 +190,7 @@ public annotation class Transient
* @see EncodeDefault.Mode.ALWAYS
* @see EncodeDefault.Mode.NEVER
*/
@MustBeDocumented
@Target(AnnotationTarget.PROPERTY)
@ExperimentalSerializationApi
public annotation class EncodeDefault(val mode: Mode = Mode.ALWAYS) {
Expand Down Expand Up @@ -267,7 +269,6 @@ public annotation class SerialInfo
@ExperimentalSerializationApi
public annotation class InheritableSerialInfo


/**
* Instructs the plugin to use [ContextualSerializer] on a given property or type.
* Context serializer is usually used when serializer for type can only be found in runtime.
Expand Down

0 comments on commit 7bf105e

Please sign in to comment.