Skip to content

Commit 5d0b4d1

Browse files
authored
Merge pull request #194 from Kotlin/feat/add-bcv-api-checker
Add BCV API dumps
2 parents 7c8f85c + c05d099 commit 5d0b4d1

24 files changed

+1206
-81
lines changed

build.gradle

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ buildscript {
1212
}
1313
}
1414

15+
plugins {
16+
id("org.jetbrains.kotlinx.binary-compatibility-validator") version "0.15.0-Beta.1"
17+
}
18+
1519
apply plugin: 'kotlinx.team.infra'
1620

1721
infra {
@@ -35,15 +39,36 @@ repositories {
3539
mavenCentral()
3640
}
3741

42+
// region Workarounds for https://github.com/gradle/gradle/issues/22335
43+
tasks.register("apiDump") {
44+
it.dependsOn(gradle.includedBuild("plugin").task(":apiDump"))
45+
}
46+
3847
afterEvaluate {
3948
gradle.includedBuilds.forEach { included ->
4049
project(":kotlinx-benchmark-runtime").tasks.named("publishToMavenLocal") { dependsOn(included.task(":publishToMavenLocal")) }
4150
}
4251
}
52+
//endregion
4353

4454
allprojects {
4555
logger.info("Using Kotlin $kotlin_version for project $it")
4656
repositories {
4757
KotlinCommunity.addDevRepositoryIfEnabled(delegate, project)
4858
}
4959
}
60+
61+
apiValidation {
62+
ignoredProjects += [
63+
"examples",
64+
"java",
65+
"kotlin",
66+
"kotlin-kts",
67+
"kotlin-multiplatform",
68+
"integration",
69+
]
70+
71+
klib {
72+
it.enabled = true
73+
}
74+
}
Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,220 @@
1+
public class kotlinx/benchmark/gradle/BenchmarkConfiguration {
2+
public final fun advanced (Ljava/lang/String;Ljava/lang/Object;)V
3+
public final fun exclude (Ljava/lang/String;)V
4+
public final fun getAdvanced ()Ljava/util/Map;
5+
public final fun getExcludes ()Ljava/util/List;
6+
public final fun getIncludes ()Ljava/util/List;
7+
public final fun getIterationTime ()Ljava/lang/Long;
8+
public final fun getIterationTimeUnit ()Ljava/lang/String;
9+
public final fun getIterations ()Ljava/lang/Integer;
10+
public final fun getMode ()Ljava/lang/String;
11+
public final fun getName ()Ljava/lang/String;
12+
public final fun getOutputTimeUnit ()Ljava/lang/String;
13+
public final fun getParams ()Ljava/util/Map;
14+
public final fun getReportFormat ()Ljava/lang/String;
15+
public final fun getWarmups ()Ljava/lang/Integer;
16+
public final fun include (Ljava/lang/String;)V
17+
public final fun param (Ljava/lang/String;[Ljava/lang/Object;)V
18+
public final fun setAdvanced (Ljava/util/Map;)V
19+
public final fun setExcludes (Ljava/util/List;)V
20+
public final fun setIncludes (Ljava/util/List;)V
21+
public final fun setIterationTime (Ljava/lang/Long;)V
22+
public final fun setIterationTimeUnit (Ljava/lang/String;)V
23+
public final fun setIterations (Ljava/lang/Integer;)V
24+
public final fun setMode (Ljava/lang/String;)V
25+
public final fun setOutputTimeUnit (Ljava/lang/String;)V
26+
public final fun setParams (Ljava/util/Map;)V
27+
public final fun setReportFormat (Ljava/lang/String;)V
28+
public final fun setWarmups (Ljava/lang/Integer;)V
29+
}
30+
31+
public class kotlinx/benchmark/gradle/BenchmarkTarget {
32+
public final fun getName ()Ljava/lang/String;
33+
public final fun getWorkingDir ()Ljava/lang/String;
34+
public final fun setWorkingDir (Ljava/lang/String;)V
35+
}
36+
37+
public class kotlinx/benchmark/gradle/BenchmarksExtension {
38+
public final fun configurations (Lgroovy/lang/Closure;)Lorg/gradle/api/NamedDomainObjectContainer;
39+
public final fun getBenchsDescriptionDir ()Ljava/lang/String;
40+
public final fun getBuildDir ()Ljava/lang/String;
41+
public final fun getConfigurations ()Lorg/gradle/api/NamedDomainObjectContainer;
42+
public final fun getProject ()Lorg/gradle/api/Project;
43+
public final fun getReportsDir ()Ljava/lang/String;
44+
public final fun getTargets ()Lorg/gradle/api/NamedDomainObjectContainer;
45+
public final fun getVersion ()Ljava/lang/String;
46+
public final fun setBenchsDescriptionDir (Ljava/lang/String;)V
47+
public final fun setBuildDir (Ljava/lang/String;)V
48+
public final fun setReportsDir (Ljava/lang/String;)V
49+
public final fun targets (Lgroovy/lang/Closure;)Lorg/gradle/api/NamedDomainObjectContainer;
50+
}
51+
52+
public final class kotlinx/benchmark/gradle/BenchmarksExtensionKt {
53+
public static final fun benchmark (Lorg/gradle/api/Project;Lorg/gradle/api/Action;)V
54+
}
55+
56+
public abstract class kotlinx/benchmark/gradle/BenchmarksPlugin : org/gradle/api/Plugin {
57+
public static final field ASSEMBLE_BENCHMARKS_TASKNAME Ljava/lang/String;
58+
public static final field BENCHMARKS_TASK_GROUP Ljava/lang/String;
59+
public static final field BENCHMARK_COMPILATION_SUFFIX Ljava/lang/String;
60+
public static final field BENCHMARK_COMPILE_SUFFIX Ljava/lang/String;
61+
public static final field BENCHMARK_EXEC_SUFFIX Ljava/lang/String;
62+
public static final field BENCHMARK_EXTENSION_NAME Ljava/lang/String;
63+
public static final field BENCHMARK_GENERATE_SUFFIX Ljava/lang/String;
64+
public static final field BENCHMARK_JAR_SUFFIX Ljava/lang/String;
65+
public static final field Companion Lkotlinx/benchmark/gradle/BenchmarksPlugin$Companion;
66+
public static final field JMH_CORE_DEPENDENCY Ljava/lang/String;
67+
public static final field JMH_GENERATOR_DEPENDENCY Ljava/lang/String;
68+
public static final field PLUGIN_ID Ljava/lang/String;
69+
public static final field PLUGIN_VERSION Ljava/lang/String;
70+
public static final field RUN_BENCHMARKS_TASKNAME Ljava/lang/String;
71+
public synthetic fun apply (Ljava/lang/Object;)V
72+
public fun apply (Lorg/gradle/api/Project;)V
73+
}
74+
75+
public final class kotlinx/benchmark/gradle/BenchmarksPlugin$Companion {
76+
}
77+
78+
public final class kotlinx/benchmark/gradle/JavaBenchmarkTarget : kotlinx/benchmark/gradle/JvmBenchmarkTarget {
79+
}
80+
81+
public class kotlinx/benchmark/gradle/JmhBytecodeGeneratorTask : org/gradle/api/DefaultTask {
82+
public field inputClassesDirs Lorg/gradle/api/file/FileCollection;
83+
public field inputCompileClasspath Lorg/gradle/api/file/FileCollection;
84+
public field outputResourcesDir Ljava/io/File;
85+
public field outputSourcesDir Ljava/io/File;
86+
public field runtimeClasspath Lorg/gradle/api/file/FileCollection;
87+
public final fun generate ()V
88+
public final fun getExecutableProvider ()Lorg/gradle/api/provider/Provider;
89+
public final fun getInputClassesDirs ()Lorg/gradle/api/file/FileCollection;
90+
public final fun getInputCompileClasspath ()Lorg/gradle/api/file/FileCollection;
91+
public final fun getOutputResourcesDir ()Ljava/io/File;
92+
public final fun getOutputSourcesDir ()Ljava/io/File;
93+
public final fun getRuntimeClasspath ()Lorg/gradle/api/file/FileCollection;
94+
public final fun setExecutableProvider (Lorg/gradle/api/provider/Provider;)V
95+
public final fun setInputClassesDirs (Lorg/gradle/api/file/FileCollection;)V
96+
public final fun setInputCompileClasspath (Lorg/gradle/api/file/FileCollection;)V
97+
public final fun setOutputResourcesDir (Ljava/io/File;)V
98+
public final fun setOutputSourcesDir (Ljava/io/File;)V
99+
public final fun setRuntimeClasspath (Lorg/gradle/api/file/FileCollection;)V
100+
}
101+
102+
public final class kotlinx/benchmark/gradle/JsBenchmarkTarget : kotlinx/benchmark/gradle/BenchmarkTarget {
103+
public final fun getJsBenchmarksExecutor ()Lkotlinx/benchmark/gradle/JsBenchmarksExecutor;
104+
public final fun setJsBenchmarksExecutor (Lkotlinx/benchmark/gradle/JsBenchmarksExecutor;)V
105+
}
106+
107+
public final class kotlinx/benchmark/gradle/JsBenchmarksExecutor : java/lang/Enum {
108+
public static final field BenchmarkJs Lkotlinx/benchmark/gradle/JsBenchmarksExecutor;
109+
public static final field BuiltIn Lkotlinx/benchmark/gradle/JsBenchmarksExecutor;
110+
public static fun valueOf (Ljava/lang/String;)Lkotlinx/benchmark/gradle/JsBenchmarksExecutor;
111+
public static fun values ()[Lkotlinx/benchmark/gradle/JsBenchmarksExecutor;
112+
}
113+
114+
public class kotlinx/benchmark/gradle/JsSourceGeneratorTask : org/gradle/api/DefaultTask {
115+
public field inputClassesDirs Lorg/gradle/api/file/FileCollection;
116+
public field inputDependencies Lorg/gradle/api/file/FileCollection;
117+
public field outputResourcesDir Ljava/io/File;
118+
public field outputSourcesDir Ljava/io/File;
119+
public field title Ljava/lang/String;
120+
public final fun generate ()V
121+
public final fun getInputClassesDirs ()Lorg/gradle/api/file/FileCollection;
122+
public final fun getInputDependencies ()Lorg/gradle/api/file/FileCollection;
123+
public final fun getOutputResourcesDir ()Ljava/io/File;
124+
public final fun getOutputSourcesDir ()Ljava/io/File;
125+
public final fun getTitle ()Ljava/lang/String;
126+
public final fun getUseBenchmarkJs ()Z
127+
public final fun setInputClassesDirs (Lorg/gradle/api/file/FileCollection;)V
128+
public final fun setInputDependencies (Lorg/gradle/api/file/FileCollection;)V
129+
public final fun setOutputResourcesDir (Ljava/io/File;)V
130+
public final fun setOutputSourcesDir (Ljava/io/File;)V
131+
public final fun setTitle (Ljava/lang/String;)V
132+
public final fun setUseBenchmarkJs (Z)V
133+
}
134+
135+
public abstract class kotlinx/benchmark/gradle/JvmBenchmarkTarget : kotlinx/benchmark/gradle/BenchmarkTarget {
136+
public final fun getJmhVersion ()Ljava/lang/String;
137+
public final fun setJmhVersion (Ljava/lang/String;)V
138+
}
139+
140+
public class kotlinx/benchmark/gradle/KotlinJvmBenchmarkTarget : kotlinx/benchmark/gradle/JvmBenchmarkTarget {
141+
}
142+
143+
public class kotlinx/benchmark/gradle/NativeBenchmarkExec : org/gradle/api/DefaultTask {
144+
public field benchProgressPath Ljava/lang/String;
145+
public field benchsDescriptionDir Ljava/io/File;
146+
public field configFile Ljava/io/File;
147+
public field executable Ljava/io/File;
148+
public field reportFile Ljava/io/File;
149+
public final fun getBenchProgressPath ()Ljava/lang/String;
150+
public final fun getBenchsDescriptionDir ()Ljava/io/File;
151+
public final fun getConfigFile ()Ljava/io/File;
152+
public final fun getExecutable ()Ljava/io/File;
153+
public final fun getNativeFork ()Ljava/lang/String;
154+
public final fun getReportFile ()Ljava/io/File;
155+
public final fun getWorkingDir ()Ljava/lang/String;
156+
public final fun run ()V
157+
public final fun setBenchProgressPath (Ljava/lang/String;)V
158+
public final fun setBenchsDescriptionDir (Ljava/io/File;)V
159+
public final fun setConfigFile (Ljava/io/File;)V
160+
public final fun setExecutable (Ljava/io/File;)V
161+
public final fun setNativeFork (Ljava/lang/String;)V
162+
public final fun setReportFile (Ljava/io/File;)V
163+
public final fun setWorkingDir (Ljava/lang/String;)V
164+
}
165+
166+
public final class kotlinx/benchmark/gradle/NativeBenchmarkTarget : kotlinx/benchmark/gradle/BenchmarkTarget {
167+
}
168+
169+
public class kotlinx/benchmark/gradle/NativeSourceGeneratorTask : org/gradle/api/DefaultTask {
170+
public field inputClassesDirs Lorg/gradle/api/file/FileCollection;
171+
public field inputDependencies Lorg/gradle/api/file/FileCollection;
172+
public field nativeTarget Ljava/lang/String;
173+
public field outputResourcesDir Ljava/io/File;
174+
public field outputSourcesDir Ljava/io/File;
175+
public field title Ljava/lang/String;
176+
public final fun generate ()V
177+
public final fun getInputClassesDirs ()Lorg/gradle/api/file/FileCollection;
178+
public final fun getInputDependencies ()Lorg/gradle/api/file/FileCollection;
179+
public final fun getNativeTarget ()Ljava/lang/String;
180+
public final fun getOutputResourcesDir ()Ljava/io/File;
181+
public final fun getOutputSourcesDir ()Ljava/io/File;
182+
public final fun getTitle ()Ljava/lang/String;
183+
public final fun setInputClassesDirs (Lorg/gradle/api/file/FileCollection;)V
184+
public final fun setInputDependencies (Lorg/gradle/api/file/FileCollection;)V
185+
public final fun setNativeTarget (Ljava/lang/String;)V
186+
public final fun setOutputResourcesDir (Ljava/io/File;)V
187+
public final fun setOutputSourcesDir (Ljava/io/File;)V
188+
public final fun setTitle (Ljava/lang/String;)V
189+
}
190+
191+
public final class kotlinx/benchmark/gradle/UtilsKt$sam$i$org_gradle_api_Action$0 : org/gradle/api/Action {
192+
public fun <init> (Lkotlin/jvm/functions/Function1;)V
193+
public final synthetic fun execute (Ljava/lang/Object;)V
194+
}
195+
196+
public final class kotlinx/benchmark/gradle/WasmBenchmarkTarget : kotlinx/benchmark/gradle/BenchmarkTarget {
197+
}
198+
199+
public class kotlinx/benchmark/gradle/WasmSourceGeneratorTask : org/gradle/api/DefaultTask {
200+
public field inputClassesDirs Lorg/gradle/api/file/FileCollection;
201+
public field inputDependencies Lorg/gradle/api/file/FileCollection;
202+
public field outputResourcesDir Ljava/io/File;
203+
public field outputSourcesDir Ljava/io/File;
204+
public field title Ljava/lang/String;
205+
public final fun generate ()V
206+
public final fun getInputClassesDirs ()Lorg/gradle/api/file/FileCollection;
207+
public final fun getInputDependencies ()Lorg/gradle/api/file/FileCollection;
208+
public final fun getOutputResourcesDir ()Ljava/io/File;
209+
public final fun getOutputSourcesDir ()Ljava/io/File;
210+
public final fun getTitle ()Ljava/lang/String;
211+
public final fun setInputClassesDirs (Lorg/gradle/api/file/FileCollection;)V
212+
public final fun setInputDependencies (Lorg/gradle/api/file/FileCollection;)V
213+
public final fun setOutputResourcesDir (Ljava/io/File;)V
214+
public final fun setOutputSourcesDir (Ljava/io/File;)V
215+
public final fun setTitle (Ljava/lang/String;)V
216+
}
217+
218+
public abstract interface annotation class kotlinx/benchmark/gradle/internal/KotlinxBenchmarkPluginInternalApi : java/lang/annotation/Annotation {
219+
}
220+

plugin/build.gradle

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
2+
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask
3+
14
buildscript {
25
ext.kotlinDevUrl = rootProject.properties["kotlin_repo_url"]
36
repositories {
@@ -11,17 +14,17 @@ buildscript {
1114
classpath "kotlinx.team:kotlinx.team.infra:$infra_version"
1215
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
1316
}
14-
1517
}
1618

1719
plugins {
1820
id 'java-gradle-plugin'
1921
id 'maven-publish'
2022
id 'com.gradle.plugin-publish' version '0.21.0'
23+
id("org.jetbrains.kotlinx.binary-compatibility-validator") version "0.15.0-Beta.2"
2124
}
2225

23-
apply plugin: 'org.jetbrains.kotlin.jvm'
24-
apply plugin: 'kotlinx.team.infra'
26+
apply(plugin: 'org.jetbrains.kotlin.jvm')
27+
apply(plugin: 'kotlinx.team.infra')
2528

2629
infra {
2730
teamcity {
@@ -75,10 +78,14 @@ sourceSets {
7578
}
7679
}
7780

78-
compileKotlin {
79-
kotlinOptions {
80-
freeCompilerArgs += "-Xopt-in=kotlin.RequiresOptIn"
81-
apiVersion = "1.4" // the version of Kotlin embedded in Gradle
81+
tasks.named("compileKotlin", KotlinCompilationTask.class) {
82+
compilerOptions {
83+
optIn.addAll(
84+
"kotlinx.benchmark.gradle.internal.KotlinxBenchmarkPluginInternalApi",
85+
"kotlin.RequiresOptIn",
86+
)
87+
//noinspection GrDeprecatedAPIUsage
88+
apiVersion = KotlinVersion.KOTLIN_1_4 // the version of Kotlin embedded in Gradle
8289
}
8390
}
8491

@@ -90,7 +97,7 @@ dependencies {
9097
implementation group: 'org.jetbrains.kotlin', name: 'kotlin-util-klib-metadata', version: kotlin_version
9198
implementation group: 'org.jetbrains.kotlin', name: 'kotlin-util-klib', version: kotlin_version
9299
implementation group: 'org.jetbrains.kotlin', name: 'kotlin-util-io', version: kotlin_version
93-
100+
94101
compileOnly group: 'org.jetbrains.kotlin.multiplatform', name: 'org.jetbrains.kotlin.multiplatform.gradle.plugin', version: kotlin_version
95102
compileOnly "org.jetbrains.kotlin:kotlin-compiler-embeddable:$kotlin_version"
96103
compileOnly "org.openjdk.jmh:jmh-generator-bytecode:$jmhVersion" // used in worker
@@ -130,3 +137,7 @@ if (project.findProperty("publication_repository") == "space") {
130137
}
131138
}
132139
}
140+
141+
apiValidation {
142+
nonPublicMarkers += ["kotlinx.benchmark.gradle.internal.KotlinxBenchmarkPluginInternalApi"]
143+
}

0 commit comments

Comments
 (0)