blob: cdc2f1bdc6ae6b121fe3f5ab0490ae2d62291ad0 [file] [log] [blame]
/*
* Copyright 2010-2018 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 kotlinx.metadata
/**
* Represents an annotation, written to the Kotlin metadata. Note that not all annotations are written to metadata on all platforms.
* For example, on JVM most of the annotations are written directly on the corresponding declarations in the class file,
* and entries in the metadata only have a flag ([Flag.HAS_ANNOTATIONS]) to signal if they do have annotations in the bytecode.
* On JVM, only annotations on type parameters and types are serialized to the Kotlin metadata.
*
* @param className the fully qualified name of the annotation class
* @param arguments explicitly specified arguments to the annotation; does not include default values for annotation parameters
* (specified in the annotation class declaration)
*/
data class KmAnnotation(val className: ClassName, val arguments: Map<String, KmAnnotationArgument<*>>)
/**
* Represents an argument to the annotation.
*
* @param T the type of the value of this argument
*/
sealed class KmAnnotationArgument<out T : Any> {
/**
* The value of this argument.
*/
abstract val value: T
data class ByteValue(override val value: Byte) : KmAnnotationArgument<Byte>()
data class CharValue(override val value: Char) : KmAnnotationArgument<Char>()
data class ShortValue(override val value: Short) : KmAnnotationArgument<Short>()
data class IntValue(override val value: Int) : KmAnnotationArgument<Int>()
data class LongValue(override val value: Long) : KmAnnotationArgument<Long>()
data class FloatValue(override val value: Float) : KmAnnotationArgument<Float>()
data class DoubleValue(override val value: Double) : KmAnnotationArgument<Double>()
data class BooleanValue(override val value: Boolean) : KmAnnotationArgument<Boolean>()
data class UByteValue(override val value: Byte) : KmAnnotationArgument<Byte>()
data class UShortValue(override val value: Short) : KmAnnotationArgument<Short>()
data class UIntValue(override val value: Int) : KmAnnotationArgument<Int>()
data class ULongValue(override val value: Long) : KmAnnotationArgument<Long>()
data class StringValue(override val value: String) : KmAnnotationArgument<String>()
data class KClassValue(override val value: ClassName) : KmAnnotationArgument<ClassName>()
data class EnumValue(val enumClassName: ClassName, val enumEntryName: String) : KmAnnotationArgument<String>() {
override val value: String = "$enumClassName.$enumEntryName"
}
data class AnnotationValue(override val value: KmAnnotation) : KmAnnotationArgument<KmAnnotation>()
data class ArrayValue(override val value: List<KmAnnotationArgument<*>>) : KmAnnotationArgument<List<KmAnnotationArgument<*>>>()
}