[kotlin-tooling-core] Allow nullable extra values

The change is binary compatible, but not source compatible.
Potential clients like Google might need to adapt
a potential `IdeaKotlinExtrasSerializationExtension` implementaiton.

Right now, no such implementation is known
This commit is contained in:
Sebastian Sellmair
2024-02-21 13:35:41 +01:00
committed by Space Team
parent 622a88ff26
commit 704379934e
12 changed files with 142 additions and 53 deletions
@@ -18,10 +18,10 @@ import org.jetbrains.kotlin.tooling.core.Extras
* inside the implementation of the given [IdeaKotlinExtrasSerializer]
*/
interface IdeaKotlinExtrasSerializationExtension {
fun <T : Any> serializer(key: Extras.Key<T>): IdeaKotlinExtrasSerializer<T>?
fun <T> serializer(key: Extras.Key<T>): IdeaKotlinExtrasSerializer<T>?
object Empty : IdeaKotlinExtrasSerializationExtension {
override fun <T : Any> serializer(key: Extras.Key<T>): IdeaKotlinExtrasSerializer<T>? = null
override fun <T> serializer(key: Extras.Key<T>): IdeaKotlinExtrasSerializer<T>? = null
}
}
@@ -48,7 +48,7 @@ private class IdeaKotlinExtrasSerializationExtensionBuilderImpl : IdeaKotlinExtr
private class IdeaKotlinExtrasSerializationExtensionImpl(
private val map: Map<Extras.Key<*>, IdeaKotlinExtrasSerializer<*>>
) : IdeaKotlinExtrasSerializationExtension {
override fun <T : Any> serializer(key: Extras.Key<T>): IdeaKotlinExtrasSerializer<T>? {
override fun <T> serializer(key: Extras.Key<T>): IdeaKotlinExtrasSerializer<T>? {
@Suppress("unchecked_cast")
return map[key] as? IdeaKotlinExtrasSerializer<T>
}
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.gradle.idea.serialize
import kotlin.reflect.KClass
interface IdeaKotlinExtrasSerializer<T : Any> {
interface IdeaKotlinExtrasSerializer<T> {
fun serialize(context: IdeaKotlinSerializationContext, value: T): ByteArray?
fun deserialize(context: IdeaKotlinSerializationContext, data: ByteArray): T?
@@ -16,7 +16,7 @@ object TestIdeaExtrasSerializationExtension : IdeaKotlinExtrasSerializationExten
val ignoredStringKey = extrasKeyOf<String>("ignored")
val anySerializableKey = extrasKeyOf<Any>("serializable")
override fun <T : Any> serializer(key: Extras.Key<T>): IdeaKotlinExtrasSerializer<T>? = when {
override fun <T> serializer(key: Extras.Key<T>): IdeaKotlinExtrasSerializer<T>? = when {
key == ignoredStringKey -> null
key == anySerializableKey -> IdeaKotlinExtrasSerializer.javaIoSerializable<Any>()
key.type == extrasTypeOf<String>() -> IdeaKotlinStringExtrasSerializer