From 8cee0496f3f9b7bca60a243cc7c12ecb1d5af190 Mon Sep 17 00:00:00 2001 From: Sebastian Sellmair Date: Wed, 30 Nov 2022 10:50:03 +0100 Subject: [PATCH] [Gradle] Lift String, Int and Boolean serializers from testFixtures to main source set KT-55189 --- .../IdeaKotlinBooleanExtrasSerializer.kt | 28 ++++++++++++++ .../IdeaKotlinIntExtrasSerializer.kt} | 8 ++-- .../IdeaKotlinStringExtrasSerializer.kt | 16 ++++++++ .../IdeaKotlinBooleanExtrasSerializerTest.kt | 38 +++++++++++++++++++ .../IdeaKotlinIntExtrasSerializerTest.kt | 24 ++++++++++++ .../IdeaKotlinStringExtrasSerializerTest.kt | 21 ++++++++++ .../TestIdeaExtrasSerializationExtension.kt | 8 ++-- .../TestIdeaStringKotlinExtrasSerializer.kt | 14 ------- 8 files changed, 134 insertions(+), 23 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinBooleanExtrasSerializer.kt rename libraries/tools/kotlin-gradle-plugin-idea/src/{testFixtures/kotlin/org/jetbrains/kotlin/gradle/idea/testFixtures/serialize/TestIdeaIntKotlinExtrasSerializer.kt => main/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinIntExtrasSerializer.kt} (64%) create mode 100644 libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinStringExtrasSerializer.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinBooleanExtrasSerializerTest.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinIntExtrasSerializerTest.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinStringExtrasSerializerTest.kt delete mode 100644 libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/idea/testFixtures/serialize/TestIdeaStringKotlinExtrasSerializer.kt diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinBooleanExtrasSerializer.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinBooleanExtrasSerializer.kt new file mode 100644 index 00000000000..86f01d09e87 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinBooleanExtrasSerializer.kt @@ -0,0 +1,28 @@ +/* + * Copyright 2010-2022 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.kotlin.gradle.idea.serialize + +object IdeaKotlinBooleanExtrasSerializer : IdeaKotlinExtrasSerializer { + override fun serialize(context: IdeaKotlinSerializationContext, value: Boolean): ByteArray { + return byteArrayOf(if (value) 1 else 0) + } + + override fun deserialize(context: IdeaKotlinSerializationContext, data: ByteArray): Boolean? { + if (data.isEmpty()) { + context.logger.error("Failed to decode Boolean from empty array") + return null + } + + return when (val value = data.first()) { + 0.toByte() -> false + 1.toByte() -> true + else -> { + context.logger.error("Failed to decode Boolean from value $value") + null + } + } + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/idea/testFixtures/serialize/TestIdeaIntKotlinExtrasSerializer.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinIntExtrasSerializer.kt similarity index 64% rename from libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/idea/testFixtures/serialize/TestIdeaIntKotlinExtrasSerializer.kt rename to libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinIntExtrasSerializer.kt index c77045bf96c..0f42e3aa777 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/idea/testFixtures/serialize/TestIdeaIntKotlinExtrasSerializer.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinIntExtrasSerializer.kt @@ -3,13 +3,11 @@ * 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.kotlin.gradle.idea.testFixtures.serialize +package org.jetbrains.kotlin.gradle.idea.serialize -import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinExtrasSerializer -import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinSerializationContext import java.nio.ByteBuffer -object TestIdeaIntKotlinExtrasSerializer : IdeaKotlinExtrasSerializer { +object IdeaKotlinIntExtrasSerializer : IdeaKotlinExtrasSerializer { override fun serialize(context: IdeaKotlinSerializationContext, value: Int): ByteArray { return ByteBuffer.allocate(Int.SIZE_BYTES).putInt(value).array() } @@ -17,4 +15,4 @@ object TestIdeaIntKotlinExtrasSerializer : IdeaKotlinExtrasSerializer { override fun deserialize(context: IdeaKotlinSerializationContext, data: ByteArray): Int { return ByteBuffer.wrap(data).int } -} +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinStringExtrasSerializer.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinStringExtrasSerializer.kt new file mode 100644 index 00000000000..4b7db506a31 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinStringExtrasSerializer.kt @@ -0,0 +1,16 @@ +/* + * Copyright 2010-2022 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.kotlin.gradle.idea.serialize + +object IdeaKotlinStringExtrasSerializer : IdeaKotlinExtrasSerializer { + override fun serialize(context: IdeaKotlinSerializationContext, value: String): ByteArray { + return value.encodeToByteArray() + } + + override fun deserialize(context: IdeaKotlinSerializationContext, data: ByteArray): String { + return data.decodeToString() + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinBooleanExtrasSerializerTest.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinBooleanExtrasSerializerTest.kt new file mode 100644 index 00000000000..ad7bf95b4bc --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinBooleanExtrasSerializerTest.kt @@ -0,0 +1,38 @@ +/* + * Copyright 2010-2022 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.kotlin.gradle.idea.serialize + +import org.jetbrains.kotlin.gradle.idea.testFixtures.serialize.TestIdeaKotlinSerializationContext +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertNull +import kotlin.test.fail + +class IdeaKotlinBooleanExtrasSerializerTest { + + @Test + fun `test - true`() { + val context = TestIdeaKotlinSerializationContext() + val data = IdeaKotlinBooleanExtrasSerializer.serialize(context, true) + assertEquals(true, IdeaKotlinBooleanExtrasSerializer.deserialize(context, data)) + if (context.logger.reports.isNotEmpty()) fail("Unexpected reports: ${context.logger.reports}") + } + + @Test + fun `test - false`() { + val context = TestIdeaKotlinSerializationContext() + val data = IdeaKotlinBooleanExtrasSerializer.serialize(context, false) + assertEquals(false, IdeaKotlinBooleanExtrasSerializer.deserialize(context, data)) + if (context.logger.reports.isNotEmpty()) fail("Unexpected reports: ${context.logger.reports}") + } + + @Test + fun `test - bad data`() { + val context = TestIdeaKotlinSerializationContext() + assertNull(IdeaKotlinBooleanExtrasSerializer.deserialize(context, byteArrayOf())) + if (context.logger.reports.size != 1) fail("Expected one report. Found: ${context.logger.reports}") + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinIntExtrasSerializerTest.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinIntExtrasSerializerTest.kt new file mode 100644 index 00000000000..82c80b7bf05 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinIntExtrasSerializerTest.kt @@ -0,0 +1,24 @@ +/* + * Copyright 2010-2022 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.kotlin.gradle.idea.serialize + +import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinIntExtrasSerializer.deserialize +import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinIntExtrasSerializer.serialize +import org.jetbrains.kotlin.gradle.idea.testFixtures.serialize.TestIdeaKotlinSerializationContext +import kotlin.test.Test +import kotlin.test.assertEquals + +class IdeaKotlinIntExtrasSerializerTest { + + @Test + fun `test - values`() { + val context = TestIdeaKotlinSerializationContext() + assertEquals(2411, deserialize(context, serialize(context, 2411))) + assertEquals(-2411, deserialize(context, serialize(context, -2411))) + assertEquals(Int.MAX_VALUE, deserialize(context, serialize(context, Int.MAX_VALUE))) + assertEquals(Int.MIN_VALUE, deserialize(context, serialize(context, Int.MIN_VALUE))) + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinStringExtrasSerializerTest.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinStringExtrasSerializerTest.kt new file mode 100644 index 00000000000..c69f2e8a2cb --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinStringExtrasSerializerTest.kt @@ -0,0 +1,21 @@ +/* + * Copyright 2010-2022 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.kotlin.gradle.idea.serialize + +import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinStringExtrasSerializer.deserialize +import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinStringExtrasSerializer.serialize +import org.jetbrains.kotlin.gradle.idea.testFixtures.serialize.TestIdeaKotlinSerializationContext +import kotlin.test.Test +import kotlin.test.assertEquals + +class IdeaKotlinStringExtrasSerializerTest { + @Test + fun `test - values`() { + val context = TestIdeaKotlinSerializationContext() + assertEquals("Sunny", deserialize(context, serialize(context, "Sunny"))) + assertEquals("☀️", deserialize(context, serialize(context, "☀️"))) + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/idea/testFixtures/serialize/TestIdeaExtrasSerializationExtension.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/idea/testFixtures/serialize/TestIdeaExtrasSerializationExtension.kt index d660f6f56ed..8ec29abee3f 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/idea/testFixtures/serialize/TestIdeaExtrasSerializationExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/idea/testFixtures/serialize/TestIdeaExtrasSerializationExtension.kt @@ -5,8 +5,7 @@ package org.jetbrains.kotlin.gradle.idea.testFixtures.serialize -import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinExtrasSerializationExtension -import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinExtrasSerializer +import org.jetbrains.kotlin.gradle.idea.serialize.* import org.jetbrains.kotlin.tooling.core.Extras import org.jetbrains.kotlin.tooling.core.extrasKeyOf import org.jetbrains.kotlin.tooling.core.extrasTypeOf @@ -20,8 +19,9 @@ object TestIdeaExtrasSerializationExtension : IdeaKotlinExtrasSerializationExten override fun serializer(key: Extras.Key): IdeaKotlinExtrasSerializer? = when { key == ignoredStringKey -> null key == anySerializableKey -> IdeaKotlinExtrasSerializer.javaIoSerializable() - key.type == extrasTypeOf() -> TestIdeaStringKotlinExtrasSerializer - key.type == extrasTypeOf() -> TestIdeaIntKotlinExtrasSerializer + key.type == extrasTypeOf() -> IdeaKotlinStringExtrasSerializer + key.type == extrasTypeOf() -> IdeaKotlinIntExtrasSerializer + key.type == extrasTypeOf() -> IdeaKotlinBooleanExtrasSerializer else -> null } as? IdeaKotlinExtrasSerializer } diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/idea/testFixtures/serialize/TestIdeaStringKotlinExtrasSerializer.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/idea/testFixtures/serialize/TestIdeaStringKotlinExtrasSerializer.kt deleted file mode 100644 index b949cb6db73..00000000000 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/idea/testFixtures/serialize/TestIdeaStringKotlinExtrasSerializer.kt +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright 2010-2022 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.kotlin.gradle.idea.testFixtures.serialize - -import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinExtrasSerializer -import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinSerializationContext - -object TestIdeaStringKotlinExtrasSerializer : IdeaKotlinExtrasSerializer { - override fun serialize(context: IdeaKotlinSerializationContext, value: String): ByteArray = value.encodeToByteArray() - override fun deserialize(context: IdeaKotlinSerializationContext, data: ByteArray) = data.decodeToString() -}