From a12c9381003cc11ec5c090469d466293a82349e2 Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Mon, 13 Jun 2022 14:54:16 +0200 Subject: [PATCH] [kpm] Minimize kgp-proto's API surface and add binary compatibility tests ^KT-52568 Verification Pending --- .../tools/binary-compatibility-validator/build.gradle | 1 + .../kotlin-gradle-plugin-idea-proto.txt | 10 ++++++++++ .../RuntimePublicAPITest.kt | 7 +++++++ .../kotlin/kpm/idea/proto/IdeaKpmProtoSchema.kt | 2 +- .../org/jetbrains/kotlin/kpm/idea/proto/container.kt | 3 ++- .../gradle/kpm/idea/IdeaKpmBuildProjectModelTask.kt | 2 +- 6 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-gradle-plugin-idea-proto.txt diff --git a/libraries/tools/binary-compatibility-validator/build.gradle b/libraries/tools/binary-compatibility-validator/build.gradle index 5ab70b54acd..9d4408e5545 100644 --- a/libraries/tools/binary-compatibility-validator/build.gradle +++ b/libraries/tools/binary-compatibility-validator/build.gradle @@ -15,6 +15,7 @@ dependencies { testArtifacts project(':kotlin-stdlib-jdk8') testArtifacts project(':kotlin-reflect') testArtifacts project(':kotlin-gradle-plugin-idea') + testArtifacts project(':kotlin-gradle-plugin-idea-proto') testArtifacts project(':kotlin-tooling-core') testCompileOnly("org.ow2.asm:asm-tree:9.0") { diff --git a/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-gradle-plugin-idea-proto.txt b/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-gradle-plugin-idea-proto.txt new file mode 100644 index 00000000000..1b173ce54f3 --- /dev/null +++ b/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-gradle-plugin-idea-proto.txt @@ -0,0 +1,10 @@ +public final class org/jetbrains/kotlin/kpm/idea/proto/KpmIdeaProto { + public static final fun IdeaKpmProject (Lorg/jetbrains/kotlin/gradle/kpm/idea/serialize/IdeaKpmSerializationContext;Lcom/google/protobuf/ByteString;)Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmProject; + public static final fun IdeaKpmProject (Lorg/jetbrains/kotlin/gradle/kpm/idea/serialize/IdeaKpmSerializationContext;Ljava/io/InputStream;)Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmProject; + public static final fun IdeaKpmProject (Lorg/jetbrains/kotlin/gradle/kpm/idea/serialize/IdeaKpmSerializationContext;Ljava/nio/ByteBuffer;)Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmProject; + public static final fun IdeaKpmProject (Lorg/jetbrains/kotlin/gradle/kpm/idea/serialize/IdeaKpmSerializationContext;[B)Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmProject; + public static final fun toByteArray (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmProject;Lorg/jetbrains/kotlin/gradle/kpm/idea/serialize/IdeaKpmSerializationContext;)[B + public static final fun toByteString (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmProject;Lorg/jetbrains/kotlin/gradle/kpm/idea/serialize/IdeaKpmSerializationContext;)Lcom/google/protobuf/ByteString; + public static final fun writeTo (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmProject;Ljava/io/OutputStream;Lorg/jetbrains/kotlin/gradle/kpm/idea/serialize/IdeaKpmSerializationContext;)V +} + diff --git a/libraries/tools/binary-compatibility-validator/src/test/kotlin/org.jetbrains.kotlin.tools.tests/RuntimePublicAPITest.kt b/libraries/tools/binary-compatibility-validator/src/test/kotlin/org.jetbrains.kotlin.tools.tests/RuntimePublicAPITest.kt index b4f44d938f2..78234ab1f16 100644 --- a/libraries/tools/binary-compatibility-validator/src/test/kotlin/org.jetbrains.kotlin.tools.tests/RuntimePublicAPITest.kt +++ b/libraries/tools/binary-compatibility-validator/src/test/kotlin/org.jetbrains.kotlin.tools.tests/RuntimePublicAPITest.kt @@ -40,6 +40,13 @@ class RuntimePublicAPITest { ) } + @Test fun kotlinGradlePluginIdeaProto() { + snapshotAPIAndCompare( + "../kotlin-gradle-plugin-idea-proto/build/libs", "kotlin-gradle-plugin-idea-proto(?!-[-a-z]+)", + nonPublicAnnotations = listOf("org/jetbrains/kotlin/gradle/kpm/idea/InternalKotlinGradlePluginApi") + ) + } + @Test fun kotlinToolingCore() { snapshotAPIAndCompare("../kotlin-tooling-core/build/libs", "kotlin-tooling-core(?!-[-a-z]+)") } diff --git a/libraries/tools/kotlin-gradle-plugin-idea-proto/src/main/kotlin/org/jetbrains/kotlin/kpm/idea/proto/IdeaKpmProtoSchema.kt b/libraries/tools/kotlin-gradle-plugin-idea-proto/src/main/kotlin/org/jetbrains/kotlin/kpm/idea/proto/IdeaKpmProtoSchema.kt index 088d8ce837d..ab93e1fd36f 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea-proto/src/main/kotlin/org/jetbrains/kotlin/kpm/idea/proto/IdeaKpmProtoSchema.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea-proto/src/main/kotlin/org/jetbrains/kotlin/kpm/idea/proto/IdeaKpmProtoSchema.kt @@ -5,7 +5,7 @@ package org.jetbrains.kotlin.kpm.idea.proto -object IdeaKpmProtoSchema { +internal object IdeaKpmProtoSchema { const val versionMajor = 1 const val versionMinor = 0 const val versionPatch = 0 diff --git a/libraries/tools/kotlin-gradle-plugin-idea-proto/src/main/kotlin/org/jetbrains/kotlin/kpm/idea/proto/container.kt b/libraries/tools/kotlin-gradle-plugin-idea-proto/src/main/kotlin/org/jetbrains/kotlin/kpm/idea/proto/container.kt index 0a6f4acebb6..018811cf4b5 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea-proto/src/main/kotlin/org/jetbrains/kotlin/kpm/idea/proto/container.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea-proto/src/main/kotlin/org/jetbrains/kotlin/kpm/idea/proto/container.kt @@ -4,6 +4,7 @@ */ @file:Suppress("FunctionName") +@file:JvmName("KpmIdeaProto") package org.jetbrains.kotlin.kpm.idea.proto @@ -50,7 +51,7 @@ fun IdeaKpmProject.toByteString(context: IdeaKpmSerializationContext): ByteStrin return context.IdeaKpmContainerProto(this).toByteString() } -fun IdeaKpmProject.writeTo(context: IdeaKpmSerializationContext, output: OutputStream) { +fun IdeaKpmProject.writeTo(output: OutputStream, context: IdeaKpmSerializationContext) { context.IdeaKpmContainerProto(this).writeDelimitedTo(output) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmBuildProjectModelTask.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmBuildProjectModelTask.kt index 8207ab78688..8f7764b2d8b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmBuildProjectModelTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/IdeaKpmBuildProjectModelTask.kt @@ -55,7 +55,7 @@ internal open class IdeaKpmBuildProjectModelTask : DefaultTask() { val protoBinaryFile = outputDirectory.resolve("model.proto.bin") if (protoBinaryFile.exists()) protoBinaryFile.delete() protoBinaryFile.outputStream().use { stream -> - model.writeTo(serializationContext, stream) + model.writeTo(stream, serializationContext) } }