diff --git a/.gitignore b/.gitignore index c7dbd5a5..e7854380 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,6 @@ target build /kotlinx-collections-immutable/dependency-reduced-pom.xml /benchmarks-runner/benchmarkResults -/benchmarks-runner/localReferenceBenchmarkResults \ No newline at end of file +/benchmarks-runner/localReferenceBenchmarkResults +kotlin-js-store/ +.kotlin/ diff --git a/benchmarks/build.gradle.kts b/benchmarks/build.gradle.kts index da19e723..2ce56542 100644 --- a/benchmarks/build.gradle.kts +++ b/benchmarks/build.gradle.kts @@ -1,12 +1,14 @@ +@file:OptIn(org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl::class) + +import BuildConventions.baseConventions import kotlinx.benchmark.gradle.JvmBenchmarkTarget import org.gradle.jvm.tasks.Jar plugins { - id("kotlin-multiplatform") + `kotlin-multiplatform` id("org.jetbrains.kotlinx.benchmark") version "0.4.10" } - evaluationDependsOn(":kotlinx-collections-immutable") kotlin { @@ -105,6 +107,9 @@ benchmark { } } +// configure baseline conventions +baseConventions() + val benchmarksJar: Configuration by configurations.creating afterEvaluate { diff --git a/benchmarks/gradle.lockfile b/benchmarks/gradle.lockfile new file mode 100644 index 00000000..b06d2b7e --- /dev/null +++ b/benchmarks/gradle.lockfile @@ -0,0 +1,40 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +net.sf.jopt-simple:jopt-simple:4.6=jvmBenchmarkGenerateCP,jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestRuntimeClasspath +org.apache.commons:commons-math3:3.2=jvmBenchmarkGenerateCP,jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestRuntimeClasspath +org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath +org.jetbrains.kotlin:kotlin-build-common:1.9.22=kotlinBuildToolsApiClasspath +org.jetbrains.kotlin:kotlin-build-tools-api:1.9.22=kotlinBuildToolsApiClasspath +org.jetbrains.kotlin:kotlin-build-tools-impl:1.9.22=kotlinBuildToolsApiClasspath +org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.22=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath +org.jetbrains.kotlin:kotlin-compiler-runner:1.9.22=kotlinBuildToolsApiClasspath +org.jetbrains.kotlin:kotlin-daemon-client:1.9.22=kotlinBuildToolsApiClasspath +org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.22=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath +org.jetbrains.kotlin:kotlin-dom-api-compat:1.9.22=allSourceSetsCompileDependenciesMetadata,jsCompileClasspath,jsJsBenchmarkApiDependenciesMetadata,jsJsBenchmarkCompileClasspath,jsJsBenchmarkCompileOnlyDependenciesMetadata,jsJsBenchmarkImplementationDependenciesMetadata,jsJsBenchmarkNpmAggregated,jsJsBenchmarkResolvableDependenciesMetadata,jsJsBenchmarkRuntimeClasspath,jsMainApiDependenciesMetadata,jsMainCompileOnlyDependenciesMetadata,jsMainImplementationDependenciesMetadata,jsMainResolvableDependenciesMetadata,jsNpmAggregated,jsRuntimeClasspath,jsTestApiDependenciesMetadata,jsTestCompileClasspath,jsTestCompileOnlyDependenciesMetadata,jsTestImplementationDependenciesMetadata,jsTestNpmAggregated,jsTestResolvableDependenciesMetadata,jsTestRuntimeClasspath +org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.9.22=kotlinKlibCommonizerClasspath +org.jetbrains.kotlin:kotlin-reflect:1.6.10=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath +org.jetbrains.kotlin:kotlin-script-runtime:1.9.22=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJsJsBenchmark,kotlinCompilerPluginClasspathJsMain,kotlinCompilerPluginClasspathJsTest,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataCommonMain,kotlinCompilerPluginClasspathMetadataMain,kotlinCompilerPluginClasspathWasmJsMain,kotlinCompilerPluginClasspathWasmJsTest,kotlinCompilerPluginClasspathWasmJsWasmJsBenchmark,kotlinKlibCommonizerClasspath +org.jetbrains.kotlin:kotlin-scripting-common:1.9.22=kotlinCompilerPluginClasspathJsJsBenchmark,kotlinCompilerPluginClasspathJsMain,kotlinCompilerPluginClasspathJsTest,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataCommonMain,kotlinCompilerPluginClasspathMetadataMain,kotlinCompilerPluginClasspathWasmJsMain,kotlinCompilerPluginClasspathWasmJsTest,kotlinCompilerPluginClasspathWasmJsWasmJsBenchmark +org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.22=kotlinCompilerPluginClasspathJsJsBenchmark,kotlinCompilerPluginClasspathJsMain,kotlinCompilerPluginClasspathJsTest,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataCommonMain,kotlinCompilerPluginClasspathMetadataMain,kotlinCompilerPluginClasspathWasmJsMain,kotlinCompilerPluginClasspathWasmJsTest,kotlinCompilerPluginClasspathWasmJsWasmJsBenchmark +org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.22=kotlinCompilerPluginClasspathJsJsBenchmark,kotlinCompilerPluginClasspathJsMain,kotlinCompilerPluginClasspathJsTest,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataCommonMain,kotlinCompilerPluginClasspathMetadataMain,kotlinCompilerPluginClasspathWasmJsMain,kotlinCompilerPluginClasspathWasmJsTest,kotlinCompilerPluginClasspathWasmJsWasmJsBenchmark +org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.22=kotlinCompilerPluginClasspathJsJsBenchmark,kotlinCompilerPluginClasspathJsMain,kotlinCompilerPluginClasspathJsTest,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataCommonMain,kotlinCompilerPluginClasspathMetadataMain,kotlinCompilerPluginClasspathWasmJsMain,kotlinCompilerPluginClasspathWasmJsTest,kotlinCompilerPluginClasspathWasmJsWasmJsBenchmark +org.jetbrains.kotlin:kotlin-stdlib-js:1.9.22=jsCompileClasspath,jsJsBenchmarkApiDependenciesMetadata,jsJsBenchmarkCompileClasspath,jsJsBenchmarkCompileOnlyDependenciesMetadata,jsJsBenchmarkImplementationDependenciesMetadata,jsJsBenchmarkNpmAggregated,jsJsBenchmarkRuntimeClasspath,jsMainApiDependenciesMetadata,jsMainCompileOnlyDependenciesMetadata,jsMainImplementationDependenciesMetadata,jsNpmAggregated,jsRuntimeClasspath,jsTestApiDependenciesMetadata,jsTestCompileClasspath,jsTestCompileOnlyDependenciesMetadata,jsTestImplementationDependenciesMetadata,jsTestNpmAggregated,jsTestRuntimeClasspath +org.jetbrains.kotlin:kotlin-stdlib-wasm-js:1.9.22=wasmJsCompileClasspath,wasmJsNpmAggregated,wasmJsRuntimeClasspath,wasmJsTestCompileClasspath,wasmJsTestNpmAggregated,wasmJsTestRuntimeClasspath,wasmJsWasmJsBenchmarkCompileClasspath,wasmJsWasmJsBenchmarkNpmAggregated,wasmJsWasmJsBenchmarkRuntimeClasspath +org.jetbrains.kotlin:kotlin-stdlib:1.9.22=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jsCompileClasspath,jsJsBenchmarkApiDependenciesMetadata,jsJsBenchmarkCompileClasspath,jsJsBenchmarkCompileOnlyDependenciesMetadata,jsJsBenchmarkImplementationDependenciesMetadata,jsJsBenchmarkNpmAggregated,jsJsBenchmarkResolvableDependenciesMetadata,jsJsBenchmarkRuntimeClasspath,jsMainApiDependenciesMetadata,jsMainCompileOnlyDependenciesMetadata,jsMainImplementationDependenciesMetadata,jsMainResolvableDependenciesMetadata,jsNpmAggregated,jsRuntimeClasspath,jsTestApiDependenciesMetadata,jsTestCompileClasspath,jsTestCompileOnlyDependenciesMetadata,jsTestImplementationDependenciesMetadata,jsTestNpmAggregated,jsTestResolvableDependenciesMetadata,jsTestRuntimeClasspath,jvmCompileClasspath,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJsJsBenchmark,kotlinCompilerPluginClasspathJsMain,kotlinCompilerPluginClasspathJsTest,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataCommonMain,kotlinCompilerPluginClasspathMetadataMain,kotlinCompilerPluginClasspathWasmJsMain,kotlinCompilerPluginClasspathWasmJsTest,kotlinCompilerPluginClasspathWasmJsWasmJsBenchmark,kotlinKlibCommonizerClasspath,linuxX64CompilationApi,linuxX64CompilationDependenciesMetadata,linuxX64CompileKlibraries,linuxX64MainApiDependenciesMetadata,linuxX64MainCompileOnlyDependenciesMetadata,linuxX64MainImplementationDependenciesMetadata,linuxX64MainResolvableDependenciesMetadata,linuxX64TestApiDependenciesMetadata,linuxX64TestCompilationDependenciesMetadata,linuxX64TestCompileKlibraries,linuxX64TestCompileOnlyDependenciesMetadata,linuxX64TestImplementationDependenciesMetadata,linuxX64TestResolvableDependenciesMetadata,macosX64CompilationApi,macosX64CompilationDependenciesMetadata,macosX64CompileKlibraries,macosX64MainApiDependenciesMetadata,macosX64MainCompileOnlyDependenciesMetadata,macosX64MainImplementationDependenciesMetadata,macosX64MainResolvableDependenciesMetadata,macosX64TestApiDependenciesMetadata,macosX64TestCompilationDependenciesMetadata,macosX64TestCompileKlibraries,macosX64TestCompileOnlyDependenciesMetadata,macosX64TestImplementationDependenciesMetadata,macosX64TestResolvableDependenciesMetadata,metadataCommonMainCompileClasspath,metadataCompileClasspath,metadataNativeMainCompileClasspath,mingwX64CompilationApi,mingwX64CompilationDependenciesMetadata,mingwX64CompileKlibraries,mingwX64MainApiDependenciesMetadata,mingwX64MainCompileOnlyDependenciesMetadata,mingwX64MainImplementationDependenciesMetadata,mingwX64MainResolvableDependenciesMetadata,mingwX64TestApiDependenciesMetadata,mingwX64TestCompilationDependenciesMetadata,mingwX64TestCompileKlibraries,mingwX64TestCompileOnlyDependenciesMetadata,mingwX64TestImplementationDependenciesMetadata,mingwX64TestResolvableDependenciesMetadata,nativeMainApiDependenciesMetadata,nativeMainCompileOnlyDependenciesMetadata,nativeMainImplementationDependenciesMetadata,nativeMainResolvableDependenciesMetadata,nativeTestApiDependenciesMetadata,nativeTestCompileOnlyDependenciesMetadata,nativeTestImplementationDependenciesMetadata,nativeTestResolvableDependenciesMetadata,wasmJsCompileClasspath,wasmJsMainApiDependenciesMetadata,wasmJsMainCompileOnlyDependenciesMetadata,wasmJsMainImplementationDependenciesMetadata,wasmJsMainResolvableDependenciesMetadata,wasmJsNpmAggregated,wasmJsRuntimeClasspath,wasmJsTestApiDependenciesMetadata,wasmJsTestCompileClasspath,wasmJsTestCompileOnlyDependenciesMetadata,wasmJsTestImplementationDependenciesMetadata,wasmJsTestNpmAggregated,wasmJsTestResolvableDependenciesMetadata,wasmJsTestRuntimeClasspath,wasmJsWasmJsBenchmarkApiDependenciesMetadata,wasmJsWasmJsBenchmarkCompileClasspath,wasmJsWasmJsBenchmarkCompileOnlyDependenciesMetadata,wasmJsWasmJsBenchmarkImplementationDependenciesMetadata,wasmJsWasmJsBenchmarkNpmAggregated,wasmJsWasmJsBenchmarkResolvableDependenciesMetadata,wasmJsWasmJsBenchmarkRuntimeClasspath +org.jetbrains.kotlin:kotlin-test-js-runner:1.9.22=jsJsBenchmarkNpmAggregated,jsNpmAggregated,jsTestNpmAggregated,wasmJsNpmAggregated,wasmJsTestNpmAggregated,wasmJsWasmJsBenchmarkNpmAggregated +org.jetbrains.kotlinx:kotlinx-benchmark-runtime-jsir:0.4.10=jsCompileClasspath,jsJsBenchmarkApiDependenciesMetadata,jsJsBenchmarkCompileClasspath,jsJsBenchmarkCompileOnlyDependenciesMetadata,jsJsBenchmarkImplementationDependenciesMetadata,jsJsBenchmarkNpmAggregated,jsJsBenchmarkRuntimeClasspath,jsMainApiDependenciesMetadata,jsMainCompileOnlyDependenciesMetadata,jsMainImplementationDependenciesMetadata,jsNpmAggregated,jsRuntimeClasspath,jsTestApiDependenciesMetadata,jsTestCompileClasspath,jsTestCompileOnlyDependenciesMetadata,jsTestImplementationDependenciesMetadata,jsTestNpmAggregated,jsTestRuntimeClasspath +org.jetbrains.kotlinx:kotlinx-benchmark-runtime-jvm:0.4.10=jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestRuntimeClasspath +org.jetbrains.kotlinx:kotlinx-benchmark-runtime-linuxx64:0.4.10=linuxX64CompilationDependenciesMetadata,linuxX64CompileKlibraries,linuxX64TestCompilationDependenciesMetadata,linuxX64TestCompileKlibraries +org.jetbrains.kotlinx:kotlinx-benchmark-runtime-macosx64:0.4.10=macosX64CompilationDependenciesMetadata,macosX64CompileKlibraries,macosX64TestCompilationDependenciesMetadata,macosX64TestCompileKlibraries +org.jetbrains.kotlinx:kotlinx-benchmark-runtime-mingwx64:0.4.10=mingwX64CompilationDependenciesMetadata,mingwX64CompileKlibraries,mingwX64TestCompilationDependenciesMetadata,mingwX64TestCompileKlibraries +org.jetbrains.kotlinx:kotlinx-benchmark-runtime-wasm-js:0.4.10=wasmJsCompileClasspath,wasmJsNpmAggregated,wasmJsRuntimeClasspath,wasmJsTestCompileClasspath,wasmJsTestNpmAggregated,wasmJsTestRuntimeClasspath,wasmJsWasmJsBenchmarkCompileClasspath,wasmJsWasmJsBenchmarkNpmAggregated,wasmJsWasmJsBenchmarkRuntimeClasspath +org.jetbrains.kotlinx:kotlinx-benchmark-runtime:0.4.10=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jsCompileClasspath,jsJsBenchmarkApiDependenciesMetadata,jsJsBenchmarkCompileClasspath,jsJsBenchmarkCompileOnlyDependenciesMetadata,jsJsBenchmarkImplementationDependenciesMetadata,jsJsBenchmarkNpmAggregated,jsJsBenchmarkResolvableDependenciesMetadata,jsJsBenchmarkRuntimeClasspath,jsMainApiDependenciesMetadata,jsMainCompileOnlyDependenciesMetadata,jsMainImplementationDependenciesMetadata,jsMainResolvableDependenciesMetadata,jsNpmAggregated,jsRuntimeClasspath,jsTestApiDependenciesMetadata,jsTestCompileClasspath,jsTestCompileOnlyDependenciesMetadata,jsTestImplementationDependenciesMetadata,jsTestNpmAggregated,jsTestResolvableDependenciesMetadata,jsTestRuntimeClasspath,jvmCompileClasspath,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,linuxX64CompilationDependenciesMetadata,linuxX64CompileKlibraries,linuxX64MainApiDependenciesMetadata,linuxX64MainCompileOnlyDependenciesMetadata,linuxX64MainImplementationDependenciesMetadata,linuxX64MainResolvableDependenciesMetadata,linuxX64TestApiDependenciesMetadata,linuxX64TestCompilationDependenciesMetadata,linuxX64TestCompileKlibraries,linuxX64TestCompileOnlyDependenciesMetadata,linuxX64TestImplementationDependenciesMetadata,linuxX64TestResolvableDependenciesMetadata,macosX64CompilationDependenciesMetadata,macosX64CompileKlibraries,macosX64MainApiDependenciesMetadata,macosX64MainCompileOnlyDependenciesMetadata,macosX64MainImplementationDependenciesMetadata,macosX64MainResolvableDependenciesMetadata,macosX64TestApiDependenciesMetadata,macosX64TestCompilationDependenciesMetadata,macosX64TestCompileKlibraries,macosX64TestCompileOnlyDependenciesMetadata,macosX64TestImplementationDependenciesMetadata,macosX64TestResolvableDependenciesMetadata,metadataCommonMainCompileClasspath,metadataCompileClasspath,metadataNativeMainCompileClasspath,mingwX64CompilationDependenciesMetadata,mingwX64CompileKlibraries,mingwX64MainApiDependenciesMetadata,mingwX64MainCompileOnlyDependenciesMetadata,mingwX64MainImplementationDependenciesMetadata,mingwX64MainResolvableDependenciesMetadata,mingwX64TestApiDependenciesMetadata,mingwX64TestCompilationDependenciesMetadata,mingwX64TestCompileKlibraries,mingwX64TestCompileOnlyDependenciesMetadata,mingwX64TestImplementationDependenciesMetadata,mingwX64TestResolvableDependenciesMetadata,nativeMainApiDependenciesMetadata,nativeMainCompileOnlyDependenciesMetadata,nativeMainImplementationDependenciesMetadata,nativeMainResolvableDependenciesMetadata,nativeTestApiDependenciesMetadata,nativeTestCompileOnlyDependenciesMetadata,nativeTestImplementationDependenciesMetadata,nativeTestResolvableDependenciesMetadata,wasmJsCompileClasspath,wasmJsMainApiDependenciesMetadata,wasmJsMainCompileOnlyDependenciesMetadata,wasmJsMainImplementationDependenciesMetadata,wasmJsMainResolvableDependenciesMetadata,wasmJsNpmAggregated,wasmJsRuntimeClasspath,wasmJsTestApiDependenciesMetadata,wasmJsTestCompileClasspath,wasmJsTestCompileOnlyDependenciesMetadata,wasmJsTestImplementationDependenciesMetadata,wasmJsTestNpmAggregated,wasmJsTestResolvableDependenciesMetadata,wasmJsTestRuntimeClasspath,wasmJsWasmJsBenchmarkApiDependenciesMetadata,wasmJsWasmJsBenchmarkCompileClasspath,wasmJsWasmJsBenchmarkCompileOnlyDependenciesMetadata,wasmJsWasmJsBenchmarkImplementationDependenciesMetadata,wasmJsWasmJsBenchmarkNpmAggregated,wasmJsWasmJsBenchmarkResolvableDependenciesMetadata,wasmJsWasmJsBenchmarkRuntimeClasspath +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.0=kotlinBuildToolsApiClasspath +org.jetbrains:annotations:13.0=jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJsJsBenchmark,kotlinCompilerPluginClasspathJsMain,kotlinCompilerPluginClasspathJsTest,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataCommonMain,kotlinCompilerPluginClasspathMetadataMain,kotlinCompilerPluginClasspathWasmJsMain,kotlinCompilerPluginClasspathWasmJsTest,kotlinCompilerPluginClasspathWasmJsWasmJsBenchmark,kotlinKlibCommonizerClasspath +org.openjdk.jmh:jmh-core:1.21=jvmBenchmarkGenerateCP,jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestRuntimeClasspath +org.openjdk.jmh:jmh-generator-asm:1.21=jvmBenchmarkGenerateCP +org.openjdk.jmh:jmh-generator-bytecode:1.21=jvmBenchmarkGenerateCP +org.openjdk.jmh:jmh-generator-reflection:1.21=jvmBenchmarkGenerateCP +org.ow2.asm:asm:5.0.3=jvmBenchmarkGenerateCP +empty=benchmarksJar,commonMainIntransitiveDependenciesMetadata,commonTestIntransitiveDependenciesMetadata,jsJsBenchmarkIntransitiveDependenciesMetadata,jsMainIntransitiveDependenciesMetadata,jsTestIntransitiveDependenciesMetadata,jvmMainIntransitiveDependenciesMetadata,jvmTestIntransitiveDependenciesMetadata,kotlinCompilerPluginClasspath,kotlinCompilerPluginClasspathLinuxX64Main,kotlinCompilerPluginClasspathLinuxX64Test,kotlinCompilerPluginClasspathMacosX64Main,kotlinCompilerPluginClasspathMacosX64Test,kotlinCompilerPluginClasspathMetadataNativeMain,kotlinCompilerPluginClasspathMingwX64Main,kotlinCompilerPluginClasspathMingwX64Test,kotlinNativeCompilerPluginClasspath,kotlinScriptDef,kotlinScriptDefExtensions,linuxX64MainIntransitiveDependenciesMetadata,linuxX64TestCompilationApi,linuxX64TestIntransitiveDependenciesMetadata,macosX64MainIntransitiveDependenciesMetadata,macosX64TestCompilationApi,macosX64TestIntransitiveDependenciesMetadata,mingwX64MainIntransitiveDependenciesMetadata,mingwX64TestCompilationApi,mingwX64TestIntransitiveDependenciesMetadata,nativeMainIntransitiveDependenciesMetadata,nativeTestIntransitiveDependenciesMetadata,testKotlinScriptDef,testKotlinScriptDefExtensions,wasmJsMainIntransitiveDependenciesMetadata,wasmJsTestIntransitiveDependenciesMetadata,wasmJsWasmJsBenchmarkIntransitiveDependenciesMetadata diff --git a/benchmarks/runner/build.gradle b/benchmarks/runner/build.gradle index 9d7f3728..43972899 100644 --- a/benchmarks/runner/build.gradle +++ b/benchmarks/runner/build.gradle @@ -3,8 +3,8 @@ plugins { } dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib" - implementation 'org.openjdk.jmh:jmh-core:1.21' + implementation libs.kotlin.stdlib + implementation libs.jmh.core runtimeOnly project(path: ':benchmarks', configuration: 'benchmarksJar') runtimeOnly project(path: ':kotlinx-collections-immutable') diff --git a/build.gradle.kts b/build.gradle.kts index 9c3b4719..37bb4b2b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -45,4 +45,8 @@ allprojects { tasks.withType().configureEach { args.add("--ignore-engines") -} \ No newline at end of file +} + +dependencyLocking { + lockAllConfigurations() +} diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts new file mode 100644 index 00000000..90f4622a --- /dev/null +++ b/buildSrc/build.gradle.kts @@ -0,0 +1,67 @@ +/* + * Copyright 2016-2024 JetBrains s.r.o. + * Use of this source code is governed by the Apache 2.0 License that can be found in the LICENSE.txt file. + */ + +import java.util.* +import java.io.FileInputStream + +plugins { + `kotlin-dsl` +} + +repositories { + mavenCentral() + mavenLocal() + if (project.hasProperty("kotlin_repo_url")) { + maven(project.properties["kotlin_repo_url"] as String) + } + // kotlin-dev with space redirector + maven("https://cache-redirector.jetbrains.com/maven.pkg.jetbrains.space/kotlin/p/kotlin/dev") +} + +val kotlinVersion = run { + if (project.hasProperty("build_snapshot_train")) { + val ver = project.properties["kotlin_snapshot_version"] as? String + require(!ver.isNullOrBlank()) {"kotlin_snapshot_version must be present if build_snapshot_train is used" } + return@run ver + } + if (project.hasProperty("kotlin_repo_url")) { + val ver = project.properties["kotlin_version"] as? String + require(!ver.isNullOrBlank()) {"kotlin_version must be present if kotlin_repo_url is used" } + return@run ver + } + val targetProp = if (project.hasProperty("bootstrap")) "kotlin.version.snapshot" else "kotlin.version" + FileInputStream(file("../gradle.properties")).use { propFile -> + val ver = project.findProperty("kotlin.version")?.toString() ?: Properties().apply { load(propFile) }[targetProp] + require(ver is String) { "$targetProp must be string in ../gradle.properties, got $ver instead" } + ver + } +} + +dependencyLocking { + lockAllConfigurations() +} + +listOf( + Jar::class, + Zip::class, + Tar::class, +).forEach { + tasks.withType(it).configureEach { + isPreserveFileTimestamps = false + isReproducibleFileOrder = true + + when(this) { + is Zip -> isZip64 = true + } + } +} + +dependencies { + implementation(kotlin("gradle-plugin", kotlinVersion)) + + // fix from the Gradle team: makes version catalog symbols available in build scripts + // see here for more: https://github.com/gradle/gradle/issues/15383 + implementation(files(libs.javaClass.superclass.protectionDomain.codeSource.location)) +} diff --git a/buildSrc/gradle.lockfile b/buildSrc/gradle.lockfile new file mode 100644 index 00000000..ce47861d --- /dev/null +++ b/buildSrc/gradle.lockfile @@ -0,0 +1,48 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +org.jetbrains.intellij.deps:trove4j:1.0.20200330=buildScriptClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath,runtimeClasspath,testRuntimeClasspath +org.jetbrains.kotlin:kotlin-android-extensions:1.9.22=buildScriptClasspath,runtimeClasspath,testRuntimeClasspath +org.jetbrains.kotlin:kotlin-assignment-compiler-plugin-embeddable:1.9.20=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest +org.jetbrains.kotlin:kotlin-build-common:1.9.20=kotlinBuildToolsApiClasspath +org.jetbrains.kotlin:kotlin-build-tools-api:1.9.20=kotlinBuildToolsApiClasspath +org.jetbrains.kotlin:kotlin-build-tools-api:1.9.22=buildScriptClasspath,runtimeClasspath,testRuntimeClasspath +org.jetbrains.kotlin:kotlin-build-tools-impl:1.9.20=kotlinBuildToolsApiClasspath +org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath +org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.22=buildScriptClasspath,runtimeClasspath,testRuntimeClasspath +org.jetbrains.kotlin:kotlin-compiler-runner:1.9.20=kotlinBuildToolsApiClasspath +org.jetbrains.kotlin:kotlin-compiler-runner:1.9.22=buildScriptClasspath,runtimeClasspath,testRuntimeClasspath +org.jetbrains.kotlin:kotlin-daemon-client:1.9.20=kotlinBuildToolsApiClasspath +org.jetbrains.kotlin:kotlin-daemon-client:1.9.22=buildScriptClasspath,runtimeClasspath,testRuntimeClasspath +org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath +org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.22=buildScriptClasspath,runtimeClasspath,testRuntimeClasspath +org.jetbrains.kotlin:kotlin-gradle-plugin-annotations:1.9.22=buildScriptClasspath,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath +org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.9.22=buildScriptClasspath,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath +org.jetbrains.kotlin:kotlin-gradle-plugin-idea-proto:1.9.22=buildScriptClasspath,runtimeClasspath,testRuntimeClasspath +org.jetbrains.kotlin:kotlin-gradle-plugin-idea:1.9.22=buildScriptClasspath,runtimeClasspath,testRuntimeClasspath +org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.9.22=buildScriptClasspath,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath +org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.22=buildScriptClasspath,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath +org.jetbrains.kotlin:kotlin-gradle-plugins-bom:1.9.22=buildScriptClasspath,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath +org.jetbrains.kotlin:kotlin-klib-commonizer-api:1.9.22=buildScriptClasspath,runtimeClasspath,testRuntimeClasspath +org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.9.20=kotlinKlibCommonizerClasspath +org.jetbrains.kotlin:kotlin-native-utils:1.9.22=buildScriptClasspath,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath +org.jetbrains.kotlin:kotlin-project-model:1.9.22=buildScriptClasspath,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath +org.jetbrains.kotlin:kotlin-reflect:1.6.10=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath +org.jetbrains.kotlin:kotlin-reflect:1.9.20=compileClasspath,compileOnlyDependenciesMetadata,embeddedKotlin,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath +org.jetbrains.kotlin:kotlin-sam-with-receiver-compiler-plugin-embeddable:1.9.20=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest +org.jetbrains.kotlin:kotlin-script-runtime:1.9.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath +org.jetbrains.kotlin:kotlin-scripting-common:1.9.20=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest +org.jetbrains.kotlin:kotlin-scripting-common:1.9.22=buildScriptClasspath,runtimeClasspath,testRuntimeClasspath +org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.20=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest +org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.22=buildScriptClasspath,runtimeClasspath,testRuntimeClasspath +org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.20=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest +org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.22=buildScriptClasspath,runtimeClasspath,testRuntimeClasspath +org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.20=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest +org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.22=buildScriptClasspath,runtimeClasspath,testRuntimeClasspath +org.jetbrains.kotlin:kotlin-stdlib:1.9.20=compileClasspath,compileOnlyDependenciesMetadata,embeddedKotlin,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath +org.jetbrains.kotlin:kotlin-tooling-core:1.9.22=buildScriptClasspath,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath +org.jetbrains.kotlin:kotlin-util-io:1.9.22=buildScriptClasspath,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath +org.jetbrains.kotlin:kotlin-util-klib:1.9.22=buildScriptClasspath,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.0=buildScriptClasspath,kotlinBuildToolsApiClasspath,runtimeClasspath,testRuntimeClasspath +org.jetbrains:annotations:13.0=compileClasspath,embeddedKotlin,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,testCompileClasspath,testRuntimeClasspath +empty=annotationProcessor,apiDependenciesMetadata,intransitiveDependenciesMetadata,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,kotlinScriptDef,kotlinScriptDefExtensions,testAnnotationProcessor,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testIntransitiveDependenciesMetadata,testKotlinScriptDef,testKotlinScriptDefExtensions diff --git a/buildSrc/settings.gradle.kts b/buildSrc/settings.gradle.kts new file mode 100644 index 00000000..d1e14751 --- /dev/null +++ b/buildSrc/settings.gradle.kts @@ -0,0 +1,8 @@ + +dependencyResolutionManagement { + versionCatalogs { + create("libs") { + from(files("../gradle/libs.versions.toml")) + } + } +} diff --git a/buildSrc/src/main/kotlin/BuildConventions.kt b/buildSrc/src/main/kotlin/BuildConventions.kt new file mode 100644 index 00000000..0926d709 --- /dev/null +++ b/buildSrc/src/main/kotlin/BuildConventions.kt @@ -0,0 +1,58 @@ +/* + * Copyright 2016-2024 JetBrains s.r.o. + * Use of this source code is governed by the Apache 2.0 License that can be found in the LICENSE.txt file. + */ + +import org.gradle.accessors.dm.LibrariesForLibs +import org.gradle.api.Project +import org.gradle.api.provider.Provider +import org.gradle.api.tasks.bundling.Jar +import org.gradle.api.tasks.bundling.Tar +import org.gradle.api.tasks.bundling.Zip +import org.gradle.kotlin.dsl.the +import org.gradle.kotlin.dsl.withType + +// Static dependency pins. +val pinnedDependencies = mapOf Provider>( + "org.jetbrains.kotlin:kotlin-stdlib" to { versions.kotlin.sdk }, + "org.jetbrains.kotlin:kotlin-stdlib-common" to { versions.kotlin.sdk }, +) + +object BuildConventions { + fun Project.baseConventions() { + val libs = the() + + // enable dependency locking + dependencyLocking { + lockAllConfigurations() + } + + listOf( + Jar::class, + Zip::class, + Tar::class, + ).forEach { + tasks.withType(it).configureEach { + isPreserveFileTimestamps = false + isReproducibleFileOrder = true + + when(this) { + is Zip -> isZip64 = true + } + } + } + + // pin dependencies which are critical transitively + configurations.all { + resolutionStrategy { + eachDependency { + val coordinate = "${requested.module.group}:${requested.module.name}" + pinnedDependencies[coordinate]?.let { pin -> + useVersion(pin.invoke(libs).get()) + because("pinned dependency") + } + } + } + } + } +} diff --git a/buildSrc/src/main/kotlin/Java9Modularity.kt b/buildSrc/src/main/kotlin/Java9Modularity.kt new file mode 100644 index 00000000..c62316a3 --- /dev/null +++ b/buildSrc/src/main/kotlin/Java9Modularity.kt @@ -0,0 +1,227 @@ +/* + * Copyright 2016-2024 JetBrains s.r.o. + * Use of this source code is governed by the Apache 2.0 License that can be found in the LICENSE.txt file. + */ + +import org.gradle.api.* +import org.gradle.api.file.* +import org.gradle.api.provider.* +import org.gradle.api.tasks.* +import org.gradle.api.tasks.bundling.* +import org.gradle.api.tasks.compile.* +import org.gradle.jvm.toolchain.* +import org.gradle.kotlin.dsl.* +import org.gradle.language.base.plugins.LifecycleBasePlugin.* +import org.gradle.process.* +import org.jetbrains.kotlin.gradle.* +import org.jetbrains.kotlin.gradle.dsl.* +import org.jetbrains.kotlin.gradle.plugin.* +import org.jetbrains.kotlin.gradle.plugin.mpp.* +import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.* +import org.jetbrains.kotlin.gradle.targets.jvm.* +import org.jetbrains.kotlin.gradle.tasks.* +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile +import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile +import org.jetbrains.kotlin.tooling.core.* +import java.io.* +import kotlin.reflect.* +import kotlin.reflect.full.* + +object Java9Modularity { + @JvmStatic + @JvmOverloads + fun Project.configureJava9ModuleInfo(multiRelease: Boolean = true) { + val disableJPMS = this.rootProject.extra.has("disableJPMS") + val ideaActive = System.getProperty("idea.active") == "true" + if (disableJPMS || ideaActive) return + val kotlin = extensions.findByType() ?: return + val jvmTargets = kotlin.targets.filter { it is KotlinJvmTarget || it is KotlinWithJavaTarget<*, *> } + if (jvmTargets.isEmpty()) { + logger.warn("No Kotlin JVM targets found, can't configure compilation of module-info!") + } + jvmTargets.forEach { target -> + val artifactTask = tasks.getByName(target.artifactsTaskName) { + if (multiRelease) { + manifest { + attributes("Multi-Release" to true) + } + } + } + + target.compilations.forEach { compilation -> + val compileKotlinTask = compilation.compileKotlinTask as KotlinCompile + val defaultSourceSet = compilation.defaultSourceSet + + // derive the names of the source set and compile module task + val sourceSetName = defaultSourceSet.name + "Module" + kotlin.sourceSets.create(sourceSetName) { + val sourceFile = this.kotlin.find { it.name == "module-info.java" } + val targetDirectory = compileKotlinTask.destinationDirectory.map { + it.dir("../${it.asFile.name}Module") + } + + // only configure the compilation if necessary + if (sourceFile != null) { + // register and wire a task to verify module-info.java content + // + // this will compile the whole sources again with a JPMS-aware target Java version, + // so that the Kotlin compiler can do the necessary verifications + // while compiling with `jdk-release=1.8` those verifications are not done + // + // this task is only going to be executed when running with `check` or explicitly, + // not during normal build operations + val verifyModuleTask = registerVerifyModuleTask( + compileKotlinTask, + sourceFile + ) + tasks.named("check") { + dependsOn(verifyModuleTask) + } + + // register a new compile module task + val compileModuleTask = registerCompileModuleTask( + compileKotlinTask, + sourceFile, + targetDirectory + ) + + // add the resulting module descriptor to this target's artifact + artifactTask.from(compileModuleTask.map { it.destinationDirectory }) { + if (multiRelease) { + into("META-INF/versions/9/") + } + } + } else { + logger.info("No module-info.java file found in ${this.kotlin.srcDirs}, can't configure compilation of module-info!") + } + + // remove the source set to prevent Gradle warnings + kotlin.sourceSets.remove(this) + } + } + } + } + + /** + * Add a Kotlin compile task that compiles `module-info.java` source file and Kotlin sources together, + * the Kotlin compiler will parse and check module dependencies, + * but it currently won't compile to a module-info.class file. + */ + private fun Project.registerVerifyModuleTask( + compileTask: KotlinCompile, + sourceFile: File + ): TaskProvider { + apply() + val verifyModuleTaskName = "verify${compileTask.name.removePrefix("compile").capitalize()}Module" + // work-around for https://youtrack.jetbrains.com/issue/KT-60542 + val kotlinApiPlugin = plugins.getPlugin(KotlinApiPlugin::class) + val verifyModuleTask = kotlinApiPlugin.registerKotlinJvmCompileTask( + verifyModuleTaskName, + compileTask.compilerOptions.moduleName.get() + ) + verifyModuleTask { + group = VERIFICATION_GROUP + description = "Verify Kotlin sources for JPMS problems" + libraries.from(compileTask.libraries) + source(compileTask.sources) + source(compileTask.javaSources) + // part of work-around for https://youtrack.jetbrains.com/issue/KT-60541 + @Suppress("INVISIBLE_MEMBER") + source(compileTask.scriptSources) + source(sourceFile) + destinationDirectory.set(temporaryDir) + multiPlatformEnabled.set(compileTask.multiPlatformEnabled) + compilerOptions { + jvmTarget.set(JvmTarget.JVM_9) + // To support LV override when set in aggregate builds + languageVersion.set(compileTask.compilerOptions.languageVersion) + freeCompilerArgs.addAll( + listOf("-Xjdk-release=9", "-Xsuppress-version-warnings", "-Xexpect-actual-classes") + ) + optIn.addAll(compileTask.kotlinOptions.options.optIn) + } + // work-around for https://youtrack.jetbrains.com/issue/KT-60583 + inputs.files( + libraries.asFileTree.elements.map { libs -> + libs + .filter { it.asFile.exists() } + .map { + zipTree(it.asFile).filter { it.name == "module-info.class" } + } + } + ).withPropertyName("moduleInfosOfLibraries") + this as KotlinCompile + val kotlinPluginVersion = KotlinToolingVersion(kotlinApiPlugin.pluginVersion) + if (kotlinPluginVersion <= KotlinToolingVersion("1.9.255")) { + // part of work-around for https://youtrack.jetbrains.com/issue/KT-60541 + @Suppress("UNCHECKED_CAST") + val ownModuleNameProp = (this::class.superclasses.first() as KClass>) + .declaredMemberProperties + .find { it.name == "ownModuleName" } + ?.get(this) as? Property + ownModuleNameProp?.set(compileTask.kotlinOptions.moduleName) + } + + val taskKotlinLanguageVersion = compilerOptions.languageVersion.orElse(KotlinVersion.DEFAULT) + @OptIn(InternalKotlinGradlePluginApi::class) + if (taskKotlinLanguageVersion.get() < KotlinVersion.KOTLIN_2_0) { + // part of work-around for https://youtrack.jetbrains.com/issue/KT-60541 + @Suppress("INVISIBLE_MEMBER") + commonSourceSet.from(compileTask.commonSourceSet) + } else { + multiplatformStructure.refinesEdges.set(compileTask.multiplatformStructure.refinesEdges) + multiplatformStructure.fragments.set(compileTask.multiplatformStructure.fragments) + } + // part of work-around for https://youtrack.jetbrains.com/issue/KT-60541 + // and work-around for https://youtrack.jetbrains.com/issue/KT-60582 + incremental = false + } + return verifyModuleTask + } + + private fun Project.registerCompileModuleTask( + compileTask: KotlinCompile, + sourceFile: File, + targetDirectory: Provider + ) = tasks.register("${compileTask.name}Module", JavaCompile::class) { + // Configure the module compile task. + source(sourceFile) + classpath = files() + destinationDirectory.set(targetDirectory) + // use a Java 11 toolchain with release 9 option + // because for some OS / architecture combinations + // there are no Java 9 builds available + javaCompiler.set( + this@registerCompileModuleTask.the().compilerFor { + languageVersion.set(JavaLanguageVersion.of(11)) + } + ) + options.release.set(9) + + options.compilerArgumentProviders.add(object : CommandLineArgumentProvider { + @get:CompileClasspath + val compileClasspath = compileTask.libraries + + @get:CompileClasspath + val compiledClasses = compileTask.destinationDirectory + + @get:Input + val moduleName = sourceFile + .readLines() + .single { it.contains("module ") } + .substringAfter("module ") + .substringBefore(' ') + .trim() + + override fun asArguments() = mutableListOf( + // Provide the module path to the compiler instead of using a classpath. + // The module path should be the same as the classpath of the compiler. + "--module-path", + compileClasspath.asPath, + "--patch-module", + "$moduleName=${compiledClasses.get()}", + "-Xlint:-requires-transitive-automatic" + ) + }) + } +} diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 35262988..b4f5c086 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -1,3 +1,7 @@ +@file:OptIn(org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl::class) + +import BuildConventions.baseConventions +import Java9Modularity.configureJava9ModuleInfo import kotlinx.team.infra.mavenPublicationsPom plugins { @@ -6,7 +10,7 @@ plugins { } base { - archivesBaseName = "kotlinx-collections-immutable" // doesn't work + archivesName = "kotlinx-collections-immutable" } mavenPublicationsPom { @@ -160,4 +164,12 @@ with(org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin.apply(rootPr // Drop this when node js version become stable tasks.withType().configureEach { args.add("--ignore-engines") -} \ No newline at end of file +} + +// configure baseline conventions (dependency verification, locking, etc.) +baseConventions() + +afterEvaluate { + // Build a multi-release JAR with a Java `module-info.java` spec + configureJava9ModuleInfo(multiRelease = true) +} diff --git a/core/gradle.lockfile b/core/gradle.lockfile new file mode 100644 index 00000000..7d679838 --- /dev/null +++ b/core/gradle.lockfile @@ -0,0 +1,42 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +com.google.code.findbugs:jsr305:1.3.9=allSourceSetsCompileDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath +com.google.guava:guava-testlib:18.0=allSourceSetsCompileDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath +com.google.guava:guava:18.0=allSourceSetsCompileDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath +com.google.truth:truth:0.23=allSourceSetsCompileDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath +junit:junit:4.10=allSourceSetsCompileDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata +junit:junit:4.13.2=jvmTestCompileClasspath,jvmTestRuntimeClasspath +org.hamcrest:hamcrest-core:1.1=allSourceSetsCompileDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata +org.hamcrest:hamcrest-core:1.3=jvmTestCompileClasspath,jvmTestRuntimeClasspath +org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath +org.jetbrains.kotlin:kotlin-build-common:1.9.22=kotlinBuildToolsApiClasspath +org.jetbrains.kotlin:kotlin-build-tools-api:1.9.22=kotlinBuildToolsApiClasspath +org.jetbrains.kotlin:kotlin-build-tools-impl:1.9.22=kotlinBuildToolsApiClasspath +org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.22=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath +org.jetbrains.kotlin:kotlin-compiler-runner:1.9.22=kotlinBuildToolsApiClasspath +org.jetbrains.kotlin:kotlin-daemon-client:1.9.22=kotlinBuildToolsApiClasspath +org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.22=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath +org.jetbrains.kotlin:kotlin-dom-api-compat:1.9.22=allSourceSetsCompileDependenciesMetadata,jsCompileClasspath,jsMainApiDependenciesMetadata,jsMainCompileOnlyDependenciesMetadata,jsMainImplementationDependenciesMetadata,jsMainResolvableDependenciesMetadata,jsNpmAggregated,jsRuntimeClasspath,jsTestApiDependenciesMetadata,jsTestCompileClasspath,jsTestCompileOnlyDependenciesMetadata,jsTestImplementationDependenciesMetadata,jsTestNpmAggregated,jsTestResolvableDependenciesMetadata,jsTestRuntimeClasspath +org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.9.22=kotlinKlibCommonizerClasspath +org.jetbrains.kotlin:kotlin-reflect:1.6.10=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath +org.jetbrains.kotlin:kotlin-script-runtime:1.9.22=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJsMain,kotlinCompilerPluginClasspathJsTest,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataCommonMain,kotlinCompilerPluginClasspathMetadataMain,kotlinCompilerPluginClasspathWasmJsMain,kotlinCompilerPluginClasspathWasmJsTest,kotlinCompilerPluginClasspathWasmWasiMain,kotlinCompilerPluginClasspathWasmWasiTest,kotlinKlibCommonizerClasspath +org.jetbrains.kotlin:kotlin-scripting-common:1.9.22=kotlinCompilerPluginClasspathJsMain,kotlinCompilerPluginClasspathJsTest,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataCommonMain,kotlinCompilerPluginClasspathMetadataMain,kotlinCompilerPluginClasspathWasmJsMain,kotlinCompilerPluginClasspathWasmJsTest,kotlinCompilerPluginClasspathWasmWasiMain,kotlinCompilerPluginClasspathWasmWasiTest +org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.22=kotlinCompilerPluginClasspathJsMain,kotlinCompilerPluginClasspathJsTest,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataCommonMain,kotlinCompilerPluginClasspathMetadataMain,kotlinCompilerPluginClasspathWasmJsMain,kotlinCompilerPluginClasspathWasmJsTest,kotlinCompilerPluginClasspathWasmWasiMain,kotlinCompilerPluginClasspathWasmWasiTest +org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.22=kotlinCompilerPluginClasspathJsMain,kotlinCompilerPluginClasspathJsTest,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataCommonMain,kotlinCompilerPluginClasspathMetadataMain,kotlinCompilerPluginClasspathWasmJsMain,kotlinCompilerPluginClasspathWasmJsTest,kotlinCompilerPluginClasspathWasmWasiMain,kotlinCompilerPluginClasspathWasmWasiTest +org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.22=kotlinCompilerPluginClasspathJsMain,kotlinCompilerPluginClasspathJsTest,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataCommonMain,kotlinCompilerPluginClasspathMetadataMain,kotlinCompilerPluginClasspathWasmJsMain,kotlinCompilerPluginClasspathWasmJsTest,kotlinCompilerPluginClasspathWasmWasiMain,kotlinCompilerPluginClasspathWasmWasiTest +org.jetbrains.kotlin:kotlin-stdlib-js:1.9.22=jsCompileClasspath,jsMainApiDependenciesMetadata,jsMainCompileOnlyDependenciesMetadata,jsMainImplementationDependenciesMetadata,jsNpmAggregated,jsRuntimeClasspath,jsTestApiDependenciesMetadata,jsTestCompileClasspath,jsTestCompileOnlyDependenciesMetadata,jsTestImplementationDependenciesMetadata,jsTestNpmAggregated,jsTestRuntimeClasspath +org.jetbrains.kotlin:kotlin-stdlib-wasm-js:1.9.22=wasmJsCompileClasspath,wasmJsNpmAggregated,wasmJsRuntimeClasspath,wasmJsTestCompileClasspath,wasmJsTestNpmAggregated,wasmJsTestRuntimeClasspath +org.jetbrains.kotlin:kotlin-stdlib-wasm-wasi:1.9.22=wasmWasiCompileClasspath,wasmWasiNpmAggregated,wasmWasiRuntimeClasspath,wasmWasiTestCompileClasspath,wasmWasiTestNpmAggregated,wasmWasiTestRuntimeClasspath +org.jetbrains.kotlin:kotlin-stdlib:1.9.22=allSourceSetsCompileDependenciesMetadata,androidNativeArm32CompilationApi,androidNativeArm32CompilationDependenciesMetadata,androidNativeArm32CompileKlibraries,androidNativeArm32MainApiDependenciesMetadata,androidNativeArm32MainCompileOnlyDependenciesMetadata,androidNativeArm32MainImplementationDependenciesMetadata,androidNativeArm32MainResolvableDependenciesMetadata,androidNativeArm32TestApiDependenciesMetadata,androidNativeArm32TestCompilationDependenciesMetadata,androidNativeArm32TestCompileKlibraries,androidNativeArm32TestCompileOnlyDependenciesMetadata,androidNativeArm32TestImplementationDependenciesMetadata,androidNativeArm32TestResolvableDependenciesMetadata,androidNativeArm64CompilationApi,androidNativeArm64CompilationDependenciesMetadata,androidNativeArm64CompileKlibraries,androidNativeArm64MainApiDependenciesMetadata,androidNativeArm64MainCompileOnlyDependenciesMetadata,androidNativeArm64MainImplementationDependenciesMetadata,androidNativeArm64MainResolvableDependenciesMetadata,androidNativeArm64TestApiDependenciesMetadata,androidNativeArm64TestCompilationDependenciesMetadata,androidNativeArm64TestCompileKlibraries,androidNativeArm64TestCompileOnlyDependenciesMetadata,androidNativeArm64TestImplementationDependenciesMetadata,androidNativeArm64TestResolvableDependenciesMetadata,androidNativeMainApiDependenciesMetadata,androidNativeMainCompileOnlyDependenciesMetadata,androidNativeMainImplementationDependenciesMetadata,androidNativeMainResolvableDependenciesMetadata,androidNativeTestApiDependenciesMetadata,androidNativeTestCompileOnlyDependenciesMetadata,androidNativeTestImplementationDependenciesMetadata,androidNativeTestResolvableDependenciesMetadata,androidNativeX64CompilationApi,androidNativeX64CompilationDependenciesMetadata,androidNativeX64CompileKlibraries,androidNativeX64MainApiDependenciesMetadata,androidNativeX64MainCompileOnlyDependenciesMetadata,androidNativeX64MainImplementationDependenciesMetadata,androidNativeX64MainResolvableDependenciesMetadata,androidNativeX64TestApiDependenciesMetadata,androidNativeX64TestCompilationDependenciesMetadata,androidNativeX64TestCompileKlibraries,androidNativeX64TestCompileOnlyDependenciesMetadata,androidNativeX64TestImplementationDependenciesMetadata,androidNativeX64TestResolvableDependenciesMetadata,androidNativeX86CompilationApi,androidNativeX86CompilationDependenciesMetadata,androidNativeX86CompileKlibraries,androidNativeX86MainApiDependenciesMetadata,androidNativeX86MainCompileOnlyDependenciesMetadata,androidNativeX86MainImplementationDependenciesMetadata,androidNativeX86MainResolvableDependenciesMetadata,androidNativeX86TestApiDependenciesMetadata,androidNativeX86TestCompilationDependenciesMetadata,androidNativeX86TestCompileKlibraries,androidNativeX86TestCompileOnlyDependenciesMetadata,androidNativeX86TestImplementationDependenciesMetadata,androidNativeX86TestResolvableDependenciesMetadata,appleMainApiDependenciesMetadata,appleMainCompileOnlyDependenciesMetadata,appleMainImplementationDependenciesMetadata,appleMainResolvableDependenciesMetadata,appleTestApiDependenciesMetadata,appleTestCompileOnlyDependenciesMetadata,appleTestImplementationDependenciesMetadata,appleTestResolvableDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,iosArm64CompilationApi,iosArm64CompilationDependenciesMetadata,iosArm64CompileKlibraries,iosArm64MainApiDependenciesMetadata,iosArm64MainCompileOnlyDependenciesMetadata,iosArm64MainImplementationDependenciesMetadata,iosArm64MainResolvableDependenciesMetadata,iosArm64TestApiDependenciesMetadata,iosArm64TestCompilationDependenciesMetadata,iosArm64TestCompileKlibraries,iosArm64TestCompileOnlyDependenciesMetadata,iosArm64TestImplementationDependenciesMetadata,iosArm64TestResolvableDependenciesMetadata,iosMainApiDependenciesMetadata,iosMainCompileOnlyDependenciesMetadata,iosMainImplementationDependenciesMetadata,iosMainResolvableDependenciesMetadata,iosSimulatorArm64CompilationApi,iosSimulatorArm64CompilationDependenciesMetadata,iosSimulatorArm64CompileKlibraries,iosSimulatorArm64MainApiDependenciesMetadata,iosSimulatorArm64MainCompileOnlyDependenciesMetadata,iosSimulatorArm64MainImplementationDependenciesMetadata,iosSimulatorArm64MainResolvableDependenciesMetadata,iosSimulatorArm64TestApiDependenciesMetadata,iosSimulatorArm64TestCompilationDependenciesMetadata,iosSimulatorArm64TestCompileKlibraries,iosSimulatorArm64TestCompileOnlyDependenciesMetadata,iosSimulatorArm64TestImplementationDependenciesMetadata,iosSimulatorArm64TestResolvableDependenciesMetadata,iosTestApiDependenciesMetadata,iosTestCompileOnlyDependenciesMetadata,iosTestImplementationDependenciesMetadata,iosTestResolvableDependenciesMetadata,iosX64CompilationApi,iosX64CompilationDependenciesMetadata,iosX64CompileKlibraries,iosX64MainApiDependenciesMetadata,iosX64MainCompileOnlyDependenciesMetadata,iosX64MainImplementationDependenciesMetadata,iosX64MainResolvableDependenciesMetadata,iosX64TestApiDependenciesMetadata,iosX64TestCompilationDependenciesMetadata,iosX64TestCompileKlibraries,iosX64TestCompileOnlyDependenciesMetadata,iosX64TestImplementationDependenciesMetadata,iosX64TestResolvableDependenciesMetadata,jsCompileClasspath,jsMainApiDependenciesMetadata,jsMainCompileOnlyDependenciesMetadata,jsMainImplementationDependenciesMetadata,jsMainResolvableDependenciesMetadata,jsNpmAggregated,jsRuntimeClasspath,jsTestApiDependenciesMetadata,jsTestCompileClasspath,jsTestCompileOnlyDependenciesMetadata,jsTestImplementationDependenciesMetadata,jsTestNpmAggregated,jsTestResolvableDependenciesMetadata,jsTestRuntimeClasspath,jvmCompileClasspath,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJsMain,kotlinCompilerPluginClasspathJsTest,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataCommonMain,kotlinCompilerPluginClasspathMetadataMain,kotlinCompilerPluginClasspathWasmJsMain,kotlinCompilerPluginClasspathWasmJsTest,kotlinCompilerPluginClasspathWasmWasiMain,kotlinCompilerPluginClasspathWasmWasiTest,kotlinKlibCommonizerClasspath,linuxArm64CompilationApi,linuxArm64CompilationDependenciesMetadata,linuxArm64CompileKlibraries,linuxArm64MainApiDependenciesMetadata,linuxArm64MainCompileOnlyDependenciesMetadata,linuxArm64MainImplementationDependenciesMetadata,linuxArm64MainResolvableDependenciesMetadata,linuxArm64TestApiDependenciesMetadata,linuxArm64TestCompilationDependenciesMetadata,linuxArm64TestCompileKlibraries,linuxArm64TestCompileOnlyDependenciesMetadata,linuxArm64TestImplementationDependenciesMetadata,linuxArm64TestResolvableDependenciesMetadata,linuxMainApiDependenciesMetadata,linuxMainCompileOnlyDependenciesMetadata,linuxMainImplementationDependenciesMetadata,linuxMainResolvableDependenciesMetadata,linuxTestApiDependenciesMetadata,linuxTestCompileOnlyDependenciesMetadata,linuxTestImplementationDependenciesMetadata,linuxTestResolvableDependenciesMetadata,linuxX64CompilationApi,linuxX64CompilationDependenciesMetadata,linuxX64CompileKlibraries,linuxX64MainApiDependenciesMetadata,linuxX64MainCompileOnlyDependenciesMetadata,linuxX64MainImplementationDependenciesMetadata,linuxX64MainResolvableDependenciesMetadata,linuxX64TestApiDependenciesMetadata,linuxX64TestCompilationDependenciesMetadata,linuxX64TestCompileKlibraries,linuxX64TestCompileOnlyDependenciesMetadata,linuxX64TestImplementationDependenciesMetadata,linuxX64TestResolvableDependenciesMetadata,macosArm64CompilationApi,macosArm64CompilationDependenciesMetadata,macosArm64CompileKlibraries,macosArm64MainApiDependenciesMetadata,macosArm64MainCompileOnlyDependenciesMetadata,macosArm64MainImplementationDependenciesMetadata,macosArm64MainResolvableDependenciesMetadata,macosArm64TestApiDependenciesMetadata,macosArm64TestCompilationDependenciesMetadata,macosArm64TestCompileKlibraries,macosArm64TestCompileOnlyDependenciesMetadata,macosArm64TestImplementationDependenciesMetadata,macosArm64TestResolvableDependenciesMetadata,macosMainApiDependenciesMetadata,macosMainCompileOnlyDependenciesMetadata,macosMainImplementationDependenciesMetadata,macosMainResolvableDependenciesMetadata,macosTestApiDependenciesMetadata,macosTestCompileOnlyDependenciesMetadata,macosTestImplementationDependenciesMetadata,macosTestResolvableDependenciesMetadata,macosX64CompilationApi,macosX64CompilationDependenciesMetadata,macosX64CompileKlibraries,macosX64MainApiDependenciesMetadata,macosX64MainCompileOnlyDependenciesMetadata,macosX64MainImplementationDependenciesMetadata,macosX64MainResolvableDependenciesMetadata,macosX64TestApiDependenciesMetadata,macosX64TestCompilationDependenciesMetadata,macosX64TestCompileKlibraries,macosX64TestCompileOnlyDependenciesMetadata,macosX64TestImplementationDependenciesMetadata,macosX64TestResolvableDependenciesMetadata,metadataAndroidNativeMainCompileClasspath,metadataAppleMainCompileClasspath,metadataCommonMainCompileClasspath,metadataCompileClasspath,metadataIosMainCompileClasspath,metadataLinuxMainCompileClasspath,metadataMacosMainCompileClasspath,metadataNativeMainCompileClasspath,metadataTvosMainCompileClasspath,metadataWatchosMainCompileClasspath,mingwMainApiDependenciesMetadata,mingwMainCompileOnlyDependenciesMetadata,mingwMainImplementationDependenciesMetadata,mingwMainResolvableDependenciesMetadata,mingwTestApiDependenciesMetadata,mingwTestCompileOnlyDependenciesMetadata,mingwTestImplementationDependenciesMetadata,mingwTestResolvableDependenciesMetadata,mingwX64CompilationApi,mingwX64CompilationDependenciesMetadata,mingwX64CompileKlibraries,mingwX64MainApiDependenciesMetadata,mingwX64MainCompileOnlyDependenciesMetadata,mingwX64MainImplementationDependenciesMetadata,mingwX64MainResolvableDependenciesMetadata,mingwX64TestApiDependenciesMetadata,mingwX64TestCompilationDependenciesMetadata,mingwX64TestCompileKlibraries,mingwX64TestCompileOnlyDependenciesMetadata,mingwX64TestImplementationDependenciesMetadata,mingwX64TestResolvableDependenciesMetadata,nativeMainApiDependenciesMetadata,nativeMainCompileOnlyDependenciesMetadata,nativeMainImplementationDependenciesMetadata,nativeMainResolvableDependenciesMetadata,nativeTestApiDependenciesMetadata,nativeTestCompileOnlyDependenciesMetadata,nativeTestImplementationDependenciesMetadata,nativeTestResolvableDependenciesMetadata,tvosArm64CompilationApi,tvosArm64CompilationDependenciesMetadata,tvosArm64CompileKlibraries,tvosArm64MainApiDependenciesMetadata,tvosArm64MainCompileOnlyDependenciesMetadata,tvosArm64MainImplementationDependenciesMetadata,tvosArm64MainResolvableDependenciesMetadata,tvosArm64TestApiDependenciesMetadata,tvosArm64TestCompilationDependenciesMetadata,tvosArm64TestCompileKlibraries,tvosArm64TestCompileOnlyDependenciesMetadata,tvosArm64TestImplementationDependenciesMetadata,tvosArm64TestResolvableDependenciesMetadata,tvosMainApiDependenciesMetadata,tvosMainCompileOnlyDependenciesMetadata,tvosMainImplementationDependenciesMetadata,tvosMainResolvableDependenciesMetadata,tvosSimulatorArm64CompilationApi,tvosSimulatorArm64CompilationDependenciesMetadata,tvosSimulatorArm64CompileKlibraries,tvosSimulatorArm64MainApiDependenciesMetadata,tvosSimulatorArm64MainCompileOnlyDependenciesMetadata,tvosSimulatorArm64MainImplementationDependenciesMetadata,tvosSimulatorArm64MainResolvableDependenciesMetadata,tvosSimulatorArm64TestApiDependenciesMetadata,tvosSimulatorArm64TestCompilationDependenciesMetadata,tvosSimulatorArm64TestCompileKlibraries,tvosSimulatorArm64TestCompileOnlyDependenciesMetadata,tvosSimulatorArm64TestImplementationDependenciesMetadata,tvosSimulatorArm64TestResolvableDependenciesMetadata,tvosTestApiDependenciesMetadata,tvosTestCompileOnlyDependenciesMetadata,tvosTestImplementationDependenciesMetadata,tvosTestResolvableDependenciesMetadata,tvosX64CompilationApi,tvosX64CompilationDependenciesMetadata,tvosX64CompileKlibraries,tvosX64MainApiDependenciesMetadata,tvosX64MainCompileOnlyDependenciesMetadata,tvosX64MainImplementationDependenciesMetadata,tvosX64MainResolvableDependenciesMetadata,tvosX64TestApiDependenciesMetadata,tvosX64TestCompilationDependenciesMetadata,tvosX64TestCompileKlibraries,tvosX64TestCompileOnlyDependenciesMetadata,tvosX64TestImplementationDependenciesMetadata,tvosX64TestResolvableDependenciesMetadata,wasmJsCompileClasspath,wasmJsMainApiDependenciesMetadata,wasmJsMainCompileOnlyDependenciesMetadata,wasmJsMainImplementationDependenciesMetadata,wasmJsMainResolvableDependenciesMetadata,wasmJsNpmAggregated,wasmJsRuntimeClasspath,wasmJsTestApiDependenciesMetadata,wasmJsTestCompileClasspath,wasmJsTestCompileOnlyDependenciesMetadata,wasmJsTestImplementationDependenciesMetadata,wasmJsTestNpmAggregated,wasmJsTestResolvableDependenciesMetadata,wasmJsTestRuntimeClasspath,wasmTestApiDependenciesMetadata,wasmTestCompileOnlyDependenciesMetadata,wasmTestImplementationDependenciesMetadata,wasmTestResolvableDependenciesMetadata,wasmWasiCompileClasspath,wasmWasiMainApiDependenciesMetadata,wasmWasiMainCompileOnlyDependenciesMetadata,wasmWasiMainImplementationDependenciesMetadata,wasmWasiMainResolvableDependenciesMetadata,wasmWasiNpmAggregated,wasmWasiRuntimeClasspath,wasmWasiTestApiDependenciesMetadata,wasmWasiTestCompileClasspath,wasmWasiTestCompileOnlyDependenciesMetadata,wasmWasiTestImplementationDependenciesMetadata,wasmWasiTestNpmAggregated,wasmWasiTestResolvableDependenciesMetadata,wasmWasiTestRuntimeClasspath,watchosArm32CompilationApi,watchosArm32CompilationDependenciesMetadata,watchosArm32CompileKlibraries,watchosArm32MainApiDependenciesMetadata,watchosArm32MainCompileOnlyDependenciesMetadata,watchosArm32MainImplementationDependenciesMetadata,watchosArm32MainResolvableDependenciesMetadata,watchosArm32TestApiDependenciesMetadata,watchosArm32TestCompilationDependenciesMetadata,watchosArm32TestCompileKlibraries,watchosArm32TestCompileOnlyDependenciesMetadata,watchosArm32TestImplementationDependenciesMetadata,watchosArm32TestResolvableDependenciesMetadata,watchosArm64CompilationApi,watchosArm64CompilationDependenciesMetadata,watchosArm64CompileKlibraries,watchosArm64MainApiDependenciesMetadata,watchosArm64MainCompileOnlyDependenciesMetadata,watchosArm64MainImplementationDependenciesMetadata,watchosArm64MainResolvableDependenciesMetadata,watchosArm64TestApiDependenciesMetadata,watchosArm64TestCompilationDependenciesMetadata,watchosArm64TestCompileKlibraries,watchosArm64TestCompileOnlyDependenciesMetadata,watchosArm64TestImplementationDependenciesMetadata,watchosArm64TestResolvableDependenciesMetadata,watchosDeviceArm64CompilationApi,watchosDeviceArm64CompilationDependenciesMetadata,watchosDeviceArm64CompileKlibraries,watchosDeviceArm64MainApiDependenciesMetadata,watchosDeviceArm64MainCompileOnlyDependenciesMetadata,watchosDeviceArm64MainImplementationDependenciesMetadata,watchosDeviceArm64MainResolvableDependenciesMetadata,watchosDeviceArm64TestApiDependenciesMetadata,watchosDeviceArm64TestCompilationDependenciesMetadata,watchosDeviceArm64TestCompileKlibraries,watchosDeviceArm64TestCompileOnlyDependenciesMetadata,watchosDeviceArm64TestImplementationDependenciesMetadata,watchosDeviceArm64TestResolvableDependenciesMetadata,watchosMainApiDependenciesMetadata,watchosMainCompileOnlyDependenciesMetadata,watchosMainImplementationDependenciesMetadata,watchosMainResolvableDependenciesMetadata,watchosSimulatorArm64CompilationApi,watchosSimulatorArm64CompilationDependenciesMetadata,watchosSimulatorArm64CompileKlibraries,watchosSimulatorArm64MainApiDependenciesMetadata,watchosSimulatorArm64MainCompileOnlyDependenciesMetadata,watchosSimulatorArm64MainImplementationDependenciesMetadata,watchosSimulatorArm64MainResolvableDependenciesMetadata,watchosSimulatorArm64TestApiDependenciesMetadata,watchosSimulatorArm64TestCompilationDependenciesMetadata,watchosSimulatorArm64TestCompileKlibraries,watchosSimulatorArm64TestCompileOnlyDependenciesMetadata,watchosSimulatorArm64TestImplementationDependenciesMetadata,watchosSimulatorArm64TestResolvableDependenciesMetadata,watchosTestApiDependenciesMetadata,watchosTestCompileOnlyDependenciesMetadata,watchosTestImplementationDependenciesMetadata,watchosTestResolvableDependenciesMetadata,watchosX64CompilationApi,watchosX64CompilationDependenciesMetadata,watchosX64CompileKlibraries,watchosX64MainApiDependenciesMetadata,watchosX64MainCompileOnlyDependenciesMetadata,watchosX64MainImplementationDependenciesMetadata,watchosX64MainResolvableDependenciesMetadata,watchosX64TestApiDependenciesMetadata,watchosX64TestCompilationDependenciesMetadata,watchosX64TestCompileKlibraries,watchosX64TestCompileOnlyDependenciesMetadata,watchosX64TestImplementationDependenciesMetadata,watchosX64TestResolvableDependenciesMetadata +org.jetbrains.kotlin:kotlin-test-annotations-common:1.9.22=allSourceSetsCompileDependenciesMetadata,androidNativeArm32TestResolvableDependenciesMetadata,androidNativeArm64TestResolvableDependenciesMetadata,androidNativeTestApiDependenciesMetadata,androidNativeTestCompileOnlyDependenciesMetadata,androidNativeTestImplementationDependenciesMetadata,androidNativeTestResolvableDependenciesMetadata,androidNativeX64TestResolvableDependenciesMetadata,androidNativeX86TestResolvableDependenciesMetadata,appleTestApiDependenciesMetadata,appleTestCompileOnlyDependenciesMetadata,appleTestImplementationDependenciesMetadata,appleTestResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,iosArm64TestResolvableDependenciesMetadata,iosSimulatorArm64TestResolvableDependenciesMetadata,iosTestApiDependenciesMetadata,iosTestCompileOnlyDependenciesMetadata,iosTestImplementationDependenciesMetadata,iosTestResolvableDependenciesMetadata,iosX64TestResolvableDependenciesMetadata,jsTestResolvableDependenciesMetadata,jvmTestResolvableDependenciesMetadata,linuxArm64TestResolvableDependenciesMetadata,linuxTestApiDependenciesMetadata,linuxTestCompileOnlyDependenciesMetadata,linuxTestImplementationDependenciesMetadata,linuxTestResolvableDependenciesMetadata,linuxX64TestResolvableDependenciesMetadata,macosArm64TestResolvableDependenciesMetadata,macosTestApiDependenciesMetadata,macosTestCompileOnlyDependenciesMetadata,macosTestImplementationDependenciesMetadata,macosTestResolvableDependenciesMetadata,macosX64TestResolvableDependenciesMetadata,mingwTestApiDependenciesMetadata,mingwTestCompileOnlyDependenciesMetadata,mingwTestImplementationDependenciesMetadata,mingwTestResolvableDependenciesMetadata,mingwX64TestResolvableDependenciesMetadata,nativeTestApiDependenciesMetadata,nativeTestCompileOnlyDependenciesMetadata,nativeTestImplementationDependenciesMetadata,nativeTestResolvableDependenciesMetadata,tvosArm64TestResolvableDependenciesMetadata,tvosSimulatorArm64TestResolvableDependenciesMetadata,tvosTestApiDependenciesMetadata,tvosTestCompileOnlyDependenciesMetadata,tvosTestImplementationDependenciesMetadata,tvosTestResolvableDependenciesMetadata,tvosX64TestResolvableDependenciesMetadata,wasmJsTestResolvableDependenciesMetadata,wasmWasiTestResolvableDependenciesMetadata,watchosArm32TestResolvableDependenciesMetadata,watchosArm64TestResolvableDependenciesMetadata,watchosDeviceArm64TestResolvableDependenciesMetadata,watchosSimulatorArm64TestResolvableDependenciesMetadata,watchosTestApiDependenciesMetadata,watchosTestCompileOnlyDependenciesMetadata,watchosTestImplementationDependenciesMetadata,watchosTestResolvableDependenciesMetadata,watchosX64TestResolvableDependenciesMetadata +org.jetbrains.kotlin:kotlin-test-common:1.9.22=allSourceSetsCompileDependenciesMetadata,androidNativeArm32TestResolvableDependenciesMetadata,androidNativeArm64TestResolvableDependenciesMetadata,androidNativeTestApiDependenciesMetadata,androidNativeTestCompileOnlyDependenciesMetadata,androidNativeTestImplementationDependenciesMetadata,androidNativeTestResolvableDependenciesMetadata,androidNativeX64TestResolvableDependenciesMetadata,androidNativeX86TestResolvableDependenciesMetadata,appleTestApiDependenciesMetadata,appleTestCompileOnlyDependenciesMetadata,appleTestImplementationDependenciesMetadata,appleTestResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,iosArm64TestResolvableDependenciesMetadata,iosSimulatorArm64TestResolvableDependenciesMetadata,iosTestApiDependenciesMetadata,iosTestCompileOnlyDependenciesMetadata,iosTestImplementationDependenciesMetadata,iosTestResolvableDependenciesMetadata,iosX64TestResolvableDependenciesMetadata,jsTestResolvableDependenciesMetadata,jvmTestResolvableDependenciesMetadata,linuxArm64TestResolvableDependenciesMetadata,linuxTestApiDependenciesMetadata,linuxTestCompileOnlyDependenciesMetadata,linuxTestImplementationDependenciesMetadata,linuxTestResolvableDependenciesMetadata,linuxX64TestResolvableDependenciesMetadata,macosArm64TestResolvableDependenciesMetadata,macosTestApiDependenciesMetadata,macosTestCompileOnlyDependenciesMetadata,macosTestImplementationDependenciesMetadata,macosTestResolvableDependenciesMetadata,macosX64TestResolvableDependenciesMetadata,mingwTestApiDependenciesMetadata,mingwTestCompileOnlyDependenciesMetadata,mingwTestImplementationDependenciesMetadata,mingwTestResolvableDependenciesMetadata,mingwX64TestResolvableDependenciesMetadata,nativeTestApiDependenciesMetadata,nativeTestCompileOnlyDependenciesMetadata,nativeTestImplementationDependenciesMetadata,nativeTestResolvableDependenciesMetadata,tvosArm64TestResolvableDependenciesMetadata,tvosSimulatorArm64TestResolvableDependenciesMetadata,tvosTestApiDependenciesMetadata,tvosTestCompileOnlyDependenciesMetadata,tvosTestImplementationDependenciesMetadata,tvosTestResolvableDependenciesMetadata,tvosX64TestResolvableDependenciesMetadata,wasmJsTestResolvableDependenciesMetadata,wasmWasiTestResolvableDependenciesMetadata,watchosArm32TestResolvableDependenciesMetadata,watchosArm64TestResolvableDependenciesMetadata,watchosDeviceArm64TestResolvableDependenciesMetadata,watchosSimulatorArm64TestResolvableDependenciesMetadata,watchosTestApiDependenciesMetadata,watchosTestCompileOnlyDependenciesMetadata,watchosTestImplementationDependenciesMetadata,watchosTestResolvableDependenciesMetadata,watchosX64TestResolvableDependenciesMetadata +org.jetbrains.kotlin:kotlin-test-js-runner:1.9.22=jsNpmAggregated,jsTestNpmAggregated,wasmJsNpmAggregated,wasmJsTestNpmAggregated,wasmWasiNpmAggregated,wasmWasiTestNpmAggregated +org.jetbrains.kotlin:kotlin-test-js:1.9.22=jsTestCompileClasspath,jsTestNpmAggregated,jsTestRuntimeClasspath +org.jetbrains.kotlin:kotlin-test-junit:1.9.22=jvmTestCompileClasspath,jvmTestRuntimeClasspath +org.jetbrains.kotlin:kotlin-test-wasm-js:1.9.22=wasmJsTestCompileClasspath,wasmJsTestNpmAggregated,wasmJsTestRuntimeClasspath +org.jetbrains.kotlin:kotlin-test-wasm-wasi:1.9.22=wasmWasiTestCompileClasspath,wasmWasiTestNpmAggregated,wasmWasiTestRuntimeClasspath +org.jetbrains.kotlin:kotlin-test:1.9.22=allSourceSetsCompileDependenciesMetadata,androidNativeArm32TestApiDependenciesMetadata,androidNativeArm32TestCompilationDependenciesMetadata,androidNativeArm32TestCompileKlibraries,androidNativeArm32TestCompileOnlyDependenciesMetadata,androidNativeArm32TestImplementationDependenciesMetadata,androidNativeArm32TestResolvableDependenciesMetadata,androidNativeArm64TestApiDependenciesMetadata,androidNativeArm64TestCompilationDependenciesMetadata,androidNativeArm64TestCompileKlibraries,androidNativeArm64TestCompileOnlyDependenciesMetadata,androidNativeArm64TestImplementationDependenciesMetadata,androidNativeArm64TestResolvableDependenciesMetadata,androidNativeTestApiDependenciesMetadata,androidNativeTestCompileOnlyDependenciesMetadata,androidNativeTestImplementationDependenciesMetadata,androidNativeTestResolvableDependenciesMetadata,androidNativeX64TestApiDependenciesMetadata,androidNativeX64TestCompilationDependenciesMetadata,androidNativeX64TestCompileKlibraries,androidNativeX64TestCompileOnlyDependenciesMetadata,androidNativeX64TestImplementationDependenciesMetadata,androidNativeX64TestResolvableDependenciesMetadata,androidNativeX86TestApiDependenciesMetadata,androidNativeX86TestCompilationDependenciesMetadata,androidNativeX86TestCompileKlibraries,androidNativeX86TestCompileOnlyDependenciesMetadata,androidNativeX86TestImplementationDependenciesMetadata,androidNativeX86TestResolvableDependenciesMetadata,appleTestApiDependenciesMetadata,appleTestCompileOnlyDependenciesMetadata,appleTestImplementationDependenciesMetadata,appleTestResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,iosArm64TestApiDependenciesMetadata,iosArm64TestCompilationDependenciesMetadata,iosArm64TestCompileKlibraries,iosArm64TestCompileOnlyDependenciesMetadata,iosArm64TestImplementationDependenciesMetadata,iosArm64TestResolvableDependenciesMetadata,iosSimulatorArm64TestApiDependenciesMetadata,iosSimulatorArm64TestCompilationDependenciesMetadata,iosSimulatorArm64TestCompileKlibraries,iosSimulatorArm64TestCompileOnlyDependenciesMetadata,iosSimulatorArm64TestImplementationDependenciesMetadata,iosSimulatorArm64TestResolvableDependenciesMetadata,iosTestApiDependenciesMetadata,iosTestCompileOnlyDependenciesMetadata,iosTestImplementationDependenciesMetadata,iosTestResolvableDependenciesMetadata,iosX64TestApiDependenciesMetadata,iosX64TestCompilationDependenciesMetadata,iosX64TestCompileKlibraries,iosX64TestCompileOnlyDependenciesMetadata,iosX64TestImplementationDependenciesMetadata,iosX64TestResolvableDependenciesMetadata,jsTestApiDependenciesMetadata,jsTestCompileClasspath,jsTestCompileOnlyDependenciesMetadata,jsTestImplementationDependenciesMetadata,jsTestNpmAggregated,jsTestResolvableDependenciesMetadata,jsTestRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,linuxArm64TestApiDependenciesMetadata,linuxArm64TestCompilationDependenciesMetadata,linuxArm64TestCompileKlibraries,linuxArm64TestCompileOnlyDependenciesMetadata,linuxArm64TestImplementationDependenciesMetadata,linuxArm64TestResolvableDependenciesMetadata,linuxTestApiDependenciesMetadata,linuxTestCompileOnlyDependenciesMetadata,linuxTestImplementationDependenciesMetadata,linuxTestResolvableDependenciesMetadata,linuxX64TestApiDependenciesMetadata,linuxX64TestCompilationDependenciesMetadata,linuxX64TestCompileKlibraries,linuxX64TestCompileOnlyDependenciesMetadata,linuxX64TestImplementationDependenciesMetadata,linuxX64TestResolvableDependenciesMetadata,macosArm64TestApiDependenciesMetadata,macosArm64TestCompilationDependenciesMetadata,macosArm64TestCompileKlibraries,macosArm64TestCompileOnlyDependenciesMetadata,macosArm64TestImplementationDependenciesMetadata,macosArm64TestResolvableDependenciesMetadata,macosTestApiDependenciesMetadata,macosTestCompileOnlyDependenciesMetadata,macosTestImplementationDependenciesMetadata,macosTestResolvableDependenciesMetadata,macosX64TestApiDependenciesMetadata,macosX64TestCompilationDependenciesMetadata,macosX64TestCompileKlibraries,macosX64TestCompileOnlyDependenciesMetadata,macosX64TestImplementationDependenciesMetadata,macosX64TestResolvableDependenciesMetadata,mingwTestApiDependenciesMetadata,mingwTestCompileOnlyDependenciesMetadata,mingwTestImplementationDependenciesMetadata,mingwTestResolvableDependenciesMetadata,mingwX64TestApiDependenciesMetadata,mingwX64TestCompilationDependenciesMetadata,mingwX64TestCompileKlibraries,mingwX64TestCompileOnlyDependenciesMetadata,mingwX64TestImplementationDependenciesMetadata,mingwX64TestResolvableDependenciesMetadata,nativeTestApiDependenciesMetadata,nativeTestCompileOnlyDependenciesMetadata,nativeTestImplementationDependenciesMetadata,nativeTestResolvableDependenciesMetadata,tvosArm64TestApiDependenciesMetadata,tvosArm64TestCompilationDependenciesMetadata,tvosArm64TestCompileKlibraries,tvosArm64TestCompileOnlyDependenciesMetadata,tvosArm64TestImplementationDependenciesMetadata,tvosArm64TestResolvableDependenciesMetadata,tvosSimulatorArm64TestApiDependenciesMetadata,tvosSimulatorArm64TestCompilationDependenciesMetadata,tvosSimulatorArm64TestCompileKlibraries,tvosSimulatorArm64TestCompileOnlyDependenciesMetadata,tvosSimulatorArm64TestImplementationDependenciesMetadata,tvosSimulatorArm64TestResolvableDependenciesMetadata,tvosTestApiDependenciesMetadata,tvosTestCompileOnlyDependenciesMetadata,tvosTestImplementationDependenciesMetadata,tvosTestResolvableDependenciesMetadata,tvosX64TestApiDependenciesMetadata,tvosX64TestCompilationDependenciesMetadata,tvosX64TestCompileKlibraries,tvosX64TestCompileOnlyDependenciesMetadata,tvosX64TestImplementationDependenciesMetadata,tvosX64TestResolvableDependenciesMetadata,wasmJsTestApiDependenciesMetadata,wasmJsTestCompileClasspath,wasmJsTestCompileOnlyDependenciesMetadata,wasmJsTestImplementationDependenciesMetadata,wasmJsTestNpmAggregated,wasmJsTestResolvableDependenciesMetadata,wasmJsTestRuntimeClasspath,wasmWasiTestApiDependenciesMetadata,wasmWasiTestCompileClasspath,wasmWasiTestCompileOnlyDependenciesMetadata,wasmWasiTestImplementationDependenciesMetadata,wasmWasiTestNpmAggregated,wasmWasiTestResolvableDependenciesMetadata,wasmWasiTestRuntimeClasspath,watchosArm32TestApiDependenciesMetadata,watchosArm32TestCompilationDependenciesMetadata,watchosArm32TestCompileKlibraries,watchosArm32TestCompileOnlyDependenciesMetadata,watchosArm32TestImplementationDependenciesMetadata,watchosArm32TestResolvableDependenciesMetadata,watchosArm64TestApiDependenciesMetadata,watchosArm64TestCompilationDependenciesMetadata,watchosArm64TestCompileKlibraries,watchosArm64TestCompileOnlyDependenciesMetadata,watchosArm64TestImplementationDependenciesMetadata,watchosArm64TestResolvableDependenciesMetadata,watchosDeviceArm64TestApiDependenciesMetadata,watchosDeviceArm64TestCompilationDependenciesMetadata,watchosDeviceArm64TestCompileKlibraries,watchosDeviceArm64TestCompileOnlyDependenciesMetadata,watchosDeviceArm64TestImplementationDependenciesMetadata,watchosDeviceArm64TestResolvableDependenciesMetadata,watchosSimulatorArm64TestApiDependenciesMetadata,watchosSimulatorArm64TestCompilationDependenciesMetadata,watchosSimulatorArm64TestCompileKlibraries,watchosSimulatorArm64TestCompileOnlyDependenciesMetadata,watchosSimulatorArm64TestImplementationDependenciesMetadata,watchosSimulatorArm64TestResolvableDependenciesMetadata,watchosTestApiDependenciesMetadata,watchosTestCompileOnlyDependenciesMetadata,watchosTestImplementationDependenciesMetadata,watchosTestResolvableDependenciesMetadata,watchosX64TestApiDependenciesMetadata,watchosX64TestCompilationDependenciesMetadata,watchosX64TestCompileKlibraries,watchosX64TestCompileOnlyDependenciesMetadata,watchosX64TestImplementationDependenciesMetadata,watchosX64TestResolvableDependenciesMetadata +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.0=kotlinBuildToolsApiClasspath +org.jetbrains:annotations:13.0=jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJsMain,kotlinCompilerPluginClasspathJsTest,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataCommonMain,kotlinCompilerPluginClasspathMetadataMain,kotlinCompilerPluginClasspathWasmJsMain,kotlinCompilerPluginClasspathWasmJsTest,kotlinCompilerPluginClasspathWasmWasiMain,kotlinCompilerPluginClasspathWasmWasiTest,kotlinKlibCommonizerClasspath +empty=androidNativeArm32MainIntransitiveDependenciesMetadata,androidNativeArm32TestCompilationApi,androidNativeArm32TestIntransitiveDependenciesMetadata,androidNativeArm64MainIntransitiveDependenciesMetadata,androidNativeArm64TestCompilationApi,androidNativeArm64TestIntransitiveDependenciesMetadata,androidNativeMainIntransitiveDependenciesMetadata,androidNativeTestIntransitiveDependenciesMetadata,androidNativeX64MainIntransitiveDependenciesMetadata,androidNativeX64TestCompilationApi,androidNativeX64TestIntransitiveDependenciesMetadata,androidNativeX86MainIntransitiveDependenciesMetadata,androidNativeX86TestCompilationApi,androidNativeX86TestIntransitiveDependenciesMetadata,appleMainIntransitiveDependenciesMetadata,appleTestIntransitiveDependenciesMetadata,commonMainIntransitiveDependenciesMetadata,commonTestIntransitiveDependenciesMetadata,iosArm64MainIntransitiveDependenciesMetadata,iosArm64TestCompilationApi,iosArm64TestIntransitiveDependenciesMetadata,iosMainIntransitiveDependenciesMetadata,iosSimulatorArm64MainIntransitiveDependenciesMetadata,iosSimulatorArm64TestCompilationApi,iosSimulatorArm64TestIntransitiveDependenciesMetadata,iosTestIntransitiveDependenciesMetadata,iosX64MainIntransitiveDependenciesMetadata,iosX64TestCompilationApi,iosX64TestIntransitiveDependenciesMetadata,jsMainIntransitiveDependenciesMetadata,jsTestIntransitiveDependenciesMetadata,jvmMainIntransitiveDependenciesMetadata,jvmMainModuleApiDependenciesMetadata,jvmMainModuleCompileOnlyDependenciesMetadata,jvmMainModuleImplementationDependenciesMetadata,jvmMainModuleIntransitiveDependenciesMetadata,jvmMainModuleResolvableDependenciesMetadata,jvmTestIntransitiveDependenciesMetadata,jvmTestModuleApiDependenciesMetadata,jvmTestModuleCompileOnlyDependenciesMetadata,jvmTestModuleImplementationDependenciesMetadata,jvmTestModuleIntransitiveDependenciesMetadata,jvmTestModuleResolvableDependenciesMetadata,kotlinCompilerPluginClasspath,kotlinCompilerPluginClasspathAndroidNativeArm32Main,kotlinCompilerPluginClasspathAndroidNativeArm32Test,kotlinCompilerPluginClasspathAndroidNativeArm64Main,kotlinCompilerPluginClasspathAndroidNativeArm64Test,kotlinCompilerPluginClasspathAndroidNativeX64Main,kotlinCompilerPluginClasspathAndroidNativeX64Test,kotlinCompilerPluginClasspathAndroidNativeX86Main,kotlinCompilerPluginClasspathAndroidNativeX86Test,kotlinCompilerPluginClasspathIosArm64Main,kotlinCompilerPluginClasspathIosArm64Test,kotlinCompilerPluginClasspathIosSimulatorArm64Main,kotlinCompilerPluginClasspathIosSimulatorArm64Test,kotlinCompilerPluginClasspathIosX64Main,kotlinCompilerPluginClasspathIosX64Test,kotlinCompilerPluginClasspathLinuxArm64Main,kotlinCompilerPluginClasspathLinuxArm64Test,kotlinCompilerPluginClasspathLinuxX64Main,kotlinCompilerPluginClasspathLinuxX64Test,kotlinCompilerPluginClasspathMacosArm64Main,kotlinCompilerPluginClasspathMacosArm64Test,kotlinCompilerPluginClasspathMacosX64Main,kotlinCompilerPluginClasspathMacosX64Test,kotlinCompilerPluginClasspathMetadataAndroidNativeMain,kotlinCompilerPluginClasspathMetadataAppleMain,kotlinCompilerPluginClasspathMetadataIosMain,kotlinCompilerPluginClasspathMetadataLinuxMain,kotlinCompilerPluginClasspathMetadataMacosMain,kotlinCompilerPluginClasspathMetadataNativeMain,kotlinCompilerPluginClasspathMetadataTvosMain,kotlinCompilerPluginClasspathMetadataWatchosMain,kotlinCompilerPluginClasspathMingwX64Main,kotlinCompilerPluginClasspathMingwX64Test,kotlinCompilerPluginClasspathTvosArm64Main,kotlinCompilerPluginClasspathTvosArm64Test,kotlinCompilerPluginClasspathTvosSimulatorArm64Main,kotlinCompilerPluginClasspathTvosSimulatorArm64Test,kotlinCompilerPluginClasspathTvosX64Main,kotlinCompilerPluginClasspathTvosX64Test,kotlinCompilerPluginClasspathWatchosArm32Main,kotlinCompilerPluginClasspathWatchosArm32Test,kotlinCompilerPluginClasspathWatchosArm64Main,kotlinCompilerPluginClasspathWatchosArm64Test,kotlinCompilerPluginClasspathWatchosDeviceArm64Main,kotlinCompilerPluginClasspathWatchosDeviceArm64Test,kotlinCompilerPluginClasspathWatchosSimulatorArm64Main,kotlinCompilerPluginClasspathWatchosSimulatorArm64Test,kotlinCompilerPluginClasspathWatchosX64Main,kotlinCompilerPluginClasspathWatchosX64Test,kotlinNativeCompilerPluginClasspath,kotlinScriptDef,kotlinScriptDefExtensions,linuxArm64MainIntransitiveDependenciesMetadata,linuxArm64TestCompilationApi,linuxArm64TestIntransitiveDependenciesMetadata,linuxMainIntransitiveDependenciesMetadata,linuxTestIntransitiveDependenciesMetadata,linuxX64MainIntransitiveDependenciesMetadata,linuxX64TestCompilationApi,linuxX64TestIntransitiveDependenciesMetadata,macosArm64MainIntransitiveDependenciesMetadata,macosArm64TestCompilationApi,macosArm64TestIntransitiveDependenciesMetadata,macosMainIntransitiveDependenciesMetadata,macosTestIntransitiveDependenciesMetadata,macosX64MainIntransitiveDependenciesMetadata,macosX64TestCompilationApi,macosX64TestIntransitiveDependenciesMetadata,mingwMainIntransitiveDependenciesMetadata,mingwTestIntransitiveDependenciesMetadata,mingwX64MainIntransitiveDependenciesMetadata,mingwX64TestCompilationApi,mingwX64TestIntransitiveDependenciesMetadata,nativeMainIntransitiveDependenciesMetadata,nativeTestIntransitiveDependenciesMetadata,testKotlinScriptDef,testKotlinScriptDefExtensions,tvosArm64MainIntransitiveDependenciesMetadata,tvosArm64TestCompilationApi,tvosArm64TestIntransitiveDependenciesMetadata,tvosMainIntransitiveDependenciesMetadata,tvosSimulatorArm64MainIntransitiveDependenciesMetadata,tvosSimulatorArm64TestCompilationApi,tvosSimulatorArm64TestIntransitiveDependenciesMetadata,tvosTestIntransitiveDependenciesMetadata,tvosX64MainIntransitiveDependenciesMetadata,tvosX64TestCompilationApi,tvosX64TestIntransitiveDependenciesMetadata,wasmJsMainIntransitiveDependenciesMetadata,wasmJsTestIntransitiveDependenciesMetadata,wasmMainApiDependenciesMetadata,wasmMainCompileOnlyDependenciesMetadata,wasmMainImplementationDependenciesMetadata,wasmMainIntransitiveDependenciesMetadata,wasmMainResolvableDependenciesMetadata,wasmTestIntransitiveDependenciesMetadata,wasmWasiMainIntransitiveDependenciesMetadata,wasmWasiTestIntransitiveDependenciesMetadata,watchosArm32MainIntransitiveDependenciesMetadata,watchosArm32TestCompilationApi,watchosArm32TestIntransitiveDependenciesMetadata,watchosArm64MainIntransitiveDependenciesMetadata,watchosArm64TestCompilationApi,watchosArm64TestIntransitiveDependenciesMetadata,watchosDeviceArm64MainIntransitiveDependenciesMetadata,watchosDeviceArm64TestCompilationApi,watchosDeviceArm64TestIntransitiveDependenciesMetadata,watchosMainIntransitiveDependenciesMetadata,watchosSimulatorArm64MainIntransitiveDependenciesMetadata,watchosSimulatorArm64TestCompilationApi,watchosSimulatorArm64TestIntransitiveDependenciesMetadata,watchosTestIntransitiveDependenciesMetadata,watchosX64MainIntransitiveDependenciesMetadata,watchosX64TestCompilationApi,watchosX64TestIntransitiveDependenciesMetadata diff --git a/core/jvmMainModule/src/module-info.java b/core/jvmMainModule/src/module-info.java new file mode 100644 index 00000000..95eee6ad --- /dev/null +++ b/core/jvmMainModule/src/module-info.java @@ -0,0 +1,4 @@ +module kotlinx.collections.immutable { + requires java.base; + requires transitive kotlin.stdlib; +} diff --git a/gradle.lockfile b/gradle.lockfile new file mode 100644 index 00000000..d8527051 --- /dev/null +++ b/gradle.lockfile @@ -0,0 +1,4 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +empty=kotlinKlibCommonizerClasspath diff --git a/gradle.properties b/gradle.properties index d2050515..9d8f7672 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,14 @@ group=org.jetbrains.kotlinx version=0.4 versionSuffix=SNAPSHOT +kotlin.version=1.9.22 -org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 +kotlin.wasm.stability.nowarn=true + +org.gradle.caching=true +org.gradle.unsafe.isolated-projects=false +org.gradle.configuration-cache=false +org.gradle.configuration-cache-problems=warn +org.gradle.dependency-verification=lenient +org.gradle.parallel=true +org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -XX:+UseParallelGC diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 00000000..86203f1b --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,20 @@ +[versions] +kotlin-sdk = "1.9.22" +kotlinx-benchmark = "0.4.10" +kotlinx-validator = "0.13.2" +guava-testlib = "18.0" +jmh = "1.21" + +[plugins] +kotlinx-benchmark = { id = "org.jetbrains.kotlinx.benchmark", version.ref = "kotlinx-benchmark" } +kotlinx-validator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version.ref = "kotlinx-validator" } + +[libraries] +guava-testlib = { module = "com.google.guava:guava-testlib", version.ref = "guava-testlib" } +kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin-sdk" } +kotlinx-benchmark = { module = "org.jetbrains.kotlinx:kotlinx-benchmark-runtime", version.ref = "kotlinx-benchmark" } +jmh-core = { module = "org.openjdk.jmh:jmh-core", version.ref = "jmh" } +plugin-kotlin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin-sdk" } +plugin-kotlinx-benchmark = { module = "org.jetbrains.kotlinx:kotlinx-benchmark-plugin", version.ref = "kotlin-sdk" } + +[bundles] diff --git a/gradle/verification-keyring.gpg b/gradle/verification-keyring.gpg new file mode 100644 index 00000000..feef372f Binary files /dev/null and b/gradle/verification-keyring.gpg differ diff --git a/gradle/verification-keyring.keys b/gradle/verification-keyring.keys new file mode 100644 index 00000000..d7dc96b2 --- /dev/null +++ b/gradle/verification-keyring.keys @@ -0,0 +1,1518 @@ +pub 81C27DE945332233 +sub 126BBD1EF340F4BD +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: BCPG v1.68 + +mQMuBEvACI4RCACNKnrdBk54/vBJSu2RJCG3VXR1h5DPGxJR1QIXDylZC8g4XQoj +0cE7Ij61hd1VYAWlzlrfXtHi80BIXoGza61OaA0pUCxTuLyAL22x0GmdNpGBkigz +r58LnwaqTxmGwQk/1mjJID2lDzi+GeEtKZd2xmYg7thIYAaKTQaQAzShfsntIdtl +8XH7X7qpze+CGqh1cQR89aJXjdaspj9hT4Bgj5EfQk3DKUXDXAD4lg5IP2mLGpeb +MzBPdhdvF1L6nR+CbNgwCFdDwcqsYxaAc2gxFUAoX4U9p/rG4lfZ8ft3zkKv/N0c +2bRTpMR3HCSk/Q6io6C8JfEynpTXE1HjG633AQCpTien60HqyCD5o8riRDOeSN8F +Ib7CSH5l9A+eVcPWGQf/UuYeEjOPMl9RChB6ZpqmjwnXpDWlE8hVaWVOHp80CDuB +gxEcsWJ62VCiXJPrC7fBrQo6rjaSioP8rT2Ge8CSESANVBFLtuyhpNFeek0SJGQ9 +0bCplP9cizGDCVKxiEH8Toi1ifzeFRQYjum22YElrhpcPQhf0PLIxUmllFHr1P+t +f8jlfkf23IgdhAhUedVloh0oPS0epixPB098acZCRKPoYZzTXmEXjp5q+JGPE/Fh +3Rlt0SGXEcrHILQThpGjn5xG9xzH+WNYz6kZ01CLpgUdNvB291C0lvsVq3r4U0lq +eCZCNJ4JfCm3KYzAt603nlWILnmTynavaWDO2JYhXQf+OyuDPrOrYdkELczLKI4p ++1pEaVLQ8dZRL0W/XJ+RFMtmWyoQ4ypqlYkhxj+zslaG9UAOBwodIACMvlGrVHMi +BaY0q+/9oZtMqEKN+jp8z/sYyDlOPFeDOU00vk7XU0v6Vy4Jm9ogSitlMRuvSQxr +XGh1tDLbz+3MNyFjISdHxtc2gLqA74uAfIfI0Wwkx07xLwiI4y/GR6BB4oHVmytn +R2jjTquLfbNXRwf/4x1GVj/V7ztszVqNa3n4LtDcK0cfXFfwJ7/skhuGmReyzxjA +yTiSlbCf13zA6GLr1qZaJv3t8iSNA/TfP9NplbZoaROLhHSOp++GwplpbJFaBec2 +XrkCDQRLwAiOEAgA/CUGWGQsNucNS2dDPbk/lUx6MaFqRV+CcwAsCLUPCBQ22Crz +T1OvwnybE+/wc9KxqBsGcQxg8STGP01nFEttn755O55Avk19kWP5EWVzndIqsjFb +cInQHVAeglz6F0a/7SFmaznrKvWCeHwjawEbAQXkCd8ZPRqeP2RWpwcxjoxFJRhQ +nVaEJ2u8XAU5RCrfsnfaRD/99NcCrE+5xfyWncF6n5FEmgVt9GQNyjYZPzO3Ikzj +mpay0nboxpocDV3iTJe1aRBAZfUxP9R4mFMb0R7/6CP4YGKF4CnKCzUZFaD7aswh +mi+VVVFOcyurT+VJrX7Iaxe/305JWqKy0G/W0wADBgf/TZE2OQJ2EC+Dqkk74I1e +UPcVwsdDdzhVsRvjeyISg03nuTT/VZ/9qObCe69l1M4SfJNoqLm2QD8dUzWTBG7l +SseL4HjMckapIql8Vy5lNhnnzOjk2znIvaL4CuS0vFSGaXC0FS52BhtbxHmUsHr7 +xgASj95Us7dp3C9oO/iD+k1rWpoD7QungfXP7HrXxzoFiYFZhcY+YMdM2K/pr+Ba +z3vakSsNGU1vs96l94QWGUf681xGlyw2uyWRuNPWhMYgGSJ05LIAtm3vIcWfNp7r +T14lVSSJCqEP8/f/50N5MeqBXEDrOO4lj1meUL5MK8Nxk6qEacYaMwxTpz5losxt +7IhhBBgRCAAJBQJLwAiOAhsMAAoJEIHCfelFMyIzCE4A/iu1wm8vFwBxrqYWOO/c +2BbjtX4tROpH2+P2Fk13iYkMAP4xCfyw10teMvj6fu3u9+H1XvC1AQZTqHnaG/8Y +ss9xVg== +=Zs5g +-----END PGP PUBLIC KEY BLOCK----- + +pub 85911F425EC61B51 +uid Marc Philipp + +sub 8B2A34A7D4A9B8B3 +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: BCPG v1.68 + +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 +PXCe8La72ukmaxEGbpJ8mdzS2PJko7mm +=Xe8l +-----END PGP PUBLIC KEY BLOCK----- + +pub 873A8E86B4372146 +uid Olivier Lamy + +sub 1AFEC329B615D06C +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: BCPG v1.68 + +mQGiBEdddbQRBADRgstdUZq7ceq3NYcR5kpoU2tN2Zvg1vptE9FxpDbL73gdLWnI +C7IAx+NNjdG7Ncdg+u10UZv6OSmhWAd8ubWcD9JxKtS4UXkNPHxhHFHqVPHuCwsQ +q2AaCtuOk6q9OtthQX6LfOuGqwbv9uH/KLUDn91PrgKuHPVfVveiF30ZvwCggutX +D0jTGRHzUJl7F1wViuckHJcD/2z76t0ObSuTnENi0IUjF3Toe4tv+qO+Ljs0knvK +tu1b8A5Bs+kxNcbEqV+zdIph+6gCL9jy+dB9J+t6uZg6ACJexbIkDPsutNtbAVDV +w5AtM7JR8930dRHfEt26ahFohFi+73V8RiA7LrmMjA8rX4zuo5Pr48xt/RR1Y/VE +8ohCA/wOqul9eHHevxeEMDYoGVjGl2EiuIThg4eYuQDDSisBNb9a6dhE8ECQFFBx +mGz32+I8gXSTKFAkkQUI4HmJmTX35nGJql6E7Bn5yM2OaOG04PV+xkhScJll5ZxZ +BNEccFDL/aI4N33cwrLHyk+wFNZHBL1hnHpxpjFZYv5xfEBjmbQfT2xpdmllciBM +YW15IDxvbGFteUBhcGFjaGUub3JnPrkCDQRHXXXPEAgAyqEz3eBEKiZ7VbAj96Ht +IvGufKTdZ0ERJtrdPO4FUGVBcXpphtnPn+JOWomszUKkKLO4x24OaDCG/SENsPy+ +Ned4wjBB+4uV0YEc5Xn8gts3g4Z5p+YiVu+aWeYPPC5BPU61tVqc996i9ZYkZiYO +s9F5Z+dKozk3KwVcijaCr0IQMjAtJ/N70zcciP23KhrN9Z3Nn54Xm7GezD0nxTUG +P8gM79zKHnVhDBptrxIT/adCzU9/UX3UVAQcdq86FfzTEpqFG3TM75HBTQgHihIk +kirzurE+ivh6aaF3UJwmDBe5Wu3gvxF6Rl0Ja/YBNkkCiOXngXSxwvUUR8KJO07R +GwADBggAxOFV2DfMHsTBu++gKJ94L6VjETfVFEYPo7e4tO2Zn2Unzdxz2BoTJcQY +0j6/M3Tl9hCwhOSVVL8Ao/wp1ykjgXnwV4vz0be4d/ZML+KF15x+8730H7Th+aR+ +Ug6K6Khsp8XIypmLJcYgYLD02PlSnDxCq9Fbv0JDlbr6tbsJiVzoRjg+WNEIB3II +rJbTIiOFrRBhloinYoot216QJ1rI2nQpMEBlSuX6f4jYF6F7X4dAY4V4ohjFeJCb +6SYkKbj4caqBA9OVrj3vh8v/vAUKDB8pqVhpaZicFpMd2pEEYVMEU4i1sLE3X73y +9RRuaJOvPAx2HHT8MlWjsDmNdY2Mg4hgBBgRAgAJBQJHXXXPAhsMACEJEIc6joa0 +NyFGFiEE8lSzVhfcJV2TRLz6hzqOhrQ3IUZkrACcDtB3CttHYgGrF31KCocX/gwC +iYEAn18D875QwNruE4Qkt/W0Rhy/QRIZ +=BrH5 +-----END PGP PUBLIC KEY BLOCK----- + +pub 88AA1FEE831A7E89 +sub A373C30CBD3C6904 +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: BCPG v1.68 + +mQENBE2LXvgBCADAfDmKMk/nQjiykUbXESswaAyElcjRCsM4sXXDIzepYvvMxoOv +DVvFdVzDoNBJ1xoCo7H3oWH7WqSLJtTblB9xH3+R4YJY3frbx9NRuI6Ozfz0PqII +clKCcxYkTybifcY1gXRpuuW/XUk+30iGhRBqC3vp/uWXn63JTswnhb0Pi9puxI0w +21uhaPFbl3mcoZD27gDom9/rhpvfSNZRhnMes0VBhjUA4a+2GBqOmDl2wuR77Fky +lCIFVENt8T24OsET8AVoyKpJ8DfwNff+oPrDaTM7rPE/R4RrX4wT8X85TC7ku0cq +muBFtlsS1Bc9PO25gahg8RkibPbJbMXMEh/NABEBAAG5AQ0ETYte+AEIALTmazBY +NyxYcEv3Vt7wdUUYr3uEOR8jjCcbrkmDf4v1Mp9ouo3Oj8LmH79weBuk3UZ2Kaik +C8KB8akMaY9Ig1RR4FmyJvujHJR1/r8fZBZiqavK0xDAImAl/DgdCI8mZTU1ugvi +CqzPspUInn7oEmULUYGgxWRHdMvFMHsZavDTtpmAsWTAeHisSeg1+oY0GeabRcD1 +RIawQhgpHgHtNFcUpQYRewnCgVKLe0FfhY7623qwLdbexa2W4y3W43x/e57STeSo +cDVX0EyGIdigCCqnDTreWMXm0QJVqMELkonkTi5Rp7J9kfo66gQ/nQHlCCBw6qXz +hNNIPSNfVDbjhDkAEQEAAYkBHwQYAQIACQUCTYte+AIbDAAKCRCIqh/ugxp+iZPK +CACIZytIWnW+yxmj0VxtHw44A6uFcG6GWYipNAFaCPxi/ZGXaFvDuSAnwn0bNZ9T +m+uc10cRcau/jz3PVocehjzy5bUAn6KcGH3bM41XY6XwL9yaZF+Qh1gdoVDDkHL1 +ddZopbphDMQ8e1YG6EcjmlSLYe9YS6Ztg0AmRVclWgiM3HJEQFwAA/DLjhwkgaKR +KSQkVJClx++EV5jtzZu1NNGUNU8LB+qEc007wSgmQOriW2INzKu97Uay5ZrD1Skm +13I0OWr2gKW7V2DqgiDA1CB4/2PmW298r+hs+t9x8VESYajCYXhTSBnBGjSCc0ix +AHPj+0JoEIzoj/U8hzxEGI6N +=aBfi +-----END PGP PUBLIC KEY BLOCK----- + +pub 98FE03A974CE0A0B +sub CC3328A2F49A80C8 +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: BCPG v1.68 + +mQENBFhlXQUBCACoN2nTeSRVZnGoktKHyiCgeYQ/hEKKKDDAbWubnnQwonCTILaN +Qw3GmIT6plmi9iy4rl+rJprSzDeQDZngQCx1KPYcXCrrc0pnjERDaogw9fC3c3z2 +B6+90qT6UJSTNmxMs5zbhgzKDWb3eaDmVDqVqzsM5xz9GxX6zo83o37fTFSbVbtA +9+c100+KaAldVL/6uLeGoQsAIxtMH8GiOPiSjrw+XCQ5mbP6e+oYYBKxEyAgu1XW +8jP4bF0rz2+1lkIGfWfYHZmMbmSutDxXqOXA9cZomhOayOSe+iczoxXkVXkQzMxq +bG4ru5CHxPh+RSfpwA+9StLvzLeoFrBUlqW3ABEBAAG5AQ0EWGVdBQEIAKNt/Vhk +I5bXMxoM2XYMh9MPz67sAaqc9Eixan/OONftycStOVHB0YhfQ9lsNeLIb6qQvves +ktI1exv18wxSpN+AEwroMGDSDfixhpgaeOGzj8omXOTBZ7Bv73A+4dCVeoQ1F/ss +4OkRK7Jx5jLM7TuY7IG64XSYy6D6QvMOoIxKdqB81f6JYDzVwszFvUUbDqVQIfhX +cuCLAbYxtJVVzAldGBWR/72Uq8nE3ereeeZjHniADawU+XR2Egv1aMDvP8zUpWl2 +mRzOKA+1SJyXhA569435s604PfxPdESlKnMYlinWZNvL5rrRV15vYYU2u59ol/g2 +7DOFy33UCrCgZ4EAEQEAAYkBHwQYAQgACQUCWGVdBQIbDAAKCRCY/gOpdM4KC2Nw +CACTClhcW6GbsRaRHzSdnXDPUNlWf0UDPz0amNp8mQwsygL+jW0awtrfxxSqbv+1 +myMQB7g6tLFGcTH+jqfkDsN2rpQ2/cnrUVmunMjkCnoSyhrqolSv9ow0L7K+FERm +xq5QGorE/Gya87oK38ovXZmGUs79OGStAeEnXXkta+dDlX3nyTGM52HEaabPJRv/ +eMoryZPgv86ahajMUxbc9LdjkdVnwj+xa5Ux6ZVuPGHeodq+MWTZuKM//qT9uXbO +sgiKWJ1E3YPy4Ip7kc4ne950WGndzu/O3aBldqsxUstQ0abZXtAVj1j2Io/Jgvt9 +btE9i0ssfGT8HCatMFwsfi98 +=Ed87 +-----END PGP PUBLIC KEY BLOCK----- + +pub 9AE296FD02E9F65B +sub 2F3C9EEB05D1D1E3 +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: BCPG v1.68 + +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 +BdUXfzfbgJ4GgLqKhgE4Zsn3 +=pUGZ +-----END PGP PUBLIC KEY BLOCK----- + +pub A6ADFC93EF34893E +uid Tom Denley (scarytom) + +sub 9C4C23E6FFE405BD +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: BCPG v1.68 + +mQENBE+xZxIBCACzKctn4ez8xOC0pGThhAwjYWGkzcwK4HNaC1usHThBFz3/t8JN +OqUXRixLyi5wELN6GHlsGVUQS3IfB4JtuhScsieSB8PTree68/knMq6JI08mJqZr +9nFrAB4eDW0UMbSL9kPmclUm/yN+qcCZBrsVn0q6CWb/Kcd8EEXEu6sGILzOGqGe +d433t5O+tGXWL2TjAz+Scsk2Hf4zcuDeQcxELAMnVaVgKuGuEZvibrjsdIvJDGI+ +0BzWIu8ZP8ldBl4SVtzGpEVzLvDUo3mOqBeTkj3rP7xLtFDN/3AFtowbLfL7L2Pg +SMcTnKK+jfFHRfbHP1Ih3rQ4ilLzhCnY/QIZABEBAAG0K1RvbSBEZW5sZXkgKHNj +YXJ5dG9tKSA8dC5kZW5sZXlAY2FudGFiLm5ldD65AQ0ET7FnEgEIAM3i3e1sjwrx +2PN8XYMPQWG+/YTtw1BYDl2+iYE+LaZvtq1hpbgeCLgEVwXrCJ4spLP1rFXogWqK +rkJ0LRjlpdKhKBvyH1ex4grh3cWN/bIDJcJ7JA4I/Bhqhlh8hYycS9pGFeS+MR3a +FIsii+vadrwYYvuVYGeWvdZhB7mJKYevj5Ms0OpYTfZd95Pzo4o//lNpDnrG7Xd3 +tgTNU/fkpw6rFB/2Ib1Qlk+Kz1z6JNsp+tOPGGCBrzwfwglcikTuqS+xyRgC9cHh +5eCol11uSoWPKcQR2Ar8Eo56nxv/UApdu15iJ7R8cA5guKeeS4jt0CGCPs2Phugg +DxI73Xvl4zsAEQEAAYkBHwQYAQIACQUCT7FnEgIbDAAKCRCmrfyT7zSJPuylB/9i +wtIQeexMWBmQNdDe0md8HLulDfcujPtklrvYHtXMJQFaGA0Vafq0oT9MhBfb1YCP +79uF0qgswSxINYCOJx4nTPIP9BOdTwqfGo7ul27REgNq4lIUW0GkMgZAUA2ft/vc +0u/I0PqnhKCi4Pq79hLIx7eiX2ySfXfYfLXRVzbMWKMoi7lWXseQqbM0RvCA54J1 +qAi6Ew+JyoYGQ7OvXdL5Eh5Tkm2cpIADyqCkp/aFDe5lqZiU1zS2fU6mpOf/o0co ++GoYkieIxxibDCmt3BioLgmyzpGUsMNwh4pAIQUGkcxd4spC0KIWdDEvq/QJEEIh +ZlI/ojefaZkRseFrtl3X +=qnqR +-----END PGP PUBLIC KEY BLOCK----- + +pub BCF4173966770193 +sub C9F04E6E2DC4F7F8 +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: BCPG v1.68 + +mQENBFKneXIBCACtnX3ZQmPujf6ocvdnhsBheze71DSl34TfebyW2Qt+g9NhMxo4 +DaJy+iFNnsaMwLZRr6k/qf+ISE3A4opWAQlbk+Wb5s6DPPA2cHH6W4GdkxtuJzqt +tFn6YtkFhA15Aahr/vz31NBjUJlBmO4PwvkyxiF/MYP6TQ/AHar4xP1RxSYEPcCi +dIQczQ8nXzya4OqOyTfibeGz/eiHHuwTLHi3Rd2kihQnlRQdhE1rmm8uTyzFe1H+ +P7WW7kQgygW6yxQ3J+DXrG8kG+nbe57ZY1oyv3F/fOBxzn/kuoKHZ3JJEMJmTIrT +Lr1ngCZApgteAynRHk4t/SYZiyoyqZCuBcwHABEBAAG5AQ0EUqd5cgEIAL3PEOzt +IFUibB6FYEkObVhsDbCnHw9yO5MAvAWB60Ohf1J4T9QK63jZ5/CiqcDrw+uab9I+ +Ruz/SgGyFS0UXAkwfTICUdhT5kUzZmGyoj2ul+iFDP9uUdEgSgyXXakrxBbBPzNa +Mx8+GyIXRVFyRTH7+1gWgPQsdN1sGYOgZ+f8TMzAv6sxu0JVzjKXAAbXdiZTyJh9 +d6h1jS5Icilu8vRwn3Qc/ZzstBRk+eLbb69wS9YGoUlzYvDBz+5tiNwvHUriKc6z +VT4Edngcr0mKWTdvD+AsvZffU0XK+vxbgMuRWi/51qb+VgK2gFeAseV6a+D1059u +2+5Pn3h/Fv/vRAEAEQEAAYkBJQQYAQIADwUCUqd5cgIbDAUJEswDAAAKCRC89Bc5 +ZncBk0qgCACdP8kyUZVqfncA2RsQH38NFYhBz5MAEOIhCm7qwPC6XG08CUZfpPXd +UbxZGUliE6vhfj7rZbvUKKHlcHDPobdTJqGof2jt2MfsjJ18JY0exSWuVTmNmqAC +3gsiMfEGIqjQFWonfm0Od4AvduLuc0TPkyfr0gobakgYvhDjk7eQvgC1QfKlk6hH +A/OAFW774qaQsyrANrFevRa7CBQEob6V6N8aV1vNxgl8a6fJzPTNBOOmP0mq7xk6 +nykQuqYTVFyqfXN0p1bbTxHBoW/fvdizi7zMSsuBkWUtfG1wyN70uoEQzSQwqgWC +IaddzrPZPmaZ8CtzzyB7+JdSNItBB2Sp +=wK3Q +-----END PGP PUBLIC KEY BLOCK----- + +pub E2F38302C8075E3D +uid Gradle Inc. + +sub 1B80C80E07BC7190 +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: BCPG v1.68 + +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 +=Rl7p +-----END PGP PUBLIC KEY BLOCK----- + +pub E3822B59020A349D +uid Kotlin Libraries Release + +sub 9351716690874F25 +sub 3D5839A2262CBBFB +sub 60EB70DDAAC2EC21 +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: BCPG v1.68 + +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 +=p27i +-----END PGP PUBLIC KEY BLOCK----- + +pub 0729A0AFF8999A87 +uid Kotlin Release + +sub 3FF44D37464BBB7E +sub 6A0975F8B1127B83 +sub 6005789E24E5AD1E +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: BCPG v1.68 + +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 +B/X6XT3iAD8QsXnzTc+ApKE= +=jsGm +-----END PGP PUBLIC KEY BLOCK----- + +pub 0D3B328562A119A7 +sub C45D01093DCFC371 +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: BCPG v1.68 + +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 +UGyrigQZu0gUujkogzGo8f7UOwHRBoA= +=7aNS +-----END PGP PUBLIC KEY BLOCK----- + +pub 0DA8A5EC02D11EAD +sub 71499A87DC1FF84B +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: BCPG v1.68 + +mQGiBE3LMfMRBAD90h69D8yyPWaSoAyh2mOOOZ/XH0isuBpDZCWptemlMHgImqdQ +2sXLXYT1bJKmSaMw+yKjp8J/NYk69EbmSK1C2nypLQtWhUmXXd3XVYw6hrG/dGvi +gjkS5eq8L04f5CSuXO7r1eLTOch9iDl/ESaI5Nhq9A3mRQIhQalum+FjzwCgx0PK +hoC4MVPVGXzOQPc5sG4jzAUD/0OX9c/yKQqjHUs38HTCgrjseM40iPhp8NfbWenP +IwUMSWXE3lz0MMeKrGcEOcZOGWsjyepkLHXwj8DDOeGxhfh9bhFRJssdfzOCKBpf +6S70A3fanzqOAvddxCqF/zOwDaieDmWvVntVpmZO9d+pgR/sZN0JgSIm7qGDdNqG +Aq6eBACyywfwuVoY6lfNz70ZZqYjYuUkbKnKqpG0XmI+m5LYrUW7QuKJqaNdg+ZL +vVgX/TdkWVSIoSRS5+eYm3fRD++cg3ZgoR6ZY4WEa7SRSp2zoidtQijWOzp8WeHs +30rIaXBrb5wHR4GQ4FYsBGRuWkmIaferusllUmHCHFJI4ldvgbkCDQRNyzHzEAgA +1rD70DvCcy91ShQKP2snZ4cLJnFwKArulDUcxoBZ0AG0qMbaE8jiiJTHIwgVrqsK +aS1JENv6tVdUS8xHswu30zvd0obaj+4IGXlMVdc6052Y4SLAGNbGVw99Ah1OkQ7o +v92gmYAYfqppOtRt1tylz7Jf+F6er0umdVBZm8fJ+QjzTw36AwERj2bjVbc6ogM7 +OsTyru5oZGOJ+oJU+M9/mh/Gq3AyrcfU8c6bL2pacXwylME4lxy4fBB7BsMogPXX +iplZ2XRH7RmlZiAfLHv3StxVB1RrLXVcjdnqIO2guVYrK6mxH9WMG4LnOGvcnYTf +GtWexEmNA5l8IOSgsK+InwADBQgA037clDFi3XWaZBVXst7IfkU6bKq9vhmphS4f +uBx4wp7MBA62k0kGDmZWcbinZWnybypili9ihYSHlp3EYzCNTbUMWlbhc/ffYHuv +rZsIT2DxMPb2iCnjPu5HMGegTM8iTTotW4xYmJUsEDIvgQUz0/UNsPHTX5XU09So +cL3YOP5MxcEbgO0Fpjny3X76rc+ETAd9TmDJi7HOm24grKdOQXHQJr65j7nTc9M3 +zWnTxOP3fL9jcVnGTnLGRVoR7kedDpa5FsoFqtY8YMaFvNPVvI4+m+jozjNwTg2d +GG6nU2dEC0qgDEeKMSJwF1wgO3Fe6mXHvxratgNrqfdY/rtEGYhJBBgRAgAJBQJN +yzHzAhsMAAoJEA2opewC0R6tNKgAnigkHDCNu7Owm8x01E9+aL73JmDXAKCj7ROh +7Wu1iZQbjeJfypM6CQ+fdw== +=GCHG +-----END PGP PUBLIC KEY BLOCK----- + +pub 1646B01B86E50310 +uid Yarn Packaging + +sub 4F77679369475BAA +sub 23E7166788B63E1E +sub 02820C39D50AF136 +sub 46C2130DFD2497F5 +sub D101F7899D41F3C3 +sub E074D16EB6FF4DE3 +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: BCPG v1.68 + +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 +=KQN7 +-----END PGP PUBLIC KEY BLOCK----- + +pub 379CE192D401AB61 +uid Bintray (by JFrog) + +sub 0CFE993CDBE1D0A2 +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: BCPG v1.68 + +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 +E/XhP4QkRJrZI1F/ +=Jm2n +-----END PGP PUBLIC KEY BLOCK----- + +pub 3D52C2966A51F8F4 +uid Guillaume Sauthier (Bull) + +sub 888C89049BDEB64C +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: BCPG v1.68 + +mQGiBEqVGHgRBACyrZHA3gvzM5WeoD6WwQSIPdTPuWw5EUonHytf4m7pgX8Xkj2G +enqbzW70POgJDUTUpvHDSCaAWiPY+ld1h0j+ghXgKD7IQjqFQTvnkdBT/qbOL7P1 +Umv5OLGSKeyx/BhxNiD0uF/huyP9b1HWC9dbIdVebhDcyBDkBAFtJMOxjwCgjnxw +sUI5vJ5FMPDjUdRPTVQxwlkD/1PGN4Ycdn8ncmZ1OG0T+vmL+C+yGMIdbWIizffC +Li05HMziwK33NHk5ABkeyIijm4Mq7JUlSSwt6gQXJTGlidHEcmKqSTg4AQhybPL5 +w40KcjNyAeQhIFgHAfMzy+Ikxzlt8fNunMTf6utWrPq2IU4uE4lJT4kSL1ic89vx +a4CLA/4g4MJVuzTegJXS5vhMnEI2Nhmc2MIAsEhPcIwJjhUN4rJJMcVxQO+Cmrfl +0rcosxA6wtjFDdPcuXYiAoJBJQrVYp6+w4GyHW45/WR6iGas/Rm0ZRQqnf9WnlpX +o5d7uEwzLfck4iVw+z298y6qk52coFKaKPH0bGVxguifMNdbwbQ3R3VpbGxhdW1l +IFNhdXRoaWVyIChCdWxsKSA8Z3VpbGxhdW1lLnNhdXRoaWVyQGJ1bGwubmV0PrkC +DQRKlRh4EAgAoSWTikKPMX99ZIqYgjAKlM82x6H5xxkisLGwI13m/nvRgOBy8gYz +fJCdxrEupnvNk4PK7twUka18oAoaKfKFBdIKQ0bSyUNV/RzkJDhkBCCU0T8DbN7X +e4rP35l1PvSKOwtGmIxovip+Spm/j38KKnSTWyZ0JIBTOYEoB8wzyna/fcibwIy/ +M/wj+lrurXE/6QnAxqJjAsL2MtuTurC5IMfRPQqUL0yMk+l+wUpuBaWhg70NhbsT +isdJy9TP+Nsu7tCJu3GumEuYKd3E46xIFedyA1etFHr9n7GkjQkrthlqaza2bUFO +v2xOpTJOvZYr15zOCpHslcIQiWT5zWCQcwADBgf/WBNDvc3jNmAyTP3nLRbA2JP+ +tVBVwdQkHktY4EjaLC7HjUA5TblQFTycXtZyKJ+LUwXM2W47h4HMXhSRq7E/wzMU +HGhUMBf21MwY//8mirKgRiU1rkArBKtr+bHTpsJ1UEoCaGzXxvTGxWZSLLrV1nBv +bBXXOOhFKvCymFcudN12i1MfBrubGNT905obseKThEc1umWzeRRWOlFEZkCONLR9 +PgSwCok7TT3OlkaGKRQB4cu54e/faOaLvFh2BgqSIoMgGHfVLJBTbssV6GL6T4Yo +U2Bq0wtLZ2k9tMgJHvPziWrk0rI4oesVWDmbEoRgAsYlTkdev0u98g3c5zAHLYhJ +BBgRAgAJBQJKlRh4AhsMAAoJED1SwpZqUfj05WEAnRNjXTAHWA3uXnDtK4XDHeCk +qzUIAJwO+CnWRTDq7K7Q63sS3rHl9X9ZgA== +=C0F4 +-----END PGP PUBLIC KEY BLOCK----- + +pub 476634A4694E716A +uid Simon Mittermueller (none) + +sub 4CE6E05D128BCFAD +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: BCPG v1.68 + +mQENBFE0soEBCADAy/iIRT/lpb+vfDjWs/k1XQNU3mzXoMm1mmS/Z8VOc0jF7sVB +A5z2pC6u2OmEr1oJkhWefX+mU//7kXs6VvUCReE4uheGBlisg/ELEXkTm342TcwS +K+tR/NMk5h1DwxeGR2qc0+zhFcrITiYqCpdaggRVx92syhuYWrG2DtRI3eEz+fys +2WLhAd/AqBTR0ENDZssp5S6tEBcLvU/jAvKv33/+ydg+1Bsw37CqCOO0bR388+ow +uSXSARDJaesnBpUcXT9pbog3Wm9pSzJ2fX1FyFaf3rqIIYEqGk1rEND+AkT2CB08 +BykABpDx0mgR6/pAgQVywCatPuc7wneiZY+LABEBAAG0OlNpbW9uIE1pdHRlcm11 +ZWxsZXIgKG5vbmUpIDxzaW1vbi5taXR0ZXJtdWVsbGVyQGdtYWlsLmNvbT65AQ0E +UTSygQEIANTGYOD4HupAmugS69txMTAW4GvRQ0s8Li/r/QQQUWPpjo3IkJDA0+kP +Ce2JRamNJJ2plzndeGUpQIZn+HJSN8fGRjZG56HG6l0BJmQRFHD/6CzNOOKK6z+8 +e306DAwQPqDdDpUgpBmbPHZDhCs7tvrOhrUesfLQla15MM7n1DEtII9y+AsMGfwr +ZCd2PeigiRC+/NH/lYObLUPc+NL6GrC1ZHrpGoOR+9GQ6voVNY5EIxVlNgoVBxn3 +ufcFvvghmZe0WyudBHK9ByWeioBItHQW5n7eGpljcCUbTpsJmErhjH6KBKSuxPQs +yV4TkQMqcsymGW0jhdHXc1/tStF3L0kAEQEAAYkBHwQYAQIACQUCUTSygQIbDAAK +CRBHZjSkaU5xamOiB/9r943gZZy9FJv/NGPnNxCvI3ZusQfntgRfVyIFZLIUeaYD +ab6RqKTD8ZRgyfO2rmO73DiQ2bntzmSPHeAlpKAIhTXfty0g5UICLjr27KocLNt2 +34BKii6go+CDo2+lLUPUAe3cJPFqZrtJ3pYLFwS7O43wwhRaO9A7L1uyruoCqql6 +5B6CJcymMEsDnCizRVEAsE2lxenufxcM8JIaQlczXTsHYf23vnmLjlXm5HvEAfXE +0s7iHo9BMlSLxHWWEqeyrbwMdnn/gT8lHGw+SHO173THvhtGuKGkrglD2CA9G5d1 +ZWgAz3il0fLdBenLH6t1m0x3+P6h4sUJ04LlldPb +=Ctqs +-----END PGP PUBLIC KEY BLOCK----- + +pub 5F69AD087600B22C +uid Eric Bruneton + +sub 0440006D577EAE4B +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: BCPG v1.68 + +mQENBE7JURcBCADO+9Dc4/JnB+wX+fq+Fr2zUGSPOT6/qjE5kXL4FEbJKsqDSAKG +VnbtRrsIUdmNIFQmz71bBDFhRBbrSrkz927k8eUPhYtxE2NmmWSuKgrjF4qviPQv +m/7SqGx378m/qw4EvpgGUB8EYif98LYdWp5vsU/zx0Ps9auqvetAzJaL9489oE0F +q8FVhve6BMfUUV7zOTCmJnf438YO68upjU0PVBdfFE6Qx4cgCeWbQGy2cooW5azN +iIenhuYU1qikmxMHq2xZzN4uSTWLGDpimPyz+Y1aTSYJ/bgn9gPStbI9sojWo9SS +5gvNK3XqJzMwxwFow86UcIE0vPD2T6ZlBAXRABEBAAG0IUVyaWMgQnJ1bmV0b24g +PGVicnVuZXRvbkBmcmVlLmZyPrkBDQROyVEXAQgA2uNV77VI+ARj1d97b5cY3/er +0Mcc8/Q9ctMY+5YpSYDOQF100QBdOQ8q3IJsfhZeF/iMFlHIUikuSgatb/Ih4lk1 ++irnERPuV2MNoAw3Fvn3/vwl/Jy0ZsQCBSXO54U42TcOXSwNLkYOJaomDiiuo61R +xj7jqijpnydwoFvEi84v6q/Uota3MijGMbzU9QyTX8J9OKMeCSUq0uVuk4ezebjv +/bwA/ax/qQRIrEHDOOB1LJ5JyLacK4+h5J8tMkEmWxEQv7MNokRLgbaePqv+tdf1 +gee4f2fSE3EXKFxjTO2wjLPXCrHSSI5gecsilQn7ZNxH9g2YUJipn9yj3ywMxQAR +AQABiQEfBBgBAgAJBQJOyVEXAhsMAAoJEF9prQh2ALIsrWwH/3s8uN8/gDnbcbTX ++7N/ZfQBXJZ+H9GGikmYRJE1xoOeEt9MOqZyGDTZfGM/qNKeDGfar7pcRQlMK/A4 +Nts5E6d1OX8fBkUBtYanyyjNLlT3yDjO6VaV0SCsgAzNjUZqc4lxS9atN6md5m6l +WLAdHghrXuV6LsiKOS+96htchoCvTvm7mcPI7w146yJRSyCC5+PybG3ult5Y6QAS +kwI3ZWB0u0PKUoqglwWngplu+0Fib2rxQvL32is4YrYaZ+XwoR6u/Bgv0ZvZiypk +17Uk17rDb/JfeLqDn7oW6Hlgi9KOLbRRIg7vwZVo2Ixco7aGxZp5c4zSfaPvn241 +v813ZcA= +=a3mq +-----END PGP PUBLIC KEY BLOCK----- + +pub 685C46769DBB5E5D +sub CA7AE93399B1ED99 +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: BCPG v1.68 + +mQENBFqHCi8BCACgRpCaVCiJ2MccCN01SbHYowmM255nSYKOnfItBmXYAMtc4rL9 +n1y1qFtc4LBbkIrPH8CO2zpEImUTZel4W93BQkluPOO3EX/hLCTCFfXrO89L1u4V +XL4siS8vZl3DVDdY7m9G4vcpiIsggGF683KNctN2KXZ0D3tu9C1X7eJk3GyDo6W7 +MJwiiCm10968VqFqIFn1rTkvtGtXGP61Vqy7kLTdiBrKbo1HkZDbryl6nvCmT++E +auJXEDYH9R+vsODy10a5in0n0EzQD4DYadL6cQTbwP2SvMbRRRQ7AnNtys6cNCCb +CIJ8iySLaHYi65w6FEbiBM2XQ2hzf8Dek9yDABEBAAG5AQ0EWocKLwEIAM2B7Zpx +xGVWndU4dnPKBa9/0Gh+1D+18/pYSsmIKvxbCppEMvPKsXMU1+JDH0gfLLChXWgr +QUCOsqRVb2lJvI59SwtHVT2SRyhznQxIi3YOwdtGz83WNMefmGr+0iY2CKud1d6Z +CRmchz/Qr2fy+bieftrBcdZ49asitRVlcdlWZNk7BZi+H6YgIukjl0aBlS5TtLAq +lL5R9nkfO9/9buWGt/OxJ+JK1p7tE/nR8oOf8bvUtkO1ypjuxshFF0Z17CT7q+gs +F6VGqHqFyHMnaXY5fk0e9DoMcgBrK30GFTYz70VSuMlL/N/V8/JgiKdtQkbHLMdS +CHrITAakRlyKPAUAEQEAAYkBPAQYAQgAJhYhBGgvdl7qcY0lC72y8WhcRnadu15d +BQJahwovAhsMBQkDwmcAAAoJEGhcRnadu15dqwgH/RMMpydz2+9D3ElW6BqMxQp0 +mshPnP0m6Eitgro38NRctkK9GIs1y+EQBOI18yPmNxGGaXCe1zMVIXgU2a8TvAAr +zKwMJjAtr39RKDNw0FacqFQr+XdTiGOq2Ao8h3gU+K8LJfBi2Wfb7IxlqSPZvCXK +Yt44TIofs363WmCaRc7uTANsv3Vd2mJ9JKTg7jfllVkchf944SwmbazRZ2W96X60 +v43AzPpHYsqh/cBOosryMV/EZO2vtR9MxZikDXrcXTED2Dg1El0BLsoF2mRc5vm3 +1lPhPcfhwqXmapjqQUIHYRWRRF/q7ve7NO5ATFVJVjOLOLhEzSiyMM5AJNhZWxs= +=SzQK +-----END PGP PUBLIC KEY BLOCK----- + +pub 7457CA33C3CE9E15 +uid Colin Decker + +sub ABE9F3126BB741C1 +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: BCPG v1.68 + +mQENBFIXyRQBCADe285y3Pu7KzoKyP6wqeNXtvvuwMatAmPm5x/i+S8MlryqzsYa +x6twUmXV1yKjjtGrO+9fHvTOWBfSSP+fP9KTaTQYSasoJq2Mw4cQDy1i0zrxNZUw +N4/BiyjQA25sdfaOolhO0sFlZuTZpYy5wG72KkA1ygNq0L+8aBKhEF6zDU61YzCC +AxjcgTftgTeeoqkJtYa06lNz3jmJDN+zUQignfRa3ymoGtFHTzoXR9maE8RWDty4 +y+DY+8ibdGgSgKPZ0byTCDyNojgU1YTlADa/1/NY1ShYg617O1xicLNo0JEJlf2U +Tu4Ymql36+xSkYSISU97Q6Utgq27XMuZvDUDABEBAAG0IkNvbGluIERlY2tlciA8 +Y2dkZWNrZXJAZ29vZ2xlLmNvbT65AQ0EUhfJFAEIAN9NHRd2bYP/3CDi+n1ilSCh +ld0NR3DUBgS/AdqQ7IoAUfj7skyI/WyaMdV4uy6vRh5YgNg2g01nd0LLZR8Gf2Ck ++D6F88CdZaTxlkcxHV/dXMZ8yBO+0D6yFRZEL7Imsv8Ig4QXOVwfuiXEPk/Ef5Dy +9SdAVhcoErTGGR6BOGVVvexGtBwefsjMaOG0khkRbWIQ32WxfUFuAv5XBQ0ckLrl +KvYWUYhOlXg27GtFKH2EBBF0Z5ZWu7gaBFwSV0oLp9EWcD+C+WEwUSfBdqfRJtyX +vgf4kZdwdQ5caM8P2/Sdncl2l/LU1At2Smc+plr6zhIhDlLhlrzKGa16oARSBdUA +EQEAAYkCPgQYAQoACQUCUhfJFAIbLgEpCRB0V8ozw86eFcBdIAQZAQoABgUCUhfJ +FAAKCRCr6fMSa7dBwURMCADHrqwRNHkbG1QsXJr9oUK6KVkLsPhcngIhxRLlqe89 +omg9G7eGNauzs2PKsB3txotCFc7ROVNv/TAuSDYzkPos8G46p3bGesjfJb24zc6G +MT4RGIJoh1oNG1IciafIIHjp2ZJHRmEDwmvZG24OHJ+mlHLjaedtqlWu+zwwhH2V +ZrI/U3gW/x4imbk9UyyzciEIxrAc+fc19xl5PkUVcSDVC0cAqGpeZz8+SxFaf3Rr +0aGnSbeuHRjNupmoxkQOAey1ztmdWiCPf5RFfmFD+fENh+/xqYiGorYpcIN7UAsM +kvD5UHc5ZG2tTD41jM99w9Lm/xHJ9ks8gNwZESwIzr6ABKIH/1ulsflI216qPz5o +7uUxlTm8NfTyATfCUuZEDMYGOjDQPqQa8hFebqjWWYBUq2SlaKD2xMeEuEXV+M5k +88Cx6T2nvaZWMsrD7uGj+tTsFaKBGxP5p2OSEWOTETKKv6Cx7vcMTQmrqSFo47bF +KlNSs+aVM48UnQeFtTDyOhwa5jvtqtst4eQHwHWQ99BK0TEymNx0vF0nPjWA76CR +rfopOwXKdxJgoKq4MrxE92ot5I82AZBPeiWVJ+6wECeK/GoBIXZ5jEUqrQmmzIbo +WA5G5PMJ8egzLJNRJjTWHjCWrUTnwNcqaD4/qZxIlW4Lt0uvGlx6pKOJQ05u+9X/ +BzoVWrw= +=fJQM +-----END PGP PUBLIC KEY BLOCK----- + +pub 7A8860944FAD5F62 +uid Sebastian Bazley (ASF CODE SIGNING KEY) + +sub C189C86B813330C4 +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: BCPG v1.68 + +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 +=9dUG +-----END PGP PUBLIC KEY BLOCK----- + +pub 7C535299C0F2C580 +uid Max Bowsher <_@maxb.eu> + +sub 69D3F751AF3B563D +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: BCPG v1.68 + +mQGiBEIEyD4RBACb+Fl9PmkfIbribsJhuvvQVzfGN3bhOns+UtSszc/0ZA8BkJo4 +OxOQnXM9mZiQ/7EXdwNAmjSV2hpuzVJrQ5BcGF2KRQFZlwbJ/ebG13HunWcttNvM +RiMys41mJxtNU6bkE/jL+rZ5MUmizFV1MnqAPYSunDrH9iKmq2dPh9wDPwCg4sx5 +f+6P9riZgEuEcbFqgL2QrP0EAJTbv/4FdQcmuovLp6CWsQgqx4926tkqcdelYF/V +E4Uzysx8HeJ7lc9f1GOqGG8x+n1KcFgZd0lp22abZ6gq/h/VbvgbPnGLLqEzH3ki +He40ocr0Lk3m6vO1gsPCEQ/E/wQ9xYb60hOydC+O9cRfE4T7BMwDy+ZgMBEAxdlh +tZ3yA/9SdKEG0yb70txYk2fUitTegjHU/u2QmakwKh5pyfcjxMnnyXtR6qYAsyoz +u48hcsAccSqQgrfwOyPo8o/2zkSyOdHGCs42oOmTt+QOtnS5E69i8n7IE6xTE2rZ +e2BLjFliUrwW2ukMkVFe+sZlyPY/UQC+ikpR9o7xkOTkX1+CzLQXTWF4IEJvd3No +ZXIgPF9AbWF4Yi5ldT65Ag0EQgTITBAIAND+1QvCG7VB8g5mibYh18FaQmUZHdYP +8l+ugP/WRlAQGzM330RtXIrw27i9QkoVoEE6AFBMoey4KzLBsP5LJrGxYeJ9gxhO +WA3eY8vACldFyVCmu9yqXo+77rTdRbK89xypJ+hMJ1S+n5Opy2gYVaxTUX1Pxrhy +z3B+o7dnn/g2yG5gj0RD6PVtMhCI+gtv/CrZocgeSGp3llcodfzbE4APs8Xi8i5A +H+lak8acj/SE2Oqx2qE5jBHfphIlYVQux25opOOJd5LVENVcEFR+55/h85Gurekn +2HhbXnZlqWCvNZaH3Gcmj9HUAoauoZajXFx5yQKgpfNxe+VlX/TLyj8AAwcIAJoJ +6Z8y/Mo2pvBvKx5+EHe/nzk6m22AMyH6XLkxx8xZ/PaGE8kL1K+xZHCdnRfMG6Br +hjd/GTFChhQgA++Zg3cpmoZpcf0ZZuk48FXn1MwVeu87MUCFBH+JtjLx6C2+rNkb +Zxps+9Fx50FaZPAQgXKopO8tJfDoDhJerGwVGn/0ku7PoOo2Iy4PFJ5m4iCTPDs1 +7Ofz/vlQ7tfbuBaxFupOMsXB6nNxS1eyJCYNNPaS3xWukCp2NLIopLPAI0WeIf3p +dsVQ0rRoq7FtOvAg0o0rXq+YkJMHD7dmZg9woKk4SK+uz5AEIu0S5V50gu8ek3mK +3mqwV0Fo6LZbs60XGIuISQQYEQIACQUCQgTITAIbDAAKCRB8U1KZwPLFgGg7AJ9Z +5Lg3YDF9wMp0zFiAZnZTOhqc5wCcDBoJjFP9m/S6iV2GYv1PuR0BpnaISQQYEQIA +CQUCQgTITAIbDAAKCRB8U1KZwPLFgGg7AJ92A/Q+qOx2dy1wIijzl5bd3Ske9ACg +wpmXFJaWmTUEwEZUOjxBulJsLlk= +=lCsQ +-----END PGP PUBLIC KEY BLOCK----- diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml new file mode 100644 index 00000000..a3b8f56f --- /dev/null +++ b/gradle/verification-metadata.xml @@ -0,0 +1,165 @@ + + + + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e708b1c0..d64cd491 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index aa991fce..a80b22ce 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 4f906e0c..1aa94a42 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,67 +17,99 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -87,9 +119,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -98,88 +130,120 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac fi -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. # For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=`expr $i + 1` + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 107acd32..7101f8e4 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,89 +1,92 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings-gradle.lockfile b/settings-gradle.lockfile new file mode 100644 index 00000000..709a43f7 --- /dev/null +++ b/settings-gradle.lockfile @@ -0,0 +1,4 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +empty=incomingCatalogForLibs0 diff --git a/settings.gradle b/settings.gradle deleted file mode 100644 index 3708b453..00000000 --- a/settings.gradle +++ /dev/null @@ -1,14 +0,0 @@ -pluginManagement { - repositories { - maven { url 'https://maven.pkg.jetbrains.space/kotlin/p/kotlinx/maven' } - gradlePluginPortal() - } -} - -rootProject.name = 'Kotlin-Immutable-Collections' // TODO: Make readable name when it's not used in js module names - -include ':core' -project(":core").name='kotlinx-collections-immutable' - -include ':benchmarks' -include ':benchmarks:runner' \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 00000000..9c72e04a --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,14 @@ +pluginManagement { + repositories { + maven { url = uri("https://maven.pkg.jetbrains.space/kotlin/p/kotlinx/maven") } + gradlePluginPortal() + } +} + +rootProject.name = "Kotlin-Immutable-Collections" // TODO: Make readable name when it's not used in js module names + +include(":core") +project(":core").name = "kotlinx-collections-immutable" + +include(":benchmarks") +include(":benchmarks:runner")