Starting with Kotlin 2.0, kotlin-metadata-jvm library is promoted to stable, and is a part of Kotlin distribution now.
It means that it has the same versioning as Kotlin compiler and Kotlin standard library, and the same release cycle.
To achieve this, coordinates of the library were changed: it is now in org.jetbrains.kotlin
group with kotlin-metadata-jvm
id (notice
the drop of X
from the coordinates).
This also means that the root package was changed from kotlinx.metadata
to kotlin.metadata
.
Among other noticeable changes, all previously deprecated declarations were removed from the library. In case you need to perform a migration with aid, migrate your project to 0.9.0 version first using migration guide.
This is the last entry of this changelog. General changelog for Kotlin's Libraries
subsystem is available in the ChangeLog.md
at the repository root.
The main purpose of this release is to promote all previous deprecations to ERROR level if they were not already. Please refer to the migration guide if you are using deprecated functions. Also, this release includes several bugfixes. It still uses Kotlin 1.9, but is able to read or write metadata of version 2.0.
- Add missing documentation to
KmVersionRequirement.toString
- Raise all deprecations in kotlinx-metadata-jvm to ERROR (KT-63157)
- Do not allow writing metadata versions that are too high (KT-64230)
- Add
KmVersionRequirementKind.UNKNOWN
(KT-60870)
This release concludes our API overhaul: it features last significant API changes, as well as raised deprecations to ERROR level almost everywhere. To help with migration, we've prepared a special guide. It still uses Kotlin 1.9, but is able to read or write metadata of version 2.0.
- Provide a separate class for representing metadata version in kotlinx-metadata:
JvmMetadataVersion
- Unify write() method and make it a member of
KotlinClassMetadata
(alsoKotlinModuleMetadata
) - Split
KotlinClassMetadata.read
intoreadStrict
andreadLenient
- Promote most deprecations in kotlinx-metadata-jvm to ERROR, including Flags API and Visitors API.
- Deprecate
KmProperty.hasGetter(hasSetter)
in favor ofKmProperty.getter(setter)
- Add missing delegation in
KmDeclarationContainerVisitor.visitExtensions
for consistency
This release features several significant API changes. To help with migration, we've prepared a special guide.
- Update to Kotlin 1.9 with metadata version 1.9, support reading/writing metadata of version 2.0 which will be used in Kotlin 2.0
- Rework flags API (see migration from Flags API to Attributes API).
- Restructure
KotlinClass(Module)Metadata.write/read
(see changes in reading and writing API). - Add
@JvmStatic
+@JvmOverloads
to writing functions inKotlinClassMetadata
- Deprecate
KmModule.annotations
for removal because it is always empty and should not be used. - Move
KmModuleFragment
to ankotlinx.metadata.internal.common
package. This class is intended for internal use only. If you have use-cases for it, please report an issue to YouTrack. - Improve
toString()
forKmAnnotationArgument
- Add missing deprecation for
KmExtensionType
and experimentality forKmConstantValue
. - Enhance kotlinx-metadata-jvm KDoc and set up Dokka.
This release uses Kotlin 1.8.20 with metadata version 1.8, and as a special case, is able to read metadata of version 2.0. This is done as an incentive to test K2 compiler and 2.0 language version. No other changes were made and no migration is needed. Note: 0.6.1 was released with an incorrect fix for this problem. Do not use 0.6.1.
This release features several significant API changes. To help with migration, we've prepared a special guide.
- Update to Kotlin 1.8 with metadata version 1.8, support reading/writing metadata of version 1.9 which will be used in Kotlin 1.9
- Deprecate Visitors API
- Replace usages of
KotlinClassHeader
with direct usage ofkotlin.Metadata
annotation. Former reserved exclusively for use from Java clients. impl
package renamed tointernal
- Writers are deprecated. Special function family
KotlinClassMetadata.write
is introduced instead.
- Update to Kotlin 1.7 with metadata version 1.7, support reading/writing metadata of version 1.8 which will be used in Kotlin 1.8.
- kotlinx-metadata-jvm can no longer be used on JVM 1.6, and now requires JVM 1.8 or later.
- Add
Flag.Type.IS_DEFINITELY_NON_NULL
. - Add
KmClass.contextReceiverTypes
,KmFunction.contextReceiverTypes
,KmProperty.contextReceiverTypes
- The API is experimental and requires
@ExperimentalContextReceivers
on the usages.
- The API is experimental and requires
- Add experimental internal API to read metadata of
.kotlin_builtins
/.kotlin_metadata
files.
- Add
KmProperty.syntheticMethodForDelegate
for optimized delegated properties (KT-39055).
- Update to Kotlin 1.6 with metadata version 1.6, support reading/writing metadata of version 1.7 which will be used in Kotlin 1.7.
- Add
JvmPropertyExtensionVisitor.visitSyntheticMethodForDelegate
for optimized delegated properties (KT-39055). - Add JVM-specific class flags:
JvmClassExtensionVisitor.visitJvmFlags
JvmFlag.Class.HAS_METHOD_BODIES_IN_INTERFACE
JvmFlag.Class.IS_COMPILED_IN_COMPATIBILITY_MODE
KT-48965
Make the type ofKmValueParameter.type
non-nullKmType
- Remove unused
JvmTypeAliasExtensionVisitor
andJvmValueParameterExtensionVisitor
- Fix type flags (suspend, definitely non-null) on underlying type of inline class available via
KmClass.inlineClassUnderlyingType
- Update to Kotlin 1.5 with metadata version 1.5. Note: metadata of version 1.5 is readable by Kotlin compiler/reflection of versions 1.4 and later.
- Breaking change: improve API of annotation arguments.
KmAnnotationArgument
doesn't haveval value: T
anymore, it was moved to a subclass namedKmAnnotationArgument.LiteralValue<T>
. The propertyvalue
is:- renamed to
annotation
inAnnotationValue
- renamed to
elements
inArrayValue
- removed in favor of
enumClassName
/enumEntryName
inEnumValue
- removed in favor of
className
/arrayDimensionCount
inKClassValue
- changed type from signed to unsigned integer types in
UByteValue
,UShortValue
,UIntValue
,ULongValue
- renamed to
KT-44783
Add Flag.IS_VALUE for value classes- Breaking change:
Flag.IS_INLINE
is deprecated, useFlag.IS_VALUE
instead
- Breaking change:
- Breaking change: deprecate
KotlinClassHeader.bytecodeVersion
andKotlinClassHeader
's constructor that takes a bytecode version array. Related to 'KT-41758`. KT-45594
KClass annotation argument containing array of classes is not read/written correctlyKT-45635
Add underlying property name & type for inline classes
- 'KT-41011` Using KotlinClassMetadata.Class.Writer with metadata version < 1.4 will write incorrect version requirement table
- Breaking change:
KotlinClassMetadata.*.Writer.write
throws exception onmetadataVersion
earlier than 1.4.0. Note: metadata of version 1.4 is readable by Kotlin compiler/reflection of versions 1.3 and later.
- Breaking change:
- Breaking change:
KotlinClassMetadata.*.Writer.write
no longer acceptbytecodeVersion
. KT-42429
Wrong interpretation of Flag.Constructor.IS_PRIMARY- Breaking change:
Flag.Constructor.IS_PRIMARY
is deprecated, useFlag.Constructor.IS_SECONDARY
instead
- Breaking change:
KT-37421
Add Flag.Class.IS_FUN for functional interfaces- Add
KmModule.optionalAnnotationClasses
for the new scheme of compilation of OptionalExpectation annotations in multiplatform projects (KT-38652)
KT-26602
Provide a value-based API
KT-31308
Add module name extensions to kotlinx-metadata-jvmKT-31338
Retain "is moved from interface companion" property flag in kotlinx-metadata-jvm- Breaking change: JvmPropertyExtensionVisitor.visit has a new parameter
jvmFlags: Flags
- Breaking change: JvmPropertyExtensionVisitor.visit has a new parameter
- Correctly write "null" constant value in effect expression of a contract
- Rename
desc
parameters tosignature
in JvmFunctionExtensionVisitor, JvmPropertyExtensionVisitor, JvmConstructorExtensionVisitor - Do not expose KmExtensionType internals
- Add KmExtensionVisitor.type to get dynamic type of an extension visitor
KT-25371
Support unsigned integers in kotlinx-metadata-jvmKT-28682
Wrong character replacement in ClassName.jvmInternalName of kotlinx-metadata-jvm
KT-25920
Compile kotlinx-metadata-jvm with JVM target bytecode version 1.6 instead of 1.8KT-25223
Add JvmFunctionExtensionVisitor.visitEndKT-26188
Do not pass field signature for accessor-only properties
- Support metadata of local delegated properties (see
JvmDeclarationContainerExtensionVisitor.visitLocalDelegatedProperty
) KT-24881
Use correct class loader in kotlinx-metadata to load MetadataExtensions implementationsKT-24945
Relocate package org.jetbrains.kotlin to fix IllegalAccessError in annotation processing
- Change group ID from
org.jetbrains.kotlin
toorg.jetbrains.kotlinx
- Depend on a specific version of kotlin-stdlib from Maven Central instead of snapshot from Sonatype Nexus
- Use
JvmMethodSignature
andJvmFieldSignature
to represent JVM signatures instead of plain strings
- Initial release