Skip to content

Commit f1e2076

Browse files
authored
Introduced usage of worker API
PR #256
1 parent 05c1eca commit f1e2076

16 files changed

+524
-81
lines changed

api/binary-compatibility-validator.api

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public final class kotlinx/validation/BinaryCompatibilityValidatorPlugin : org/g
3030
public fun apply (Lorg/gradle/api/Project;)V
3131
}
3232

33-
public abstract class kotlinx/validation/BuildTaskBase : org/gradle/api/DefaultTask {
33+
public abstract class kotlinx/validation/BuildTaskBase : kotlinx/validation/WorkerAwareTaskBase {
3434
public fun <init> ()V
3535
public final fun getIgnoredClasses ()Lorg/gradle/api/provider/SetProperty;
3636
public final fun getIgnoredPackages ()Lorg/gradle/api/provider/SetProperty;
@@ -86,28 +86,36 @@ public abstract class kotlinx/validation/KotlinKlibAbiBuildTask : kotlinx/valida
8686
public abstract fun getTarget ()Lorg/gradle/api/provider/Property;
8787
}
8888

89-
public abstract class kotlinx/validation/KotlinKlibExtractAbiTask : org/gradle/api/DefaultTask {
89+
public abstract class kotlinx/validation/KotlinKlibExtractAbiTask : kotlinx/validation/WorkerAwareTaskBase {
9090
public fun <init> ()V
91+
public abstract fun getExecutor ()Lorg/gradle/workers/WorkerExecutor;
9192
public abstract fun getInputAbiFile ()Lorg/gradle/api/file/RegularFileProperty;
9293
public abstract fun getOutputAbiFile ()Lorg/gradle/api/file/RegularFileProperty;
9394
public final fun getStrictValidation ()Lorg/gradle/api/provider/Property;
9495
public abstract fun getTargetsToRemove ()Lorg/gradle/api/provider/SetProperty;
9596
}
9697

97-
public abstract class kotlinx/validation/KotlinKlibInferAbiTask : org/gradle/api/DefaultTask {
98+
public abstract class kotlinx/validation/KotlinKlibInferAbiTask : kotlinx/validation/WorkerAwareTaskBase {
9899
public fun <init> ()V
100+
public abstract fun getExecutor ()Lorg/gradle/workers/WorkerExecutor;
99101
public abstract fun getInputDumps ()Lorg/gradle/api/provider/SetProperty;
100102
public abstract fun getOldMergedKlibDump ()Lorg/gradle/api/file/RegularFileProperty;
101103
public abstract fun getOutputAbiFile ()Lorg/gradle/api/file/RegularFileProperty;
102104
public abstract fun getTarget ()Lorg/gradle/api/provider/Property;
103105
}
104106

105-
public abstract class kotlinx/validation/KotlinKlibMergeAbiTask : org/gradle/api/DefaultTask {
107+
public abstract class kotlinx/validation/KotlinKlibMergeAbiTask : kotlinx/validation/WorkerAwareTaskBase {
106108
public fun <init> ()V
107109
public abstract fun getDumps ()Lorg/gradle/api/provider/SetProperty;
110+
public abstract fun getExecutor ()Lorg/gradle/workers/WorkerExecutor;
108111
public abstract fun getMergedApiFile ()Lorg/gradle/api/file/RegularFileProperty;
109112
}
110113

114+
public abstract class kotlinx/validation/WorkerAwareTaskBase : org/gradle/api/DefaultTask {
115+
public fun <init> ()V
116+
public abstract fun getRuntimeClasspath ()Lorg/gradle/api/file/ConfigurableFileCollection;
117+
}
118+
111119
public final class kotlinx/validation/_UtilsKt {
112120
public static final fun toKlibTarget (Lorg/jetbrains/kotlin/gradle/plugin/KotlinTarget;)Lkotlinx/validation/api/klib/KlibTarget;
113121
}

build.gradle.kts

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,10 @@ val createClasspathManifest = tasks.register("createClasspathManifest") {
6464

6565
dependencies {
6666
implementation(gradleApi())
67-
implementation(libs.kotlinx.metadata)
67+
compileOnly(libs.kotlinx.metadata)
6868
compileOnly(libs.kotlin.compiler.embeddable)
69-
implementation(libs.ow2.asm)
70-
implementation(libs.ow2.asmTree)
69+
compileOnly(libs.ow2.asm)
70+
compileOnly(libs.ow2.asmTree)
7171
implementation(libs.javaDiffUtils)
7272
compileOnly(libs.gradlePlugin.kotlin)
7373

@@ -168,12 +168,17 @@ testing {
168168
implementation(project())
169169
implementation(libs.assertJ.core)
170170
implementation(libs.kotlin.test)
171-
implementation(libs.kotlin.compiler.embeddable)
172171
}
173172
}
174173

175174
val test by getting(JvmTestSuite::class) {
176175
description = "Regular unit tests"
176+
dependencies {
177+
implementation(libs.kotlinx.metadata)
178+
implementation(libs.kotlin.compiler.embeddable)
179+
implementation(libs.ow2.asm)
180+
implementation(libs.ow2.asmTree)
181+
}
177182
}
178183

179184
val functionalTest by creating(JvmTestSuite::class) {
@@ -183,6 +188,8 @@ testing {
183188
dependencies {
184189
implementation(files(createClasspathManifest))
185190

191+
implementation(libs.kotlinx.metadata)
192+
implementation(libs.kotlin.compiler.embeddable)
186193
implementation(gradleApi())
187194
implementation(gradleTestKit())
188195
}

src/functionalTest/kotlin/kotlinx/validation/api/TestDsl.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@ internal class AppendableScope(val filePath: String) {
190190

191191
internal class Runner(withConfigurationCache: Boolean = true) {
192192
val arguments: MutableList<String> = mutableListOf<String>().apply {
193+
add("--stacktrace")
193194
if (!koverEnabled && withConfigurationCache) {
194195
// Configuration cache is incompatible with javaagents being enabled for Gradle
195196
// See https://github.com/gradle/gradle/issues/25979

src/functionalTest/kotlin/kotlinx/validation/test/DefaultConfigTests.kt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,29 @@ internal class DefaultConfigTests : BaseKotlinGradleTest() {
9797
}
9898
}
9999

100+
@Test
101+
fun `apiCheck should succeed when public classes match api file with K2`() {
102+
val runner = test {
103+
buildGradleKts {
104+
resolve("/examples/gradle/base/withPluginK2.gradle.kts")
105+
}
106+
kotlin("AnotherBuildConfig.kt") {
107+
resolve("/examples/classes/AnotherBuildConfig.kt")
108+
}
109+
apiFile(projectName = rootProjectDir.name) {
110+
resolve("/examples/classes/AnotherBuildConfig.dump")
111+
}
112+
113+
runner {
114+
arguments.add(":apiCheck")
115+
}
116+
}
117+
118+
runner.build().apply {
119+
assertTaskSuccess(":apiCheck")
120+
}
121+
}
122+
100123
@Test
101124
fun `apiCheck should fail when public classes match api file ignoring case`() {
102125
Assume.assumeTrue(underlyingFsIsCaseSensitive())

src/functionalTest/kotlin/kotlinx/validation/test/KlibVerificationTests.kt

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ import org.assertj.core.api.Assertions
1313
import org.gradle.testkit.runner.BuildResult
1414
import org.jetbrains.kotlin.konan.target.HostManager
1515
import org.jetbrains.kotlin.konan.target.KonanTarget
16-
import org.jetbrains.kotlin.utils.addToStdlib.butIf
17-
import org.junit.Assert
1816
import org.junit.Assume
1917
import org.junit.Test
2018
import java.io.File
@@ -91,6 +89,22 @@ internal class KlibVerificationTests : BaseKotlinGradleTest() {
9189
checkKlibDump(runner.build(), "/examples/classes/TopLevelDeclarations.klib.with.linux.dump")
9290
}
9391

92+
@Test
93+
fun `apiDump for native targets in K2`() {
94+
val runner = test {
95+
settingsGradleKts {
96+
resolve("/examples/gradle/settings/settings-name-testproject.gradle.kts")
97+
}
98+
buildGradleKts {
99+
resolve("/examples/gradle/base/withNativePluginK2.gradle.kts")
100+
}
101+
addToSrcSet("/examples/classes/TopLevelDeclarations.kt")
102+
runApiDump()
103+
}
104+
105+
checkKlibDump(runner.build(), "/examples/classes/TopLevelDeclarations.klib.with.linux.dump")
106+
}
107+
94108
@Test
95109
fun `apiCheck for native targets`() {
96110
val runner = test {
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*
2+
* Copyright 2016-2023 JetBrains s.r.o.
3+
* Use of this source code is governed by the Apache 2.0 License that can be found in the LICENSE.txt file.
4+
*/
5+
6+
plugins {
7+
kotlin("multiplatform") version "2.0.0"
8+
id("org.jetbrains.kotlinx.binary-compatibility-validator")
9+
}
10+
11+
repositories {
12+
mavenCentral()
13+
}
14+
15+
kotlin {
16+
linuxX64()
17+
linuxArm64()
18+
mingwX64()
19+
androidNativeArm32()
20+
androidNativeArm64()
21+
androidNativeX64()
22+
androidNativeX86()
23+
24+
sourceSets {
25+
val commonMain by getting
26+
val commonTest by getting {
27+
dependencies {
28+
implementation(kotlin("stdlib"))
29+
implementation(kotlin("test-common"))
30+
implementation(kotlin("test-annotations-common"))
31+
}
32+
}
33+
}
34+
}
35+
36+
apiValidation {
37+
klib.enabled = true
38+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/*
2+
* Copyright 2016-2020 JetBrains s.r.o.
3+
* Use of this source code is governed by the Apache 2.0 License that can be found in the LICENSE.txt file.
4+
*/
5+
6+
plugins {
7+
kotlin("jvm") version "2.0.0"
8+
id("org.jetbrains.kotlinx.binary-compatibility-validator")
9+
}
10+
11+
repositories {
12+
mavenCentral()
13+
}
14+
15+
dependencies {
16+
implementation(kotlin("stdlib-jdk8"))
17+
}

src/main/kotlin/-Utils.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
1414
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
1515
import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetType
1616
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget
17+
import java.io.File
1718
import java.io.Serializable
1819

1920
/**
@@ -60,3 +61,9 @@ public class KlibDumpMetadata(
6061
@get:PathSensitive(PathSensitivity.RELATIVE)
6162
public val dumpFile: RegularFileProperty
6263
) : Serializable
64+
65+
// Workaround for serialization exception occurring when KlibDumpMetadata is supplied to WorkerParameters.
66+
internal class KlibMetadataLocal(
67+
val target: KlibTarget,
68+
val dumpFile: File
69+
) : Serializable

0 commit comments

Comments
 (0)