diff --git a/MODULE.bazel b/MODULE.bazel index 40af3bee4..4d616608d 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -29,7 +29,9 @@ use_repo( "com_github_jetbrains_kotlin", "com_github_jetbrains_kotlin_git", "com_github_pinterest_ktlint", + "kotlin_build_tools_api", "kotlin_build_tools_impl", + "kotlin_compiler_embeddable", "kotlinx_serialization_core_jvm", "kotlinx_serialization_json", "kotlinx_serialization_json_jvm", diff --git a/kotlin/internal/jvm/compile.bzl b/kotlin/internal/jvm/compile.bzl index b501bbca0..54f17463c 100644 --- a/kotlin/internal/jvm/compile.bzl +++ b/kotlin/internal/jvm/compile.bzl @@ -463,6 +463,7 @@ def _run_kt_builder_action( args.add_all("--classpath", compile_deps.compile_jars) args.add("--reduced_classpath_mode", toolchains.kt.experimental_reduce_classpath_mode) args.add("--build_tools_api", toolchains.kt.experimental_build_tools_api) + args.add("--incremental_compilation", toolchains.kt.experimental_incremental_compilation) args.add_all("--sources", srcs.all_srcs, omit_if_empty = True) args.add_all("--source_jars", srcs.src_jars + generated_src_jars, omit_if_empty = True) args.add_all("--deps_artifacts", deps_artifacts, omit_if_empty = True) diff --git a/kotlin/internal/toolchains.bzl b/kotlin/internal/toolchains.bzl index 44a16075b..bd1dfa0d7 100644 --- a/kotlin/internal/toolchains.bzl +++ b/kotlin/internal/toolchains.bzl @@ -91,7 +91,8 @@ def _kotlin_toolchain_impl(ctx): experimental_strict_kotlin_deps = ctx.attr.experimental_strict_kotlin_deps, experimental_report_unused_deps = ctx.attr.experimental_report_unused_deps, experimental_reduce_classpath_mode = ctx.attr.experimental_reduce_classpath_mode, - experimental_build_tools_api = ctx.attr.experimental_build_tools_api, + experimental_build_tools_api = ctx.attr.experimental_build_tools_api[BuildSettingInfo].value, + experimental_incremental_compilation = ctx.attr.experimental_incremental_compilation[BuildSettingInfo].value, javac_options = ctx.attr.javac_options[JavacOptions] if ctx.attr.javac_options else None, kotlinc_options = ctx.attr.kotlinc_options[KotlincOptions] if ctx.attr.kotlinc_options else None, empty_jar = ctx.file._empty_jar, @@ -248,9 +249,15 @@ _kt_toolchain = rule( "KOTLINBUILDER_REDUCED", ], ), - "experimental_build_tools_api": attr.bool( + "experimental_build_tools_api": attr.label( doc = "Enables experimental support for Build Tools API integration", default = False, + default = Label("//kotlin/settings:experimental_build_tools_api"), + ), + "experimental_incremental_compilation": attr.label( + doc = "TODO", + default = False, + default = Label("//kotlin/settings:experimental_incremental_compilation"), ), "javac_options": attr.label( doc = "Compiler options for javac", @@ -327,6 +334,7 @@ def define_kt_toolchain( experimental_reduce_classpath_mode = None, experimental_multiplex_workers = None, experimental_build_tools_api = None, + experimental_incremental_compilation = None, javac_options = Label("//kotlin/internal:default_javac_options"), kotlinc_options = Label("//kotlin/internal:default_kotlinc_options"), jvm_stdlibs = None, @@ -356,6 +364,7 @@ def define_kt_toolchain( experimental_report_unused_deps = experimental_report_unused_deps, experimental_reduce_classpath_mode = experimental_reduce_classpath_mode, experimental_build_tools_api = experimental_build_tools_api, + experimental_incremental_compilation = experimental_incremental_compilation, javac_options = javac_options, kotlinc_options = kotlinc_options, visibility = ["//visibility:public"], diff --git a/kotlin/settings/BUILD.bazel b/kotlin/settings/BUILD.bazel index 15bca687f..f9f53cae0 100644 --- a/kotlin/settings/BUILD.bazel +++ b/kotlin/settings/BUILD.bazel @@ -48,3 +48,9 @@ bool_flag( build_setting_default = False, visibility = ["//visibility:public"], ) + +bool_flag( + name = "experimental_incremental_compilation", + build_setting_default = False, + visibility = ["//visibility:public"], +) diff --git a/kotlin/settings/BUILD.release.bazel b/kotlin/settings/BUILD.release.bazel index a36d5fffe..d6f283824 100644 --- a/kotlin/settings/BUILD.release.bazel +++ b/kotlin/settings/BUILD.release.bazel @@ -40,3 +40,10 @@ bool_flag( build_setting_default = False, visibility = ["//visibility:public"], ) + +# --@rules_kotlin//kotlin/settings:experimental_incremental_compilation=True +bool_flag( + name = "experimental_incremental_compilation", + build_setting_default = False, + visibility = ["//visibility:public"], +) diff --git a/kotlin_rules_maven_install.json b/kotlin_rules_maven_install.json index 3b76dbad1..d69002ba3 100755 --- a/kotlin_rules_maven_install.json +++ b/kotlin_rules_maven_install.json @@ -57,38 +57,38 @@ }, "com.google.dagger:dagger": { "shasums": { - "jar": "19680b0f42baa7f9414dacae8663244d323d084a6ee5594ad115a17f3be37c05", - "sources": "698d992ae63a8cfa8d4a4af888fcb82d84676a1fef8853e6a0094569c306e971" + "jar": "e016933f0cbd5fb9978739a4241f57e31525573db0d9b8aa9b7e72aadc54f33e", + "sources": "5774c1506fa2002644ad9cdffa33cab38f5049cee40376137d1b8ccafa9b6343" }, - "version": "2.53.1" + "version": "2.56.2" }, "com.google.dagger:dagger-compiler": { "shasums": { - "jar": "acd6737e2b2b8fb5a5919e68463b611c6ee5477afd936c791f54b86aa7fd7047", - "sources": "cb3c43968bbd2993917db4422493b6df7d43b8069c809941dd86b71170687d57" + "jar": "05054a73ea20041e3d6dc807bf7924f20f74fc68c64cc19bfc7f5fb9028bf68f", + "sources": "36f8494a038b456ecafdb50c6326204cc854a58c6e650ad4af8e1e6955803255" }, - "version": "2.53.1" + "version": "2.56.2" }, "com.google.dagger:dagger-producers": { "shasums": { - "jar": "8ce7fb23f3f5a479f9c02ed144f3ec83fa9174a9260f19607ac0ec2ab7fb5b29", - "sources": "3b5c44d429f29a5207cf7b7b346d347e8fe58bfbf4b520c480508b8fbfe13c51" + "jar": "8256fa9a319377ce1838830c46da5f699c3b6c1b3132cea3b9500797d66884df", + "sources": "9e2c06723c7896bbdcacf23f1d4727c023788f1977a6e76bd15105da4c9752b0" }, - "version": "2.53.1" + "version": "2.56.2" }, "com.google.dagger:dagger-spi": { "shasums": { - "jar": "d645593bf5be5185a121e28093f2a2305a92415e70a08e7018898abb258af0fc", - "sources": "35ffcf86483d9fc1c6cad91c420ed46340d899cc76eed89844dcf90a35138502" + "jar": "14a7d83a113a07119adb65385f60d6f872b22aa4645b19fb5b18861fcab1a651", + "sources": "9c8a223a535716da495147a036f5e94e401b965261207dbb04d71abbbf20649d" }, - "version": "2.53.1" + "version": "2.56.2" }, "com.google.devtools.ksp:symbol-processing-api": { "shasums": { - "jar": "e38dd8199c65aae4bce9929bf39a563bf7658c600be5066c7e042cdd8de3137c", - "sources": "6dbcfd749f6d489d999652801e20e8ee6c4a60c53a0e22bd89947e672f47ff6e" + "jar": "3170c52186cb2096a47f538f09dd41e49ca1b3334d69ea83d6493d6f0365b7b4", + "sources": "34bd43ec95ae55fc2380bedfffc97ebf2cb10734f8ac401986dde248f058a1bf" }, - "version": "2.0.21-1.0.28" + "version": "2.1.10-1.0.31" }, "com.google.errorprone:error_prone_annotations": { "shasums": { @@ -398,6 +398,55 @@ }, "version": "1.3" }, + "org.jetbrains.intellij.deps:trove4j": { + "shasums": { + "jar": "c5fd725bffab51846bf3c77db1383c60aaaebfe1b7fe2f00d23fe1b7df0a439d", + "sources": "2e0174e80b989eb5deafcfb77407c908a0abe1f67a80306f98aeca63246e5481" + }, + "version": "1.0.20200330" + }, + "org.jetbrains.kotlin:kotlin-build-tools-api": { + "shasums": { + "jar": "533c36cb362e6ed2d15f58732e7f4c6d2bed5c9d5179b897bc4b09d16d605377", + "sources": "fe86558db8dc6b7712ef376b92de40f3573dd844f2529424fb8162309b97d7f6" + }, + "version": "2.1.20" + }, + "org.jetbrains.kotlin:kotlin-build-tools-impl": { + "shasums": { + "jar": "6e94896e321603e3bfe89fef02478e44d1d64a3d25d49d0694892ffc01c60acf", + "sources": "8f8f11d1078d1a4ee7c5c3a61c3df74e0b3c1820e97a95b9e3a81ea4f70f6101" + }, + "version": "2.1.20" + }, + "org.jetbrains.kotlin:kotlin-compiler-embeddable": { + "shasums": { + "jar": "c54a00718c8c0e3ee858bf42771c7f401c5e3c1738861e18e9536371042fa1b3", + "sources": "dc1ec1391e465b56d7e664fcf63d0ff4cfeb7274fc6e2b0dbd71335f8ce1dc11" + }, + "version": "2.1.20" + }, + "org.jetbrains.kotlin:kotlin-compiler-runner": { + "shasums": { + "jar": "de3b5423d8fbf86ea2bd1334d401bc4aa84e28ec48945952d11c00b10b1402b6", + "sources": "b0d5eeb97fe72cbba3c220285b74335723da0dfe350a2e56e622ff0217fba35c" + }, + "version": "2.1.20" + }, + "org.jetbrains.kotlin:kotlin-daemon-client": { + "shasums": { + "jar": "3630a30182c63570eb519ae65aaa9419217dbad0814fede42c8dde704465a4c6", + "sources": "a162b90df1e2bf99d585118f810174f3bf8f1e8105d78005d5faf861b7dd6c85" + }, + "version": "2.1.20" + }, + "org.jetbrains.kotlin:kotlin-daemon-embeddable": { + "shasums": { + "jar": "d9e83df1d847a201ba3c016a786ced091be9503997d09f6a9cf1796ee489f374", + "sources": "f5f4978565570902d2f6d42885fa4b73b5bc8e85ba00938724830cdaa424e45b" + }, + "version": "2.1.20" + }, "org.jetbrains.kotlin:kotlin-reflect": { "shasums": { "jar": "a65166445bb85ef816cde127279fe0017d2b7cc439b3b972390e1b736d64e94c", @@ -405,12 +454,47 @@ }, "version": "1.9.24" }, + "org.jetbrains.kotlin:kotlin-script-runtime": { + "shasums": { + "jar": "ae4397fbb3aa2a1ada09290e753bba99a4114548977c3115526b9958f4cb1a04", + "sources": "d9d6b416bf1267d5d9a2fffb309c8d02fa707608154d7b0d7dd318d2dd7daa96" + }, + "version": "2.1.20" + }, + "org.jetbrains.kotlin:kotlin-scripting-common": { + "shasums": { + "jar": "5fdbf6ae72237ce335d603eb12c49b09bc9c1a33c0c01f1d62e77ff33663cefb", + "sources": "4f198a3d727c837795f6da378b266a226d0d13043d1765cd82badea0de4c53c2" + }, + "version": "2.1.20" + }, + "org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable": { + "shasums": { + "jar": "3d4f772b238414650017e97462256b7c4d5edfa1013cbf5477573eb1ac2e2884", + "sources": "5177beab85325a733d6c514268a242f92ddc622e1508a1203ce102f4496d26a9" + }, + "version": "2.1.20" + }, + "org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable": { + "shasums": { + "jar": "f665d70b1a0837ff3a0ef7bec4fc5d9fed67ea75e4697de158eb51f1ea501c3f", + "sources": "cc5d27496ba8d419f3dbb385cf524d9380c0516f639cb11d58025b51297f7cb2" + }, + "version": "2.1.20" + }, + "org.jetbrains.kotlin:kotlin-scripting-jvm": { + "shasums": { + "jar": "69f457acab98364c0eb578c497e0c3ca930b8cfb82be774049da04cde38087f7", + "sources": "d004e488333841aeec11752846358a37967f0893822954a5f72a5a8087d79860" + }, + "version": "2.1.20" + }, "org.jetbrains.kotlin:kotlin-stdlib": { "shasums": { - "jar": "f31cc53f105a7e48c093683bbd5437561d1233920513774b470805641bedbc09", - "sources": "5995c780c3ac742fb277ced561ebd7b0739227ea7c93a6bd9c7cee6593493fce" + "jar": "1bcc74e8ce84e2c25eaafde10f1248349cce3062b6e36978cbeec610db1e930a", + "sources": "6f0c26b17398e3e4be3b82d9ef1e92d941a755d16faf9703109f208f9aac7480" }, - "version": "2.0.21" + "version": "2.1.20" }, "org.jetbrains.kotlin:kotlin-stdlib-jdk7": { "shasums": { @@ -426,6 +510,13 @@ }, "version": "1.8.21" }, + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm": { + "shasums": { + "jar": "9860906a1937490bf5f3b06d2f0e10ef451e65b95b269f22daf68a3d1f5065c5", + "sources": "451599ff2044e6a98f975b28d106891cc664ae69ad7a30c572dffb5413202179" + }, + "version": "1.8.0" + }, "org.jetbrains:annotations": { "shasums": { "jar": "ace2a10dc8e2d5fd34925ecac03e4988b2c0f851650c94b8cef49ba1bd111478", @@ -627,9 +718,50 @@ "org.codehaus.plexus:plexus-utils", "org.eclipse.sisu:org.eclipse.sisu.inject" ], + "org.jetbrains.kotlin:kotlin-build-tools-impl": [ + "org.jetbrains.kotlin:kotlin-build-tools-api", + "org.jetbrains.kotlin:kotlin-compiler-embeddable", + "org.jetbrains.kotlin:kotlin-compiler-runner", + "org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable", + "org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "org.jetbrains.kotlin:kotlin-compiler-embeddable": [ + "org.jetbrains.intellij.deps:trove4j", + "org.jetbrains.kotlin:kotlin-daemon-embeddable", + "org.jetbrains.kotlin:kotlin-reflect", + "org.jetbrains.kotlin:kotlin-script-runtime", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm" + ], + "org.jetbrains.kotlin:kotlin-compiler-runner": [ + "org.jetbrains.kotlin:kotlin-compiler-embeddable", + "org.jetbrains.kotlin:kotlin-daemon-client", + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm" + ], + "org.jetbrains.kotlin:kotlin-daemon-client": [ + "org.jetbrains.kotlin:kotlin-stdlib" + ], "org.jetbrains.kotlin:kotlin-reflect": [ "org.jetbrains.kotlin:kotlin-stdlib" ], + "org.jetbrains.kotlin:kotlin-scripting-common": [ + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable": [ + "org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable": [ + "org.jetbrains.kotlin:kotlin-scripting-common", + "org.jetbrains.kotlin:kotlin-scripting-jvm", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "org.jetbrains.kotlin:kotlin-scripting-jvm": [ + "org.jetbrains.kotlin:kotlin-script-runtime", + "org.jetbrains.kotlin:kotlin-scripting-common", + "org.jetbrains.kotlin:kotlin-stdlib" + ], "org.jetbrains.kotlin:kotlin-stdlib": [ "org.jetbrains:annotations" ], @@ -805,21 +937,8 @@ "dagger.spi.internal.shaded.androidx.room.compiler.processing.ksp", "dagger.spi.internal.shaded.androidx.room.compiler.processing.ksp.synthetic", "dagger.spi.internal.shaded.androidx.room.compiler.processing.util", - "dagger.spi.internal.shaded.androidx.room.jarjarred.kotlin.metadata", - "dagger.spi.internal.shaded.androidx.room.jarjarred.kotlin.metadata.internal", - "dagger.spi.internal.shaded.androidx.room.jarjarred.kotlin.metadata.internal.common", - "dagger.spi.internal.shaded.androidx.room.jarjarred.kotlin.metadata.internal.extensions", - "dagger.spi.internal.shaded.androidx.room.jarjarred.kotlin.metadata.internal.metadata", - "dagger.spi.internal.shaded.androidx.room.jarjarred.kotlin.metadata.internal.metadata.builtins", - "dagger.spi.internal.shaded.androidx.room.jarjarred.kotlin.metadata.internal.metadata.deserialization", - "dagger.spi.internal.shaded.androidx.room.jarjarred.kotlin.metadata.internal.metadata.jvm", - "dagger.spi.internal.shaded.androidx.room.jarjarred.kotlin.metadata.internal.metadata.jvm.deserialization", - "dagger.spi.internal.shaded.androidx.room.jarjarred.kotlin.metadata.internal.metadata.jvm.serialization", - "dagger.spi.internal.shaded.androidx.room.jarjarred.kotlin.metadata.internal.metadata.serialization", - "dagger.spi.internal.shaded.androidx.room.jarjarred.kotlin.metadata.internal.protobuf", - "dagger.spi.internal.shaded.androidx.room.jarjarred.kotlin.metadata.jvm", - "dagger.spi.internal.shaded.androidx.room.jarjarred.kotlin.metadata.jvm.internal", - "dagger.spi.internal.shaded.auto.common", + "dagger.spi.internal.shaded.com.google.auto.common", + "dagger.spi.internal.shaded.com.squareup.kotlinpoet.javapoet", "dagger.spi.internal.shaded.kotlin.metadata", "dagger.spi.internal.shaded.kotlin.metadata.internal", "dagger.spi.internal.shaded.kotlin.metadata.internal.common", @@ -1314,6 +1433,871 @@ "org.hamcrest.core", "org.hamcrest.internal" ], + "org.jetbrains.intellij.deps:trove4j": [ + "gnu.trove", + "gnu.trove.decorator" + ], + "org.jetbrains.kotlin:kotlin-build-tools-api": [ + "org.jetbrains.kotlin.buildtools.api", + "org.jetbrains.kotlin.buildtools.api.jvm", + "org.jetbrains.kotlin.buildtools.internal" + ], + "org.jetbrains.kotlin:kotlin-build-tools-impl": [ + "org.jetbrains.kotlin.buildtools.internal" + ], + "org.jetbrains.kotlin:kotlin-compiler-embeddable": [ + "io.vavr", + "io.vavr.collection", + "io.vavr.concurrent", + "io.vavr.control", + "org.jetbrains.concurrency", + "org.jetbrains.kotlin", + "org.jetbrains.kotlin.analysis.decompiled.light.classes", + "org.jetbrains.kotlin.analysis.decompiled.light.classes.origin", + "org.jetbrains.kotlin.analysis.decompiler.js", + "org.jetbrains.kotlin.analysis.decompiler.konan", + "org.jetbrains.kotlin.analysis.decompiler.psi", + "org.jetbrains.kotlin.analysis.decompiler.psi.file", + "org.jetbrains.kotlin.analysis.decompiler.psi.text", + "org.jetbrains.kotlin.analysis.decompiler.stub", + "org.jetbrains.kotlin.analysis.decompiler.stub.file", + "org.jetbrains.kotlin.analysis.decompiler.stub.flags", + "org.jetbrains.kotlin.analyzer", + "org.jetbrains.kotlin.analyzer.common", + "org.jetbrains.kotlin.asJava", + "org.jetbrains.kotlin.asJava.builder", + "org.jetbrains.kotlin.asJava.classes", + "org.jetbrains.kotlin.asJava.elements", + "org.jetbrains.kotlin.asJava.finder", + "org.jetbrains.kotlin.backend.common", + "org.jetbrains.kotlin.backend.common.actualizer", + "org.jetbrains.kotlin.backend.common.actualizer.checker", + "org.jetbrains.kotlin.backend.common.bridges", + "org.jetbrains.kotlin.backend.common.checkers", + "org.jetbrains.kotlin.backend.common.checkers.context", + "org.jetbrains.kotlin.backend.common.checkers.declaration", + "org.jetbrains.kotlin.backend.common.checkers.expression", + "org.jetbrains.kotlin.backend.common.checkers.type", + "org.jetbrains.kotlin.backend.common.descriptors", + "org.jetbrains.kotlin.backend.common.diagnostics", + "org.jetbrains.kotlin.backend.common.extensions", + "org.jetbrains.kotlin.backend.common.ir", + "org.jetbrains.kotlin.backend.common.linkage.issues", + "org.jetbrains.kotlin.backend.common.linkage.partial", + "org.jetbrains.kotlin.backend.common.lower", + "org.jetbrains.kotlin.backend.common.lower.coroutines", + "org.jetbrains.kotlin.backend.common.lower.inline", + "org.jetbrains.kotlin.backend.common.lower.loops", + "org.jetbrains.kotlin.backend.common.lower.loops.handlers", + "org.jetbrains.kotlin.backend.common.lower.optimizations", + "org.jetbrains.kotlin.backend.common.output", + "org.jetbrains.kotlin.backend.common.overrides", + "org.jetbrains.kotlin.backend.common.phaser", + "org.jetbrains.kotlin.backend.common.serialization", + "org.jetbrains.kotlin.backend.common.serialization.encodings", + "org.jetbrains.kotlin.backend.common.serialization.mangle", + "org.jetbrains.kotlin.backend.common.serialization.mangle.descriptor", + "org.jetbrains.kotlin.backend.common.serialization.mangle.ir", + "org.jetbrains.kotlin.backend.common.serialization.metadata", + "org.jetbrains.kotlin.backend.common.serialization.proto", + "org.jetbrains.kotlin.backend.common.serialization.signature", + "org.jetbrains.kotlin.backend.js", + "org.jetbrains.kotlin.backend.jvm", + "org.jetbrains.kotlin.backend.jvm.caches", + "org.jetbrains.kotlin.backend.jvm.codegen", + "org.jetbrains.kotlin.backend.jvm.extensions", + "org.jetbrains.kotlin.backend.jvm.intrinsics", + "org.jetbrains.kotlin.backend.jvm.ir", + "org.jetbrains.kotlin.backend.jvm.lower", + "org.jetbrains.kotlin.backend.jvm.lower.indy", + "org.jetbrains.kotlin.backend.jvm.mapping", + "org.jetbrains.kotlin.backend.jvm.metadata", + "org.jetbrains.kotlin.backend.jvm.overrides", + "org.jetbrains.kotlin.backend.jvm.serialization", + "org.jetbrains.kotlin.backend.jvm.serialization.proto", + "org.jetbrains.kotlin.backend.konan", + "org.jetbrains.kotlin.backend.konan.descriptors", + "org.jetbrains.kotlin.backend.konan.ir", + "org.jetbrains.kotlin.backend.konan.lower", + "org.jetbrains.kotlin.backend.konan.serialization", + "org.jetbrains.kotlin.backend.wasm", + "org.jetbrains.kotlin.backend.wasm.dce", + "org.jetbrains.kotlin.backend.wasm.dwarf", + "org.jetbrains.kotlin.backend.wasm.dwarf.entries", + "org.jetbrains.kotlin.backend.wasm.dwarf.lines", + "org.jetbrains.kotlin.backend.wasm.dwarf.utils", + "org.jetbrains.kotlin.backend.wasm.export", + "org.jetbrains.kotlin.backend.wasm.ic", + "org.jetbrains.kotlin.backend.wasm.ir2wasm", + "org.jetbrains.kotlin.backend.wasm.lower", + "org.jetbrains.kotlin.backend.wasm.serialization", + "org.jetbrains.kotlin.backend.wasm.utils", + "org.jetbrains.kotlin.build", + "org.jetbrains.kotlin.build.report", + "org.jetbrains.kotlin.build.report.metrics", + "org.jetbrains.kotlin.build.report.statistics", + "org.jetbrains.kotlin.build.report.statistics.file", + "org.jetbrains.kotlin.buildtools.api", + "org.jetbrains.kotlin.buildtools.api.jvm", + "org.jetbrains.kotlin.buildtools.internal", + "org.jetbrains.kotlin.builtins", + "org.jetbrains.kotlin.builtins.functions", + "org.jetbrains.kotlin.builtins.jvm", + "org.jetbrains.kotlin.builtins.konan", + "org.jetbrains.kotlin.cfg", + "org.jetbrains.kotlin.cfg.pseudocode", + "org.jetbrains.kotlin.cfg.pseudocode.instructions", + "org.jetbrains.kotlin.cfg.pseudocode.instructions.eval", + "org.jetbrains.kotlin.cfg.pseudocode.instructions.jumps", + "org.jetbrains.kotlin.cfg.pseudocode.instructions.special", + "org.jetbrains.kotlin.cfg.pseudocodeTraverser", + "org.jetbrains.kotlin.cfg.variable", + "org.jetbrains.kotlin.checkers", + "org.jetbrains.kotlin.checkers.diagnostics", + "org.jetbrains.kotlin.checkers.diagnostics.factories", + "org.jetbrains.kotlin.checkers.utils", + "org.jetbrains.kotlin.cli.common", + "org.jetbrains.kotlin.cli.common.arguments", + "org.jetbrains.kotlin.cli.common.config", + "org.jetbrains.kotlin.cli.common.environment", + "org.jetbrains.kotlin.cli.common.extensions", + "org.jetbrains.kotlin.cli.common.fir", + "org.jetbrains.kotlin.cli.common.localfs", + "org.jetbrains.kotlin.cli.common.messages", + "org.jetbrains.kotlin.cli.common.modules", + "org.jetbrains.kotlin.cli.common.output", + "org.jetbrains.kotlin.cli.common.profiling", + "org.jetbrains.kotlin.cli.common.repl", + "org.jetbrains.kotlin.cli.js", + "org.jetbrains.kotlin.cli.js.klib", + "org.jetbrains.kotlin.cli.jvm", + "org.jetbrains.kotlin.cli.jvm.compiler", + "org.jetbrains.kotlin.cli.jvm.compiler.jarfs", + "org.jetbrains.kotlin.cli.jvm.compiler.legacy.pipeline", + "org.jetbrains.kotlin.cli.jvm.config", + "org.jetbrains.kotlin.cli.jvm.index", + "org.jetbrains.kotlin.cli.jvm.javac", + "org.jetbrains.kotlin.cli.jvm.modules", + "org.jetbrains.kotlin.cli.jvm.plugins", + "org.jetbrains.kotlin.cli.metadata", + "org.jetbrains.kotlin.cli.pipeline", + "org.jetbrains.kotlin.cli.pipeline.jvm", + "org.jetbrains.kotlin.cli.pipeline.web", + "org.jetbrains.kotlin.cli.pipeline.web.js", + "org.jetbrains.kotlin.cli.pipeline.web.wasm", + "org.jetbrains.kotlin.cli.plugins", + "org.jetbrains.kotlin.codegen", + "org.jetbrains.kotlin.codegen.coroutines", + "org.jetbrains.kotlin.codegen.extensions", + "org.jetbrains.kotlin.codegen.inline", + "org.jetbrains.kotlin.codegen.inline.coroutines", + "org.jetbrains.kotlin.codegen.intrinsics", + "org.jetbrains.kotlin.codegen.optimization", + "org.jetbrains.kotlin.codegen.optimization.boxing", + "org.jetbrains.kotlin.codegen.optimization.common", + "org.jetbrains.kotlin.codegen.optimization.fixStack", + "org.jetbrains.kotlin.codegen.optimization.nullCheck", + "org.jetbrains.kotlin.codegen.optimization.temporaryVals", + "org.jetbrains.kotlin.codegen.optimization.transformer", + "org.jetbrains.kotlin.codegen.pseudoInsns", + "org.jetbrains.kotlin.codegen.serialization", + "org.jetbrains.kotlin.codegen.signature", + "org.jetbrains.kotlin.codegen.state", + "org.jetbrains.kotlin.codegen.when", + "org.jetbrains.kotlin.com.fasterxml.aalto", + "org.jetbrains.kotlin.com.fasterxml.aalto.impl", + "org.jetbrains.kotlin.com.fasterxml.aalto.in", + "org.jetbrains.kotlin.com.fasterxml.aalto.stax", + "org.jetbrains.kotlin.com.fasterxml.aalto.util", + "org.jetbrains.kotlin.com.google.common.base", + "org.jetbrains.kotlin.com.google.common.collect", + "org.jetbrains.kotlin.com.google.common.graph", + "org.jetbrains.kotlin.com.google.common.hash", + "org.jetbrains.kotlin.com.google.common.io", + "org.jetbrains.kotlin.com.google.common.math", + "org.jetbrains.kotlin.com.google.common.primitives", + "org.jetbrains.kotlin.com.google.common.util.concurrent", + "org.jetbrains.kotlin.com.google.gwt.dev.js", + "org.jetbrains.kotlin.com.google.gwt.dev.js.parserExceptions", + "org.jetbrains.kotlin.com.google.gwt.dev.js.rhino", + "org.jetbrains.kotlin.com.intellij", + "org.jetbrains.kotlin.com.intellij.codeInsight", + "org.jetbrains.kotlin.com.intellij.codeInsight.completion.scope", + "org.jetbrains.kotlin.com.intellij.codeInsight.daemon.impl.analysis", + "org.jetbrains.kotlin.com.intellij.codeInsight.folding", + "org.jetbrains.kotlin.com.intellij.codeInsight.folding.impl", + "org.jetbrains.kotlin.com.intellij.codeInsight.highlighting", + "org.jetbrains.kotlin.com.intellij.codeInsight.javadoc", + "org.jetbrains.kotlin.com.intellij.codeInsight.runner", + "org.jetbrains.kotlin.com.intellij.codeWithMe", + "org.jetbrains.kotlin.com.intellij.concurrency", + "org.jetbrains.kotlin.com.intellij.core", + "org.jetbrains.kotlin.com.intellij.diagnostic", + "org.jetbrains.kotlin.com.intellij.extapi.psi", + "org.jetbrains.kotlin.com.intellij.formatting", + "org.jetbrains.kotlin.com.intellij.ide", + "org.jetbrains.kotlin.com.intellij.ide.highlighter", + "org.jetbrains.kotlin.com.intellij.ide.plugins", + "org.jetbrains.kotlin.com.intellij.ide.plugins.cl", + "org.jetbrains.kotlin.com.intellij.ide.util", + "org.jetbrains.kotlin.com.intellij.idea", + "org.jetbrains.kotlin.com.intellij.injected.editor", + "org.jetbrains.kotlin.com.intellij.lang", + "org.jetbrains.kotlin.com.intellij.lang.folding", + "org.jetbrains.kotlin.com.intellij.lang.impl", + "org.jetbrains.kotlin.com.intellij.lang.injection", + "org.jetbrains.kotlin.com.intellij.lang.java", + "org.jetbrains.kotlin.com.intellij.lang.java.beans", + "org.jetbrains.kotlin.com.intellij.lang.java.lexer", + "org.jetbrains.kotlin.com.intellij.lang.java.parser", + "org.jetbrains.kotlin.com.intellij.lang.jvm", + "org.jetbrains.kotlin.com.intellij.lang.jvm.annotation", + "org.jetbrains.kotlin.com.intellij.lang.jvm.facade", + "org.jetbrains.kotlin.com.intellij.lang.jvm.types", + "org.jetbrains.kotlin.com.intellij.lexer", + "org.jetbrains.kotlin.com.intellij.mock", + "org.jetbrains.kotlin.com.intellij.model", + "org.jetbrains.kotlin.com.intellij.model.psi", + "org.jetbrains.kotlin.com.intellij.navigation", + "org.jetbrains.kotlin.com.intellij.notebook.editor", + "org.jetbrains.kotlin.com.intellij.openapi", + "org.jetbrains.kotlin.com.intellij.openapi.application", + "org.jetbrains.kotlin.com.intellij.openapi.application.ex", + "org.jetbrains.kotlin.com.intellij.openapi.application.impl", + "org.jetbrains.kotlin.com.intellij.openapi.client", + "org.jetbrains.kotlin.com.intellij.openapi.command", + "org.jetbrains.kotlin.com.intellij.openapi.command.impl", + "org.jetbrains.kotlin.com.intellij.openapi.command.undo", + "org.jetbrains.kotlin.com.intellij.openapi.components", + "org.jetbrains.kotlin.com.intellij.openapi.diagnostic", + "org.jetbrains.kotlin.com.intellij.openapi.editor", + "org.jetbrains.kotlin.com.intellij.openapi.editor.actionSystem", + "org.jetbrains.kotlin.com.intellij.openapi.editor.colors", + "org.jetbrains.kotlin.com.intellij.openapi.editor.event", + "org.jetbrains.kotlin.com.intellij.openapi.editor.ex", + "org.jetbrains.kotlin.com.intellij.openapi.editor.impl", + "org.jetbrains.kotlin.com.intellij.openapi.editor.impl.event", + "org.jetbrains.kotlin.com.intellij.openapi.editor.markup", + "org.jetbrains.kotlin.com.intellij.openapi.extensions", + "org.jetbrains.kotlin.com.intellij.openapi.extensions.impl", + "org.jetbrains.kotlin.com.intellij.openapi.fileEditor", + "org.jetbrains.kotlin.com.intellij.openapi.fileEditor.impl", + "org.jetbrains.kotlin.com.intellij.openapi.fileTypes", + "org.jetbrains.kotlin.com.intellij.openapi.module", + "org.jetbrains.kotlin.com.intellij.openapi.progress", + "org.jetbrains.kotlin.com.intellij.openapi.progress.impl", + "org.jetbrains.kotlin.com.intellij.openapi.progress.util", + "org.jetbrains.kotlin.com.intellij.openapi.project", + "org.jetbrains.kotlin.com.intellij.openapi.projectRoots", + "org.jetbrains.kotlin.com.intellij.openapi.roots", + "org.jetbrains.kotlin.com.intellij.openapi.roots.impl", + "org.jetbrains.kotlin.com.intellij.openapi.ui", + "org.jetbrains.kotlin.com.intellij.openapi.util", + "org.jetbrains.kotlin.com.intellij.openapi.util.io", + "org.jetbrains.kotlin.com.intellij.openapi.util.objectTree", + "org.jetbrains.kotlin.com.intellij.openapi.util.registry", + "org.jetbrains.kotlin.com.intellij.openapi.util.text", + "org.jetbrains.kotlin.com.intellij.openapi.vfs", + "org.jetbrains.kotlin.com.intellij.openapi.vfs.encoding", + "org.jetbrains.kotlin.com.intellij.openapi.vfs.impl", + "org.jetbrains.kotlin.com.intellij.openapi.vfs.impl.jar", + "org.jetbrains.kotlin.com.intellij.openapi.vfs.local", + "org.jetbrains.kotlin.com.intellij.openapi.vfs.newvfs", + "org.jetbrains.kotlin.com.intellij.openapi.vfs.newvfs.events", + "org.jetbrains.kotlin.com.intellij.openapi.vfs.pointers", + "org.jetbrains.kotlin.com.intellij.openapi.wm.ex", + "org.jetbrains.kotlin.com.intellij.patterns", + "org.jetbrains.kotlin.com.intellij.patterns.compiler", + "org.jetbrains.kotlin.com.intellij.platform.backend.navigation", + "org.jetbrains.kotlin.com.intellij.pom", + "org.jetbrains.kotlin.com.intellij.pom.core.impl", + "org.jetbrains.kotlin.com.intellij.pom.event", + "org.jetbrains.kotlin.com.intellij.pom.impl", + "org.jetbrains.kotlin.com.intellij.pom.java", + "org.jetbrains.kotlin.com.intellij.pom.tree", + "org.jetbrains.kotlin.com.intellij.pom.tree.events", + "org.jetbrains.kotlin.com.intellij.pom.tree.events.impl", + "org.jetbrains.kotlin.com.intellij.pom.wrappers", + "org.jetbrains.kotlin.com.intellij.psi", + "org.jetbrains.kotlin.com.intellij.psi.augment", + "org.jetbrains.kotlin.com.intellij.psi.codeStyle", + "org.jetbrains.kotlin.com.intellij.psi.compiled", + "org.jetbrains.kotlin.com.intellij.psi.controlFlow", + "org.jetbrains.kotlin.com.intellij.psi.css", + "org.jetbrains.kotlin.com.intellij.psi.filters", + "org.jetbrains.kotlin.com.intellij.psi.filters.classes", + "org.jetbrains.kotlin.com.intellij.psi.filters.element", + "org.jetbrains.kotlin.com.intellij.psi.filters.position", + "org.jetbrains.kotlin.com.intellij.psi.impl", + "org.jetbrains.kotlin.com.intellij.psi.impl.cache", + "org.jetbrains.kotlin.com.intellij.psi.impl.compiled", + "org.jetbrains.kotlin.com.intellij.psi.impl.file", + "org.jetbrains.kotlin.com.intellij.psi.impl.file.impl", + "org.jetbrains.kotlin.com.intellij.psi.impl.java.stubs", + "org.jetbrains.kotlin.com.intellij.psi.impl.java.stubs.impl", + "org.jetbrains.kotlin.com.intellij.psi.impl.java.stubs.index", + "org.jetbrains.kotlin.com.intellij.psi.impl.light", + "org.jetbrains.kotlin.com.intellij.psi.impl.meta", + "org.jetbrains.kotlin.com.intellij.psi.impl.search", + "org.jetbrains.kotlin.com.intellij.psi.impl.smartPointers", + "org.jetbrains.kotlin.com.intellij.psi.impl.source", + "org.jetbrains.kotlin.com.intellij.psi.impl.source.codeStyle", + "org.jetbrains.kotlin.com.intellij.psi.impl.source.javadoc", + "org.jetbrains.kotlin.com.intellij.psi.impl.source.resolve", + "org.jetbrains.kotlin.com.intellij.psi.impl.source.resolve.graphInference", + "org.jetbrains.kotlin.com.intellij.psi.impl.source.resolve.graphInference.constraints", + "org.jetbrains.kotlin.com.intellij.psi.impl.source.resolve.reference", + "org.jetbrains.kotlin.com.intellij.psi.impl.source.resolve.reference.impl", + "org.jetbrains.kotlin.com.intellij.psi.impl.source.resolve.reference.impl.manipulators", + "org.jetbrains.kotlin.com.intellij.psi.impl.source.resolve.reference.impl.providers", + "org.jetbrains.kotlin.com.intellij.psi.impl.source.tree", + "org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.injected", + "org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.java", + "org.jetbrains.kotlin.com.intellij.psi.infos", + "org.jetbrains.kotlin.com.intellij.psi.javadoc", + "org.jetbrains.kotlin.com.intellij.psi.meta", + "org.jetbrains.kotlin.com.intellij.psi.presentation.java", + "org.jetbrains.kotlin.com.intellij.psi.scope", + "org.jetbrains.kotlin.com.intellij.psi.scope.conflictResolvers", + "org.jetbrains.kotlin.com.intellij.psi.scope.processor", + "org.jetbrains.kotlin.com.intellij.psi.scope.util", + "org.jetbrains.kotlin.com.intellij.psi.search", + "org.jetbrains.kotlin.com.intellij.psi.search.impl", + "org.jetbrains.kotlin.com.intellij.psi.search.searches", + "org.jetbrains.kotlin.com.intellij.psi.stub", + "org.jetbrains.kotlin.com.intellij.psi.stubs", + "org.jetbrains.kotlin.com.intellij.psi.targets", + "org.jetbrains.kotlin.com.intellij.psi.templateLanguages", + "org.jetbrains.kotlin.com.intellij.psi.text", + "org.jetbrains.kotlin.com.intellij.psi.tree", + "org.jetbrains.kotlin.com.intellij.psi.tree.java", + "org.jetbrains.kotlin.com.intellij.psi.util", + "org.jetbrains.kotlin.com.intellij.reference", + "org.jetbrains.kotlin.com.intellij.serialization", + "org.jetbrains.kotlin.com.intellij.serviceContainer", + "org.jetbrains.kotlin.com.intellij.testFramework", + "org.jetbrains.kotlin.com.intellij.ui", + "org.jetbrains.kotlin.com.intellij.ui.icons", + "org.jetbrains.kotlin.com.intellij.util", + "org.jetbrains.kotlin.com.intellij.util.cls", + "org.jetbrains.kotlin.com.intellij.util.codeInsight", + "org.jetbrains.kotlin.com.intellij.util.concurrency", + "org.jetbrains.kotlin.com.intellij.util.containers", + "org.jetbrains.kotlin.com.intellij.util.containers.hash", + "org.jetbrains.kotlin.com.intellij.util.diff", + "org.jetbrains.kotlin.com.intellij.util.execution", + "org.jetbrains.kotlin.com.intellij.util.graph", + "org.jetbrains.kotlin.com.intellij.util.graph.impl", + "org.jetbrains.kotlin.com.intellij.util.indexing", + "org.jetbrains.kotlin.com.intellij.util.indexing.impl", + "org.jetbrains.kotlin.com.intellij.util.io", + "org.jetbrains.kotlin.com.intellij.util.io.keyStorage", + "org.jetbrains.kotlin.com.intellij.util.io.pagecache", + "org.jetbrains.kotlin.com.intellij.util.io.pagecache.impl", + "org.jetbrains.kotlin.com.intellij.util.io.stats", + "org.jetbrains.kotlin.com.intellij.util.io.storage", + "org.jetbrains.kotlin.com.intellij.util.keyFMap", + "org.jetbrains.kotlin.com.intellij.util.lang", + "org.jetbrains.kotlin.com.intellij.util.messages", + "org.jetbrains.kotlin.com.intellij.util.messages.impl", + "org.jetbrains.kotlin.com.intellij.util.pico", + "org.jetbrains.kotlin.com.intellij.util.ref", + "org.jetbrains.kotlin.com.intellij.util.system", + "org.jetbrains.kotlin.com.intellij.util.text", + "org.jetbrains.kotlin.com.intellij.util.ui", + "org.jetbrains.kotlin.com.intellij.util.xml.dom", + "org.jetbrains.kotlin.com.intellij.util.xmlb", + "org.jetbrains.kotlin.com.intellij.util.xmlb.annotations", + "org.jetbrains.kotlin.compiler.plugin", + "org.jetbrains.kotlin.compilerRunner", + "org.jetbrains.kotlin.config", + "org.jetbrains.kotlin.config.phaser", + "org.jetbrains.kotlin.constant", + "org.jetbrains.kotlin.container", + "org.jetbrains.kotlin.context", + "org.jetbrains.kotlin.contracts", + "org.jetbrains.kotlin.contracts.description", + "org.jetbrains.kotlin.contracts.description.expressions", + "org.jetbrains.kotlin.contracts.interpretation", + "org.jetbrains.kotlin.contracts.model", + "org.jetbrains.kotlin.contracts.model.functors", + "org.jetbrains.kotlin.contracts.model.structure", + "org.jetbrains.kotlin.contracts.model.visitors", + "org.jetbrains.kotlin.contracts.parsing", + "org.jetbrains.kotlin.contracts.parsing.effects", + "org.jetbrains.kotlin.coroutines", + "org.jetbrains.kotlin.descriptors", + "org.jetbrains.kotlin.descriptors.annotations", + "org.jetbrains.kotlin.descriptors.deserialization", + "org.jetbrains.kotlin.descriptors.impl", + "org.jetbrains.kotlin.descriptors.java", + "org.jetbrains.kotlin.descriptors.konan", + "org.jetbrains.kotlin.descriptors.runtime.components", + "org.jetbrains.kotlin.descriptors.runtime.structure", + "org.jetbrains.kotlin.descriptors.synthetic", + "org.jetbrains.kotlin.diagnostics", + "org.jetbrains.kotlin.diagnostics.impl", + "org.jetbrains.kotlin.diagnostics.rendering", + "org.jetbrains.kotlin.extensions", + "org.jetbrains.kotlin.extensions.internal", + "org.jetbrains.kotlin.fileClasses", + "org.jetbrains.kotlin.fir", + "org.jetbrains.kotlin.fir.analysis", + "org.jetbrains.kotlin.fir.analysis.cfa", + "org.jetbrains.kotlin.fir.analysis.cfa.util", + "org.jetbrains.kotlin.fir.analysis.checkers", + "org.jetbrains.kotlin.fir.analysis.checkers.cfa", + "org.jetbrains.kotlin.fir.analysis.checkers.config", + "org.jetbrains.kotlin.fir.analysis.checkers.context", + "org.jetbrains.kotlin.fir.analysis.checkers.declaration", + "org.jetbrains.kotlin.fir.analysis.checkers.experimental", + "org.jetbrains.kotlin.fir.analysis.checkers.expression", + "org.jetbrains.kotlin.fir.analysis.checkers.extra", + "org.jetbrains.kotlin.fir.analysis.checkers.syntax", + "org.jetbrains.kotlin.fir.analysis.checkers.type", + "org.jetbrains.kotlin.fir.analysis.collectors", + "org.jetbrains.kotlin.fir.analysis.collectors.components", + "org.jetbrains.kotlin.fir.analysis.diagnostics", + "org.jetbrains.kotlin.fir.analysis.diagnostics.js", + "org.jetbrains.kotlin.fir.analysis.diagnostics.jvm", + "org.jetbrains.kotlin.fir.analysis.diagnostics.native", + "org.jetbrains.kotlin.fir.analysis.diagnostics.wasm", + "org.jetbrains.kotlin.fir.analysis.diagnostics.web.common", + "org.jetbrains.kotlin.fir.analysis.extensions", + "org.jetbrains.kotlin.fir.analysis.js.checkers", + "org.jetbrains.kotlin.fir.analysis.js.checkers.declaration", + "org.jetbrains.kotlin.fir.analysis.js.checkers.expression", + "org.jetbrains.kotlin.fir.analysis.jvm", + "org.jetbrains.kotlin.fir.analysis.jvm.checkers", + "org.jetbrains.kotlin.fir.analysis.jvm.checkers.declaration", + "org.jetbrains.kotlin.fir.analysis.jvm.checkers.expression", + "org.jetbrains.kotlin.fir.analysis.jvm.checkers.type", + "org.jetbrains.kotlin.fir.analysis.native.checkers", + "org.jetbrains.kotlin.fir.analysis.wasm.checkers", + "org.jetbrains.kotlin.fir.analysis.wasm.checkers.declaration", + "org.jetbrains.kotlin.fir.analysis.wasm.checkers.expression", + "org.jetbrains.kotlin.fir.analysis.web.common.checkers", + "org.jetbrains.kotlin.fir.analysis.web.common.checkers.declaration", + "org.jetbrains.kotlin.fir.analysis.web.common.checkers.expression", + "org.jetbrains.kotlin.fir.backend", + "org.jetbrains.kotlin.fir.backend.generators", + "org.jetbrains.kotlin.fir.backend.jvm", + "org.jetbrains.kotlin.fir.backend.native", + "org.jetbrains.kotlin.fir.backend.native.interop", + "org.jetbrains.kotlin.fir.backend.utils", + "org.jetbrains.kotlin.fir.builder", + "org.jetbrains.kotlin.fir.caches", + "org.jetbrains.kotlin.fir.checkers", + "org.jetbrains.kotlin.fir.contracts", + "org.jetbrains.kotlin.fir.contracts.builder", + "org.jetbrains.kotlin.fir.contracts.description", + "org.jetbrains.kotlin.fir.contracts.impl", + "org.jetbrains.kotlin.fir.declarations", + "org.jetbrains.kotlin.fir.declarations.builder", + "org.jetbrains.kotlin.fir.declarations.comparators", + "org.jetbrains.kotlin.fir.declarations.impl", + "org.jetbrains.kotlin.fir.declarations.synthetic", + "org.jetbrains.kotlin.fir.declarations.utils", + "org.jetbrains.kotlin.fir.descriptors", + "org.jetbrains.kotlin.fir.deserialization", + "org.jetbrains.kotlin.fir.diagnostics", + "org.jetbrains.kotlin.fir.expressions", + "org.jetbrains.kotlin.fir.expressions.builder", + "org.jetbrains.kotlin.fir.expressions.impl", + "org.jetbrains.kotlin.fir.extensions", + "org.jetbrains.kotlin.fir.extensions.predicate", + "org.jetbrains.kotlin.fir.extensions.utils", + "org.jetbrains.kotlin.fir.impl", + "org.jetbrains.kotlin.fir.java", + "org.jetbrains.kotlin.fir.java.declarations", + "org.jetbrains.kotlin.fir.java.deserialization", + "org.jetbrains.kotlin.fir.java.enhancement", + "org.jetbrains.kotlin.fir.java.scopes", + "org.jetbrains.kotlin.fir.java.symbols", + "org.jetbrains.kotlin.fir.lazy", + "org.jetbrains.kotlin.fir.lightTree", + "org.jetbrains.kotlin.fir.lightTree.converter", + "org.jetbrains.kotlin.fir.lightTree.fir", + "org.jetbrains.kotlin.fir.lightTree.fir.modifier", + "org.jetbrains.kotlin.fir.modules", + "org.jetbrains.kotlin.fir.pipeline", + "org.jetbrains.kotlin.fir.plugin", + "org.jetbrains.kotlin.fir.references", + "org.jetbrains.kotlin.fir.references.builder", + "org.jetbrains.kotlin.fir.references.impl", + "org.jetbrains.kotlin.fir.renderer", + "org.jetbrains.kotlin.fir.resolve", + "org.jetbrains.kotlin.fir.resolve.calls", + "org.jetbrains.kotlin.fir.resolve.calls.candidate", + "org.jetbrains.kotlin.fir.resolve.calls.jvm", + "org.jetbrains.kotlin.fir.resolve.calls.overloads", + "org.jetbrains.kotlin.fir.resolve.calls.stages", + "org.jetbrains.kotlin.fir.resolve.calls.tower", + "org.jetbrains.kotlin.fir.resolve.dfa", + "org.jetbrains.kotlin.fir.resolve.dfa.cfg", + "org.jetbrains.kotlin.fir.resolve.diagnostics", + "org.jetbrains.kotlin.fir.resolve.inference", + "org.jetbrains.kotlin.fir.resolve.inference.model", + "org.jetbrains.kotlin.fir.resolve.providers", + "org.jetbrains.kotlin.fir.resolve.providers.impl", + "org.jetbrains.kotlin.fir.resolve.scopes", + "org.jetbrains.kotlin.fir.resolve.substitution", + "org.jetbrains.kotlin.fir.resolve.transformers", + "org.jetbrains.kotlin.fir.resolve.transformers.body.resolve", + "org.jetbrains.kotlin.fir.resolve.transformers.contracts", + "org.jetbrains.kotlin.fir.resolve.transformers.mpp", + "org.jetbrains.kotlin.fir.resolve.transformers.plugin", + "org.jetbrains.kotlin.fir.scopes", + "org.jetbrains.kotlin.fir.scopes.impl", + "org.jetbrains.kotlin.fir.scopes.jvm", + "org.jetbrains.kotlin.fir.serialization", + "org.jetbrains.kotlin.fir.serialization.constant", + "org.jetbrains.kotlin.fir.session", + "org.jetbrains.kotlin.fir.session.environment", + "org.jetbrains.kotlin.fir.symbols", + "org.jetbrains.kotlin.fir.symbols.impl", + "org.jetbrains.kotlin.fir.types", + "org.jetbrains.kotlin.fir.types.builder", + "org.jetbrains.kotlin.fir.types.impl", + "org.jetbrains.kotlin.fir.types.jvm", + "org.jetbrains.kotlin.fir.util", + "org.jetbrains.kotlin.fir.utils.exceptions", + "org.jetbrains.kotlin.fir.visitors", + "org.jetbrains.kotlin.frontend.di", + "org.jetbrains.kotlin.frontend.java.di", + "org.jetbrains.kotlin.frontend.js.di", + "org.jetbrains.kotlin.idea", + "org.jetbrains.kotlin.idea.references", + "org.jetbrains.kotlin.incremental", + "org.jetbrains.kotlin.incremental.classpathDiff", + "org.jetbrains.kotlin.incremental.components", + "org.jetbrains.kotlin.incremental.dirtyFiles", + "org.jetbrains.kotlin.incremental.js", + "org.jetbrains.kotlin.incremental.multiproject", + "org.jetbrains.kotlin.incremental.parsing", + "org.jetbrains.kotlin.incremental.snapshots", + "org.jetbrains.kotlin.incremental.storage", + "org.jetbrains.kotlin.incremental.util", + "org.jetbrains.kotlin.inline", + "org.jetbrains.kotlin.ir", + "org.jetbrains.kotlin.ir.backend.js", + "org.jetbrains.kotlin.ir.backend.js.checkers", + "org.jetbrains.kotlin.ir.backend.js.checkers.declarations", + "org.jetbrains.kotlin.ir.backend.js.checkers.expressions", + "org.jetbrains.kotlin.ir.backend.js.dce", + "org.jetbrains.kotlin.ir.backend.js.export", + "org.jetbrains.kotlin.ir.backend.js.ic", + "org.jetbrains.kotlin.ir.backend.js.ir", + "org.jetbrains.kotlin.ir.backend.js.lower", + "org.jetbrains.kotlin.ir.backend.js.lower.calls", + "org.jetbrains.kotlin.ir.backend.js.lower.cleanup", + "org.jetbrains.kotlin.ir.backend.js.lower.coroutines", + "org.jetbrains.kotlin.ir.backend.js.lower.inline", + "org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir", + "org.jetbrains.kotlin.ir.backend.js.transformers.irToJs", + "org.jetbrains.kotlin.ir.backend.js.utils", + "org.jetbrains.kotlin.ir.backend.js.utils.serialization", + "org.jetbrains.kotlin.ir.backend.jvm", + "org.jetbrains.kotlin.ir.backend.jvm.serialization", + "org.jetbrains.kotlin.ir.builders", + "org.jetbrains.kotlin.ir.builders.declarations", + "org.jetbrains.kotlin.ir.declarations", + "org.jetbrains.kotlin.ir.declarations.impl", + "org.jetbrains.kotlin.ir.declarations.lazy", + "org.jetbrains.kotlin.ir.descriptors", + "org.jetbrains.kotlin.ir.expressions", + "org.jetbrains.kotlin.ir.expressions.impl", + "org.jetbrains.kotlin.ir.inline", + "org.jetbrains.kotlin.ir.interpreter", + "org.jetbrains.kotlin.ir.interpreter.builtins", + "org.jetbrains.kotlin.ir.interpreter.checker", + "org.jetbrains.kotlin.ir.interpreter.exceptions", + "org.jetbrains.kotlin.ir.interpreter.intrinsics", + "org.jetbrains.kotlin.ir.interpreter.preprocessor", + "org.jetbrains.kotlin.ir.interpreter.proxy", + "org.jetbrains.kotlin.ir.interpreter.proxy.reflection", + "org.jetbrains.kotlin.ir.interpreter.stack", + "org.jetbrains.kotlin.ir.interpreter.state", + "org.jetbrains.kotlin.ir.interpreter.state.reflection", + "org.jetbrains.kotlin.ir.interpreter.transformer", + "org.jetbrains.kotlin.ir.linkage", + "org.jetbrains.kotlin.ir.linkage.partial", + "org.jetbrains.kotlin.ir.objcinterop", + "org.jetbrains.kotlin.ir.overrides", + "org.jetbrains.kotlin.ir.symbols", + "org.jetbrains.kotlin.ir.symbols.impl", + "org.jetbrains.kotlin.ir.types", + "org.jetbrains.kotlin.ir.types.impl", + "org.jetbrains.kotlin.ir.util", + "org.jetbrains.kotlin.ir.visitors", + "org.jetbrains.kotlin.it.unimi.dsi.fastutil", + "org.jetbrains.kotlin.it.unimi.dsi.fastutil.booleans", + "org.jetbrains.kotlin.it.unimi.dsi.fastutil.bytes", + "org.jetbrains.kotlin.it.unimi.dsi.fastutil.chars", + "org.jetbrains.kotlin.it.unimi.dsi.fastutil.doubles", + "org.jetbrains.kotlin.it.unimi.dsi.fastutil.floats", + "org.jetbrains.kotlin.it.unimi.dsi.fastutil.ints", + "org.jetbrains.kotlin.it.unimi.dsi.fastutil.longs", + "org.jetbrains.kotlin.it.unimi.dsi.fastutil.objects", + "org.jetbrains.kotlin.it.unimi.dsi.fastutil.shorts", + "org.jetbrains.kotlin.javac", + "org.jetbrains.kotlin.javac.components", + "org.jetbrains.kotlin.javac.resolve", + "org.jetbrains.kotlin.javac.wrappers.symbols", + "org.jetbrains.kotlin.javac.wrappers.trees", + "org.jetbrains.kotlin.javax.inject", + "org.jetbrains.kotlin.js", + "org.jetbrains.kotlin.js.analyze", + "org.jetbrains.kotlin.js.analyzer", + "org.jetbrains.kotlin.js.backend", + "org.jetbrains.kotlin.js.backend.ast", + "org.jetbrains.kotlin.js.backend.ast.metadata", + "org.jetbrains.kotlin.js.common", + "org.jetbrains.kotlin.js.config", + "org.jetbrains.kotlin.js.descriptorUtils", + "org.jetbrains.kotlin.js.inline.clean", + "org.jetbrains.kotlin.js.inline.util", + "org.jetbrains.kotlin.js.inline.util.collectors", + "org.jetbrains.kotlin.js.naming", + "org.jetbrains.kotlin.js.parser", + "org.jetbrains.kotlin.js.parser.sourcemaps", + "org.jetbrains.kotlin.js.patterns", + "org.jetbrains.kotlin.js.resolve", + "org.jetbrains.kotlin.js.resolve.diagnostics", + "org.jetbrains.kotlin.js.sourceMap", + "org.jetbrains.kotlin.js.translate.context", + "org.jetbrains.kotlin.js.translate.utils", + "org.jetbrains.kotlin.js.util", + "org.jetbrains.kotlin.kapt3.diagnostic", + "org.jetbrains.kotlin.kdoc.lexer", + "org.jetbrains.kotlin.kdoc.parser", + "org.jetbrains.kotlin.kdoc.psi.api", + "org.jetbrains.kotlin.kdoc.psi.impl", + "org.jetbrains.kotlin.konan", + "org.jetbrains.kotlin.konan.exec", + "org.jetbrains.kotlin.konan.file", + "org.jetbrains.kotlin.konan.library", + "org.jetbrains.kotlin.konan.library.impl", + "org.jetbrains.kotlin.konan.properties", + "org.jetbrains.kotlin.konan.target", + "org.jetbrains.kotlin.konan.util", + "org.jetbrains.kotlin.kotlinx.collections.immutable", + "org.jetbrains.kotlin.kotlinx.collections.immutable.implementations.immutableList", + "org.jetbrains.kotlin.kotlinx.collections.immutable.implementations.immutableMap", + "org.jetbrains.kotlin.kotlinx.collections.immutable.implementations.immutableSet", + "org.jetbrains.kotlin.kotlinx.collections.immutable.implementations.persistentOrderedMap", + "org.jetbrains.kotlin.kotlinx.collections.immutable.implementations.persistentOrderedSet", + "org.jetbrains.kotlin.kotlinx.collections.immutable.internal", + "org.jetbrains.kotlin.lexer", + "org.jetbrains.kotlin.library", + "org.jetbrains.kotlin.library.abi", + "org.jetbrains.kotlin.library.abi.impl", + "org.jetbrains.kotlin.library.encodings", + "org.jetbrains.kotlin.library.impl", + "org.jetbrains.kotlin.library.metadata", + "org.jetbrains.kotlin.library.metadata.impl", + "org.jetbrains.kotlin.library.metadata.resolver", + "org.jetbrains.kotlin.library.metadata.resolver.impl", + "org.jetbrains.kotlin.load.java", + "org.jetbrains.kotlin.load.java.components", + "org.jetbrains.kotlin.load.java.descriptors", + "org.jetbrains.kotlin.load.java.lazy", + "org.jetbrains.kotlin.load.java.lazy.descriptors", + "org.jetbrains.kotlin.load.java.lazy.types", + "org.jetbrains.kotlin.load.java.sam", + "org.jetbrains.kotlin.load.java.sources", + "org.jetbrains.kotlin.load.java.structure", + "org.jetbrains.kotlin.load.java.structure.impl", + "org.jetbrains.kotlin.load.java.structure.impl.classFiles", + "org.jetbrains.kotlin.load.java.structure.impl.source", + "org.jetbrains.kotlin.load.java.typeEnhancement", + "org.jetbrains.kotlin.load.kotlin", + "org.jetbrains.kotlin.load.kotlin.header", + "org.jetbrains.kotlin.load.kotlin.incremental", + "org.jetbrains.kotlin.load.kotlin.incremental.components", + "org.jetbrains.kotlin.metadata", + "org.jetbrains.kotlin.metadata.builtins", + "org.jetbrains.kotlin.metadata.deserialization", + "org.jetbrains.kotlin.metadata.java", + "org.jetbrains.kotlin.metadata.js", + "org.jetbrains.kotlin.metadata.jvm", + "org.jetbrains.kotlin.metadata.jvm.deserialization", + "org.jetbrains.kotlin.metadata.jvm.serialization", + "org.jetbrains.kotlin.metadata.serialization", + "org.jetbrains.kotlin.modules", + "org.jetbrains.kotlin.mpp", + "org.jetbrains.kotlin.name", + "org.jetbrains.kotlin.native.interop", + "org.jetbrains.kotlin.net.jpountz.lz4", + "org.jetbrains.kotlin.net.jpountz.util", + "org.jetbrains.kotlin.net.jpountz.xxhash", + "org.jetbrains.kotlin.one.util.streamex", + "org.jetbrains.kotlin.org.apache.log4j", + "org.jetbrains.kotlin.org.codehaus.stax2", + "org.jetbrains.kotlin.org.codehaus.stax2.ri", + "org.jetbrains.kotlin.org.codehaus.stax2.ri.typed", + "org.jetbrains.kotlin.org.codehaus.stax2.typed", + "org.jetbrains.kotlin.org.fusesource.jansi", + "org.jetbrains.kotlin.org.fusesource.jansi.internal", + "org.jetbrains.kotlin.org.fusesource.jansi.io", + "org.jetbrains.kotlin.org.jdom", + "org.jetbrains.kotlin.org.jdom.output", + "org.jetbrains.kotlin.org.jline.builtins", + "org.jetbrains.kotlin.org.jline.console", + "org.jetbrains.kotlin.org.jline.keymap", + "org.jetbrains.kotlin.org.jline.reader", + "org.jetbrains.kotlin.org.jline.reader.impl", + "org.jetbrains.kotlin.org.jline.reader.impl.history", + "org.jetbrains.kotlin.org.jline.terminal", + "org.jetbrains.kotlin.org.jline.terminal.impl", + "org.jetbrains.kotlin.org.jline.terminal.spi", + "org.jetbrains.kotlin.org.jline.utils", + "org.jetbrains.kotlin.org.picocontainer", + "org.jetbrains.kotlin.parsing", + "org.jetbrains.kotlin.platform", + "org.jetbrains.kotlin.platform.js", + "org.jetbrains.kotlin.platform.jvm", + "org.jetbrains.kotlin.platform.konan", + "org.jetbrains.kotlin.platform.wasm", + "org.jetbrains.kotlin.plugin.references", + "org.jetbrains.kotlin.progress", + "org.jetbrains.kotlin.protobuf", + "org.jetbrains.kotlin.psi", + "org.jetbrains.kotlin.psi.addRemoveModifier", + "org.jetbrains.kotlin.psi.codeFragmentUtil", + "org.jetbrains.kotlin.psi.debugText", + "org.jetbrains.kotlin.psi.findDocComment", + "org.jetbrains.kotlin.psi.psiUtil", + "org.jetbrains.kotlin.psi.stubs", + "org.jetbrains.kotlin.psi.stubs.elements", + "org.jetbrains.kotlin.psi.stubs.impl", + "org.jetbrains.kotlin.psi.synthetics", + "org.jetbrains.kotlin.psi.typeRefHelpers", + "org.jetbrains.kotlin.psi2ir", + "org.jetbrains.kotlin.psi2ir.descriptors", + "org.jetbrains.kotlin.psi2ir.generators", + "org.jetbrains.kotlin.psi2ir.generators.fragments", + "org.jetbrains.kotlin.psi2ir.intermediate", + "org.jetbrains.kotlin.psi2ir.preprocessing", + "org.jetbrains.kotlin.psi2ir.transformations", + "org.jetbrains.kotlin.renderer", + "org.jetbrains.kotlin.resolve", + "org.jetbrains.kotlin.resolve.annotations", + "org.jetbrains.kotlin.resolve.bindingContextUtil", + "org.jetbrains.kotlin.resolve.calls", + "org.jetbrains.kotlin.resolve.calls.callUtil", + "org.jetbrains.kotlin.resolve.calls.checkers", + "org.jetbrains.kotlin.resolve.calls.components", + "org.jetbrains.kotlin.resolve.calls.components.candidate", + "org.jetbrains.kotlin.resolve.calls.context", + "org.jetbrains.kotlin.resolve.calls.inference", + "org.jetbrains.kotlin.resolve.calls.inference.components", + "org.jetbrains.kotlin.resolve.calls.inference.constraintPosition", + "org.jetbrains.kotlin.resolve.calls.inference.model", + "org.jetbrains.kotlin.resolve.calls.model", + "org.jetbrains.kotlin.resolve.calls.mpp", + "org.jetbrains.kotlin.resolve.calls.results", + "org.jetbrains.kotlin.resolve.calls.smartcasts", + "org.jetbrains.kotlin.resolve.calls.tasks", + "org.jetbrains.kotlin.resolve.calls.tower", + "org.jetbrains.kotlin.resolve.calls.util", + "org.jetbrains.kotlin.resolve.checkers", + "org.jetbrains.kotlin.resolve.constants", + "org.jetbrains.kotlin.resolve.constants.evaluate", + "org.jetbrains.kotlin.resolve.deprecation", + "org.jetbrains.kotlin.resolve.descriptorUtil", + "org.jetbrains.kotlin.resolve.diagnostics", + "org.jetbrains.kotlin.resolve.extensions", + "org.jetbrains.kotlin.resolve.inline", + "org.jetbrains.kotlin.resolve.jvm", + "org.jetbrains.kotlin.resolve.jvm.annotations", + "org.jetbrains.kotlin.resolve.jvm.checkers", + "org.jetbrains.kotlin.resolve.jvm.diagnostics", + "org.jetbrains.kotlin.resolve.jvm.extensions", + "org.jetbrains.kotlin.resolve.jvm.jvmSignature", + "org.jetbrains.kotlin.resolve.jvm.kotlinSignature", + "org.jetbrains.kotlin.resolve.jvm.modules", + "org.jetbrains.kotlin.resolve.jvm.multiplatform", + "org.jetbrains.kotlin.resolve.jvm.platform", + "org.jetbrains.kotlin.resolve.konan.diagnostics", + "org.jetbrains.kotlin.resolve.konan.platform", + "org.jetbrains.kotlin.resolve.lazy", + "org.jetbrains.kotlin.resolve.lazy.data", + "org.jetbrains.kotlin.resolve.lazy.declarations", + "org.jetbrains.kotlin.resolve.lazy.descriptors", + "org.jetbrains.kotlin.resolve.multiplatform", + "org.jetbrains.kotlin.resolve.references", + "org.jetbrains.kotlin.resolve.repl", + "org.jetbrains.kotlin.resolve.sam", + "org.jetbrains.kotlin.resolve.scopes", + "org.jetbrains.kotlin.resolve.scopes.optimization", + "org.jetbrains.kotlin.resolve.scopes.receivers", + "org.jetbrains.kotlin.resolve.scopes.synthetic", + "org.jetbrains.kotlin.resolve.scopes.utils", + "org.jetbrains.kotlin.resolve.source", + "org.jetbrains.kotlin.resolve.typeBinding", + "org.jetbrains.kotlin.serialization", + "org.jetbrains.kotlin.serialization.builtins", + "org.jetbrains.kotlin.serialization.deserialization", + "org.jetbrains.kotlin.serialization.deserialization.builtins", + "org.jetbrains.kotlin.serialization.deserialization.descriptors", + "org.jetbrains.kotlin.serialization.js", + "org.jetbrains.kotlin.serialization.js.ast", + "org.jetbrains.kotlin.storage", + "org.jetbrains.kotlin.synthetic", + "org.jetbrains.kotlin.type", + "org.jetbrains.kotlin.types", + "org.jetbrains.kotlin.types.checker", + "org.jetbrains.kotlin.types.error", + "org.jetbrains.kotlin.types.expressions", + "org.jetbrains.kotlin.types.expressions.typeInfoFactory", + "org.jetbrains.kotlin.types.expressions.unqualifiedSuper", + "org.jetbrains.kotlin.types.extensions", + "org.jetbrains.kotlin.types.model", + "org.jetbrains.kotlin.types.typeUtil", + "org.jetbrains.kotlin.types.typesApproximation", + "org.jetbrains.kotlin.util", + "org.jetbrains.kotlin.util.capitalizeDecapitalize", + "org.jetbrains.kotlin.util.collectionUtils", + "org.jetbrains.kotlin.util.slicedMap", + "org.jetbrains.kotlin.util.vavr", + "org.jetbrains.kotlin.utils", + "org.jetbrains.kotlin.utils.addToStdlib", + "org.jetbrains.kotlin.utils.concurrent.block", + "org.jetbrains.kotlin.utils.exceptions", + "org.jetbrains.kotlin.utils.fileUtils", + "org.jetbrains.kotlin.utils.intellij", + "org.jetbrains.kotlin.utils.kapt", + "org.jetbrains.kotlin.utils.repl", + "org.jetbrains.kotlin.utils.strings", + "org.jetbrains.kotlin.wasm.analyze", + "org.jetbrains.kotlin.wasm.config", + "org.jetbrains.kotlin.wasm.ir", + "org.jetbrains.kotlin.wasm.ir.convertors", + "org.jetbrains.kotlin.wasm.ir.debug", + "org.jetbrains.kotlin.wasm.ir.source.location", + "org.jetbrains.kotlin.wasm.resolve", + "org.jetbrains.kotlin.wasm.resolve.diagnostics", + "org.jetbrains.kotlin.wasm.util", + "org.jetbrains.org.objectweb.asm", + "org.jetbrains.org.objectweb.asm.commons", + "org.jetbrains.org.objectweb.asm.signature", + "org.jetbrains.org.objectweb.asm.tree", + "org.jetbrains.org.objectweb.asm.tree.analysis", + "org.jetbrains.org.objectweb.asm.util" + ], + "org.jetbrains.kotlin:kotlin-compiler-runner": [ + "org.jetbrains.kotlin.compilerRunner" + ], + "org.jetbrains.kotlin:kotlin-daemon-client": [ + "org.jetbrains.kotlin.daemon.client", + "org.jetbrains.kotlin.daemon.common" + ], + "org.jetbrains.kotlin:kotlin-daemon-embeddable": [ + "org.jetbrains.kotlin.daemon", + "org.jetbrains.kotlin.daemon.common", + "org.jetbrains.kotlin.daemon.report" + ], "org.jetbrains.kotlin:kotlin-reflect": [ "kotlin.reflect.full", "kotlin.reflect.jvm", @@ -1379,6 +2363,48 @@ "kotlin.reflect.jvm.internal.impl.utils", "kotlin.reflect.jvm.internal.impl.utils.addToStdlib" ], + "org.jetbrains.kotlin:kotlin-script-runtime": [ + "kotlin.script.dependencies", + "kotlin.script.experimental.dependencies", + "kotlin.script.experimental.location", + "kotlin.script.extensions", + "kotlin.script.templates", + "kotlin.script.templates.standard" + ], + "org.jetbrains.kotlin:kotlin-scripting-common": [ + "kotlin.script.experimental.annotations", + "kotlin.script.experimental.api", + "kotlin.script.experimental.host", + "kotlin.script.experimental.impl", + "kotlin.script.experimental.util" + ], + "org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable": [ + "org.jetbrains.kotlin.scripting.compiler.plugin", + "org.jetbrains.kotlin.scripting.compiler.plugin.definitions", + "org.jetbrains.kotlin.scripting.compiler.plugin.dependencies", + "org.jetbrains.kotlin.scripting.compiler.plugin.extensions", + "org.jetbrains.kotlin.scripting.compiler.plugin.impl", + "org.jetbrains.kotlin.scripting.compiler.plugin.irLowerings", + "org.jetbrains.kotlin.scripting.compiler.plugin.repl", + "org.jetbrains.kotlin.scripting.compiler.plugin.repl.configuration", + "org.jetbrains.kotlin.scripting.compiler.plugin.repl.messages", + "org.jetbrains.kotlin.scripting.compiler.plugin.repl.reader", + "org.jetbrains.kotlin.scripting.compiler.plugin.repl.writer", + "org.jetbrains.kotlin.scripting.compiler.plugin.services" + ], + "org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable": [ + "org.jetbrains.kotlin.scripting", + "org.jetbrains.kotlin.scripting.configuration", + "org.jetbrains.kotlin.scripting.definitions", + "org.jetbrains.kotlin.scripting.extensions", + "org.jetbrains.kotlin.scripting.resolve" + ], + "org.jetbrains.kotlin:kotlin-scripting-jvm": [ + "kotlin.script.experimental.jvm", + "kotlin.script.experimental.jvm.compat", + "kotlin.script.experimental.jvm.impl", + "kotlin.script.experimental.jvm.util" + ], "org.jetbrains.kotlin:kotlin-stdlib": [ "kotlin", "kotlin.annotation", @@ -1388,6 +2414,8 @@ "kotlin.collections.unsigned", "kotlin.comparisons", "kotlin.concurrent", + "kotlin.concurrent.atomics", + "kotlin.concurrent.internal", "kotlin.contracts", "kotlin.coroutines", "kotlin.coroutines.cancellation", @@ -1425,6 +2453,23 @@ "kotlin.time.jdk8", "kotlin.uuid" ], + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm": [ + "_COROUTINE", + "kotlinx.coroutines", + "kotlinx.coroutines.channels", + "kotlinx.coroutines.debug", + "kotlinx.coroutines.debug.internal", + "kotlinx.coroutines.flow", + "kotlinx.coroutines.flow.internal", + "kotlinx.coroutines.future", + "kotlinx.coroutines.internal", + "kotlinx.coroutines.intrinsics", + "kotlinx.coroutines.scheduling", + "kotlinx.coroutines.selects", + "kotlinx.coroutines.stream", + "kotlinx.coroutines.sync", + "kotlinx.coroutines.time" + ], "org.jetbrains:annotations": [ "org.intellij.lang.annotations", "org.jetbrains.annotations" @@ -1564,14 +2609,40 @@ "org.eclipse.sisu:org.eclipse.sisu.plexus:jar:sources", "org.hamcrest:hamcrest-core", "org.hamcrest:hamcrest-core:jar:sources", + "org.jetbrains.intellij.deps:trove4j", + "org.jetbrains.intellij.deps:trove4j:jar:sources", + "org.jetbrains.kotlin:kotlin-build-tools-api", + "org.jetbrains.kotlin:kotlin-build-tools-api:jar:sources", + "org.jetbrains.kotlin:kotlin-build-tools-impl", + "org.jetbrains.kotlin:kotlin-build-tools-impl:jar:sources", + "org.jetbrains.kotlin:kotlin-compiler-embeddable", + "org.jetbrains.kotlin:kotlin-compiler-embeddable:jar:sources", + "org.jetbrains.kotlin:kotlin-compiler-runner", + "org.jetbrains.kotlin:kotlin-compiler-runner:jar:sources", + "org.jetbrains.kotlin:kotlin-daemon-client", + "org.jetbrains.kotlin:kotlin-daemon-client:jar:sources", + "org.jetbrains.kotlin:kotlin-daemon-embeddable", + "org.jetbrains.kotlin:kotlin-daemon-embeddable:jar:sources", "org.jetbrains.kotlin:kotlin-reflect", "org.jetbrains.kotlin:kotlin-reflect:jar:sources", + "org.jetbrains.kotlin:kotlin-script-runtime", + "org.jetbrains.kotlin:kotlin-script-runtime:jar:sources", + "org.jetbrains.kotlin:kotlin-scripting-common", + "org.jetbrains.kotlin:kotlin-scripting-common:jar:sources", + "org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable", + "org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:jar:sources", + "org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable", + "org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:jar:sources", + "org.jetbrains.kotlin:kotlin-scripting-jvm", + "org.jetbrains.kotlin:kotlin-scripting-jvm:jar:sources", "org.jetbrains.kotlin:kotlin-stdlib", "org.jetbrains.kotlin:kotlin-stdlib-jdk7", "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:sources", "org.jetbrains.kotlin:kotlin-stdlib-jdk8", "org.jetbrains.kotlin:kotlin-stdlib-jdk8:jar:sources", "org.jetbrains.kotlin:kotlin-stdlib:jar:sources", + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm", + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:jar:sources", "org.jetbrains:annotations", "org.jetbrains:annotations:jar:sources", "org.jspecify:jspecify", @@ -1699,14 +2770,40 @@ "org.eclipse.sisu:org.eclipse.sisu.plexus:jar:sources", "org.hamcrest:hamcrest-core", "org.hamcrest:hamcrest-core:jar:sources", + "org.jetbrains.intellij.deps:trove4j", + "org.jetbrains.intellij.deps:trove4j:jar:sources", + "org.jetbrains.kotlin:kotlin-build-tools-api", + "org.jetbrains.kotlin:kotlin-build-tools-api:jar:sources", + "org.jetbrains.kotlin:kotlin-build-tools-impl", + "org.jetbrains.kotlin:kotlin-build-tools-impl:jar:sources", + "org.jetbrains.kotlin:kotlin-compiler-embeddable", + "org.jetbrains.kotlin:kotlin-compiler-embeddable:jar:sources", + "org.jetbrains.kotlin:kotlin-compiler-runner", + "org.jetbrains.kotlin:kotlin-compiler-runner:jar:sources", + "org.jetbrains.kotlin:kotlin-daemon-client", + "org.jetbrains.kotlin:kotlin-daemon-client:jar:sources", + "org.jetbrains.kotlin:kotlin-daemon-embeddable", + "org.jetbrains.kotlin:kotlin-daemon-embeddable:jar:sources", "org.jetbrains.kotlin:kotlin-reflect", "org.jetbrains.kotlin:kotlin-reflect:jar:sources", + "org.jetbrains.kotlin:kotlin-script-runtime", + "org.jetbrains.kotlin:kotlin-script-runtime:jar:sources", + "org.jetbrains.kotlin:kotlin-scripting-common", + "org.jetbrains.kotlin:kotlin-scripting-common:jar:sources", + "org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable", + "org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:jar:sources", + "org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable", + "org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:jar:sources", + "org.jetbrains.kotlin:kotlin-scripting-jvm", + "org.jetbrains.kotlin:kotlin-scripting-jvm:jar:sources", "org.jetbrains.kotlin:kotlin-stdlib", "org.jetbrains.kotlin:kotlin-stdlib-jdk7", "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:sources", "org.jetbrains.kotlin:kotlin-stdlib-jdk8", "org.jetbrains.kotlin:kotlin-stdlib-jdk8:jar:sources", "org.jetbrains.kotlin:kotlin-stdlib:jar:sources", + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm", + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:jar:sources", "org.jetbrains:annotations", "org.jetbrains:annotations:jar:sources", "org.jspecify:jspecify", @@ -1834,14 +2931,40 @@ "org.eclipse.sisu:org.eclipse.sisu.plexus:jar:sources", "org.hamcrest:hamcrest-core", "org.hamcrest:hamcrest-core:jar:sources", + "org.jetbrains.intellij.deps:trove4j", + "org.jetbrains.intellij.deps:trove4j:jar:sources", + "org.jetbrains.kotlin:kotlin-build-tools-api", + "org.jetbrains.kotlin:kotlin-build-tools-api:jar:sources", + "org.jetbrains.kotlin:kotlin-build-tools-impl", + "org.jetbrains.kotlin:kotlin-build-tools-impl:jar:sources", + "org.jetbrains.kotlin:kotlin-compiler-embeddable", + "org.jetbrains.kotlin:kotlin-compiler-embeddable:jar:sources", + "org.jetbrains.kotlin:kotlin-compiler-runner", + "org.jetbrains.kotlin:kotlin-compiler-runner:jar:sources", + "org.jetbrains.kotlin:kotlin-daemon-client", + "org.jetbrains.kotlin:kotlin-daemon-client:jar:sources", + "org.jetbrains.kotlin:kotlin-daemon-embeddable", + "org.jetbrains.kotlin:kotlin-daemon-embeddable:jar:sources", "org.jetbrains.kotlin:kotlin-reflect", "org.jetbrains.kotlin:kotlin-reflect:jar:sources", + "org.jetbrains.kotlin:kotlin-script-runtime", + "org.jetbrains.kotlin:kotlin-script-runtime:jar:sources", + "org.jetbrains.kotlin:kotlin-scripting-common", + "org.jetbrains.kotlin:kotlin-scripting-common:jar:sources", + "org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable", + "org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:jar:sources", + "org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable", + "org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:jar:sources", + "org.jetbrains.kotlin:kotlin-scripting-jvm", + "org.jetbrains.kotlin:kotlin-scripting-jvm:jar:sources", "org.jetbrains.kotlin:kotlin-stdlib", "org.jetbrains.kotlin:kotlin-stdlib-jdk7", "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:sources", "org.jetbrains.kotlin:kotlin-stdlib-jdk8", "org.jetbrains.kotlin:kotlin-stdlib-jdk8:jar:sources", "org.jetbrains.kotlin:kotlin-stdlib:jar:sources", + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm", + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:jar:sources", "org.jetbrains:annotations", "org.jetbrains:annotations:jar:sources", "org.jspecify:jspecify", @@ -1902,9 +3025,6 @@ ] }, "com.google.dagger:dagger-spi": { - "dagger.spi.internal.shaded.androidx.room.jarjarred.kotlin.metadata.internal.extensions.MetadataExtensions": [ - "dagger.spi.internal.shaded.androidx.room.jarjarred.kotlin.metadata.jvm.internal.JvmMetadataExtensions" - ], "dagger.spi.internal.shaded.kotlin.metadata.internal.extensions.MetadataExtensions": [ "dagger.spi.internal.shaded.kotlin.metadata.jvm.internal.JvmMetadataExtensions" ] @@ -1930,6 +3050,60 @@ "org.eclipse.sisu.space.SisuIndexAPT6" ] }, + "org.jetbrains.kotlin:kotlin-build-tools-impl": { + "org.jetbrains.kotlin.buildtools.api.CompilationService": [ + "org.jetbrains.kotlin.buildtools.internal.CompilationServiceProxy" + ] + }, + "org.jetbrains.kotlin:kotlin-build-tools-impl:jar:sources": { + "org.jetbrains.kotlin.buildtools.api.CompilationService": [ + "org.jetbrains.kotlin.buildtools.internal.CompilationServiceProxy" + ] + }, + "org.jetbrains.kotlin:kotlin-compiler-embeddable": { + "org.jetbrains.kotlin.builtins.BuiltInsLoader": [ + "org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInsLoaderImpl" + ], + "org.jetbrains.kotlin.resolve.ExternalOverridabilityCondition": [ + "org.jetbrains.kotlin.load.java.ErasedOverridabilityCondition", + "org.jetbrains.kotlin.load.java.FieldOverridabilityCondition", + "org.jetbrains.kotlin.load.java.JavaIncompatibilityRulesOverridabilityCondition" + ], + "org.jetbrains.kotlin.resolve.jvm.jvmSignature.KotlinToJvmSignatureMapper": [ + "org.jetbrains.kotlin.codegen.signature.KotlinToJvmSignatureMapperImpl" + ], + "org.jetbrains.kotlin.util.ModuleVisibilityHelper": [ + "org.jetbrains.kotlin.cli.common.ModuleVisibilityHelperImpl" + ], + "org/jline/terminal/provider/exec": [ + "class=org.jline.terminal.impl.exec.ExecTerminalProvider" + ], + "org/jline/terminal/provider/jansi": [ + "class=org.jline.terminal.impl.jansi.JansiTerminalProvider" + ], + "org/jline/terminal/provider/jna": [ + "class=org.jline.terminal.impl.jna.JnaTerminalProvider" + ], + "org/jline/terminal/provider/jni": [ + "class=org.jline.terminal.impl.jni.JniTerminalProvider" + ] + }, + "org.jetbrains.kotlin:kotlin-compiler-embeddable:jar:sources": { + "org.jetbrains.kotlin.builtins.BuiltInsLoader": [ + "org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInsLoaderImpl" + ], + "org.jetbrains.kotlin.resolve.ExternalOverridabilityCondition": [ + "org.jetbrains.kotlin.load.java.ErasedOverridabilityCondition", + "org.jetbrains.kotlin.load.java.FieldOverridabilityCondition", + "org.jetbrains.kotlin.load.java.JavaIncompatibilityRulesOverridabilityCondition" + ], + "org.jetbrains.kotlin.resolve.jvm.jvmSignature.KotlinToJvmSignatureMapper": [ + "org.jetbrains.kotlin.codegen.signature.KotlinToJvmSignatureMapperImpl" + ], + "org.jetbrains.kotlin.util.ModuleVisibilityHelper": [ + "org.jetbrains.kotlin.cli.common.ModuleVisibilityHelperImpl" + ] + }, "org.jetbrains.kotlin:kotlin-reflect": { "kotlin.reflect.jvm.internal.impl.builtins.BuiltInsLoader": [ "kotlin.reflect.jvm.internal.impl.serialization.deserialization.builtins.BuiltInsLoaderImpl" @@ -1939,6 +3113,28 @@ "kotlin.reflect.jvm.internal.impl.load.java.FieldOverridabilityCondition", "kotlin.reflect.jvm.internal.impl.load.java.JavaIncompatibilityRulesOverridabilityCondition" ] + }, + "org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable": { + "org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor": [ + "org.jetbrains.kotlin.scripting.compiler.plugin.ScriptingCommandLineProcessor" + ], + "org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar": [ + "org.jetbrains.kotlin.scripting.compiler.plugin.ScriptingK2CompilerPluginRegistrar" + ], + "org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar": [ + "org.jetbrains.kotlin.scripting.compiler.plugin.ScriptingCompilerConfigurationComponentRegistrar" + ] + }, + "org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:jar:sources": { + "org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor": [ + "org.jetbrains.kotlin.scripting.compiler.plugin.ScriptingCommandLineProcessor" + ], + "org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar": [ + "org.jetbrains.kotlin.scripting.compiler.plugin.ScriptingK2CompilerPluginRegistrar" + ], + "org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar": [ + "org.jetbrains.kotlin.scripting.compiler.plugin.ScriptingCompilerConfigurationComponentRegistrar" + ] } }, "skipped": [ diff --git a/src/main/kotlin/io/bazel/kotlin/builder/cmd/BUILD.bazel b/src/main/kotlin/io/bazel/kotlin/builder/cmd/BUILD.bazel index 98511d7b3..23878e2d0 100644 --- a/src/main/kotlin/io/bazel/kotlin/builder/cmd/BUILD.bazel +++ b/src/main/kotlin/io/bazel/kotlin/builder/cmd/BUILD.bazel @@ -27,6 +27,8 @@ kt_bootstrap_binary( "//src/main/kotlin/io/bazel/kotlin/compiler:compiler.jar", "@com_github_jetbrains_kotlin//:home", "@kotlin_build_tools_impl//jar", + "@kotlin_compiler_embeddable//jar", + "@kotlin_rules_maven//:org_jetbrains_kotlin_kotlin_daemon_client", "@kotlinx_serialization_core_jvm//jar", "@kotlinx_serialization_json//jar", "@kotlinx_serialization_json_jvm//jar", @@ -36,10 +38,12 @@ kt_bootstrap_binary( "-D@com_github_jetbrains_kotlinx...serialization-json=$(rlocationpath @kotlinx_serialization_json//jar)", "-D@com_github_jetbrains_kotlinx...serialization-json-jvm=$(rlocationpath @kotlinx_serialization_json_jvm//jar)", "-D@com_github_jetbrains_kotlin...build-tools-impl=$(rlocationpath @kotlin_build_tools_impl//jar)", + "-D@kotlin_compiler_embeddable...kotlin-embedded=$(rlocationpath @kotlin_compiler_embeddable//jar)", "-D@com_github_jetbrains_kotlin...jvm-abi-gen=$(rlocationpath //kotlin/compiler:jvm-abi-gen)", "-D@com_github_jetbrains_kotlin...kotlin-compiler=$(rlocationpath //kotlin/compiler:kotlin-compiler)", "-D@com_github_jetbrains_kotlin...kapt=$(rlocationpath //kotlin/compiler:kotlin-annotation-processing)", "-D@rules_kotlin...jdeps-gen=$(rlocationpath //src/main/kotlin:jdeps-gen)", + "-D@com_github_jetbrains_kotlin...daemon-client=$(rlocationpath @kotlin_rules_maven//:org_jetbrains_kotlin_kotlin_daemon_client)", "-D@rules_kotlin...skip-code-gen=$(rlocationpath //src/main/kotlin:skip-code-gen)", "-D@rules_kotlin...compiler=$(rlocationpath //src/main/kotlin/io/bazel/kotlin/compiler:compiler.jar)", "-D@com_github_google_ksp...symbol-processing-api=$(rlocationpath //kotlin/compiler:symbol-processing-api)", diff --git a/src/main/kotlin/io/bazel/kotlin/builder/tasks/BUILD.bazel b/src/main/kotlin/io/bazel/kotlin/builder/tasks/BUILD.bazel index d8acfc648..31ee05019 100644 --- a/src/main/kotlin/io/bazel/kotlin/builder/tasks/BUILD.bazel +++ b/src/main/kotlin/io/bazel/kotlin/builder/tasks/BUILD.bazel @@ -24,6 +24,7 @@ kt_bootstrap_library( ], visibility = ["//src:__subpackages__"], deps = [ + "//kotlin/compiler:kotlin-compiler", "//kotlin/compiler:kotlin-preloader", "//src/main/kotlin/io/bazel/kotlin/builder/toolchain", "//src/main/kotlin/io/bazel/kotlin/builder/utils", @@ -32,6 +33,9 @@ kt_bootstrap_library( "//src/main/protobuf:deps_java_proto", "//src/main/protobuf:kotlin_model_java_proto", "//src/main/protobuf:worker_protocol_java_proto", + "@kotlin_build_tools_api//jar", + "@kotlin_build_tools_impl//jar", + "@kotlin_compiler_embeddable//jar", "@kotlin_rules_maven//:com_google_protobuf_protobuf_java", "@kotlin_rules_maven//:com_google_protobuf_protobuf_java_util", "@kotlin_rules_maven//:javax_inject_javax_inject", diff --git a/src/main/kotlin/io/bazel/kotlin/builder/tasks/KotlinBuilder.kt b/src/main/kotlin/io/bazel/kotlin/builder/tasks/KotlinBuilder.kt index e8bb03370..db9155d09 100644 --- a/src/main/kotlin/io/bazel/kotlin/builder/tasks/KotlinBuilder.kt +++ b/src/main/kotlin/io/bazel/kotlin/builder/tasks/KotlinBuilder.kt @@ -33,6 +33,7 @@ import java.nio.charset.StandardCharsets import java.nio.file.FileSystems import java.nio.file.Files import java.nio.file.Path +import java.nio.file.Paths import java.util.regex.Pattern import javax.inject.Inject import javax.inject.Singleton @@ -88,6 +89,7 @@ class KotlinBuilder INSTRUMENT_COVERAGE("--instrument_coverage"), KSP_GENERATED_JAVA_SRCJAR("--ksp_generated_java_srcjar"), BUILD_TOOLS_API("--build_tools_api"), + INCREMENTAL_COMPILATION("--incremental_compilation"), } } @@ -173,6 +175,9 @@ class KotlinBuilder argMap.optionalSingle(KotlinBuilderFlags.BUILD_TOOLS_API)?.let { buildToolsApi = it == "true" } + argMap.optionalSingle(KotlinBuilderFlags.INCREMENTAL_COMPILATION)?.let { + incrementalCompilation = it == "true" + } this } @@ -225,43 +230,17 @@ class KotlinBuilder with(root.directoriesBuilder) { val moduleName = argMap.mandatorySingle(KotlinBuilderFlags.MODULE_NAME) - classes = - workingDir.resolveNewDirectories(getOutputDirPath(moduleName, "classes")).toString() - javaClasses = - workingDir - .resolveNewDirectories( - getOutputDirPath(moduleName, "java_classes"), - ).toString() + classes = getOutputDirPath(info, workingDir, moduleName, "classes").toString() + javaClasses = getOutputDirPath(info, workingDir, moduleName, "java_classes").toString() if (argMap.hasAll(KotlinBuilderFlags.ABI_JAR)) { - abiClasses = - workingDir - .resolveNewDirectories( - getOutputDirPath(moduleName, "abi_classes"), - ).toString() + abiClasses = getOutputDirPath(info, workingDir, moduleName, "abi_classes").toString() } - generatedClasses = - workingDir - .resolveNewDirectories(getOutputDirPath(moduleName, "generated_classes")) - .toString() - temp = - workingDir - .resolveNewDirectories( - getOutputDirPath(moduleName, "temp"), - ).toString() - generatedSources = - workingDir - .resolveNewDirectories(getOutputDirPath(moduleName, "generated_sources")) - .toString() - generatedJavaSources = - workingDir - .resolveNewDirectories(getOutputDirPath(moduleName, "generated_java_sources")) - .toString() - generatedStubClasses = - workingDir.resolveNewDirectories(getOutputDirPath(moduleName, "stubs")).toString() - coverageMetadataClasses = - workingDir - .resolveNewDirectories(getOutputDirPath(moduleName, "coverage-metadata")) - .toString() + generatedClasses = getOutputDirPath(info, workingDir, moduleName, "generated_classes").toString() + temp = getOutputDirPath(info, workingDir, moduleName, "temp").toString() + generatedSources = getOutputDirPath(info, workingDir, moduleName, "generated_sources").toString() + generatedJavaSources = getOutputDirPath(info, workingDir, moduleName, "generated_java_sources").toString() + generatedStubClasses = getOutputDirPath(info, workingDir, moduleName, "stubs").toString() + coverageMetadataClasses = getOutputDirPath(info, workingDir, moduleName, "coverage-metadata").toString() } with(root.inputsBuilder) { @@ -288,8 +267,17 @@ class KotlinBuilder argMap.optional(KotlinBuilderFlags.COMPILER_PLUGIN_CLASS_PATH) ?: emptyList(), ) + // Kotlin compiler always requires absolute path for source input in incremental mode + val useAbsolutePath = argMap.optionalSingle(KotlinBuilderFlags.INCREMENTAL_COMPILATION) == "true" argMap .optional(KotlinBuilderFlags.SOURCES) + ?.map { + if (useAbsolutePath) { + FileSystems.getDefault().getPath(it).toAbsolutePath().toString() + } else { + it + } + } ?.iterator() ?.partitionJvmSources( { addKotlinSources(it) }, @@ -310,7 +298,18 @@ class KotlinBuilder } private fun getOutputDirPath( + info: CompilationTaskInfo, + workingDir: Path, moduleName: String, dirName: String, - ) = "_kotlinc/${moduleName}_jvm/$dirName" + ): Path { + if (info.incrementalCompilation) { + val relativePath = moduleName.substringBefore("-").replace("_", "/") + val path = Paths.get("").toAbsolutePath().parent.resolve("_kotlin_incremental/${relativePath}/out/$dirName") + Files.createDirectories(path) + return path + } + + return workingDir.resolveNewDirectories("_kotlinc/${moduleName}_jvm/$dirName") + } } diff --git a/src/main/kotlin/io/bazel/kotlin/builder/tasks/jvm/ClasspathSnapshotGenerator.kt b/src/main/kotlin/io/bazel/kotlin/builder/tasks/jvm/ClasspathSnapshotGenerator.kt new file mode 100644 index 000000000..2946a5d31 --- /dev/null +++ b/src/main/kotlin/io/bazel/kotlin/builder/tasks/jvm/ClasspathSnapshotGenerator.kt @@ -0,0 +1,65 @@ +package io.bazel.kotlin.builder.tasks.jvm + +import java.io.FileInputStream +import java.nio.file.Files +import java.nio.file.Path +import java.security.MessageDigest +import kotlin.system.measureTimeMillis +import org.jetbrains.kotlin.buildtools.api.CompilationService +import org.jetbrains.kotlin.buildtools.api.ExperimentalBuildToolsApi +import kotlin.io.path.exists + +@OptIn(ExperimentalBuildToolsApi::class) +class ClasspathSnapshotGenerator( + private val inputJar: Path, + private val outputSnapshot: Path, + private val granularity: SnapshotGranularity +) { + + private val hashPath: Path by lazy { + outputSnapshot.resolveSibling(outputSnapshot.fileName.toString() + ".hash") + } + + fun run() { + if (!isSnapshotOutdated()) { + return + } + + val timeSpent = measureTimeMillis { + val compilationService = + CompilationService.loadImplementation(this.javaClass.classLoader!!) + val snapshot = + compilationService.calculateClasspathSnapshot( + inputJar.toFile(), granularity.toClassSnapshotGranularity + ) + // TODO : make things atomic / avoid race conditions + val hash = hashFile(inputJar) + snapshot.saveSnapshot(outputSnapshot.toFile()) + hashPath.toFile().writeText(hash) + } + + // TODO: Log impl + // LOG.info("$timeSpent ms for input jar: $inputJar") + } + + private fun isSnapshotOutdated(): Boolean { + if (!outputSnapshot.exists() || !hashPath.exists()) { + return true + } + val storedHash = Files.readAllLines(hashPath).firstOrNull()?.trim() + val currentHash = hashFile(inputJar) + return storedHash == null || storedHash != currentHash + } + + private fun hashFile(path: Path): String { + val digest = MessageDigest.getInstance("SHA-256") + FileInputStream(path.toFile()).use { fis -> + val buffer = ByteArray(8192) + var bytesRead: Int + while (fis.read(buffer).also { bytesRead = it } != -1) { + digest.update(buffer, 0, bytesRead) + } + } + return digest.digest().joinToString("") { "%02x".format(it) } + } +} diff --git a/src/main/kotlin/io/bazel/kotlin/builder/tasks/jvm/CompilationTask.kt b/src/main/kotlin/io/bazel/kotlin/builder/tasks/jvm/CompilationTask.kt index b7ae5661e..54fb1d85a 100644 --- a/src/main/kotlin/io/bazel/kotlin/builder/tasks/jvm/CompilationTask.kt +++ b/src/main/kotlin/io/bazel/kotlin/builder/tasks/jvm/CompilationTask.kt @@ -35,6 +35,7 @@ import java.io.BufferedInputStream import java.io.ByteArrayOutputStream import java.io.File import java.io.ObjectOutputStream +import java.nio.file.FileSystems import java.nio.file.Files import java.nio.file.Files.isDirectory import java.nio.file.Files.walk @@ -91,6 +92,11 @@ fun JvmCompilationTask.baseArgs(overrides: Map = emptyMap()): Co overrides[LANGUAGE_VERSION_ARG] ?: info.toolchainInfo.common.languageVersion, ).flag("-jvm-target", info.toolchainInfo.jvm.jvmTarget) .flag("-module-name", info.moduleName) + .apply { + if (info.buildToolsApi) { + flag("-label", info.label) + } + } } internal fun JvmCompilationTask.plugins( @@ -308,8 +314,13 @@ private fun JvmCompilationTask.runKspPlugin( baseArgs(overrides) .plus(kspArgs(plugins)) .flag("-d", directories.generatedClasses) - .values(inputs.kotlinSourcesList) .values(inputs.javaSourcesList) + .values(inputs.kotlinSourcesList) + .apply { + if (info.incrementalCompilation) { + flag("-incremental_id", "ksp") + } + } .list() .let { args -> context.executeCompilerTask( @@ -422,6 +433,28 @@ internal fun JvmCompilationTask.createGeneratedKspKotlinSrcJar() { } } +internal fun JvmCompilationTask.createClasspathSnapshots() { + inputs.classpathList.forEach { + ClasspathSnapshotGenerator(Paths.get(it), Paths.get("$it.snapshot"), SnapshotGranularity.CLASS_MEMBER_LEVEL).run() + } +} + +internal fun JvmCompilationTask.createClasspathSnapshotsPaths(): List { + return inputs.classpathList.map { it: String -> + "$it.snapshot" + } +} + + +val ROOT: String by lazy { + FileSystems + .getDefault() + .getPath("") + .toAbsolutePath() + .toString() + File.separator +} + + /** * Compiles Kotlin sources to classes. Does not compile Java sources. */ @@ -441,9 +474,23 @@ fun JvmCompilationTask.compileKotlin( options = inputs.compilerPluginOptionsList, classpath = inputs.compilerPluginClasspathList, ) - ).values(inputs.javaSourcesList) + ) + .values(inputs.javaSourcesList) .values(inputs.kotlinSourcesList) .flag("-d", directories.classes) + .apply { + if (info.incrementalCompilation) { + flag("-incremental_id", "kotlin") + flag("-snapshot") + paths( + createClasspathSnapshotsPaths(), + ) { + it + .map(Path::toString) + .joinToString(File.pathSeparator) + } + } + } .list() .let { context.whenTracing { diff --git a/src/main/kotlin/io/bazel/kotlin/builder/tasks/jvm/KotlinJvmTaskExecutor.kt b/src/main/kotlin/io/bazel/kotlin/builder/tasks/jvm/KotlinJvmTaskExecutor.kt index ef379d842..0bb7930be 100644 --- a/src/main/kotlin/io/bazel/kotlin/builder/tasks/jvm/KotlinJvmTaskExecutor.kt +++ b/src/main/kotlin/io/bazel/kotlin/builder/tasks/jvm/KotlinJvmTaskExecutor.kt @@ -65,6 +65,9 @@ class KotlinJvmTaskExecutor preprocessedTask.apply { sequenceOf( runCatching { + if (context.info.incrementalCompilation) { + context.execute("create classpath snapshots", ::createClasspathSnapshots) + } context.execute("kotlinc") { if (compileKotlin) { compileKotlin( diff --git a/src/main/kotlin/io/bazel/kotlin/builder/tasks/jvm/SnapshotGranularity.kt b/src/main/kotlin/io/bazel/kotlin/builder/tasks/jvm/SnapshotGranularity.kt new file mode 100644 index 000000000..9cacd5c6d --- /dev/null +++ b/src/main/kotlin/io/bazel/kotlin/builder/tasks/jvm/SnapshotGranularity.kt @@ -0,0 +1,15 @@ +package io.bazel.kotlin.builder.tasks.jvm + +import org.jetbrains.kotlin.buildtools.api.jvm.ClassSnapshotGranularity + +enum class SnapshotGranularity { + CLASS_LEVEL, + CLASS_MEMBER_LEVEL; + + val toClassSnapshotGranularity: ClassSnapshotGranularity + get() = + when (this) { + CLASS_LEVEL -> ClassSnapshotGranularity.CLASS_LEVEL + CLASS_MEMBER_LEVEL -> ClassSnapshotGranularity.CLASS_MEMBER_LEVEL + } +} diff --git a/src/main/kotlin/io/bazel/kotlin/builder/toolchain/CompilerModes.kt b/src/main/kotlin/io/bazel/kotlin/builder/toolchain/CompilerModes.kt new file mode 100644 index 000000000..ae92c1cfe --- /dev/null +++ b/src/main/kotlin/io/bazel/kotlin/builder/toolchain/CompilerModes.kt @@ -0,0 +1,21 @@ +package io.bazel.kotlin.builder.toolchain + +/** + * Constants for build tools API mode values + */ +object CompilerModes { + /** + * Use the Kotlin K2 compiler + */ + const val K2 = "K2" + + /** + * Use the BuildTools API compiler (default) + */ + const val BUILD_TOOLS = "BUILD_TOOLS" + + /** + * Use incremental compilation with BuildTools + */ + const val INCREMENTAL = "INCREMENTAL" +} diff --git a/src/main/kotlin/io/bazel/kotlin/builder/toolchain/KotlinToolchain.kt b/src/main/kotlin/io/bazel/kotlin/builder/toolchain/KotlinToolchain.kt index d5ed414cf..46c49f703 100644 --- a/src/main/kotlin/io/bazel/kotlin/builder/toolchain/KotlinToolchain.kt +++ b/src/main/kotlin/io/bazel/kotlin/builder/toolchain/KotlinToolchain.kt @@ -132,6 +132,20 @@ class KotlinToolchain private constructor( ).toPath() } + private val KOTLIN_EMBEDDED by lazy { + BazelRunFiles + .resolveVerifiedFromProperty( + "@kotlin_compiler_embeddable...kotlin-embedded", + ).toPath() + } + + private val KOTLIN_DAEMON by lazy { + BazelRunFiles + .resolveVerifiedFromProperty( + "@com_github_jetbrains_kotlin...daemon-client", + ).toPath() + } + private val JAVA_HOME by lazy { FileSystems .getDefault() @@ -161,6 +175,8 @@ class KotlinToolchain private constructor( KOTLINX_SERIALIZATION_CORE_JVM.toFile(), KOTLINX_SERIALIZATION_JSON.toFile(), KOTLINX_SERIALIZATION_JSON_JVM.toFile(), + KOTLIN_EMBEDDED.toFile(), + KOTLIN_DAEMON.toFile(), ) @JvmStatic @@ -178,6 +194,8 @@ class KotlinToolchain private constructor( kotlinxSerializationCoreJvm: File, kotlinxSerializationJson: File, kotlinxSerializationJsonJvm: File, + kotlinEmbedded: File, + kotlinDaemon: File, ): KotlinToolchain = KotlinToolchain( listOf( @@ -195,6 +213,8 @@ class KotlinToolchain private constructor( kotlinxSerializationCoreJvm, kotlinxSerializationJson, kotlinxSerializationJsonJvm, + kotlinEmbedded, + kotlinDaemon, ), jvmAbiGen = CompilerPlugin( @@ -286,6 +306,7 @@ class KotlinToolchain private constructor( val exitCodeClass = toolchain.classLoader.loadClass("org.jetbrains.kotlin.cli.common.ExitCode") + toolchain.classLoader.loadClass("org.jetbrains.kotlin.buildtools.internal.CompilationServiceProxy") compiler = compilerClass.getConstructor().newInstance() execMethod = compilerClass.getMethod("exec", PrintStream::class.java, Array::class.java) diff --git a/src/main/kotlin/io/bazel/kotlin/compiler/BuildToolsAPICompiler.kt b/src/main/kotlin/io/bazel/kotlin/compiler/BuildToolsAPICompiler.kt index 0a2472c9c..40b6a65c8 100644 --- a/src/main/kotlin/io/bazel/kotlin/compiler/BuildToolsAPICompiler.kt +++ b/src/main/kotlin/io/bazel/kotlin/compiler/BuildToolsAPICompiler.kt @@ -19,9 +19,20 @@ import org.jetbrains.kotlin.buildtools.api.CompilationResult import org.jetbrains.kotlin.buildtools.api.CompilationService import org.jetbrains.kotlin.buildtools.api.ExperimentalBuildToolsApi import org.jetbrains.kotlin.buildtools.api.ProjectId +import org.jetbrains.kotlin.buildtools.api.SourcesChanges +import org.jetbrains.kotlin.buildtools.api.jvm.ClasspathSnapshotBasedIncrementalCompilationApproachParameters import org.jetbrains.kotlin.cli.common.ExitCode +import org.jetbrains.kotlin.incremental.createDirectory +import java.io.File +import java.nio.file.Paths import java.util.UUID +fun stripNonKotlinArgument(arg: String, args: MutableList): String? { + val index = args.indexOf(arg) + if (index < 0 || index + 1 >= args.size) return null + return args.removeAt(index + 1).also { args.removeAt(index) } +} + @Suppress("unused") class BuildToolsAPICompiler { @OptIn(ExperimentalBuildToolsApi::class) @@ -31,23 +42,82 @@ class BuildToolsAPICompiler { ): ExitCode { System.setProperty("zip.handler.uses.crc.instead.of.timestamp", "true") + var mutableArgs = args.toMutableList() + + // Set of vararg arguments into BuildToolsAPICompiler not to be passed to the compiler. + // Allows keeping the reflection-based invocation consistent with BazelK2KVMCompiler + val snapshots = stripNonKotlinArgument("-snapshot", mutableArgs) + ?.split(":") + ?.map { File(it) } + .orEmpty() + + // A manufactured strategy for delineating running KSP plugins and compiling Kotlin. + // label: The Bazel label + // incrementalId: Used to delineate Kotlin tasks within a label (i.e. KSP vs Kotlin vs Kapt) + val label = stripNonKotlinArgument("-label", mutableArgs)!! + val incrementalId = stripNonKotlinArgument("-incremental_id", mutableArgs)!! + + // The incremental directory is roughly analogous to a Gradle transform cache directory. Must be unique per compilation target. + val incrementalDirectory = Paths.get("").toAbsolutePath().parent.resolve("_kotlin_incremental/$label/$incrementalId").toFile() + val kotlinService = CompilationService.loadImplementation(this.javaClass.classLoader!!) // The execution configuration. Controls in-process vs daemon execution strategies. Default is in-process. val executionConfig = kotlinService.makeCompilerExecutionStrategyConfiguration() // The compilation configuration. Controls everything related to incremental compilation. - val compilationConfig = - kotlinService.makeJvmCompilationConfiguration().apply { - // useLogger(BasicKotlinLogger(true, "/tmp/kotlin_log/$label.log")) - } - - val result = - kotlinService.compileJvm( - ProjectId.ProjectUUID(UUID.randomUUID()), - executionConfig, - compilationConfig, - emptyList(), - args.toList(), + val compilationConfig = kotlinService.makeJvmCompilationConfiguration().apply { + useIncrementalCompilation( + // The working directory is where Kotlin stores incremental data. This must be unique per compilation target. + workingDirectory = incrementalDirectory, + // For Bazel, this will always be ToBeCalculated. We don't have a way to get the sources changes from the last build. + sourcesChanges = SourcesChanges.ToBeCalculated, + approachParameters = ClasspathSnapshotBasedIncrementalCompilationApproachParameters( + /** + * The classpath snapshots files actual at the moment of compilation + */ + // TODO: Track this with Bazel + newClasspathSnapshotFiles = snapshots, + + /** + * The shrunk classpath snapshot, a result of the previous compilation. Could point to a non-existent file. + * At the successful end of the compilation, the shrunk version of the [newClasspathSnapshotFiles] will be stored at this path. + */ + // TODO: Track this with Bazel + shrunkClasspathSnapshot = incrementalDirectory.resolve("shrunk-classpath-snapshot.bin").apply { parentFile?.createDirectory() } + ), + + options = makeClasspathSnapshotBasedIncrementalCompilationConfiguration().apply { + + // NOTE: The following settings are to enable "relocatable" compilation caches. I was never able to + // determine how to work with these without resulting in sporadic failures. + // Notably, turning these on requires all input files to be passed with absolute, not relative paths. + // setRootProjectDir(incrementalDir.resolve("_main").toFile()) + // setBuildDir(incrementalDir.resolve("_kotlin_incremental").toFile()) + // useOutputDirs(emptyList()) + + // An indicator whether incremental compilation will analyze Java files precisely for better changes detection + usePreciseJavaTracking(true) + + // Incremental compilation uses the PersistentHashMap of the intellij platform for storing caches. + // An indicator whether the changes should remain in memory and not being flushed to the disk until we could mark the compilation as successful. + keepIncrementalCompilationCachesInMemory(true) + + // I don't believe we will ever need to force non-incremental + forceNonIncrementalMode(false) + + // Classpath snapshots and changes will be tracked by Bazel + assureNoClasspathSnapshotsChanges(false) + } ) + // useLogger(BasicKotlinLogger(true, "/tmp/kotlin_log/$label.log")) + useKotlinScriptFilenameExtensions(listOf("kts")) + } + val result = kotlinService.compileJvm( + ProjectId.ProjectUUID(UUID.randomUUID()), + executionConfig, + compilationConfig, + emptyList(), + mutableArgs.toList() + ) // BTAPI returns a different type than K2JVMCompiler (CompilationResult vs ExitCode). return when (result) { @@ -58,3 +128,4 @@ class BuildToolsAPICompiler { } } } + diff --git a/src/main/protobuf/kotlin_model.proto b/src/main/protobuf/kotlin_model.proto index 60399bf1e..595dca573 100644 --- a/src/main/protobuf/kotlin_model.proto +++ b/src/main/protobuf/kotlin_model.proto @@ -87,6 +87,8 @@ message CompilationTaskInfo { bool remove_private_classes_in_abi_jar = 13; // New Build Tools API. Required for incremental compilation. bool build_tools_api = 14; + // Enable incremental compilation. + bool incremental_compilation = 15; } // Nested messages not marked with stable could be refactored. diff --git a/src/main/starlark/core/repositories/initialize.release.bzl b/src/main/starlark/core/repositories/initialize.release.bzl index f834c95cc..4692cb008 100644 --- a/src/main/starlark/core/repositories/initialize.release.bzl +++ b/src/main/starlark/core/repositories/initialize.release.bzl @@ -100,6 +100,20 @@ def kotlin_repositories( urls = [url.format(version = versions.KOTLIN_BUILD_TOOLS_IMPL.version) for url in versions.KOTLIN_BUILD_TOOLS_IMPL.url_templates], ) + maybe( + http_jar, + name = "kotlin_build_tools_api", + sha256 = versions.KOTLIN_BUILD_TOOLS_API.sha256, + urls = [url.format(version = versions.KOTLIN_BUILD_TOOLS_API.version) for url in versions.KOTLIN_BUILD_TOOLS_API.url_templates], + ) + + maybe( + http_jar, + name = "kotlin_compiler_embeddable", + sha256 = versions.KOTLIN_COMPILER_EMBEDDABLE.sha256, + urls = [url.format(version = versions.KOTLIN_BUILD_TOOLS_API.version) for url in versions.KOTLIN_COMPILER_EMBEDDABLE.url_templates], + ) + if is_bzlmod: return diff --git a/src/main/starlark/core/repositories/versions.bzl b/src/main/starlark/core/repositories/versions.bzl index 814ae02b5..76ce9ebb9 100644 --- a/src/main/starlark/core/repositories/versions.bzl +++ b/src/main/starlark/core/repositories/versions.bzl @@ -88,11 +88,25 @@ versions = struct( sha256 = "44e965bb067b2bb5cd9184dab2c3dea6e3eab747d341c07645bb4c88f09e49c8", ), KOTLIN_BUILD_TOOLS_IMPL = version( - version = "2.1.20", + version = "2.1.21", url_templates = [ "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-build-tools-impl/{version}/kotlin-build-tools-impl-{version}.jar", ], - sha256 = "6e94896e321603e3bfe89fef02478e44d1d64a3d25d49d0694892ffc01c60acf", + sha256 = "e6c7f18a3228f56ca91400a54ddad21e1d789a9f9a07263b560c8c95347c63cd", + ), + KOTLIN_BUILD_TOOLS_API = version( + version = "2.1.21", + url_templates = [ + "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-build-tools-api/{version}/kotlin-build-tools-api-{version}.jar", + ], + sha256 = "06bb6b3671d4bc3ba74c0e0efabbdcd555ccc2d4cc2ef67cd309c5738c8d1e54", + ), + KOTLIN_COMPILER_EMBEDDABLE = version( + version = "2.1.21", + url_templates = [ + "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-compiler-embeddable/{version}/kotlin-compiler-embeddable-{version}.jar", + ], + sha256 = "67a2e3673765f097725608cc7c843b0d8fdd94bd9af41327211361614aa57d49", ), RULES_ANDROID = version( version = "0.6.4",