diff --git a/BUILD b/BUILD index f0c90a3a7..db8b65c91 100644 --- a/BUILD +++ b/BUILD @@ -38,7 +38,6 @@ test_suite( tests = [ "//src/test/kotlin/io/bazel/kotlin:assertion_tests", "//src/test/kotlin/io/bazel/kotlin/builder:builder_tests", - "//src/test/kotlin/io/bazel/kotlin/integration:integration_tests", "//src/test/kotlin/io/bazel/worker:worker_tests", "//src/test/starlark:convert_tests", ], @@ -50,7 +49,6 @@ test_suite( tests = [ ":all_tests", "//src/test/kotlin/io/bazel/kotlin:local_assertion_tests", - "//src/test/kotlin/io/bazel/kotlin/integration:local_integration_tests", "//src/test/kotlin/io/bazel/worker:local_worker_tests", "//src/test/starlark:convert_tests", ], diff --git a/MODULE.bazel b/MODULE.bazel index 3c7aa1c88..28526277c 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -22,23 +22,10 @@ use_repo( "kotlinx_serialization_core_jvm", "kotlinx_serialization_json", "kotlinx_serialization_json_jvm", - "released_rules_kotlin", ) -# Once the released rules_koltin is defined, configure it. -rules_kotlin_bootstrap_extensions = use_extension( - "//src/main/starlark/core/repositories:bzlmod_bootstrap.bzl", - "rules_kotlin_bootstrap_extensions", -) -use_repo( - rules_kotlin_bootstrap_extensions, - "released_com_github_google_ksp", - "released_com_github_jetbrains_kotlin", -) - -register_toolchains("@released_rules_kotlin//kotlin/internal:default_toolchain") +register_toolchains("//src/main/starlark/core/compile/cli") -# Back to the regularly scheduled configuration. register_toolchains("//kotlin/internal:default_toolchain") # TODO(bencodes) We should be able to remove this once rules_android has rolled out official Bzlmod support @@ -73,9 +60,9 @@ maven.install( "com.google.auto.service:auto-service-annotations:1.1.1", "com.google.auto.value:auto-value:1.10.1", "com.google.auto.value:auto-value-annotations:1.10.1", - "com.google.dagger:dagger:2.51", - "com.google.dagger:dagger-compiler:2.51", - "com.google.dagger:dagger-producers:2.51", + "com.google.dagger:dagger:2.53.1", + "com.google.dagger:dagger-compiler:2.53.1", + "com.google.dagger:dagger-producers:2.53.1", "javax.annotation:javax.annotation-api:1.3.2", "javax.inject:javax.inject:1", "org.apache.commons:commons-compress:1.26.2", diff --git a/WORKSPACE.dev.bazel b/WORKSPACE.dev.bazel index c28227564..aadacd901 100644 --- a/WORKSPACE.dev.bazel +++ b/WORKSPACE.dev.bazel @@ -21,6 +21,8 @@ load("//kotlin:repositories.bzl", "kotlin_repositories") kotlin_repositories() +register_toolchains("//src/main/starlark/core/compile/cli") + register_toolchains("@rules_kotlin//kotlin/internal:default_toolchain") android_sdk_repository(name = "androidsdk") diff --git a/docs/kotlin.md b/docs/kotlin.md index 495c37e32..99a317fd1 100755 --- a/docs/kotlin.md +++ b/docs/kotlin.md @@ -376,16 +376,15 @@ Define java compiler options for `kt_jvm_*` rules with java sources.
 load("@rules_kotlin//kotlin:core.bzl", "kt_kotlinc_options")
 
-kt_kotlinc_options(name, include_stdlibs, java_parameters, jvm_target, warn,
-                   x_allow_result_return_type, x_assertions, x_backend_threads,
-                   x_consistent_data_class_copy_visibility, x_context_receivers,
+kt_kotlinc_options(name, include_stdlibs, java_parameters, jvm_target, warn, x_assertions,
+                   x_backend_threads, x_consistent_data_class_copy_visibility, x_context_receivers,
                    x_emit_jvm_type_annotations, x_enable_incremental_compilation, x_explicit_api_mode,
                    x_inline_classes, x_jdk_release, x_jspecify_annotations, x_jsr_305, x_jvm_default,
                    x_lambdas, x_multi_platform, x_no_call_assertions, x_no_optimize,
-                   x_no_optimized_callable_references, x_no_param_assertions,
-                   x_no_receiver_assertions, x_no_source_debug_extension, x_optin, x_report_perf,
-                   x_sam_conversions, x_skip_prerelease_check, x_suppress_version_warnings,
-                   x_type_enhancement_improvements_strict_mode, x_use_fir_lt, x_use_k2)
+                   x_no_param_assertions, x_no_receiver_assertions, x_no_source_debug_extension,
+                   x_optin, x_report_perf, x_sam_conversions, x_skip_prerelease_check,
+                   x_suppress_version_warnings, x_type_enhancement_improvements_strict_mode,
+                   x_use_fir_lt, x_use_k2)
 
Define kotlin compiler options. @@ -398,9 +397,8 @@ Define kotlin compiler options. | name | A unique name for this target. | Name | required | | | include_stdlibs | Don't automatically include the Kotlin standard libraries into the classpath (stdlib and reflect). | String | optional | `"all"` | | java_parameters | Generate metadata for Java 1.8+ reflection on method parameters. | Boolean | optional | `False` | -| jvm_target | The -jvm_target flag. This is only tested at 1.8. | String | optional | `""` | +| jvm_target | The target version of the generated JVM bytecode | String | optional | `""` | | warn | Control warning behaviour. | String | optional | `"report"` | -| x_allow_result_return_type | Enable kotlin.Result as a return type | Boolean | optional | `False` | | x_assertions | Configures how assertions are handled. The 'jvm' option enables assertions in JVM code. | String | optional | `""` | | x_backend_threads | When using the IR backend, run lowerings by file in N parallel threads. 0 means use a thread per processor core. Default value is 1. | Integer | optional | `1` | | x_consistent_data_class_copy_visibility | The effect of this compiler flag is the same as applying @ConsistentCopyVisibility annotation to all data classes in the module. See https://youtrack.jetbrains.com/issue/KT-11914 | Boolean | optional | `False` | @@ -409,7 +407,7 @@ Define kotlin compiler options. | x_enable_incremental_compilation | Enable incremental compilation | Boolean | optional | `False` | | x_explicit_api_mode | Enable explicit API mode for Kotlin libraries. | String | optional | `"off"` | | x_inline_classes | Enable experimental inline classes | Boolean | optional | `False` | -| x_jdk_release | The -jvm_target flag. This is only tested at 1.8. | String | optional | `""` | +| x_jdk_release | Compile against the specified JDK API version, similarly to javac's '-release'. This requires JDK 9 or newer. The supported versions depend on the JDK used; for JDK 17+, the supported versions are 1.8 and 9–21. This also sets the value of '-jvm-target' to be equal to the selected JDK version. | String | optional | `""` | | x_jspecify_annotations | Controls how JSpecify annotations are treated. Options are 'default', 'ignore', 'warn', and 'strict'. | String | optional | `""` | | x_jsr_305 | Specifies how to handle JSR-305 annotations in Kotlin code. Options are 'default', 'ignore', 'warn', and 'strict'. | String | optional | `""` | | x_jvm_default | Specifies that a JVM default method should be generated for non-abstract Kotlin interface member. | String | optional | `"off"` | @@ -417,7 +415,6 @@ Define kotlin compiler options. | x_multi_platform | Enable experimental language support for multi-platform projects | Boolean | optional | `False` | | x_no_call_assertions | Don't generate not-null assertions for arguments of platform types | Boolean | optional | `False` | | x_no_optimize | Disable optimizations | Boolean | optional | `False` | -| x_no_optimized_callable_references | Do not use optimized callable reference superclasses. Available from 1.4. | Boolean | optional | `False` | | x_no_param_assertions | Don't generate not-null assertions on parameters of methods accessible from Java | Boolean | optional | `False` | | x_no_receiver_assertions | Don't generate not-null assertion for extension receiver arguments of platform types | Boolean | optional | `False` | | x_no_source_debug_extension | Do not generate @kotlin.jvm.internal.SourceDebugExtension annotation on a class with the copy of SMAP | Boolean | optional | `False` | @@ -579,8 +576,8 @@ Call this in the WORKSPACE file to setup the Kotlin rules. | is_bzlmod |

-

| `False` | | compiler_repository_name | for the kotlinc compiler repository. | `"com_github_jetbrains_kotlin"` | | ksp_repository_name |

-

| `"com_github_google_ksp"` | -| compiler_release | version provider from versions.bzl. | `struct(sha256 = "88d7d8bad362ae4e114a8b9668c6887b8c85f48e340883db0e317e47c8dc2f4f", url_templates = ["https://github.com/JetBrains/kotlin/releases/download/v{version}/kotlin-compiler-{version}.zip"], version = "2.0.10")` | -| ksp_compiler_release | (internal) version provider from versions.bzl. | `struct(sha256 = "e6a79e649ee383b372fa982be89686c10ee42b25e60147b3271a70fd75a9eb19", url_templates = ["https://github.com/google/ksp/releases/download/{version}/artifacts.zip"], version = "2.0.10-1.0.24")` | +| compiler_release | version provider from versions.bzl. | `struct(sha256 = "b6698d5728ad8f9edcdd01617d638073191d8a03139cc538a391b4e3759ad297", url_templates = ["https://github.com/JetBrains/kotlin/releases/download/v{version}/kotlin-compiler-{version}.zip"], version = "2.1.0")` | +| ksp_compiler_release | (internal) version provider from versions.bzl. | `struct(sha256 = "fc27b08cadc061a4a989af01cbeccb613feef1995f4aad68f2be0f886a3ee251", url_templates = ["https://github.com/google/ksp/releases/download/{version}/artifacts.zip"], version = "2.1.0-1.0.28")` | diff --git a/examples/android/MODULE.bazel b/examples/android/MODULE.bazel index 9c8a8a55e..1d2995ec5 100644 --- a/examples/android/MODULE.bazel +++ b/examples/android/MODULE.bazel @@ -18,7 +18,7 @@ maven.install( "junit:junit:4.12", "androidx.test.espresso:espresso-core:3.1.1", "org.hamcrest:hamcrest-library:1.3", - "org.jetbrains.kotlinx:kotlinx-serialization-runtime:1.0-M1-1.4.0-rc", + "org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3", "com.squareup.moshi:moshi:1.14.0", "com.squareup.moshi:moshi-kotlin:1.14.0", "com.squareup.moshi:moshi-kotlin-codegen:1.14.0", diff --git a/examples/android/WORKSPACE b/examples/android/WORKSPACE index 48e9317de..faf0fd86d 100644 --- a/examples/android/WORKSPACE +++ b/examples/android/WORKSPACE @@ -43,7 +43,7 @@ maven_install( "junit:junit:4.12", "androidx.test.espresso:espresso-core:3.1.1", "org.hamcrest:hamcrest-library:1.3", - "org.jetbrains.kotlinx:kotlinx-serialization-runtime:1.0-M1-1.4.0-rc", + "org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3", "com.squareup.moshi:moshi:1.14.0", "com.squareup.moshi:moshi-kotlin:1.14.0", "com.squareup.moshi:moshi-kotlin-codegen:1.14.0", diff --git a/examples/android/libKtAndroid/BUILD.bazel b/examples/android/libKtAndroid/BUILD.bazel index 8a4d02cb9..ebb59efdb 100644 --- a/examples/android/libKtAndroid/BUILD.bazel +++ b/examples/android/libKtAndroid/BUILD.bazel @@ -47,7 +47,7 @@ kt_android_library( "@maven//:androidx_appcompat_appcompat", "@maven//:com_google_auto_value_auto_value_annotations", "@maven//:com_squareup_moshi_moshi", - "@maven//:org_jetbrains_kotlinx_kotlinx_serialization_runtime", + "@maven//:org_jetbrains_kotlinx_kotlinx_serialization_core", ], ) diff --git a/examples/associates/WORKSPACE b/examples/associates/WORKSPACE index 8758e4863..f66bb04eb 100644 --- a/examples/associates/WORKSPACE +++ b/examples/associates/WORKSPACE @@ -16,13 +16,6 @@ kt_register_toolchains() load("@rules_kotlin//src/main/starlark/core/repositories:versions.bzl", "versions") -http_archive( - name = "rules_android", - sha256 = "cd06d15dd8bb59926e4d65f9003bfc20f9da4b2519985c27e190cddc8b7a7806", - strip_prefix = "rules_android-0.1.1", - urls = ["https://github.com/bazelbuild/rules_android/archive/v0.1.1.zip"], -) - http_archive( name = "bazel_skylib", sha256 = versions.SKYLIB_SHA, @@ -52,9 +45,3 @@ maven_install( "https://repo1.maven.org/maven2", ], ) - -http_archive( - name = "rules_pkg", - sha256 = "8a298e832762eda1830597d64fe7db58178aa84cd5926d76d5b744d6558941c2", - url = "https://github.com/bazelbuild/rules_pkg/releases/download/0.7.0/rules_pkg-0.7.0.tar.gz", -) diff --git a/examples/associates/projects/core/api/src/main/kotlin/core/api/api.kt b/examples/associates/projects/core/api/src/main/kotlin/core/api/api.kt index aa5de6c96..a840b91eb 100644 --- a/examples/associates/projects/core/api/src/main/kotlin/core/api/api.kt +++ b/examples/associates/projects/core/api/src/main/kotlin/core/api/api.kt @@ -12,5 +12,5 @@ data class MyType( } internal fun String.camelCase() = this.split("_").joinToString("") { - "${it[0].toUpperCase()}${it.substring(1)}" + "${it[0].uppercase()}${it.substring(1)}" } diff --git a/examples/deps/.bazelrc b/examples/deps/.bazelrc index 42ea6494d..5366c53d0 100644 --- a/examples/deps/.bazelrc +++ b/examples/deps/.bazelrc @@ -1,2 +1,5 @@ common --incompatible_enable_android_toolchain_resolution -common --android_platforms=//:arm64-v8a \ No newline at end of file +common --enable_workspace=true +common --enable_bzlmod=false +common --android_platforms=//:arm64-v8a +common --toolchain_resolution_debug=.* \ No newline at end of file diff --git a/examples/deps/WORKSPACE b/examples/deps/WORKSPACE index c2ac1fca6..9bcf89a31 100644 --- a/examples/deps/WORKSPACE +++ b/examples/deps/WORKSPACE @@ -7,13 +7,10 @@ http_archive( ) load("@rules_kotlin//kotlin:repositories.bzl", "kotlin_repositories") +load("@rules_kotlin//src/main/starlark/core/repositories:versions.bzl", "versions") kotlin_repositories() -register_toolchains("//bzl:experimental_toolchain") - -load("@rules_kotlin//src/main/starlark/core/repositories:versions.bzl", "versions") - http_archive( name = "bazel_skylib", sha256 = versions.SKYLIB_SHA, @@ -37,17 +34,8 @@ load("@rules_jvm_external//:defs.bzl", "maven_install") maven_install( artifacts = [ - "androidx.appcompat:appcompat:1.0.0", - "junit:junit:4.12", - "androidx.test.espresso:espresso-core:3.1.1", - "org.hamcrest:hamcrest-library:1.3", - "org.jetbrains.kotlinx:kotlinx-serialization-runtime:1.0-M1-1.4.0-rc", - "com.google.dagger:dagger:2.45", - "com.google.dagger:dagger-compiler:2.45", - "com.google.dagger:dagger-producers:2.45", "com.google.auto.value:auto-value:1.6.5", "com.google.auto.value:auto-value-annotations:1.6.5", - "org.robolectric:robolectric:4.7.3", ], repositories = [ "https://maven.google.com", @@ -55,6 +43,8 @@ maven_install( ], ) +register_toolchains("//bzl:experimental_toolchain") + http_archive( name = "rules_android", sha256 = versions.ANDROID.SHA, @@ -70,13 +60,3 @@ load( android_sdk_repository( name = "androidsdk", ) - -http_archive( - name = "robolectric", - strip_prefix = "robolectric-bazel-4.7.3", - urls = ["https://github.com/robolectric/robolectric-bazel/archive/4.7.3.tar.gz"], -) - -load("@robolectric//bazel:robolectric.bzl", "robolectric_repositories") - -robolectric_repositories() diff --git a/examples/deps/bzl/BUILD.bazel b/examples/deps/bzl/BUILD.bazel index 596d308c3..9062320c8 100644 --- a/examples/deps/bzl/BUILD.bazel +++ b/examples/deps/bzl/BUILD.bazel @@ -9,7 +9,7 @@ kt_javac_options( name = "default_javac_options", ) -KOTLIN_LANGUAGE_LEVEL = "1.6" +KOTLIN_LANGUAGE_LEVEL = "2.1" define_kt_toolchain( name = "experimental_toolchain", diff --git a/examples/jetpack_compose/.bazelrc b/examples/jetpack_compose/.bazelrc index a3d690a31..d7bcac518 100644 --- a/examples/jetpack_compose/.bazelrc +++ b/examples/jetpack_compose/.bazelrc @@ -4,3 +4,12 @@ build --define=android_dexmerger_tool=d8_dexmerger # Flags for the D8 dexer build --define=android_incremental_dexing_tool=d8_dexbuilder build --define=android_standalone_dexing_tool=d8_compat_dx + +common --enable_workspace=true --enable_bzlmod=false +common --noincompatible_enable_android_toolchain_resolution +build --platform_mappings=platform_mappings +build --fat_apk_cpu arm64-v8a +# Uncomment the below lines to build for x86 +# build --fat_apk_cpu x86_64 +build --android_crosstool_top=@androidndk//:toolchain +build --@rules_kotlin//kotlin/settings:jvm_emit_jdeps=False \ No newline at end of file diff --git a/examples/jetpack_compose/BUILD b/examples/jetpack_compose/BUILD index cce9c500d..c133bff30 100644 --- a/examples/jetpack_compose/BUILD +++ b/examples/jetpack_compose/BUILD @@ -33,3 +33,11 @@ platform( "@platforms//os:android", ], ) + +platform( + name = "x86_64", + constraint_values = [ + "@platforms//cpu:x86_64", + "@platforms//os:android", + ], +) diff --git a/examples/jetpack_compose/WORKSPACE b/examples/jetpack_compose/WORKSPACE index 500ffc505..61779d49d 100644 --- a/examples/jetpack_compose/WORKSPACE +++ b/examples/jetpack_compose/WORKSPACE @@ -1,11 +1,5 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") -_COMPOSE_VERSION = "1.2.1" - -_KOTLIN_COMPILER_VERSION = "2.0.0" - -_KOTLIN_COMPILER_SHA = "ef578730976154fd2c5968d75af8c2703b3de84a78dffe913f670326e149da3b" - # Setup Kotlin http_archive( @@ -16,10 +10,15 @@ http_archive( load("@rules_kotlin//kotlin:repositories.bzl", "kotlin_repositories", "kotlinc_version", "versions") +KOTLINC_RELEASE = versions.KOTLIN_CURRENT_COMPILER_RELEASE + kotlin_repositories( compiler_release = kotlinc_version( - release = _KOTLIN_COMPILER_VERSION, - sha256 = _KOTLIN_COMPILER_SHA, + release = "2.0.0", + sha256 = "ef578730976154fd2c5968d75af8c2703b3de84a78dffe913f670326e149da3b", + ) if KOTLINC_RELEASE.version == "1.9.22" else kotlinc_version( + release = KOTLINC_RELEASE.version, + sha256 = KOTLINC_RELEASE.sha256, ), ) @@ -27,36 +26,76 @@ register_toolchains("//:kotlin_toolchain") ## JVM External +versions.use_repository( + name = "io_bazel_stardoc", + rule = http_archive, + version = versions.IO_BAZEL_STARDOC, +) + +RULES_JVM_EXTERNAL_TAG = "6.6" + +RULES_JVM_EXTERNAL_SHA = "3afe5195069bd379373528899c03a3072f568d33bd96fe037bd43b1f590535e7" + http_archive( name = "rules_jvm_external", - sha256 = versions.RULES_JVM_EXTERNAL_SHA, - strip_prefix = "rules_jvm_external-%s" % versions.RULES_JVM_EXTERNAL_TAG, + sha256 = RULES_JVM_EXTERNAL_SHA, + strip_prefix = "rules_jvm_external-%s" % RULES_JVM_EXTERNAL_TAG, url = "https://github.com/bazelbuild/rules_jvm_external/releases/download/%s/rules_jvm_external-%s.tar.gz" % ( - versions.RULES_JVM_EXTERNAL_TAG, - versions.RULES_JVM_EXTERNAL_TAG, + RULES_JVM_EXTERNAL_TAG, + RULES_JVM_EXTERNAL_TAG, ), ) -load("@rules_jvm_external//:defs.bzl", "maven_install") +load("@rules_jvm_external//:repositories.bzl", "rules_jvm_external_deps") -maven_install( - artifacts = [ - "org.jetbrains.kotlin:kotlin-compose-compiler-plugin-embeddable:{}".format(_KOTLIN_COMPILER_VERSION), - "org.jetbrains.kotlin:kotlin-stdlib:{}".format(_KOTLIN_COMPILER_VERSION), +rules_jvm_external_deps() + +load("@rules_jvm_external//:setup.bzl", "rules_jvm_external_setup") + +rules_jvm_external_setup() + +KOTLIN_TO_COMPOSE = { + "1.9.22": [ + "org.jetbrains.kotlin:kotlin-compose-compiler-plugin-embeddable:2.0.0", "androidx.core:core-ktx:1.7.0", "androidx.appcompat:appcompat:1.4.1", - "androidx.activity:activity-compose:1.4.0", - "androidx.compose.material:material:{}".format(_COMPOSE_VERSION), - "androidx.compose.ui:ui:{}".format(_COMPOSE_VERSION), - "androidx.compose.ui:ui-tooling:{}".format(_COMPOSE_VERSION), - "androidx.compose.runtime:runtime:{}".format(_COMPOSE_VERSION), + "androidx.activity:activity-compose:1.3.0", + "androidx.compose.material:material:1.2.1", + "androidx.compose.ui:ui:1.2.1", + "androidx.compose.ui:ui-tooling:1.2.1", + "androidx.compose.runtime:runtime:1.2.1", + ], + "2.1.0": [ + "org.jetbrains.kotlin:kotlin-compose-compiler-plugin-embeddable:2.1.0", + "androidx.core:core-ktx:1.15.0", + "androidx.appcompat:appcompat:1.7.0", + "androidx.activity:activity-compose:1.7.0", + "androidx.collection:collection:1.5.0-alpha06", + "androidx.compose.material:material:1.7.6", + "androidx.compose.ui:ui:1.7.6", + "androidx.compose.ui:ui-tooling:1.7.6", + "androidx.compose.runtime:runtime:1.7.6", ], +} + +load("@rules_jvm_external//:defs.bzl", "maven_install") + +maven_install( + name = "maven", + artifacts = KOTLIN_TO_COMPOSE[KOTLINC_RELEASE.version], + fetch_sources = True, + maven_install_json = "//:maven_install-%s.json" % KOTLINC_RELEASE.version, repositories = [ "https://maven.google.com", "https://repo1.maven.org/maven2", ], + resolver = "coursier" if KOTLINC_RELEASE.version == "1.9.22" else "maven", ) +load("@maven//:defs.bzl", "pinned_maven_install") + +pinned_maven_install() + http_archive( name = "bazel_skylib", sha256 = versions.SKYLIB_SHA, @@ -79,4 +118,7 @@ load("@rules_android//android:rules.bzl", "android_sdk_repository") android_sdk_repository(name = "androidsdk") -android_ndk_repository(name = "androidndk") +android_ndk_repository( + name = "androidndk", + api_level = 21, +) diff --git a/examples/jetpack_compose/compose-ui/BUILD b/examples/jetpack_compose/compose-ui/BUILD index 7f65cf209..a4c25dae0 100644 --- a/examples/jetpack_compose/compose-ui/BUILD +++ b/examples/jetpack_compose/compose-ui/BUILD @@ -15,6 +15,5 @@ kt_android_library( "@maven//:androidx_compose_ui_ui", "@maven//:androidx_compose_ui_ui_tooling", "@maven//:androidx_core_core_ktx", - "@maven//:org_jetbrains_kotlin_kotlin_stdlib", ], ) diff --git a/examples/jetpack_compose/maven_install-1.9.22.json b/examples/jetpack_compose/maven_install-1.9.22.json new file mode 100644 index 000000000..24008ccfe --- /dev/null +++ b/examples/jetpack_compose/maven_install-1.9.22.json @@ -0,0 +1,1112 @@ +{ + "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", + "__INPUT_ARTIFACTS_HASH": 1598958831, + "__RESOLVED_ARTIFACTS_HASH": 1571307712, + "artifacts": { + "androidx.activity:activity-compose:aar": { + "shasums": { + "jar": "32b2cdbb3ffb514bb4e09d00a7b4ccacf1dbb78a4a16fad0a600cf1c37204382" + }, + "version": "1.3.0" + }, + "androidx.activity:activity-ktx:aar": { + "shasums": { + "jar": "675df62188fa9dc2f470ace72a00ccd154472e26efb6137bff4adc34ce670f18" + }, + "version": "1.3.0" + }, + "androidx.activity:activity:aar": { + "shasums": { + "jar": "db584d89011a078829209d24157b3256ca8985b1c6c000204eebe9973a7d09da" + }, + "version": "1.3.0" + }, + "androidx.annotation:annotation": { + "shasums": { + "jar": "97dc45afefe3a1e421da42b8b6e9f90491477c45fc6178203e3a5e8a05ee8553" + }, + "version": "1.3.0" + }, + "androidx.annotation:annotation-experimental:aar": { + "shasums": { + "jar": "0157de61a2064047896a058080f3fd67ba57ad9a94857b3f7a363660243e3f90" + }, + "version": "1.1.0" + }, + "androidx.appcompat:appcompat-resources:aar": { + "shasums": { + "jar": "c324f0a157e3cf2decd8448107de487420cb4f4fb4853cd634d71ec1f2226224" + }, + "version": "1.4.1" + }, + "androidx.appcompat:appcompat:aar": { + "shasums": { + "jar": "9f1e6a958f7b02f57f9069362978baae3e73dbde9e15e9d2f119a28e0b48f799" + }, + "version": "1.4.1" + }, + "androidx.arch.core:core-common": { + "shasums": { + "jar": "fe1237bf029d063e7f29fe39aeaf73ef74c8b0a3658486fc29d3c54326653889" + }, + "version": "2.1.0" + }, + "androidx.arch.core:core-runtime:aar": { + "shasums": { + "jar": "dd77615bd3dd275afb11b62df25bae46b10b4a117cd37943af45bdcbf8755852" + }, + "version": "2.1.0" + }, + "androidx.autofill:autofill:aar": { + "shasums": { + "jar": "c9468f56e05006ea151a426c54957cd0799b8b83a579d2846dd22061f33e5ecd" + }, + "version": "1.0.0" + }, + "androidx.collection:collection": { + "shasums": { + "jar": "632a0e5407461de774409352940e292a291037724207a787820c77daf7d33b72" + }, + "version": "1.1.0" + }, + "androidx.compose.animation:animation-core:aar": { + "shasums": { + "jar": "797048e2d03a9b1b98443fbe118d70f0955988e3fca56a71985ee3550be46f4e" + }, + "version": "1.1.1" + }, + "androidx.compose.animation:animation:aar": { + "shasums": { + "jar": "95fca9d5bbb8da8c4f351331558e7b2f4ec04db0cf290b021852423461d76a9c" + }, + "version": "1.1.1" + }, + "androidx.compose.foundation:foundation-layout:aar": { + "shasums": { + "jar": "84596991cebb09553a769dabb9cafb7bf10b9541e9734e1113f444eab6162e95" + }, + "version": "1.2.1" + }, + "androidx.compose.foundation:foundation:aar": { + "shasums": { + "jar": "7641cc3d3a0cd0c4ad99950570f54617c5f9f96dc091ae96ebe38acc2f62a081" + }, + "version": "1.2.1" + }, + "androidx.compose.material:material-icons-core:aar": { + "shasums": { + "jar": "9320f1bcb55822128f8de5ab2fd07444a01afe21f5e98f16d04a60b3cdfe0439" + }, + "version": "1.2.1" + }, + "androidx.compose.material:material-ripple:aar": { + "shasums": { + "jar": "90af92da761a75779c6d0e9a45cd5c073c1d7475d02a61d05f16f6a5492a0b01" + }, + "version": "1.2.1" + }, + "androidx.compose.material:material:aar": { + "shasums": { + "jar": "24f3a2eb5597de45e3f3e2fc9a3a6adcc09196a7aaf7c0baddcd2518c66ed692" + }, + "version": "1.2.1" + }, + "androidx.compose.runtime:runtime-saveable:aar": { + "shasums": { + "jar": "b3bcd143e3cc60a121bd7eeeddceb1bbef6837867ce125f6843b1d73a137873d" + }, + "version": "1.2.1" + }, + "androidx.compose.runtime:runtime:aar": { + "shasums": { + "jar": "757cc64ccc3f75bb637f55b148ac60d00e8e035555cd5917b5871bb5934da649" + }, + "version": "1.2.1" + }, + "androidx.compose.ui:ui-geometry:aar": { + "shasums": { + "jar": "4a74924bd00b45cceb3f131b69e2e3c3c7106151767f2d166a1242715832c74b" + }, + "version": "1.2.1" + }, + "androidx.compose.ui:ui-graphics:aar": { + "shasums": { + "jar": "d45cbc93e36933fb6a054887c0747a9f5cc5f6a536c678e3baa6b055d476010a" + }, + "version": "1.2.1" + }, + "androidx.compose.ui:ui-text:aar": { + "shasums": { + "jar": "924bfcce2e62a14577babac4fd1b03750792ce5faa0d741e6cc185bc0b13b215" + }, + "version": "1.2.1" + }, + "androidx.compose.ui:ui-tooling-data:aar": { + "shasums": { + "jar": "62d78cd4206243cc74fb8cfe68988ca1fdf459c4b594716da325dc2f4c33cf8f" + }, + "version": "1.2.1" + }, + "androidx.compose.ui:ui-tooling-preview:aar": { + "shasums": { + "jar": "f2867515ab2518624b922c69850abf9f488759d26f46deaa1ba6c64092a1db6a" + }, + "version": "1.2.1" + }, + "androidx.compose.ui:ui-tooling:aar": { + "shasums": { + "jar": "042135b51a084932fc06b860e12367b53dc2ed2c1faccb5fa8f8e129a845e05e" + }, + "version": "1.2.1" + }, + "androidx.compose.ui:ui-unit:aar": { + "shasums": { + "jar": "74da0a1fc6db7500e57b301c8a63d64105844ce029ee48c54253bfd132c6a5bb" + }, + "version": "1.2.1" + }, + "androidx.compose.ui:ui-util:aar": { + "shasums": { + "jar": "e514b90356bc6aaf456de009d434f225494b788fab6a3681b6c3642c2e9257fa" + }, + "version": "1.2.1" + }, + "androidx.compose.ui:ui:aar": { + "shasums": { + "jar": "a6a91c7898c48d05ec1bcd8a7c4e1f54cbd094ac37e1d1a1387a04a8030acd36" + }, + "version": "1.2.1" + }, + "androidx.concurrent:concurrent-futures": { + "shasums": { + "jar": "5595a40e278a7b39fa78a09490e3d7f3faa95c7b01447148bd38b5ade0605c35" + }, + "version": "1.0.0" + }, + "androidx.core:core-ktx:aar": { + "shasums": { + "jar": "0d4d007dc81277cd05502a2596044ed2cc55e41501dd1e7f6881200640dc12c0" + }, + "version": "1.7.0" + }, + "androidx.core:core:aar": { + "shasums": { + "jar": "aaf6734226fff923784f92f65d78a2984dbf17534138855c5ce2038f18656e0b" + }, + "version": "1.7.0" + }, + "androidx.cursoradapter:cursoradapter:aar": { + "shasums": { + "jar": "a81c8fe78815fa47df5b749deb52727ad11f9397da58b16017f4eb2c11e28564" + }, + "version": "1.0.0" + }, + "androidx.customview:customview-poolingcontainer:aar": { + "shasums": { + "jar": "3584102fc49bf399c56e3b7be4bfe12000c46112320cd8cf85cc0a8f93f3e752" + }, + "version": "1.0.0" + }, + "androidx.customview:customview:aar": { + "shasums": { + "jar": "20e5b8f6526a34595a604f56718da81167c0b40a7a94a57daa355663f2594df2" + }, + "version": "1.0.0" + }, + "androidx.drawerlayout:drawerlayout:aar": { + "shasums": { + "jar": "9402442cdc5a43cf62fb14f8cf98c63342d4d9d9b805c8033c6cf7e802749ac1" + }, + "version": "1.0.0" + }, + "androidx.emoji2:emoji2-views-helper:aar": { + "shasums": { + "jar": "39616a3d66551fc18585112ce1d12a14ac0fb588a89a6528cd97842da6221ec2" + }, + "version": "1.0.0" + }, + "androidx.emoji2:emoji2:aar": { + "shasums": { + "jar": "af075731a4d17beaa29e69194a6baaf5f3512814c19aa1b8965d1920b0b7fbfa" + }, + "version": "1.0.0" + }, + "androidx.fragment:fragment:aar": { + "shasums": { + "jar": "12f0831b4f08092d5dda272c1923c11a022ff20ceffed3e801751e21bb8d1c1e" + }, + "version": "1.3.6" + }, + "androidx.interpolator:interpolator:aar": { + "shasums": { + "jar": "33193135a64fe21fa2c35eec6688f1a76e512606c0fc83dc1b689e37add7732a" + }, + "version": "1.0.0" + }, + "androidx.lifecycle:lifecycle-common": { + "shasums": { + "jar": "20ad1520f625cf455e6afd7290988306d3a9886efa993e0860fbabf4bb3f7bda" + }, + "version": "2.4.0" + }, + "androidx.lifecycle:lifecycle-common-java8": { + "shasums": { + "jar": "a1ec63c1bb973443cb731d78ec336c5e20e7ee35c89cbb32d36f92c55bb02542" + }, + "version": "2.3.0" + }, + "androidx.lifecycle:lifecycle-livedata-core:aar": { + "shasums": { + "jar": "e55d38c372460f0a03997ddc950c67227511340fd74f8634d99d29653cd81ab1" + }, + "version": "2.3.1" + }, + "androidx.lifecycle:lifecycle-livedata:aar": { + "shasums": { + "jar": "c82609ced8c498f0a701a30fb6771bb7480860daee84d82e0a81ee86edf7ba39" + }, + "version": "2.0.0" + }, + "androidx.lifecycle:lifecycle-process:aar": { + "shasums": { + "jar": "32f175588bd62df5672448516d9e4f3d4935d0020c0d9517958c9ffbd7c207e5" + }, + "version": "2.4.0" + }, + "androidx.lifecycle:lifecycle-runtime-ktx:aar": { + "shasums": { + "jar": "7ad2987dd7f4075c0871a72cf07e9649d9cd790fc23dfab1972eca4710373873" + }, + "version": "2.3.1" + }, + "androidx.lifecycle:lifecycle-runtime:aar": { + "shasums": { + "jar": "fba2ea76a2c0a8d2804e611367d9703c5ab2ecaafebca4932b00fd672c593588" + }, + "version": "2.4.0" + }, + "androidx.lifecycle:lifecycle-viewmodel-ktx:aar": { + "shasums": { + "jar": "5fb3591b6a54eeb3e204be0125d48eb987b8ea45a5048140036865482ccf9de9" + }, + "version": "2.3.1" + }, + "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar": { + "shasums": { + "jar": "97137a8af6a31776a14e4866ab808c7c0a791b484bdbc788bbd83e66407564c0" + }, + "version": "2.3.1" + }, + "androidx.lifecycle:lifecycle-viewmodel:aar": { + "shasums": { + "jar": "b6db4c274a12ff85a4747e1e6669c7e98aefa2571ace9d1f1a6fa6be417ce838" + }, + "version": "2.3.1" + }, + "androidx.loader:loader:aar": { + "shasums": { + "jar": "11f735cb3b55c458d470bed9e25254375b518b4b1bad6926783a7026db0f5025" + }, + "version": "1.0.0" + }, + "androidx.profileinstaller:profileinstaller:aar": { + "shasums": { + "jar": "0a1b2260af67962f4038d56fa84cda341315704aad56abbcf3a9b3bba6945426" + }, + "version": "1.2.0" + }, + "androidx.resourceinspection:resourceinspection-annotation": { + "shasums": { + "jar": "8cff870ec6fb31db48a52f4a792335b4bf8de07e03bd37823181526433ccd5cb" + }, + "version": "1.0.0" + }, + "androidx.savedstate:savedstate-ktx:aar": { + "shasums": { + "jar": "43112928d3cbb108801ee11130f303404bc4892cf78908811568195107bba7fe" + }, + "version": "1.2.0" + }, + "androidx.savedstate:savedstate:aar": { + "shasums": { + "jar": "2de528d6898e95ef020d22d9ffdf9d1f77cbdd93f92d39dfaa5d5c43b0c311c8" + }, + "version": "1.2.0" + }, + "androidx.startup:startup-runtime:aar": { + "shasums": { + "jar": "e0a6329a371262fe4c450372b70fdaf33b769ef6917094723787cfce896b1dd3" + }, + "version": "1.1.1" + }, + "androidx.tracing:tracing:aar": { + "shasums": { + "jar": "07b8b6139665b884a162eccf97891ca50f7f56831233bf25168ae04f7b568612" + }, + "version": "1.0.0" + }, + "androidx.vectordrawable:vectordrawable-animated:aar": { + "shasums": { + "jar": "76da2c502371d9c38054df5e2b248d00da87809ed058f3363eae87ce5e2403f8" + }, + "version": "1.1.0" + }, + "androidx.vectordrawable:vectordrawable:aar": { + "shasums": { + "jar": "46fd633ac01b49b7fcabc263bf098c5a8b9e9a69774d234edcca04fb02df8e26" + }, + "version": "1.1.0" + }, + "androidx.versionedparcelable:versionedparcelable:aar": { + "shasums": { + "jar": "57e8d93260d18d5b9007c9eed3c64ad159de90c8609ebfc74a347cbd514535a4" + }, + "version": "1.1.1" + }, + "androidx.viewpager:viewpager:aar": { + "shasums": { + "jar": "147af4e14a1984010d8f155e5e19d781f03c1d70dfed02a8e0d18428b8fc8682" + }, + "version": "1.0.0" + }, + "com.google.guava:listenablefuture": { + "shasums": { + "jar": "e4ad7607e5c0477c6f890ef26a49cb8d1bb4dffb650bab4502afee64644e3069" + }, + "version": "1.0" + }, + "org.jetbrains.kotlin:kotlin-compose-compiler-plugin-embeddable": { + "shasums": { + "jar": "746dd46f3bb5ffb02a30a7066e8c7973bc09211d5cbdee8ff48e0159dd5747f2" + }, + "version": "2.0.0" + }, + "org.jetbrains.kotlin:kotlin-stdlib": { + "shasums": { + "jar": "739c526672bb337573b28f63afa8306eb088b0c3a0967f56d6c89f4a3012a492" + }, + "version": "1.6.21" + }, + "org.jetbrains.kotlin:kotlin-stdlib-common": { + "shasums": { + "jar": "183bec59cd9f3a14957b190e8c879cf1194bd1f106b0a7b6e1cbb8790d242363" + }, + "version": "1.6.21" + }, + "org.jetbrains.kotlin:kotlin-stdlib-jdk7": { + "shasums": { + "jar": "870d35fd266b2daf64c1080fe51824d3c368f7995384a8d7c5fc2fdc40eb7b3a" + }, + "version": "1.6.0" + }, + "org.jetbrains.kotlin:kotlin-stdlib-jdk8": { + "shasums": { + "jar": "ab0547c495953214a5f2b28150014f4e02133678d52b77d76375ea235e443dbd" + }, + "version": "1.6.0" + }, + "org.jetbrains.kotlinx:kotlinx-coroutines-android": { + "shasums": { + "jar": "961ebde8138779a299430ca325a86e28c490527a87ba518362fa45c44c7e7e95" + }, + "version": "1.6.1" + }, + "org.jetbrains.kotlinx:kotlinx-coroutines-core": { + "shasums": { + "jar": "675489984c662362f48f48789a2cb9c2a711d515f3935d8f37b612790ad1e417" + }, + "version": "1.6.1" + }, + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm": { + "shasums": { + "jar": "3a93ffd052844643c0fef950ae5578db47cccbe9e7176d681333182e232bb0f1" + }, + "version": "1.6.1" + }, + "org.jetbrains:annotations": { + "shasums": { + "jar": "ace2a10dc8e2d5fd34925ecac03e4988b2c0f851650c94b8cef49ba1bd111478" + }, + "version": "13.0" + } + }, + "dependencies": { + "androidx.activity:activity-compose:aar": [ + "androidx.activity:activity-ktx:aar", + "androidx.compose.runtime:runtime-saveable:aar", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.activity:activity-ktx:aar": [ + "androidx.activity:activity:aar", + "androidx.core:core-ktx:aar", + "androidx.lifecycle:lifecycle-runtime-ktx:aar", + "androidx.lifecycle:lifecycle-viewmodel-ktx:aar", + "androidx.savedstate:savedstate-ktx:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.activity:activity:aar": [ + "androidx.annotation:annotation", + "androidx.collection:collection", + "androidx.core:core:aar", + "androidx.lifecycle:lifecycle-runtime:aar", + "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar", + "androidx.lifecycle:lifecycle-viewmodel:aar", + "androidx.savedstate:savedstate:aar", + "androidx.tracing:tracing:aar" + ], + "androidx.appcompat:appcompat-resources:aar": [ + "androidx.annotation:annotation", + "androidx.collection:collection", + "androidx.core:core:aar", + "androidx.vectordrawable:vectordrawable-animated:aar", + "androidx.vectordrawable:vectordrawable:aar" + ], + "androidx.appcompat:appcompat:aar": [ + "androidx.activity:activity:aar", + "androidx.annotation:annotation", + "androidx.appcompat:appcompat-resources:aar", + "androidx.collection:collection", + "androidx.core:core:aar", + "androidx.cursoradapter:cursoradapter:aar", + "androidx.drawerlayout:drawerlayout:aar", + "androidx.emoji2:emoji2-views-helper:aar", + "androidx.emoji2:emoji2:aar", + "androidx.fragment:fragment:aar", + "androidx.lifecycle:lifecycle-runtime:aar", + "androidx.lifecycle:lifecycle-viewmodel:aar", + "androidx.resourceinspection:resourceinspection-annotation", + "androidx.savedstate:savedstate:aar" + ], + "androidx.arch.core:core-common": [ + "androidx.annotation:annotation" + ], + "androidx.arch.core:core-runtime:aar": [ + "androidx.annotation:annotation", + "androidx.arch.core:core-common" + ], + "androidx.autofill:autofill:aar": [ + "androidx.core:core:aar" + ], + "androidx.collection:collection": [ + "androidx.annotation:annotation" + ], + "androidx.compose.animation:animation-core:aar": [ + "androidx.annotation:annotation", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-unit:aar", + "androidx.compose.ui:ui-util:aar", + "androidx.compose.ui:ui:aar", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlinx:kotlinx-coroutines-core" + ], + "androidx.compose.animation:animation:aar": [ + "androidx.annotation:annotation", + "androidx.compose.animation:animation-core:aar", + "androidx.compose.foundation:foundation-layout:aar", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-geometry:aar", + "androidx.compose.ui:ui-util:aar", + "androidx.compose.ui:ui:aar", + "org.jetbrains.kotlin:kotlin-stdlib-common" + ], + "androidx.compose.foundation:foundation-layout:aar": [ + "androidx.annotation:annotation", + "androidx.compose.animation:animation-core:aar", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-unit:aar", + "androidx.compose.ui:ui-util:aar", + "androidx.compose.ui:ui:aar", + "androidx.core:core:aar", + "org.jetbrains.kotlin:kotlin-stdlib-common" + ], + "androidx.compose.foundation:foundation:aar": [ + "androidx.annotation:annotation", + "androidx.compose.animation:animation:aar", + "androidx.compose.foundation:foundation-layout:aar", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-graphics:aar", + "androidx.compose.ui:ui-text:aar", + "androidx.compose.ui:ui-util:aar", + "androidx.compose.ui:ui:aar", + "org.jetbrains.kotlin:kotlin-stdlib-common" + ], + "androidx.compose.material:material-icons-core:aar": [ + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.material:material-ripple:aar": [ + "androidx.compose.animation:animation:aar", + "androidx.compose.foundation:foundation:aar", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-util:aar", + "org.jetbrains.kotlin:kotlin-stdlib-common" + ], + "androidx.compose.material:material:aar": [ + "androidx.compose.animation:animation-core:aar", + "androidx.compose.animation:animation:aar", + "androidx.compose.foundation:foundation-layout:aar", + "androidx.compose.foundation:foundation:aar", + "androidx.compose.material:material-icons-core:aar", + "androidx.compose.material:material-ripple:aar", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-text:aar", + "androidx.compose.ui:ui-util:aar", + "androidx.compose.ui:ui:aar", + "androidx.lifecycle:lifecycle-runtime:aar", + "androidx.lifecycle:lifecycle-viewmodel:aar", + "androidx.savedstate:savedstate:aar", + "org.jetbrains.kotlin:kotlin-stdlib-common" + ], + "androidx.compose.runtime:runtime-saveable:aar": [ + "androidx.annotation:annotation", + "androidx.compose.runtime:runtime:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.runtime:runtime:aar": [ + "androidx.annotation:annotation", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlinx:kotlinx-coroutines-android" + ], + "androidx.compose.ui:ui-geometry:aar": [ + "androidx.annotation:annotation", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-util:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.ui:ui-graphics:aar": [ + "androidx.annotation:annotation", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-unit:aar", + "androidx.compose.ui:ui-util:aar", + "org.jetbrains.kotlin:kotlin-stdlib-common" + ], + "androidx.compose.ui:ui-text:aar": [ + "androidx.annotation:annotation", + "androidx.collection:collection", + "androidx.compose.runtime:runtime-saveable:aar", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-graphics:aar", + "androidx.compose.ui:ui-unit:aar", + "androidx.compose.ui:ui-util:aar", + "androidx.core:core:aar", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlin:kotlin-stdlib-common", + "org.jetbrains.kotlinx:kotlinx-coroutines-core" + ], + "androidx.compose.ui:ui-tooling-data:aar": [ + "androidx.annotation:annotation", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.ui:ui-tooling-preview:aar": [ + "androidx.annotation:annotation", + "androidx.compose.runtime:runtime:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.ui:ui-tooling:aar": [ + "androidx.activity:activity-compose:aar", + "androidx.annotation:annotation", + "androidx.compose.animation:animation:aar", + "androidx.compose.material:material:aar", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-tooling-data:aar", + "androidx.compose.ui:ui-tooling-preview:aar", + "androidx.compose.ui:ui:aar", + "androidx.savedstate:savedstate-ktx:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.ui:ui-unit:aar": [ + "androidx.annotation:annotation", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-geometry:aar", + "androidx.compose.ui:ui-util:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.ui:ui-util:aar": [ + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.ui:ui:aar": [ + "androidx.annotation:annotation", + "androidx.autofill:autofill:aar", + "androidx.collection:collection", + "androidx.compose.runtime:runtime-saveable:aar", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-geometry:aar", + "androidx.compose.ui:ui-graphics:aar", + "androidx.compose.ui:ui-text:aar", + "androidx.compose.ui:ui-unit:aar", + "androidx.compose.ui:ui-util:aar", + "androidx.core:core:aar", + "androidx.customview:customview-poolingcontainer:aar", + "androidx.lifecycle:lifecycle-common-java8", + "androidx.lifecycle:lifecycle-runtime:aar", + "androidx.lifecycle:lifecycle-viewmodel:aar", + "androidx.profileinstaller:profileinstaller:aar", + "androidx.savedstate:savedstate-ktx:aar", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlin:kotlin-stdlib-common", + "org.jetbrains.kotlinx:kotlinx-coroutines-android", + "org.jetbrains.kotlinx:kotlinx-coroutines-core" + ], + "androidx.concurrent:concurrent-futures": [ + "androidx.annotation:annotation", + "com.google.guava:listenablefuture" + ], + "androidx.core:core-ktx:aar": [ + "androidx.annotation:annotation", + "androidx.core:core:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.core:core:aar": [ + "androidx.annotation:annotation", + "androidx.annotation:annotation-experimental:aar", + "androidx.collection:collection", + "androidx.concurrent:concurrent-futures", + "androidx.lifecycle:lifecycle-runtime:aar", + "androidx.versionedparcelable:versionedparcelable:aar" + ], + "androidx.cursoradapter:cursoradapter:aar": [ + "androidx.annotation:annotation" + ], + "androidx.customview:customview-poolingcontainer:aar": [ + "androidx.core:core-ktx:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.customview:customview:aar": [ + "androidx.annotation:annotation", + "androidx.core:core:aar" + ], + "androidx.drawerlayout:drawerlayout:aar": [ + "androidx.annotation:annotation", + "androidx.core:core:aar", + "androidx.customview:customview:aar" + ], + "androidx.emoji2:emoji2-views-helper:aar": [ + "androidx.collection:collection", + "androidx.core:core:aar", + "androidx.emoji2:emoji2:aar" + ], + "androidx.emoji2:emoji2:aar": [ + "androidx.annotation:annotation", + "androidx.collection:collection", + "androidx.core:core:aar", + "androidx.lifecycle:lifecycle-process:aar", + "androidx.startup:startup-runtime:aar" + ], + "androidx.fragment:fragment:aar": [ + "androidx.activity:activity:aar", + "androidx.annotation:annotation", + "androidx.annotation:annotation-experimental:aar", + "androidx.collection:collection", + "androidx.core:core:aar", + "androidx.lifecycle:lifecycle-livedata-core:aar", + "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar", + "androidx.lifecycle:lifecycle-viewmodel:aar", + "androidx.loader:loader:aar", + "androidx.savedstate:savedstate:aar", + "androidx.viewpager:viewpager:aar" + ], + "androidx.interpolator:interpolator:aar": [ + "androidx.annotation:annotation" + ], + "androidx.lifecycle:lifecycle-common": [ + "androidx.annotation:annotation" + ], + "androidx.lifecycle:lifecycle-common-java8": [ + "androidx.annotation:annotation", + "androidx.lifecycle:lifecycle-common" + ], + "androidx.lifecycle:lifecycle-livedata-core:aar": [ + "androidx.arch.core:core-common", + "androidx.arch.core:core-runtime:aar", + "androidx.lifecycle:lifecycle-common" + ], + "androidx.lifecycle:lifecycle-livedata:aar": [ + "androidx.arch.core:core-common", + "androidx.arch.core:core-runtime:aar", + "androidx.lifecycle:lifecycle-livedata-core:aar" + ], + "androidx.lifecycle:lifecycle-process:aar": [ + "androidx.lifecycle:lifecycle-runtime:aar", + "androidx.startup:startup-runtime:aar" + ], + "androidx.lifecycle:lifecycle-runtime-ktx:aar": [ + "androidx.annotation:annotation", + "androidx.lifecycle:lifecycle-runtime:aar", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlinx:kotlinx-coroutines-android" + ], + "androidx.lifecycle:lifecycle-runtime:aar": [ + "androidx.annotation:annotation", + "androidx.arch.core:core-common", + "androidx.arch.core:core-runtime:aar", + "androidx.lifecycle:lifecycle-common" + ], + "androidx.lifecycle:lifecycle-viewmodel-ktx:aar": [ + "androidx.lifecycle:lifecycle-viewmodel:aar", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlinx:kotlinx-coroutines-android" + ], + "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar": [ + "androidx.annotation:annotation", + "androidx.lifecycle:lifecycle-livedata-core:aar", + "androidx.lifecycle:lifecycle-viewmodel:aar", + "androidx.savedstate:savedstate:aar" + ], + "androidx.lifecycle:lifecycle-viewmodel:aar": [ + "androidx.annotation:annotation" + ], + "androidx.loader:loader:aar": [ + "androidx.annotation:annotation", + "androidx.core:core:aar", + "androidx.lifecycle:lifecycle-livedata:aar", + "androidx.lifecycle:lifecycle-viewmodel:aar" + ], + "androidx.profileinstaller:profileinstaller:aar": [ + "androidx.annotation:annotation", + "androidx.startup:startup-runtime:aar" + ], + "androidx.resourceinspection:resourceinspection-annotation": [ + "androidx.annotation:annotation" + ], + "androidx.savedstate:savedstate-ktx:aar": [ + "androidx.savedstate:savedstate:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.savedstate:savedstate:aar": [ + "androidx.annotation:annotation", + "androidx.arch.core:core-common", + "androidx.lifecycle:lifecycle-common", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.startup:startup-runtime:aar": [ + "androidx.annotation:annotation", + "androidx.tracing:tracing:aar" + ], + "androidx.tracing:tracing:aar": [ + "androidx.annotation:annotation" + ], + "androidx.vectordrawable:vectordrawable-animated:aar": [ + "androidx.collection:collection", + "androidx.interpolator:interpolator:aar", + "androidx.vectordrawable:vectordrawable:aar" + ], + "androidx.vectordrawable:vectordrawable:aar": [ + "androidx.annotation:annotation", + "androidx.collection:collection", + "androidx.core:core:aar" + ], + "androidx.versionedparcelable:versionedparcelable:aar": [ + "androidx.annotation:annotation", + "androidx.collection:collection" + ], + "androidx.viewpager:viewpager:aar": [ + "androidx.annotation:annotation", + "androidx.core:core:aar", + "androidx.customview:customview:aar" + ], + "org.jetbrains.kotlin:kotlin-stdlib": [ + "org.jetbrains.kotlin:kotlin-stdlib-common", + "org.jetbrains:annotations" + ], + "org.jetbrains.kotlin:kotlin-stdlib-jdk7": [ + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "org.jetbrains.kotlin:kotlin-stdlib-jdk8": [ + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlin:kotlin-stdlib-jdk7" + ], + "org.jetbrains.kotlinx:kotlinx-coroutines-android": [ + "org.jetbrains.kotlin:kotlin-stdlib-jdk8", + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm" + ], + "org.jetbrains.kotlinx:kotlinx-coroutines-core": [ + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm" + ], + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm": [ + "org.jetbrains.kotlin:kotlin-stdlib-common", + "org.jetbrains.kotlin:kotlin-stdlib-jdk8" + ] + }, + "packages": { + "androidx.annotation:annotation": [ + "androidx.annotation" + ], + "androidx.arch.core:core-common": [ + "androidx.arch.core.internal", + "androidx.arch.core.util" + ], + "androidx.collection:collection": [ + "androidx.collection" + ], + "androidx.concurrent:concurrent-futures": [ + "androidx.concurrent.futures" + ], + "androidx.lifecycle:lifecycle-common": [ + "androidx.lifecycle" + ], + "androidx.lifecycle:lifecycle-common-java8": [ + "androidx.lifecycle" + ], + "androidx.resourceinspection:resourceinspection-annotation": [ + "androidx.resourceinspection.annotation" + ], + "com.google.guava:listenablefuture": [ + "com.google.common.util.concurrent" + ], + "org.jetbrains.kotlin:kotlin-compose-compiler-plugin-embeddable": [ + "androidx.compose.compiler.plugins.kotlin", + "androidx.compose.compiler.plugins.kotlin.analysis", + "androidx.compose.compiler.plugins.kotlin.inference", + "androidx.compose.compiler.plugins.kotlin.k1", + "androidx.compose.compiler.plugins.kotlin.k2", + "androidx.compose.compiler.plugins.kotlin.lower", + "androidx.compose.compiler.plugins.kotlin.lower.decoys", + "androidx.compose.compiler.plugins.kotlin.lower.hiddenfromobjc" + ], + "org.jetbrains.kotlin:kotlin-stdlib": [ + "kotlin", + "kotlin.annotation", + "kotlin.collections", + "kotlin.collections.builders", + "kotlin.collections.unsigned", + "kotlin.comparisons", + "kotlin.concurrent", + "kotlin.contracts", + "kotlin.coroutines", + "kotlin.coroutines.cancellation", + "kotlin.coroutines.intrinsics", + "kotlin.coroutines.jvm.internal", + "kotlin.experimental", + "kotlin.internal", + "kotlin.io", + "kotlin.js", + "kotlin.jvm", + "kotlin.jvm.functions", + "kotlin.jvm.internal", + "kotlin.jvm.internal.markers", + "kotlin.jvm.internal.unsafe", + "kotlin.math", + "kotlin.properties", + "kotlin.random", + "kotlin.ranges", + "kotlin.reflect", + "kotlin.sequences", + "kotlin.system", + "kotlin.text", + "kotlin.time" + ], + "org.jetbrains.kotlin:kotlin-stdlib-jdk7": [ + "kotlin.internal.jdk7", + "kotlin.io.path", + "kotlin.jdk7" + ], + "org.jetbrains.kotlin:kotlin-stdlib-jdk8": [ + "kotlin.collections.jdk8", + "kotlin.internal.jdk8", + "kotlin.jvm.jdk8", + "kotlin.random.jdk8", + "kotlin.streams.jdk8", + "kotlin.text.jdk8", + "kotlin.time.jdk8" + ], + "org.jetbrains.kotlinx:kotlinx-coroutines-android": [ + "kotlinx.coroutines.android" + ], + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm": [ + "kotlinx.coroutines", + "kotlinx.coroutines.channels", + "kotlinx.coroutines.debug", + "kotlinx.coroutines.debug.internal", + "kotlinx.coroutines.flow", + "kotlinx.coroutines.flow.internal", + "kotlinx.coroutines.internal", + "kotlinx.coroutines.intrinsics", + "kotlinx.coroutines.scheduling", + "kotlinx.coroutines.selects", + "kotlinx.coroutines.sync", + "kotlinx.coroutines.test" + ], + "org.jetbrains:annotations": [ + "org.intellij.lang.annotations", + "org.jetbrains.annotations" + ] + }, + "repositories": { + "https://maven.google.com/": [ + "androidx.activity:activity-compose:aar", + "androidx.activity:activity-ktx:aar", + "androidx.activity:activity:aar", + "androidx.annotation:annotation", + "androidx.annotation:annotation-experimental:aar", + "androidx.appcompat:appcompat-resources:aar", + "androidx.appcompat:appcompat:aar", + "androidx.arch.core:core-common", + "androidx.arch.core:core-runtime:aar", + "androidx.autofill:autofill:aar", + "androidx.collection:collection", + "androidx.compose.animation:animation-core:aar", + "androidx.compose.animation:animation:aar", + "androidx.compose.foundation:foundation-layout:aar", + "androidx.compose.foundation:foundation:aar", + "androidx.compose.material:material-icons-core:aar", + "androidx.compose.material:material-ripple:aar", + "androidx.compose.material:material:aar", + "androidx.compose.runtime:runtime-saveable:aar", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-geometry:aar", + "androidx.compose.ui:ui-graphics:aar", + "androidx.compose.ui:ui-text:aar", + "androidx.compose.ui:ui-tooling-data:aar", + "androidx.compose.ui:ui-tooling-preview:aar", + "androidx.compose.ui:ui-tooling:aar", + "androidx.compose.ui:ui-unit:aar", + "androidx.compose.ui:ui-util:aar", + "androidx.compose.ui:ui:aar", + "androidx.concurrent:concurrent-futures", + "androidx.core:core-ktx:aar", + "androidx.core:core:aar", + "androidx.cursoradapter:cursoradapter:aar", + "androidx.customview:customview-poolingcontainer:aar", + "androidx.customview:customview:aar", + "androidx.drawerlayout:drawerlayout:aar", + "androidx.emoji2:emoji2-views-helper:aar", + "androidx.emoji2:emoji2:aar", + "androidx.fragment:fragment:aar", + "androidx.interpolator:interpolator:aar", + "androidx.lifecycle:lifecycle-common", + "androidx.lifecycle:lifecycle-common-java8", + "androidx.lifecycle:lifecycle-livedata-core:aar", + "androidx.lifecycle:lifecycle-livedata:aar", + "androidx.lifecycle:lifecycle-process:aar", + "androidx.lifecycle:lifecycle-runtime-ktx:aar", + "androidx.lifecycle:lifecycle-runtime:aar", + "androidx.lifecycle:lifecycle-viewmodel-ktx:aar", + "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar", + "androidx.lifecycle:lifecycle-viewmodel:aar", + "androidx.loader:loader:aar", + "androidx.profileinstaller:profileinstaller:aar", + "androidx.resourceinspection:resourceinspection-annotation", + "androidx.savedstate:savedstate-ktx:aar", + "androidx.savedstate:savedstate:aar", + "androidx.startup:startup-runtime:aar", + "androidx.tracing:tracing:aar", + "androidx.vectordrawable:vectordrawable-animated:aar", + "androidx.vectordrawable:vectordrawable:aar", + "androidx.versionedparcelable:versionedparcelable:aar", + "androidx.viewpager:viewpager:aar", + "com.google.guava:listenablefuture", + "org.jetbrains.kotlin:kotlin-compose-compiler-plugin-embeddable", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlin:kotlin-stdlib-common", + "org.jetbrains.kotlin:kotlin-stdlib-jdk7", + "org.jetbrains.kotlin:kotlin-stdlib-jdk8", + "org.jetbrains.kotlinx:kotlinx-coroutines-android", + "org.jetbrains.kotlinx:kotlinx-coroutines-core", + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm", + "org.jetbrains:annotations" + ], + "https://repo1.maven.org/maven2/": [ + "androidx.activity:activity-compose:aar", + "androidx.activity:activity-ktx:aar", + "androidx.activity:activity:aar", + "androidx.annotation:annotation", + "androidx.annotation:annotation-experimental:aar", + "androidx.appcompat:appcompat-resources:aar", + "androidx.appcompat:appcompat:aar", + "androidx.arch.core:core-common", + "androidx.arch.core:core-runtime:aar", + "androidx.autofill:autofill:aar", + "androidx.collection:collection", + "androidx.compose.animation:animation-core:aar", + "androidx.compose.animation:animation:aar", + "androidx.compose.foundation:foundation-layout:aar", + "androidx.compose.foundation:foundation:aar", + "androidx.compose.material:material-icons-core:aar", + "androidx.compose.material:material-ripple:aar", + "androidx.compose.material:material:aar", + "androidx.compose.runtime:runtime-saveable:aar", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-geometry:aar", + "androidx.compose.ui:ui-graphics:aar", + "androidx.compose.ui:ui-text:aar", + "androidx.compose.ui:ui-tooling-data:aar", + "androidx.compose.ui:ui-tooling-preview:aar", + "androidx.compose.ui:ui-tooling:aar", + "androidx.compose.ui:ui-unit:aar", + "androidx.compose.ui:ui-util:aar", + "androidx.compose.ui:ui:aar", + "androidx.concurrent:concurrent-futures", + "androidx.core:core-ktx:aar", + "androidx.core:core:aar", + "androidx.cursoradapter:cursoradapter:aar", + "androidx.customview:customview-poolingcontainer:aar", + "androidx.customview:customview:aar", + "androidx.drawerlayout:drawerlayout:aar", + "androidx.emoji2:emoji2-views-helper:aar", + "androidx.emoji2:emoji2:aar", + "androidx.fragment:fragment:aar", + "androidx.interpolator:interpolator:aar", + "androidx.lifecycle:lifecycle-common", + "androidx.lifecycle:lifecycle-common-java8", + "androidx.lifecycle:lifecycle-livedata-core:aar", + "androidx.lifecycle:lifecycle-livedata:aar", + "androidx.lifecycle:lifecycle-process:aar", + "androidx.lifecycle:lifecycle-runtime-ktx:aar", + "androidx.lifecycle:lifecycle-runtime:aar", + "androidx.lifecycle:lifecycle-viewmodel-ktx:aar", + "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar", + "androidx.lifecycle:lifecycle-viewmodel:aar", + "androidx.loader:loader:aar", + "androidx.profileinstaller:profileinstaller:aar", + "androidx.resourceinspection:resourceinspection-annotation", + "androidx.savedstate:savedstate-ktx:aar", + "androidx.savedstate:savedstate:aar", + "androidx.startup:startup-runtime:aar", + "androidx.tracing:tracing:aar", + "androidx.vectordrawable:vectordrawable-animated:aar", + "androidx.vectordrawable:vectordrawable:aar", + "androidx.versionedparcelable:versionedparcelable:aar", + "androidx.viewpager:viewpager:aar", + "com.google.guava:listenablefuture", + "org.jetbrains.kotlin:kotlin-compose-compiler-plugin-embeddable", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlin:kotlin-stdlib-common", + "org.jetbrains.kotlin:kotlin-stdlib-jdk7", + "org.jetbrains.kotlin:kotlin-stdlib-jdk8", + "org.jetbrains.kotlinx:kotlinx-coroutines-android", + "org.jetbrains.kotlinx:kotlinx-coroutines-core", + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm", + "org.jetbrains:annotations" + ] + }, + "services": { + "org.jetbrains.kotlin:kotlin-compose-compiler-plugin-embeddable": { + "org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor": [ + "androidx.compose.compiler.plugins.kotlin.ComposeCommandLineProcessor" + ], + "org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar": [ + "androidx.compose.compiler.plugins.kotlin.ComposePluginRegistrar" + ], + "org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages$Extension": [ + "androidx.compose.compiler.plugins.kotlin.k1.ComposeErrorMessages" + ], + "org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar": [ + "androidx.compose.compiler.plugins.kotlin.k2.ComposeFirExtensionRegistrar" + ] + }, + "org.jetbrains.kotlinx:kotlinx-coroutines-android": { + "kotlinx.coroutines.CoroutineExceptionHandler": [ + "kotlinx.coroutines.android.AndroidExceptionPreHandler" + ], + "kotlinx.coroutines.internal.MainDispatcherFactory": [ + "kotlinx.coroutines.android.AndroidDispatcherFactory" + ] + } + }, + "version": "2" +} diff --git a/examples/jetpack_compose/maven_install-2.1.0.json b/examples/jetpack_compose/maven_install-2.1.0.json new file mode 100644 index 000000000..84f01002c --- /dev/null +++ b/examples/jetpack_compose/maven_install-2.1.0.json @@ -0,0 +1,1486 @@ +{ + "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", + "__INPUT_ARTIFACTS_HASH": -1498937209, + "__RESOLVED_ARTIFACTS_HASH": 1581157927, + "artifacts": { + "androidx.activity:activity-compose:aar": { + "shasums": { + "jar": "caa72885d1ce7979c1d6c59a8b255c6097b770780d4d4da95d56979a348646cd" + }, + "version": "1.7.0" + }, + "androidx.activity:activity-ktx:aar": { + "shasums": { + "jar": "fce317d61a22f12967b475bfcb80c89dda66e418975e890ea703cb74e12b5b11" + }, + "version": "1.7.0" + }, + "androidx.activity:activity:aar": { + "shasums": { + "jar": "e44b2032273387156982912c591ef7e2dd485ba0b2e689b528b5a42f271a4f27" + }, + "version": "1.7.0" + }, + "androidx.annotation:annotation": { + "shasums": { + "jar": "fa5e67ffcc52a0413f4b39c2737b43c1ba6c6975b4bd4a4ea8627549e766285b" + }, + "version": "1.8.1" + }, + "androidx.annotation:annotation-experimental:aar": { + "shasums": { + "jar": "6bd4c7c7476f8260cd3bdbb81183583e93fc9f790c27dea7dc314181cbf87aa0" + }, + "version": "1.4.1" + }, + "androidx.annotation:annotation-jvm": { + "shasums": { + "jar": "9aab326d9492800991854360ac248f493ce7f7c3183519309b78ace9e240f6f6" + }, + "version": "1.8.1" + }, + "androidx.appcompat:appcompat-resources:aar": { + "shasums": { + "jar": "55b6778602680f3c288ce350a2c2d3dd158d97dbffc63476275826655582c388" + }, + "version": "1.7.0" + }, + "androidx.appcompat:appcompat:aar": { + "shasums": { + "jar": "67189713b30a3fab6971713cc5fab1cb7f022bcf648a257563715c91d719d584" + }, + "version": "1.7.0" + }, + "androidx.arch.core:core-common": { + "shasums": { + "jar": "65308a06b1c00ee186cb9e19321383f043b993813f1522c47f4a3e3303bdba41" + }, + "version": "2.2.0" + }, + "androidx.arch.core:core-runtime:aar": { + "shasums": { + "jar": "a1be5e0caa2b07623862af6ae21b3ab0718123245184d0e30dea81b53f990a47" + }, + "version": "2.2.0" + }, + "androidx.autofill:autofill:aar": { + "shasums": { + "jar": "c9468f56e05006ea151a426c54957cd0799b8b83a579d2846dd22061f33e5ecd" + }, + "version": "1.0.0" + }, + "androidx.collection:collection": { + "shasums": { + "jar": "421984a30b95b946a628a63662a19235424f69c9904f8d7ed64e75a0444e6fda" + }, + "version": "1.5.0-alpha06" + }, + "androidx.collection:collection-jvm": { + "shasums": { + "jar": "9f635f87c0f30cc9ee3ffd64ebbac39999fffdc85b7b487f76b79447009c51ea" + }, + "version": "1.5.0-alpha06" + }, + "androidx.collection:collection-ktx": { + "shasums": { + "jar": "9aa3a47251dd28404c8e850a4bf74309cf7d5d6d3ece0880f8dd273649187bf0" + }, + "version": "1.2.0" + }, + "androidx.compose.animation:animation-android:aar": { + "shasums": { + "jar": "01f349d54cf9ec41cd0adf5d8c2a869c2c245b8dbb6be5a57e7ebe3d68d31791" + }, + "version": "1.7.6" + }, + "androidx.compose.animation:animation-core-android:aar": { + "shasums": { + "jar": "9722d4fccd4a9e95910baa16652563ba92a5829f9d6e09194850447e3cd9983a" + }, + "version": "1.7.6" + }, + "androidx.compose.animation:animation-core:aar": { + "shasums": { + "jar": "666696056ed4f00c8a8c72e6590783daade7b60c78c47b01f82299f1d4c8da55" + }, + "version": "1.7.6" + }, + "androidx.compose.animation:animation:aar": { + "shasums": { + "jar": "0d24287c5b7fdc8e2147ffc466acdeb1b2c372fe0726c05f382106611c864f06" + }, + "version": "1.7.6" + }, + "androidx.compose.foundation:foundation-android:aar": { + "shasums": { + "jar": "5ccb96bab040a70f7fdd577faaad75343261c006d42fcc5723a38f50a82f597c" + }, + "version": "1.7.6" + }, + "androidx.compose.foundation:foundation-layout-android:aar": { + "shasums": { + "jar": "296e14e2b37f7ba09e4185637f71409199bced21d5a070fe26f6dc6b26d588b6" + }, + "version": "1.7.6" + }, + "androidx.compose.foundation:foundation-layout:aar": { + "shasums": { + "jar": "a58c5ac6be50b6e3ddc878452e19751101ef782cffab9c5cbb94150e964625f5" + }, + "version": "1.7.6" + }, + "androidx.compose.foundation:foundation:aar": { + "shasums": { + "jar": "f17c82e3c6be97b43f630bca8cd971f5c1c25f5f255df031ca72df5b14505491" + }, + "version": "1.7.6" + }, + "androidx.compose.material:material-android:aar": { + "shasums": { + "jar": "739b4547e028a47c391d80e731f7b82dae3f083ca912b1d3612745cb4c288297" + }, + "version": "1.7.6" + }, + "androidx.compose.material:material-ripple-android:aar": { + "shasums": { + "jar": "4f4b176d09191141e43023c85bb9f5a7de8f519efdd90c3d0a7dc953b3b2a8da" + }, + "version": "1.7.6" + }, + "androidx.compose.material:material-ripple:aar": { + "shasums": { + "jar": "b0056500d793708ca6d199152bf928ddf1245a00bdb537e063d28edd4b91fb97" + }, + "version": "1.7.6" + }, + "androidx.compose.material:material:aar": { + "shasums": { + "jar": "708eba3663afc05bd104fcc4465303a402733c11fa4177ad1afb5bdd010bc0e1" + }, + "version": "1.7.6" + }, + "androidx.compose.runtime:runtime-android:aar": { + "shasums": { + "jar": "482942683274e1961727b2a76d68fe4ab4abb8145fd8b3146142144ce0b25311" + }, + "version": "1.7.6" + }, + "androidx.compose.runtime:runtime-saveable-android:aar": { + "shasums": { + "jar": "802c98303c250a91b89d6b703c3eab73bff6cd220a85fdd10e17ca126f954879" + }, + "version": "1.7.6" + }, + "androidx.compose.runtime:runtime-saveable:aar": { + "shasums": { + "jar": "d030e99e8cbf914932ea58ef5cdd2850755a790e2ebb114f7261e96eb6d063b1" + }, + "version": "1.7.6" + }, + "androidx.compose.runtime:runtime:aar": { + "shasums": { + "jar": "e937ecfab5f9c0da8fc27b43d1a46aa2883e137b26023bc1406dc819762f7eac" + }, + "version": "1.7.6" + }, + "androidx.compose.ui:ui-android:aar": { + "shasums": { + "jar": "42df06e3390808c85256a7efd74d448da71cbc168b41497a30535045c926f5b0" + }, + "version": "1.7.6" + }, + "androidx.compose.ui:ui-geometry-android:aar": { + "shasums": { + "jar": "63eb3d049a8c819e3805d51ce15b9203249ce960ecfd53251126592047bc2ff0" + }, + "version": "1.7.6" + }, + "androidx.compose.ui:ui-geometry:aar": { + "shasums": { + "jar": "613d60a4c8c4cb4270a9fc2067cf4c943ff35ff4f92f779aee885be8c8659a86" + }, + "version": "1.7.6" + }, + "androidx.compose.ui:ui-graphics-android:aar": { + "shasums": { + "jar": "00c96a2e54b03bc0b72b8fc4327bd2a75b689c689aa01295d870141eb9ddddd0" + }, + "version": "1.7.6" + }, + "androidx.compose.ui:ui-graphics:aar": { + "shasums": { + "jar": "c6d1470cefd3f743bf87e00179cbd9452e442da8ffc538484c9cc3b8b3b02d49" + }, + "version": "1.7.6" + }, + "androidx.compose.ui:ui-text-android:aar": { + "shasums": { + "jar": "d2291842f1c3e8e70c4cb5c962c0754e463e023fef906f3437c209a096c09ec7" + }, + "version": "1.7.6" + }, + "androidx.compose.ui:ui-text:aar": { + "shasums": { + "jar": "a31a9aec4308f4544c23bb90a2c0995e75c5c1355785b6c4c06f6b8854be7e05" + }, + "version": "1.7.6" + }, + "androidx.compose.ui:ui-tooling-android:aar": { + "shasums": { + "jar": "f34446fdb8bf7594c9ecf037d2661db68becef40d7845415448803f1560bdecb" + }, + "version": "1.7.6" + }, + "androidx.compose.ui:ui-tooling-data-android:aar": { + "shasums": { + "jar": "70816bf7083e076ee824193661052efd97a2776fc721c0f5e6956aecf2a0d34e" + }, + "version": "1.7.6" + }, + "androidx.compose.ui:ui-tooling-data:aar": { + "shasums": { + "jar": "164a7447d5dd7577bff755a516e81941444f1e2f2e71c8e0594316df4984baf9" + }, + "version": "1.7.6" + }, + "androidx.compose.ui:ui-tooling-preview-android:aar": { + "shasums": { + "jar": "800e929cead9d30f079f378eb51fb52cddea2c3575ee8a5442ec6dc8a4adaca1" + }, + "version": "1.7.6" + }, + "androidx.compose.ui:ui-tooling-preview:aar": { + "shasums": { + "jar": "c7f56071d988ee6bec05d826964d3738e910dbe3e27afd1474fbfd35aab976d8" + }, + "version": "1.7.6" + }, + "androidx.compose.ui:ui-tooling:aar": { + "shasums": { + "jar": "e8d072ac4ebca38d0e628bea56d522c74989c62137acf2b7dc770563db36070c" + }, + "version": "1.7.6" + }, + "androidx.compose.ui:ui-unit-android:aar": { + "shasums": { + "jar": "9ed6214fdd4da272b0b2582c428f8c3dce5ce6a186c47daaf9fc01aec226a199" + }, + "version": "1.7.6" + }, + "androidx.compose.ui:ui-unit:aar": { + "shasums": { + "jar": "11e5e9764a19f49da5a5ee7747ba139742f1395958934d5e5a5786766583a2d3" + }, + "version": "1.7.6" + }, + "androidx.compose.ui:ui-util-android:aar": { + "shasums": { + "jar": "f74120949fd8f82fbfbcc3793246108f9554df0f51ecc7fb5d721ac971c4394a" + }, + "version": "1.7.6" + }, + "androidx.compose.ui:ui-util:aar": { + "shasums": { + "jar": "936886be26293a9bc9787f423d44711f3b2a63232feab40b6492177bab3cd695" + }, + "version": "1.7.6" + }, + "androidx.compose.ui:ui:aar": { + "shasums": { + "jar": "8385161866a8376b1c5b0631e7c9a385e32b2c7be0d8f9ff36b3af36c8703802" + }, + "version": "1.7.6" + }, + "androidx.concurrent:concurrent-futures": { + "shasums": { + "jar": "5595a40e278a7b39fa78a09490e3d7f3faa95c7b01447148bd38b5ade0605c35" + }, + "version": "1.0.0" + }, + "androidx.core:core-ktx:aar": { + "shasums": { + "jar": "c72c97ff4a32308bcaf3061eea5ddf33455ce413cee4aa1d5c82440c5759d4bc" + }, + "version": "1.15.0" + }, + "androidx.core:core:aar": { + "shasums": { + "jar": "432b85a1974076e14b487ece4a28c59a84f1b9efc3fc8be72cd7f05d32055e51" + }, + "version": "1.15.0" + }, + "androidx.cursoradapter:cursoradapter:aar": { + "shasums": { + "jar": "a81c8fe78815fa47df5b749deb52727ad11f9397da58b16017f4eb2c11e28564" + }, + "version": "1.0.0" + }, + "androidx.customview:customview-poolingcontainer:aar": { + "shasums": { + "jar": "3584102fc49bf399c56e3b7be4bfe12000c46112320cd8cf85cc0a8f93f3e752" + }, + "version": "1.0.0" + }, + "androidx.customview:customview:aar": { + "shasums": { + "jar": "20e5b8f6526a34595a604f56718da81167c0b40a7a94a57daa355663f2594df2" + }, + "version": "1.0.0" + }, + "androidx.drawerlayout:drawerlayout:aar": { + "shasums": { + "jar": "9402442cdc5a43cf62fb14f8cf98c63342d4d9d9b805c8033c6cf7e802749ac1" + }, + "version": "1.0.0" + }, + "androidx.emoji2:emoji2-views-helper:aar": { + "shasums": { + "jar": "7ffa4d464d9db259fca0cdb50fbd4ab63d6872bcda59468b9f7555504c7d5ac4" + }, + "version": "1.2.0" + }, + "androidx.emoji2:emoji2:aar": { + "shasums": { + "jar": "f31a06c150ecb03073f55a6f7b0b74a240a6a8d727c14ce76726d020570dfa8c" + }, + "version": "1.2.0" + }, + "androidx.fragment:fragment:aar": { + "shasums": { + "jar": "bc3c2431dda42e94bb9511c587eae890d276e4aafe393a8da7b00169186dafde" + }, + "version": "1.5.4" + }, + "androidx.graphics:graphics-path:aar": { + "shasums": { + "jar": "8ca4032b6d79b351f0b59ad4b580eddbb9423e1652f7c958830687f1eee2ec03" + }, + "version": "1.0.1" + }, + "androidx.interpolator:interpolator:aar": { + "shasums": { + "jar": "33193135a64fe21fa2c35eec6688f1a76e512606c0fc83dc1b689e37add7732a" + }, + "version": "1.0.0" + }, + "androidx.lifecycle:lifecycle-common": { + "shasums": { + "jar": "f34831b6c71cd844e1d35d1be49d5e79447c5ab856346531b1e8676fda7374b1" + }, + "version": "2.6.1" + }, + "androidx.lifecycle:lifecycle-common-java8": { + "shasums": { + "jar": "a1ec63c1bb973443cb731d78ec336c5e20e7ee35c89cbb32d36f92c55bb02542" + }, + "version": "2.3.0" + }, + "androidx.lifecycle:lifecycle-livedata-core:aar": { + "shasums": { + "jar": "2256780a3cff4a1e57fbb3d442557c17dc363ab8af105bcaf5261d8e2d5db949" + }, + "version": "2.6.1" + }, + "androidx.lifecycle:lifecycle-livedata:aar": { + "shasums": { + "jar": "c82609ced8c498f0a701a30fb6771bb7480860daee84d82e0a81ee86edf7ba39" + }, + "version": "2.0.0" + }, + "androidx.lifecycle:lifecycle-process:aar": { + "shasums": { + "jar": "db649b3efa24e31052145310b002db91da346b3f89c093ec38c3046db45e794e" + }, + "version": "2.4.1" + }, + "androidx.lifecycle:lifecycle-runtime-compose-android:aar": { + "shasums": { + "jar": "caceffd076b9874f75eac720ae48cb2e8bfa55631395b97fb0f682d279342a15" + }, + "version": "2.8.3" + }, + "androidx.lifecycle:lifecycle-runtime-ktx-android:aar": { + "shasums": { + "jar": "d3f5d1423bc6dc0c7343a72389425be4b6ef832ef461faf1542bbc624bdb3918" + }, + "version": "2.8.3" + }, + "androidx.lifecycle:lifecycle-runtime-ktx:aar": { + "shasums": { + "jar": "2d1e046ce2a5e7a594d19c2c3079f53629aaa3bfb08c6ba5835bb7030856fee0" + }, + "version": "2.8.3" + }, + "androidx.lifecycle:lifecycle-runtime:aar": { + "shasums": { + "jar": "d4ae4e8dc0ca6265b683d7b2333a102a3ee84ad97ccb9fbec4334f5cd0e3f54d" + }, + "version": "2.8.3" + }, + "androidx.lifecycle:lifecycle-viewmodel-ktx:aar": { + "shasums": { + "jar": "7fc0fa234a3321b1f34db5862b17da83d1c62c1bc66ec2fd4f1bb0a771acfabb" + }, + "version": "2.6.1" + }, + "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar": { + "shasums": { + "jar": "c82f89221adbe19df7c7adbab63f4ecc857fc746e3c9494256ab8fa5c20491b2" + }, + "version": "2.6.1" + }, + "androidx.lifecycle:lifecycle-viewmodel:aar": { + "shasums": { + "jar": "e4ff4338999e1c6c9c724719f5d4aa7dd61bf6f545d5256a27a9d375df9f2330" + }, + "version": "2.6.1" + }, + "androidx.loader:loader:aar": { + "shasums": { + "jar": "11f735cb3b55c458d470bed9e25254375b518b4b1bad6926783a7026db0f5025" + }, + "version": "1.0.0" + }, + "androidx.profileinstaller:profileinstaller:aar": { + "shasums": { + "jar": "d0e402ec31f24028a1dc7eb6a0a3f9d9635c1459392cd734396343b73d673948" + }, + "version": "1.3.1" + }, + "androidx.resourceinspection:resourceinspection-annotation": { + "shasums": { + "jar": "8cff870ec6fb31db48a52f4a792335b4bf8de07e03bd37823181526433ccd5cb" + }, + "version": "1.0.1" + }, + "androidx.savedstate:savedstate-ktx:aar": { + "shasums": { + "jar": "8553f87e7136c24ec5243560f48f1c32cba56daa77722f89589a5cafcb8f7894" + }, + "version": "1.2.1" + }, + "androidx.savedstate:savedstate:aar": { + "shasums": { + "jar": "21a7d4bcf6bdb94ad7b9283801529300b4fbb8808ca4f191e0cdce6fd8e4705a" + }, + "version": "1.2.1" + }, + "androidx.startup:startup-runtime:aar": { + "shasums": { + "jar": "e0a6329a371262fe4c450372b70fdaf33b769ef6917094723787cfce896b1dd3" + }, + "version": "1.1.1" + }, + "androidx.tracing:tracing:aar": { + "shasums": { + "jar": "6faa90390d1fdbf0adb9a99bf99de67b94c6c6f35aea9510593a9d17973736a2" + }, + "version": "1.2.0" + }, + "androidx.vectordrawable:vectordrawable-animated:aar": { + "shasums": { + "jar": "76da2c502371d9c38054df5e2b248d00da87809ed058f3363eae87ce5e2403f8" + }, + "version": "1.1.0" + }, + "androidx.vectordrawable:vectordrawable:aar": { + "shasums": { + "jar": "46fd633ac01b49b7fcabc263bf098c5a8b9e9a69774d234edcca04fb02df8e26" + }, + "version": "1.1.0" + }, + "androidx.versionedparcelable:versionedparcelable:aar": { + "shasums": { + "jar": "57e8d93260d18d5b9007c9eed3c64ad159de90c8609ebfc74a347cbd514535a4" + }, + "version": "1.1.1" + }, + "androidx.viewpager:viewpager:aar": { + "shasums": { + "jar": "147af4e14a1984010d8f155e5e19d781f03c1d70dfed02a8e0d18428b8fc8682" + }, + "version": "1.0.0" + }, + "com.google.guava:listenablefuture": { + "shasums": { + "jar": "e4ad7607e5c0477c6f890ef26a49cb8d1bb4dffb650bab4502afee64644e3069" + }, + "version": "1.0" + }, + "org.jetbrains.kotlin:kotlin-compose-compiler-plugin-embeddable": { + "shasums": { + "jar": "79563a7d0380f4449c9773b608541a67ae10d3a372cb5a335682aa57487be0ef" + }, + "version": "2.1.0" + }, + "org.jetbrains.kotlin:kotlin-stdlib": { + "shasums": { + "jar": "03a5c3965cc37051128e64e46748e394b6bd4c97fa81c6de6fc72bfd44e3421b" + }, + "version": "1.8.22" + }, + "org.jetbrains.kotlin:kotlin-stdlib-common": { + "shasums": { + "jar": "d0c2365e2437ef70f34586d50f055743f79716bcfe65e4bc7239cdd2669ef7c5" + }, + "version": "1.8.22" + }, + "org.jetbrains.kotlin:kotlin-stdlib-jdk7": { + "shasums": { + "jar": "ac12f092f12b575c1f9e0ab5025b1e610b0fe95663e26371c16c328895711bae" + }, + "version": "1.5.0" + }, + "org.jetbrains.kotlin:kotlin-stdlib-jdk8": { + "shasums": { + "jar": "15e6c81b9e845eefe58d51a04670bb90418046f458264ec0e61ee9bdbc1bfae7" + }, + "version": "1.5.0" + }, + "org.jetbrains.kotlinx:kotlinx-coroutines-android": { + "shasums": { + "jar": "7099198391d673c199fea084423d9f3fdc79470acba19111330c7f88504279c7" + }, + "version": "1.5.0" + }, + "org.jetbrains.kotlinx:kotlinx-coroutines-core": { + "shasums": { + "jar": "f9522095aedcc2a6ab32c7484061ea698352c71be1390adb403b59aa48a38fdc" + }, + "version": "1.7.3" + }, + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm": { + "shasums": { + "jar": "1ab3acc38f3e7355c4f9d1ec62107a46fa73c899f3070d055e5d4373dfe67e12" + }, + "version": "1.7.3" + }, + "org.jetbrains:annotations": { + "shasums": { + "jar": "ace2a10dc8e2d5fd34925ecac03e4988b2c0f851650c94b8cef49ba1bd111478" + }, + "version": "13.0" + } + }, + "conflict_resolution": { + "androidx.activity:activity:aar:1.5.1": "androidx.activity:activity:aar:1.7.0", + "androidx.annotation:annotation-experimental:1.4.1": "androidx.annotation:annotation-experimental:1.4.0", + "androidx.annotation:annotation-experimental:aar:1.0.0": "androidx.annotation:annotation-experimental:aar:1.4.1", + "androidx.annotation:annotation-experimental:aar:1.4.0": "androidx.annotation:annotation-experimental:aar:1.4.1", + "androidx.annotation:annotation-jvm:1.8.0": "androidx.annotation:annotation-jvm:1.8.1", + "androidx.annotation:annotation-jvm:1.9.1": "androidx.annotation:annotation-jvm:1.8.1", + "androidx.annotation:annotation:1.0.0": "androidx.annotation:annotation:1.8.1", + "androidx.annotation:annotation:1.1.0": "androidx.annotation:annotation:1.8.1", + "androidx.annotation:annotation:1.2.0": "androidx.annotation:annotation:1.8.1", + "androidx.annotation:annotation:1.3.0": "androidx.annotation:annotation:1.8.1", + "androidx.annotation:annotation:1.7.0": "androidx.annotation:annotation:1.8.1", + "androidx.annotation:annotation:1.8.0": "androidx.annotation:annotation:1.8.1", + "androidx.annotation:annotation:1.9.1": "androidx.annotation:annotation:1.8.1", + "androidx.arch.core:core-common:2.0.0": "androidx.arch.core:core-common:2.2.0", + "androidx.arch.core:core-common:2.1.0": "androidx.arch.core:core-common:2.2.0", + "androidx.arch.core:core-runtime:aar:2.0.0": "androidx.arch.core:core-runtime:aar:2.2.0", + "androidx.collection:collection-jvm:1.4.0": "androidx.collection:collection-jvm:1.5.0-alpha06", + "androidx.collection:collection-jvm:1.4.4": "androidx.collection:collection-jvm:1.5.0-alpha06", + "androidx.compose.animation:animation-core:1.2.1": "androidx.compose.animation:animation-core:1.7.6", + "androidx.compose.runtime:runtime-android:1.6.5": "androidx.compose.runtime:runtime-android:1.7.6", + "androidx.compose.runtime:runtime-saveable:aar:1.0.1": "androidx.compose.runtime:runtime-saveable:aar:1.7.6", + "androidx.compose.runtime:runtime:aar:1.0.1": "androidx.compose.runtime:runtime:aar:1.7.6", + "androidx.compose.ui:ui-geometry:aar:1.0.1": "androidx.compose.ui:ui-geometry:aar:1.7.6", + "androidx.compose.ui:ui-graphics:aar:1.0.1": "androidx.compose.ui:ui-graphics:aar:1.7.6", + "androidx.compose.ui:ui-text:aar:1.0.1": "androidx.compose.ui:ui-text:aar:1.7.6", + "androidx.compose.ui:ui-unit:aar:1.0.1": "androidx.compose.ui:ui-unit:aar:1.7.6", + "androidx.compose.ui:ui-util:aar:1.0.1": "androidx.compose.ui:ui-util:aar:1.7.6", + "androidx.compose.ui:ui:aar:1.0.1": "androidx.compose.ui:ui:aar:1.7.6", + "androidx.concurrent:concurrent-futures:1.1.0": "androidx.concurrent:concurrent-futures:1.0.0", + "androidx.core:core-ktx:aar:1.1.0": "androidx.core:core-ktx:aar:1.13.0", + "androidx.core:core-ktx:aar:1.13.0": "androidx.core:core-ktx:aar:1.15.0", + "androidx.core:core-ktx:aar:1.2.0": "androidx.core:core-ktx:aar:1.13.0", + "androidx.core:core-ktx:aar:1.5.0": "androidx.core:core-ktx:aar:1.13.0", + "androidx.core:core:aar:1.0.0": "androidx.core:core:aar:1.15.0", + "androidx.core:core:aar:1.1.0": "androidx.core:core:aar:1.15.0", + "androidx.core:core:aar:1.12.0": "androidx.core:core:aar:1.15.0", + "androidx.core:core:aar:1.13.0": "androidx.core:core:aar:1.15.0", + "androidx.core:core:aar:1.13.1": "androidx.core:core:aar:1.15.0", + "androidx.core:core:aar:1.3.0": "androidx.core:core:aar:1.15.0", + "androidx.core:core:aar:1.5.0": "androidx.core:core:aar:1.15.0", + "androidx.core:core:aar:1.6.0": "androidx.core:core:aar:1.15.0", + "androidx.core:core:aar:1.7.0": "androidx.core:core:aar:1.15.0", + "androidx.core:core:aar:1.8.0": "androidx.core:core:aar:1.15.0", + "androidx.emoji2:emoji2:1.3.0": "androidx.emoji2:emoji2:1.2.0", + "androidx.emoji2:emoji2:aar:1.3.0": "androidx.emoji2:emoji2:aar:1.2.0", + "androidx.lifecycle:lifecycle-common:2.3.0": "androidx.lifecycle:lifecycle-common:2.6.1", + "androidx.lifecycle:lifecycle-livedata-core:aar:2.0.0": "androidx.lifecycle:lifecycle-livedata-core:aar:2.6.1", + "androidx.lifecycle:lifecycle-livedata-core:aar:2.5.1": "androidx.lifecycle:lifecycle-livedata-core:aar:2.6.1", + "androidx.lifecycle:lifecycle-runtime-ktx:aar:2.6.1": "androidx.lifecycle:lifecycle-runtime-ktx:aar:2.8.3", + "androidx.lifecycle:lifecycle-runtime:2.6.1": "androidx.lifecycle:lifecycle-runtime:2.8.3", + "androidx.lifecycle:lifecycle-runtime:2.6.2": "androidx.lifecycle:lifecycle-runtime:2.8.3", + "androidx.lifecycle:lifecycle-runtime:aar:2.3.0": "androidx.lifecycle:lifecycle-runtime:aar:2.6.1", + "androidx.lifecycle:lifecycle-runtime:aar:2.6.1": "androidx.lifecycle:lifecycle-runtime:aar:2.8.3", + "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar:2.5.1": "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar:2.6.1", + "androidx.lifecycle:lifecycle-viewmodel:aar:2.0.0": "androidx.lifecycle:lifecycle-viewmodel:aar:2.6.1", + "androidx.lifecycle:lifecycle-viewmodel:aar:2.3.0": "androidx.lifecycle:lifecycle-viewmodel:aar:2.6.1", + "androidx.lifecycle:lifecycle-viewmodel:aar:2.5.1": "androidx.lifecycle:lifecycle-viewmodel:aar:2.6.1", + "androidx.profileinstaller:profileinstaller:aar:1.0.1": "androidx.profileinstaller:profileinstaller:aar:1.3.1", + "androidx.profileinstaller:profileinstaller:aar:1.3.0": "androidx.profileinstaller:profileinstaller:aar:1.3.1", + "androidx.savedstate:savedstate:aar:1.1.0": "androidx.savedstate:savedstate:aar:1.2.1", + "androidx.savedstate:savedstate:aar:1.2.0": "androidx.savedstate:savedstate:aar:1.2.1", + "androidx.startup:startup-runtime:aar:1.0.0": "androidx.startup:startup-runtime:aar:1.1.1", + "androidx.tracing:tracing:aar:1.0.0": "androidx.tracing:tracing:aar:1.2.0", + "org.jetbrains.kotlin:kotlin-stdlib-common:1.5.21": "org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22", + "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20": "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.0", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0": "org.jetbrains.kotlin:kotlin-stdlib:1.8.22", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.21": "org.jetbrains.kotlin:kotlin-stdlib:1.8.22", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.31": "org.jetbrains.kotlin:kotlin-stdlib:1.8.22", + "org.jetbrains.kotlin:kotlin-stdlib:1.6.21": "org.jetbrains.kotlin:kotlin-stdlib:1.8.22", + "org.jetbrains.kotlin:kotlin-stdlib:1.7.10": "org.jetbrains.kotlin:kotlin-stdlib:1.8.22", + "org.jetbrains.kotlin:kotlin-stdlib:1.8.10": "org.jetbrains.kotlin:kotlin-stdlib:1.8.22", + "org.jetbrains.kotlin:kotlin-stdlib:1.9.24": "org.jetbrains.kotlin:kotlin-stdlib:1.8.22", + "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4": "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0", + "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3": "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0", + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.0": "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3", + "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0": "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3", + "org.jetbrains:annotations:23.0.0": "org.jetbrains:annotations:13.0" + }, + "dependencies": { + "androidx.activity:activity-compose:aar": [ + "androidx.activity:activity-ktx:aar", + "androidx.compose.runtime:runtime-saveable:aar", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui:aar", + "androidx.lifecycle:lifecycle-viewmodel:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.activity:activity-ktx:aar": [ + "androidx.activity:activity:aar", + "androidx.core:core-ktx:aar", + "androidx.lifecycle:lifecycle-runtime-ktx:aar", + "androidx.lifecycle:lifecycle-viewmodel-ktx:aar", + "androidx.savedstate:savedstate-ktx:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.activity:activity:aar": [ + "androidx.annotation:annotation", + "androidx.collection:collection", + "androidx.core:core:aar", + "androidx.lifecycle:lifecycle-runtime:aar", + "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar", + "androidx.lifecycle:lifecycle-viewmodel:aar", + "androidx.profileinstaller:profileinstaller:aar", + "androidx.savedstate:savedstate:aar", + "androidx.tracing:tracing:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.annotation:annotation": [ + "androidx.annotation:annotation-jvm", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.annotation:annotation-experimental:aar": [ + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.annotation:annotation-jvm": [ + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.appcompat:appcompat-resources:aar": [ + "androidx.annotation:annotation", + "androidx.collection:collection", + "androidx.core:core:aar", + "androidx.vectordrawable:vectordrawable-animated:aar", + "androidx.vectordrawable:vectordrawable:aar" + ], + "androidx.appcompat:appcompat:aar": [ + "androidx.activity:activity:aar", + "androidx.annotation:annotation", + "androidx.appcompat:appcompat-resources:aar", + "androidx.collection:collection", + "androidx.core:core-ktx:aar", + "androidx.core:core:aar", + "androidx.cursoradapter:cursoradapter:aar", + "androidx.drawerlayout:drawerlayout:aar", + "androidx.emoji2:emoji2-views-helper:aar", + "androidx.emoji2:emoji2:aar", + "androidx.fragment:fragment:aar", + "androidx.lifecycle:lifecycle-runtime:aar", + "androidx.lifecycle:lifecycle-viewmodel:aar", + "androidx.profileinstaller:profileinstaller:aar", + "androidx.resourceinspection:resourceinspection-annotation", + "androidx.savedstate:savedstate:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.arch.core:core-common": [ + "androidx.annotation:annotation" + ], + "androidx.arch.core:core-runtime:aar": [ + "androidx.annotation:annotation", + "androidx.arch.core:core-common" + ], + "androidx.autofill:autofill:aar": [ + "androidx.core:core:aar" + ], + "androidx.collection:collection": [ + "androidx.annotation:annotation", + "androidx.collection:collection-jvm", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.collection:collection-jvm": [ + "androidx.annotation:annotation-jvm", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.collection:collection-ktx": [ + "androidx.collection:collection", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.animation:animation-android:aar": [ + "androidx.annotation:annotation", + "androidx.annotation:annotation-experimental:aar", + "androidx.collection:collection-jvm", + "androidx.compose.animation:animation-core:aar", + "androidx.compose.foundation:foundation-layout-android:aar", + "androidx.compose.runtime:runtime-android:aar", + "androidx.compose.ui:ui-android:aar", + "androidx.compose.ui:ui-geometry-android:aar", + "androidx.compose.ui:ui-graphics-android:aar", + "androidx.compose.ui:ui-util-android:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.animation:animation-core-android:aar": [ + "androidx.annotation:annotation", + "androidx.collection:collection-jvm", + "androidx.compose.runtime:runtime-android:aar", + "androidx.compose.ui:ui-android:aar", + "androidx.compose.ui:ui-graphics-android:aar", + "androidx.compose.ui:ui-unit-android:aar", + "androidx.compose.ui:ui-util-android:aar", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm" + ], + "androidx.compose.animation:animation-core:aar": [ + "androidx.compose.animation:animation-core-android:aar", + "org.jetbrains.kotlinx:kotlinx-coroutines-core" + ], + "androidx.compose.animation:animation:aar": [ + "androidx.compose.animation:animation-android:aar", + "androidx.compose.animation:animation-core:aar", + "androidx.compose.foundation:foundation-layout:aar", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-geometry:aar" + ], + "androidx.compose.foundation:foundation-android:aar": [ + "androidx.annotation:annotation", + "androidx.annotation:annotation-experimental:aar", + "androidx.collection:collection-jvm", + "androidx.compose.animation:animation-android:aar", + "androidx.compose.foundation:foundation-layout:aar", + "androidx.compose.runtime:runtime-android:aar", + "androidx.compose.ui:ui-android:aar", + "androidx.compose.ui:ui-text-android:aar", + "androidx.compose.ui:ui-util-android:aar", + "androidx.core:core:aar", + "androidx.emoji2:emoji2:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.foundation:foundation-layout-android:aar": [ + "androidx.annotation:annotation", + "androidx.annotation:annotation-experimental:aar", + "androidx.collection:collection-jvm", + "androidx.compose.animation:animation-core:aar", + "androidx.compose.runtime:runtime-android:aar", + "androidx.compose.ui:ui-android:aar", + "androidx.compose.ui:ui-unit-android:aar", + "androidx.compose.ui:ui-util-android:aar", + "androidx.core:core:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.foundation:foundation-layout:aar": [ + "androidx.compose.foundation:foundation-layout-android:aar", + "androidx.compose.ui:ui:aar" + ], + "androidx.compose.foundation:foundation:aar": [ + "androidx.collection:collection", + "androidx.compose.animation:animation:aar", + "androidx.compose.foundation:foundation-android:aar", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui:aar" + ], + "androidx.compose.material:material-android:aar": [ + "androidx.annotation:annotation", + "androidx.annotation:annotation-experimental:aar", + "androidx.compose.animation:animation-android:aar", + "androidx.compose.animation:animation-core-android:aar", + "androidx.compose.foundation:foundation-android:aar", + "androidx.compose.foundation:foundation-layout-android:aar", + "androidx.compose.material:material-ripple-android:aar", + "androidx.compose.runtime:runtime-android:aar", + "androidx.compose.ui:ui-android:aar", + "androidx.compose.ui:ui-text-android:aar", + "androidx.compose.ui:ui-util-android:aar", + "androidx.lifecycle:lifecycle-runtime:aar", + "androidx.lifecycle:lifecycle-viewmodel:aar", + "androidx.savedstate:savedstate:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.material:material-ripple-android:aar": [ + "androidx.collection:collection-jvm", + "androidx.compose.animation:animation-android:aar", + "androidx.compose.foundation:foundation-android:aar", + "androidx.compose.runtime:runtime-android:aar", + "androidx.compose.ui:ui-util-android:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.material:material-ripple:aar": [ + "androidx.compose.foundation:foundation:aar", + "androidx.compose.material:material-ripple-android:aar", + "androidx.compose.runtime:runtime:aar" + ], + "androidx.compose.material:material:aar": [ + "androidx.compose.animation:animation-core:aar", + "androidx.compose.foundation:foundation:aar", + "androidx.compose.material:material-android:aar", + "androidx.compose.material:material-ripple:aar", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-text:aar", + "androidx.compose.ui:ui:aar" + ], + "androidx.compose.runtime:runtime-android:aar": [ + "androidx.annotation:annotation-experimental:aar", + "androidx.collection:collection-jvm", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlin:kotlin-stdlib-common", + "org.jetbrains.kotlinx:kotlinx-coroutines-android", + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm" + ], + "androidx.compose.runtime:runtime-saveable-android:aar": [ + "androidx.annotation:annotation", + "androidx.collection:collection-jvm", + "androidx.compose.runtime:runtime:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.runtime:runtime-saveable:aar": [ + "androidx.annotation:annotation", + "androidx.compose.runtime:runtime-saveable-android:aar", + "androidx.compose.runtime:runtime:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.runtime:runtime:aar": [ + "androidx.annotation:annotation", + "androidx.compose.runtime:runtime-android:aar", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlinx:kotlinx-coroutines-android", + "org.jetbrains.kotlinx:kotlinx-coroutines-core" + ], + "androidx.compose.ui:ui-android:aar": [ + "androidx.activity:activity-ktx:aar", + "androidx.annotation:annotation-experimental:aar", + "androidx.annotation:annotation-jvm", + "androidx.autofill:autofill:aar", + "androidx.collection:collection", + "androidx.compose.runtime:runtime-android:aar", + "androidx.compose.runtime:runtime-saveable-android:aar", + "androidx.compose.ui:ui-geometry:aar", + "androidx.compose.ui:ui-graphics:aar", + "androidx.compose.ui:ui-text:aar", + "androidx.compose.ui:ui-unit:aar", + "androidx.compose.ui:ui-util:aar", + "androidx.core:core:aar", + "androidx.customview:customview-poolingcontainer:aar", + "androidx.emoji2:emoji2:aar", + "androidx.lifecycle:lifecycle-runtime-compose-android:aar", + "androidx.lifecycle:lifecycle-viewmodel:aar", + "androidx.profileinstaller:profileinstaller:aar", + "androidx.savedstate:savedstate-ktx:aar", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlinx:kotlinx-coroutines-android", + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm" + ], + "androidx.compose.ui:ui-geometry-android:aar": [ + "androidx.annotation:annotation", + "androidx.compose.runtime:runtime-android:aar", + "androidx.compose.ui:ui-util:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.ui:ui-geometry:aar": [ + "androidx.annotation:annotation", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-geometry-android:aar", + "androidx.compose.ui:ui-util:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.ui:ui-graphics-android:aar": [ + "androidx.annotation:annotation", + "androidx.annotation:annotation-experimental:aar", + "androidx.collection:collection-jvm", + "androidx.compose.runtime:runtime-android:aar", + "androidx.compose.ui:ui-unit:aar", + "androidx.compose.ui:ui-util:aar", + "androidx.core:core:aar", + "androidx.graphics:graphics-path:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.ui:ui-graphics:aar": [ + "androidx.annotation:annotation", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-graphics-android:aar", + "androidx.compose.ui:ui-unit:aar", + "androidx.compose.ui:ui-util:aar", + "org.jetbrains.kotlin:kotlin-stdlib-common" + ], + "androidx.compose.ui:ui-text-android:aar": [ + "androidx.annotation:annotation", + "androidx.annotation:annotation-experimental:aar", + "androidx.collection:collection-jvm", + "androidx.compose.runtime:runtime-android:aar", + "androidx.compose.runtime:runtime-saveable-android:aar", + "androidx.compose.ui:ui-graphics:aar", + "androidx.compose.ui:ui-unit:aar", + "androidx.compose.ui:ui-util:aar", + "androidx.core:core:aar", + "androidx.emoji2:emoji2:aar", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm" + ], + "androidx.compose.ui:ui-text:aar": [ + "androidx.annotation:annotation", + "androidx.collection:collection", + "androidx.compose.runtime:runtime-saveable:aar", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-graphics:aar", + "androidx.compose.ui:ui-text-android:aar", + "androidx.compose.ui:ui-unit:aar", + "androidx.compose.ui:ui-util:aar", + "androidx.core:core:aar", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlin:kotlin-stdlib-common" + ], + "androidx.compose.ui:ui-tooling-android:aar": [ + "androidx.activity:activity-compose:aar", + "androidx.annotation:annotation-jvm", + "androidx.compose.animation:animation-android:aar", + "androidx.compose.material:material:aar", + "androidx.compose.runtime:runtime-android:aar", + "androidx.compose.ui:ui-tooling-data:aar", + "androidx.compose.ui:ui-tooling-preview:aar", + "androidx.compose.ui:ui:aar", + "androidx.lifecycle:lifecycle-common", + "androidx.savedstate:savedstate-ktx:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.ui:ui-tooling-data-android:aar": [ + "androidx.annotation:annotation", + "androidx.annotation:annotation-experimental:aar", + "androidx.compose.runtime:runtime-android:aar", + "androidx.compose.ui:ui:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.ui:ui-tooling-data:aar": [ + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-tooling-data-android:aar", + "androidx.compose.ui:ui:aar" + ], + "androidx.compose.ui:ui-tooling-preview-android:aar": [ + "androidx.annotation:annotation", + "androidx.compose.runtime:runtime-android:aar", + "org.jetbrains.kotlin:kotlin-stdlib-common" + ], + "androidx.compose.ui:ui-tooling-preview:aar": [ + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-tooling-preview-android:aar" + ], + "androidx.compose.ui:ui-tooling:aar": [ + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-tooling-android:aar", + "androidx.compose.ui:ui-tooling-data:aar", + "androidx.compose.ui:ui-tooling-preview:aar", + "androidx.compose.ui:ui:aar" + ], + "androidx.compose.ui:ui-unit-android:aar": [ + "androidx.annotation:annotation", + "androidx.annotation:annotation-experimental:aar", + "androidx.collection:collection-jvm", + "androidx.collection:collection-ktx", + "androidx.compose.runtime:runtime-android:aar", + "androidx.compose.ui:ui-geometry:aar", + "androidx.compose.ui:ui-util:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.ui:ui-unit:aar": [ + "androidx.annotation:annotation", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-geometry:aar", + "androidx.compose.ui:ui-unit-android:aar", + "androidx.compose.ui:ui-util:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.ui:ui-util-android:aar": [ + "androidx.annotation:annotation-experimental:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.ui:ui-util:aar": [ + "androidx.compose.ui:ui-util-android:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.compose.ui:ui:aar": [ + "androidx.annotation:annotation", + "androidx.autofill:autofill:aar", + "androidx.compose.runtime:runtime-saveable:aar", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-android:aar", + "androidx.compose.ui:ui-geometry:aar", + "androidx.compose.ui:ui-graphics:aar", + "androidx.compose.ui:ui-text:aar", + "androidx.compose.ui:ui-unit:aar", + "androidx.compose.ui:ui-util:aar", + "androidx.lifecycle:lifecycle-common-java8", + "androidx.lifecycle:lifecycle-runtime:aar", + "androidx.lifecycle:lifecycle-viewmodel:aar", + "androidx.profileinstaller:profileinstaller:aar", + "androidx.savedstate:savedstate:aar", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlin:kotlin-stdlib-common", + "org.jetbrains.kotlinx:kotlinx-coroutines-android", + "org.jetbrains.kotlinx:kotlinx-coroutines-core" + ], + "androidx.concurrent:concurrent-futures": [ + "androidx.annotation:annotation", + "com.google.guava:listenablefuture" + ], + "androidx.core:core-ktx:aar": [ + "androidx.annotation:annotation", + "androidx.core:core:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.core:core:aar": [ + "androidx.annotation:annotation", + "androidx.annotation:annotation-experimental:aar", + "androidx.collection:collection", + "androidx.concurrent:concurrent-futures", + "androidx.interpolator:interpolator:aar", + "androidx.lifecycle:lifecycle-runtime:aar", + "androidx.tracing:tracing:aar", + "androidx.versionedparcelable:versionedparcelable:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.cursoradapter:cursoradapter:aar": [ + "androidx.annotation:annotation" + ], + "androidx.customview:customview-poolingcontainer:aar": [ + "androidx.core:core-ktx:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.customview:customview:aar": [ + "androidx.annotation:annotation", + "androidx.core:core:aar" + ], + "androidx.drawerlayout:drawerlayout:aar": [ + "androidx.annotation:annotation", + "androidx.core:core:aar", + "androidx.customview:customview:aar" + ], + "androidx.emoji2:emoji2-views-helper:aar": [ + "androidx.collection:collection", + "androidx.core:core:aar", + "androidx.emoji2:emoji2:aar" + ], + "androidx.emoji2:emoji2:aar": [ + "androidx.annotation:annotation", + "androidx.collection:collection", + "androidx.core:core:aar", + "androidx.lifecycle:lifecycle-process:aar", + "androidx.startup:startup-runtime:aar" + ], + "androidx.fragment:fragment:aar": [ + "androidx.activity:activity:aar", + "androidx.annotation:annotation", + "androidx.annotation:annotation-experimental:aar", + "androidx.collection:collection", + "androidx.core:core-ktx:aar", + "androidx.lifecycle:lifecycle-livedata-core:aar", + "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar", + "androidx.lifecycle:lifecycle-viewmodel:aar", + "androidx.loader:loader:aar", + "androidx.savedstate:savedstate:aar", + "androidx.viewpager:viewpager:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.graphics:graphics-path:aar": [ + "androidx.core:core:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.interpolator:interpolator:aar": [ + "androidx.annotation:annotation" + ], + "androidx.lifecycle:lifecycle-common": [ + "androidx.annotation:annotation", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlinx:kotlinx-coroutines-android" + ], + "androidx.lifecycle:lifecycle-common-java8": [ + "androidx.annotation:annotation", + "androidx.lifecycle:lifecycle-common" + ], + "androidx.lifecycle:lifecycle-livedata:aar": [ + "androidx.arch.core:core-common", + "androidx.arch.core:core-runtime:aar", + "androidx.lifecycle:lifecycle-livedata-core:aar" + ], + "androidx.lifecycle:lifecycle-runtime-compose-android:aar": [ + "androidx.annotation:annotation-jvm", + "androidx.compose.runtime:runtime-android:aar", + "androidx.lifecycle:lifecycle-runtime-ktx:aar", + "androidx.lifecycle:lifecycle-runtime:aar" + ], + "androidx.lifecycle:lifecycle-runtime-ktx-android:aar": [ + "androidx.annotation:annotation-jvm", + "androidx.lifecycle:lifecycle-runtime:aar", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlinx:kotlinx-coroutines-android" + ], + "androidx.lifecycle:lifecycle-runtime-ktx:aar": [ + "androidx.annotation:annotation", + "androidx.lifecycle:lifecycle-runtime-ktx-android:aar", + "androidx.lifecycle:lifecycle-runtime:aar", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlinx:kotlinx-coroutines-android" + ], + "androidx.lifecycle:lifecycle-runtime:aar": [ + "androidx.annotation:annotation", + "androidx.arch.core:core-common", + "androidx.arch.core:core-runtime:aar", + "androidx.lifecycle:lifecycle-common", + "androidx.profileinstaller:profileinstaller:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.lifecycle:lifecycle-viewmodel-ktx:aar": [ + "androidx.lifecycle:lifecycle-viewmodel:aar", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlinx:kotlinx-coroutines-android" + ], + "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar": [ + "androidx.annotation:annotation", + "androidx.core:core-ktx:aar", + "androidx.lifecycle:lifecycle-livedata-core:aar", + "androidx.lifecycle:lifecycle-viewmodel:aar", + "androidx.savedstate:savedstate:aar", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlinx:kotlinx-coroutines-android" + ], + "androidx.lifecycle:lifecycle-viewmodel:aar": [ + "androidx.annotation:annotation", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.loader:loader:aar": [ + "androidx.annotation:annotation", + "androidx.core:core:aar", + "androidx.lifecycle:lifecycle-livedata:aar", + "androidx.lifecycle:lifecycle-viewmodel:aar" + ], + "androidx.profileinstaller:profileinstaller:aar": [ + "androidx.annotation:annotation", + "androidx.concurrent:concurrent-futures", + "androidx.startup:startup-runtime:aar", + "com.google.guava:listenablefuture" + ], + "androidx.resourceinspection:resourceinspection-annotation": [ + "androidx.annotation:annotation" + ], + "androidx.savedstate:savedstate-ktx:aar": [ + "androidx.savedstate:savedstate:aar", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.savedstate:savedstate:aar": [ + "androidx.annotation:annotation", + "androidx.arch.core:core-common", + "androidx.lifecycle:lifecycle-common", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "androidx.tracing:tracing:aar": [ + "androidx.annotation:annotation" + ], + "androidx.vectordrawable:vectordrawable-animated:aar": [ + "androidx.collection:collection", + "androidx.interpolator:interpolator:aar", + "androidx.vectordrawable:vectordrawable:aar" + ], + "androidx.vectordrawable:vectordrawable:aar": [ + "androidx.annotation:annotation", + "androidx.collection:collection", + "androidx.core:core:aar" + ], + "androidx.versionedparcelable:versionedparcelable:aar": [ + "androidx.annotation:annotation", + "androidx.collection:collection" + ], + "androidx.viewpager:viewpager:aar": [ + "androidx.annotation:annotation", + "androidx.core:core:aar", + "androidx.customview:customview:aar" + ], + "org.jetbrains.kotlin:kotlin-stdlib": [ + "org.jetbrains.kotlin:kotlin-stdlib-common", + "org.jetbrains:annotations" + ], + "org.jetbrains.kotlin:kotlin-stdlib-jdk7": [ + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "org.jetbrains.kotlin:kotlin-stdlib-jdk8": [ + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlin:kotlin-stdlib-jdk7" + ], + "org.jetbrains.kotlinx:kotlinx-coroutines-android": [ + "org.jetbrains.kotlin:kotlin-stdlib-jdk8", + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm" + ], + "org.jetbrains.kotlinx:kotlinx-coroutines-core": [ + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm" + ], + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm": [ + "org.jetbrains.kotlin:kotlin-stdlib-jdk8", + "org.jetbrains:annotations" + ] + }, + "packages": { + "androidx.annotation:annotation-jvm": [ + "androidx.annotation" + ], + "androidx.arch.core:core-common": [ + "androidx.arch.core.internal", + "androidx.arch.core.util" + ], + "androidx.collection:collection-jvm": [ + "androidx.collection", + "androidx.collection.internal" + ], + "androidx.collection:collection-ktx": [ + "androidx.collection" + ], + "androidx.concurrent:concurrent-futures": [ + "androidx.concurrent.futures" + ], + "androidx.lifecycle:lifecycle-common": [ + "androidx.lifecycle" + ], + "androidx.lifecycle:lifecycle-common-java8": [ + "androidx.lifecycle" + ], + "androidx.resourceinspection:resourceinspection-annotation": [ + "androidx.resourceinspection.annotation" + ], + "com.google.guava:listenablefuture": [ + "com.google.common.util.concurrent" + ], + "org.jetbrains.kotlin:kotlin-compose-compiler-plugin-embeddable": [ + "androidx.compose.compiler.plugins.kotlin", + "androidx.compose.compiler.plugins.kotlin.analysis", + "androidx.compose.compiler.plugins.kotlin.inference", + "androidx.compose.compiler.plugins.kotlin.k1", + "androidx.compose.compiler.plugins.kotlin.k2", + "androidx.compose.compiler.plugins.kotlin.lower", + "androidx.compose.compiler.plugins.kotlin.lower.hiddenfromobjc" + ], + "org.jetbrains.kotlin:kotlin-stdlib": [ + "kotlin", + "kotlin.annotation", + "kotlin.collections", + "kotlin.collections.builders", + "kotlin.collections.jdk8", + "kotlin.collections.unsigned", + "kotlin.comparisons", + "kotlin.concurrent", + "kotlin.contracts", + "kotlin.coroutines", + "kotlin.coroutines.cancellation", + "kotlin.coroutines.intrinsics", + "kotlin.coroutines.jvm.internal", + "kotlin.enums", + "kotlin.experimental", + "kotlin.internal", + "kotlin.internal.jdk7", + "kotlin.internal.jdk8", + "kotlin.io", + "kotlin.io.encoding", + "kotlin.io.path", + "kotlin.jdk7", + "kotlin.js", + "kotlin.jvm", + "kotlin.jvm.functions", + "kotlin.jvm.internal", + "kotlin.jvm.internal.markers", + "kotlin.jvm.internal.unsafe", + "kotlin.jvm.jdk8", + "kotlin.jvm.optionals", + "kotlin.math", + "kotlin.properties", + "kotlin.random", + "kotlin.random.jdk8", + "kotlin.ranges", + "kotlin.reflect", + "kotlin.sequences", + "kotlin.streams.jdk8", + "kotlin.system", + "kotlin.text", + "kotlin.text.jdk8", + "kotlin.time", + "kotlin.time.jdk8" + ], + "org.jetbrains.kotlin:kotlin-stdlib-jdk7": [ + "kotlin.internal.jdk7", + "kotlin.io.path", + "kotlin.jdk7" + ], + "org.jetbrains.kotlin:kotlin-stdlib-jdk8": [ + "kotlin.collections.jdk8", + "kotlin.internal.jdk8", + "kotlin.random.jdk8", + "kotlin.streams.jdk8", + "kotlin.text.jdk8", + "kotlin.time.jdk8" + ], + "org.jetbrains.kotlinx:kotlinx-coroutines-android": [ + "kotlinx.coroutines.android" + ], + "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" + ] + }, + "repositories": { + "https://maven.google.com/": [ + "androidx.activity:activity-compose:aar", + "androidx.activity:activity-ktx:aar", + "androidx.activity:activity:aar", + "androidx.annotation:annotation", + "androidx.annotation:annotation-experimental:aar", + "androidx.annotation:annotation-jvm", + "androidx.appcompat:appcompat-resources:aar", + "androidx.appcompat:appcompat:aar", + "androidx.arch.core:core-common", + "androidx.arch.core:core-runtime:aar", + "androidx.autofill:autofill:aar", + "androidx.collection:collection", + "androidx.collection:collection-jvm", + "androidx.collection:collection-ktx", + "androidx.compose.animation:animation-android:aar", + "androidx.compose.animation:animation-core-android:aar", + "androidx.compose.animation:animation-core:aar", + "androidx.compose.animation:animation:aar", + "androidx.compose.foundation:foundation-android:aar", + "androidx.compose.foundation:foundation-layout-android:aar", + "androidx.compose.foundation:foundation-layout:aar", + "androidx.compose.foundation:foundation:aar", + "androidx.compose.material:material-android:aar", + "androidx.compose.material:material-ripple-android:aar", + "androidx.compose.material:material-ripple:aar", + "androidx.compose.material:material:aar", + "androidx.compose.runtime:runtime-android:aar", + "androidx.compose.runtime:runtime-saveable-android:aar", + "androidx.compose.runtime:runtime-saveable:aar", + "androidx.compose.runtime:runtime:aar", + "androidx.compose.ui:ui-android:aar", + "androidx.compose.ui:ui-geometry-android:aar", + "androidx.compose.ui:ui-geometry:aar", + "androidx.compose.ui:ui-graphics-android:aar", + "androidx.compose.ui:ui-graphics:aar", + "androidx.compose.ui:ui-text-android:aar", + "androidx.compose.ui:ui-text:aar", + "androidx.compose.ui:ui-tooling-android:aar", + "androidx.compose.ui:ui-tooling-data-android:aar", + "androidx.compose.ui:ui-tooling-data:aar", + "androidx.compose.ui:ui-tooling-preview-android:aar", + "androidx.compose.ui:ui-tooling-preview:aar", + "androidx.compose.ui:ui-tooling:aar", + "androidx.compose.ui:ui-unit-android:aar", + "androidx.compose.ui:ui-unit:aar", + "androidx.compose.ui:ui-util-android:aar", + "androidx.compose.ui:ui-util:aar", + "androidx.compose.ui:ui:aar", + "androidx.concurrent:concurrent-futures", + "androidx.core:core-ktx:aar", + "androidx.core:core:aar", + "androidx.cursoradapter:cursoradapter:aar", + "androidx.customview:customview-poolingcontainer:aar", + "androidx.customview:customview:aar", + "androidx.drawerlayout:drawerlayout:aar", + "androidx.emoji2:emoji2-views-helper:aar", + "androidx.emoji2:emoji2:aar", + "androidx.fragment:fragment:aar", + "androidx.graphics:graphics-path:aar", + "androidx.interpolator:interpolator:aar", + "androidx.lifecycle:lifecycle-common", + "androidx.lifecycle:lifecycle-common-java8", + "androidx.lifecycle:lifecycle-livedata-core:aar", + "androidx.lifecycle:lifecycle-livedata:aar", + "androidx.lifecycle:lifecycle-process:aar", + "androidx.lifecycle:lifecycle-runtime-compose-android:aar", + "androidx.lifecycle:lifecycle-runtime-ktx-android:aar", + "androidx.lifecycle:lifecycle-runtime-ktx:aar", + "androidx.lifecycle:lifecycle-runtime:aar", + "androidx.lifecycle:lifecycle-viewmodel-ktx:aar", + "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar", + "androidx.lifecycle:lifecycle-viewmodel:aar", + "androidx.loader:loader:aar", + "androidx.profileinstaller:profileinstaller:aar", + "androidx.resourceinspection:resourceinspection-annotation", + "androidx.savedstate:savedstate-ktx:aar", + "androidx.savedstate:savedstate:aar", + "androidx.startup:startup-runtime:aar", + "androidx.tracing:tracing:aar", + "androidx.vectordrawable:vectordrawable-animated:aar", + "androidx.vectordrawable:vectordrawable:aar", + "androidx.versionedparcelable:versionedparcelable:aar", + "androidx.viewpager:viewpager:aar" + ], + "https://repo1.maven.org/maven2/": [ + "com.google.guava:listenablefuture", + "org.jetbrains.kotlin:kotlin-compose-compiler-plugin-embeddable", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlin:kotlin-stdlib-common", + "org.jetbrains.kotlin:kotlin-stdlib-jdk7", + "org.jetbrains.kotlin:kotlin-stdlib-jdk8", + "org.jetbrains.kotlinx:kotlinx-coroutines-android", + "org.jetbrains.kotlinx:kotlinx-coroutines-core", + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm", + "org.jetbrains:annotations" + ] + }, + "services": { + "org.jetbrains.kotlin:kotlin-compose-compiler-plugin-embeddable": { + "org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor": [ + "androidx.compose.compiler.plugins.kotlin.ComposeCommandLineProcessor" + ], + "org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar": [ + "androidx.compose.compiler.plugins.kotlin.ComposePluginRegistrar" + ], + "org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages$Extension": [ + "androidx.compose.compiler.plugins.kotlin.k1.ComposeErrorMessages" + ], + "org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar": [ + "androidx.compose.compiler.plugins.kotlin.k2.ComposeFirExtensionRegistrar" + ] + }, + "org.jetbrains.kotlinx:kotlinx-coroutines-android": { + "kotlinx.coroutines.CoroutineExceptionHandler": [ + "kotlinx.coroutines.android.AndroidExceptionPreHandler" + ], + "kotlinx.coroutines.internal.MainDispatcherFactory": [ + "kotlinx.coroutines.android.AndroidDispatcherFactory" + ] + } + }, + "skipped": [], + "version": "2" +} diff --git a/examples/jetpack_compose/platform_mappings b/examples/jetpack_compose/platform_mappings new file mode 100644 index 000000000..dbee6cfaa --- /dev/null +++ b/examples/jetpack_compose/platform_mappings @@ -0,0 +1,10 @@ +flags: + # Android + # Mostly, native code is compiled after the android_binary rule has run a transition to compile for that platform. + # We just detect the transition, which sets "Android configuration distinguisher", and then translate the CPU it set. + --Android configuration distinguisher=android + --cpu=arm64-v8a + //:arm64-v8a + --Android configuration distinguisher=android + --cpu=x86_64 + //:x86_64 \ No newline at end of file diff --git a/kotlin/BUILD b/kotlin/BUILD index 115469fc7..482d4599d 100644 --- a/kotlin/BUILD +++ b/kotlin/BUILD @@ -66,6 +66,7 @@ genrule( cat "$$md" >> $@ done """, + executable = True, visibility = [ "//visibility:public", ], diff --git a/kotlin/internal/BUILD b/kotlin/internal/BUILD index d8d8d635e..7e5bd217c 100644 --- a/kotlin/internal/BUILD +++ b/kotlin/internal/BUILD @@ -43,6 +43,7 @@ bzl_library( "//kotlin/internal/lint", "//kotlin/internal/utils", "//src/main/starlark", + "//src/main/starlark/core/compile", "//src/main/starlark/core/options", "@rules_java//java:rules", ], diff --git a/kotlin/internal/defs.bzl b/kotlin/internal/defs.bzl index 26d8e2123..8fc952f30 100644 --- a/kotlin/internal/defs.bzl +++ b/kotlin/internal/defs.bzl @@ -11,6 +11,12 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License.# +load( + "//src/main/starlark/core/compile:common.bzl", + _JAVA_RUNTIME_TOOLCHAIN_TYPE = "JAVA_RUNTIME_TOOLCHAIN_TYPE", + _JAVA_TOOLCHAIN_TYPE = "JAVA_TOOLCHAIN_TYPE", + _KtJvmInfo = "KtJvmInfo", +) load( "//src/main/starlark/core/plugin:providers.bzl", _KspPluginInfo = "KspPluginInfo", @@ -23,8 +29,8 @@ load( TOOLCHAIN_TYPE = "%s" % Label("//kotlin/internal:kt_toolchain_type") # Java toolchains -JAVA_TOOLCHAIN_TYPE = "@bazel_tools//tools/jdk:toolchain_type" -JAVA_RUNTIME_TOOLCHAIN_TYPE = "@bazel_tools//tools/jdk:runtime_toolchain_type" +JAVA_TOOLCHAIN_TYPE = _JAVA_TOOLCHAIN_TYPE +JAVA_RUNTIME_TOOLCHAIN_TYPE = _JAVA_RUNTIME_TOOLCHAIN_TYPE # The name of the Kotlin compiler workspace. KT_COMPILER_REPO = "com_github_jetbrains_kotlin" @@ -32,21 +38,7 @@ KT_COMPILER_REPO = "com_github_jetbrains_kotlin" # The name of the KSP compiler plugin workspace KSP_COMPILER_PLUGIN_REPO = "com_github_google_ksp" -KtJvmInfo = provider( - fields = { - "module_name": "the module name", - "module_jars": "Jars comprising the module (logical compilation unit), a.k.a. associates", - "exported_compiler_plugins": "compiler plugins to be invoked by targets depending on this.", - "srcs": "the source files. [intelij-aspect]", - "outputs": "output jars produced by this rule. [intelij-aspect]", - "language_version": "version of kotlin used. [intellij-aspect]", - "transitive_compile_time_jars": "Returns the transitive set of Jars required to build the target. [intellij-aspect]", - "transitive_source_jars": "Returns the Jars containing source files of the current target and all of its transitive dependencies. [intellij-aspect]", - "annotation_processing": "Generated annotation processing jars. [intellij-aspect]", - "additional_generated_source_jars": "Returns additional Jars containing generated source files from kapt, ksp, etc. [bazel-bsp-aspect]", - "all_output_jars": "Returns all the output Jars produced by this rule. [bazel-bsp-aspect]", - }, -) +KtJvmInfo = _KtJvmInfo KtCompilerPluginInfo = _KtCompilerPluginInfo diff --git a/kotlin/internal/jvm/compile.bzl b/kotlin/internal/jvm/compile.bzl index d7bd39d93..c9d10c3e3 100644 --- a/kotlin/internal/jvm/compile.bzl +++ b/kotlin/internal/jvm/compile.bzl @@ -294,6 +294,7 @@ def _fold_jars_action(ctx, rule_kind, toolchains, output_jar, input_jars, action "" if not action_type else " (%s)" % action_type, len(input_jars), ), + toolchain = _TOOLCHAIN_TYPE, ) def _resourcejar_args_action(ctx): @@ -369,6 +370,7 @@ def _run_merge_jdeps_action(ctx, toolchains, jdeps, outputs, deps): args, ], progress_message = progress_message, + toolchain = _TOOLCHAIN_TYPE, ) def _run_kapt_builder_actions( @@ -574,6 +576,7 @@ def _run_kt_builder_action( "LC_CTYPE": "en_US.UTF-8", # For Java source files "REPOSITORY_NAME": _utils.builder_workspace_name(ctx), }, + toolchain = _TOOLCHAIN_TYPE, ) # MAIN ACTIONS ######################################################################################################### diff --git a/kotlin/internal/toolchains.bzl b/kotlin/internal/toolchains.bzl index 3394e8f84..8c94aa4cc 100644 --- a/kotlin/internal/toolchains.bzl +++ b/kotlin/internal/toolchains.bzl @@ -126,7 +126,7 @@ _kt_toolchain = rule( ), "language_version": attr.string( doc = "this is the -language_version flag [see](https://kotlinlang.org/docs/reference/compatibility.html)", - default = "1.9", + default = "2.1", values = [ "1.1", "1.2", @@ -138,11 +138,12 @@ _kt_toolchain = rule( "1.8", "1.9", "2.0", + "2.1", ], ), "api_version": attr.string( doc = "this is the -api_version flag [see](https://kotlinlang.org/docs/reference/compatibility.html).", - default = "1.9", + default = "2.1", values = [ "1.1", "1.2", @@ -154,6 +155,7 @@ _kt_toolchain = rule( "1.8", "1.9", "2.0", + "2.1", ], ), "debug": attr.string_list( diff --git a/kotlin_rules_maven_install.json b/kotlin_rules_maven_install.json index 7e46ee815..7a20a7654 100755 --- a/kotlin_rules_maven_install.json +++ b/kotlin_rules_maven_install.json @@ -1,7 +1,7 @@ { "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", - "__INPUT_ARTIFACTS_HASH": -760691580, - "__RESOLVED_ARTIFACTS_HASH": 186754690, + "__INPUT_ARTIFACTS_HASH": -788868969, + "__RESOLVED_ARTIFACTS_HASH": 1873973417, "conflict_resolution": { "com.google.guava:guava:27.1-jre": "com.google.guava:guava:33.2.1-jre" }, @@ -57,38 +57,38 @@ }, "com.google.dagger:dagger": { "shasums": { - "jar": "a68b07ce740353462b04c9ad5944d9c22831025a4c8fbf282e3708a5684b68f7", - "sources": "29df2bfb27add94601b4f9aabe8c7d66e70634020f5c01666e33d86fe2ab3e83" + "jar": "19680b0f42baa7f9414dacae8663244d323d084a6ee5594ad115a17f3be37c05", + "sources": "698d992ae63a8cfa8d4a4af888fcb82d84676a1fef8853e6a0094569c306e971" }, - "version": "2.51" + "version": "2.53.1" }, "com.google.dagger:dagger-compiler": { "shasums": { - "jar": "bd1eb4fbba2014fca9e2c3a9bab0203e0a69aea131d1623352726dbcb5afd6ef", - "sources": "2540bb3e79dbe5d9c9a0ee3d93f96ea595ab537494e0b5044e25e20d8e8f43a0" + "jar": "acd6737e2b2b8fb5a5919e68463b611c6ee5477afd936c791f54b86aa7fd7047", + "sources": "cb3c43968bbd2993917db4422493b6df7d43b8069c809941dd86b71170687d57" }, - "version": "2.51" + "version": "2.53.1" }, "com.google.dagger:dagger-producers": { "shasums": { - "jar": "1ce4fcd9f77dda4f76c707b5e46600ad089d840079e7bf1f18d952b206d6a4ef", - "sources": "441ec1d7d06c580d96660e5df0a39fff7d73d2e1f799efadf3f0069a3b509034" + "jar": "8ce7fb23f3f5a479f9c02ed144f3ec83fa9174a9260f19607ac0ec2ab7fb5b29", + "sources": "3b5c44d429f29a5207cf7b7b346d347e8fe58bfbf4b520c480508b8fbfe13c51" }, - "version": "2.51" + "version": "2.53.1" }, "com.google.dagger:dagger-spi": { "shasums": { - "jar": "6f55962a99f06f7d13afb3fd7b7164a830c7c12a1c5a41e5f9d5b01dd934a072", - "sources": "ca467ff8cdae8b4f316a0985ec2e00f9d9f8c7a66c31b27f8ae4af85c5ef9a10" + "jar": "d645593bf5be5185a121e28093f2a2305a92415e70a08e7018898abb258af0fc", + "sources": "35ffcf86483d9fc1c6cad91c420ed46340d899cc76eed89844dcf90a35138502" }, - "version": "2.51" + "version": "2.53.1" }, "com.google.devtools.ksp:symbol-processing-api": { "shasums": { - "jar": "d0339396f40dc9eb3b3f7bc86257f93869ee23448fa31ec4a1de900c6b7ae6d7", - "sources": "a7cf0b4ea8a85dff6dd9c068f7528f8b076556beccdbd882c86b6abb7239211c" + "jar": "e38dd8199c65aae4bce9929bf39a563bf7658c600be5066c7e042cdd8de3137c", + "sources": "6dbcfd749f6d489d999652801e20e8ee6c4a60c53a0e22bd89947e672f47ff6e" }, - "version": "1.9.20-1.0.14" + "version": "2.0.21-1.0.28" }, "com.google.errorprone:error_prone_annotations": { "shasums": { @@ -244,6 +244,13 @@ }, "version": "1.2.0" }, + "jakarta.inject:jakarta.inject-api": { + "shasums": { + "jar": "f7dc98062fccf14126abb751b64fab12c312566e8cbdc8483598bffcea93af7c", + "sources": "44f4c73fda69f8b7d87136f0f789f042f54e8ff506d40aa126199baf3752d1c9" + }, + "version": "2.0.1" + }, "javax.annotation:javax.annotation-api": { "shasums": { "jar": "e04ba5195bcd555dc95650f7cc614d151e4bcd52d29a10b8aa2197f3ab89ab9b", @@ -400,24 +407,24 @@ }, "org.jetbrains.kotlin:kotlin-stdlib": { "shasums": { - "jar": "240938c4aab8e73e888703e3e7d3f87383ffe5bd536d6d5e3c100d4cd0379fcf", - "sources": "256f2c1caf3df558d6c41b79fb83add98edcc08436b821a80b5f17d806c664a1" + "jar": "f31cc53f105a7e48c093683bbd5437561d1233920513774b470805641bedbc09", + "sources": "5995c780c3ac742fb277ced561ebd7b0739227ea7c93a6bd9c7cee6593493fce" }, - "version": "2.0.0" + "version": "2.0.21" }, "org.jetbrains.kotlin:kotlin-stdlib-jdk7": { "shasums": { - "jar": "b7979a7aac94055f0d9f1fd3b47ce5ffe1cb6032a842ba9fbe7186f085289178", + "jar": "33d148db0e11debd0d90677d28242bced907f9c77730000fd597867089039d86", "sources": "ea10d3e5e6e695d8a5283cbf116321acae6ba42d0bdd3eda50f7c34a26fa25cb" }, - "version": "1.9.0" + "version": "1.8.21" }, "org.jetbrains.kotlin:kotlin-stdlib-jdk8": { "shasums": { - "jar": "a59fa24fdf1ffb594baecdbf0fd10010f977cea10236d487fe3464977a7377fa", + "jar": "3db752a30074f06ee6c57984aa6f27da44f4d2bbc7f5442651f6988f1cb2b7d7", "sources": "40e9a80f6b953d12389623760d438e69914098d0c4d7053f70f90533ec041259" }, - "version": "1.9.0" + "version": "1.8.21" }, "org.jetbrains:annotations": { "shasums": { @@ -426,6 +433,13 @@ }, "version": "13.0" }, + "org.jspecify:jspecify": { + "shasums": { + "jar": "1fad6e6be7557781e4d33729d49ae1cdc8fdda6fe477bb0cc68ce351eafdfbab", + "sources": "adf0898191d55937fb3192ba971826f4f294292c4a960740f3c27310e7b70296" + }, + "version": "1.0.0" + }, "org.ow2.asm:asm": { "shasums": { "jar": "1263369b59e29c943918de11d6d6152e2ec6085ce63e5710516f8c67d368e4bc", @@ -472,7 +486,9 @@ "com.google.guava:guava" ], "com.google.dagger:dagger": [ - "javax.inject:javax.inject" + "jakarta.inject:jakarta.inject-api", + "javax.inject:javax.inject", + "org.jspecify:jspecify" ], "com.google.dagger:dagger-compiler": [ "com.google.code.findbugs:jsr305", @@ -506,7 +522,7 @@ "javax.inject:javax.inject" ], "com.google.devtools.ksp:symbol-processing-api": [ - "org.jetbrains.kotlin:kotlin-stdlib-jdk8" + "org.jetbrains.kotlin:kotlin-stdlib" ], "com.google.googlejavaformat:google-java-format": [ "com.google.errorprone:javac-shaded", @@ -776,6 +792,8 @@ "dagger.model", "dagger.spi", "dagger.spi.internal.shaded.androidx.room.compiler.codegen", + "dagger.spi.internal.shaded.androidx.room.compiler.codegen.compat", + "dagger.spi.internal.shaded.androidx.room.compiler.codegen.impl", "dagger.spi.internal.shaded.androidx.room.compiler.codegen.java", "dagger.spi.internal.shaded.androidx.room.compiler.codegen.kotlin", "dagger.spi.internal.shaded.androidx.room.compiler.processing", @@ -785,35 +803,35 @@ "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.kotlinx.metadata", - "dagger.spi.internal.shaded.androidx.room.jarjarred.kotlinx.metadata.internal", - "dagger.spi.internal.shaded.androidx.room.jarjarred.kotlinx.metadata.internal.common", - "dagger.spi.internal.shaded.androidx.room.jarjarred.kotlinx.metadata.internal.extensions", - "dagger.spi.internal.shaded.androidx.room.jarjarred.kotlinx.metadata.internal.metadata", - "dagger.spi.internal.shaded.androidx.room.jarjarred.kotlinx.metadata.internal.metadata.builtins", - "dagger.spi.internal.shaded.androidx.room.jarjarred.kotlinx.metadata.internal.metadata.deserialization", - "dagger.spi.internal.shaded.androidx.room.jarjarred.kotlinx.metadata.internal.metadata.jvm", - "dagger.spi.internal.shaded.androidx.room.jarjarred.kotlinx.metadata.internal.metadata.jvm.deserialization", - "dagger.spi.internal.shaded.androidx.room.jarjarred.kotlinx.metadata.internal.metadata.jvm.serialization", - "dagger.spi.internal.shaded.androidx.room.jarjarred.kotlinx.metadata.internal.metadata.serialization", - "dagger.spi.internal.shaded.androidx.room.jarjarred.kotlinx.metadata.internal.protobuf", - "dagger.spi.internal.shaded.androidx.room.jarjarred.kotlinx.metadata.jvm", - "dagger.spi.internal.shaded.androidx.room.jarjarred.kotlinx.metadata.jvm.internal", + "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.kotlinx.metadata", - "dagger.spi.internal.shaded.kotlinx.metadata.internal", - "dagger.spi.internal.shaded.kotlinx.metadata.internal.common", - "dagger.spi.internal.shaded.kotlinx.metadata.internal.extensions", - "dagger.spi.internal.shaded.kotlinx.metadata.internal.metadata", - "dagger.spi.internal.shaded.kotlinx.metadata.internal.metadata.builtins", - "dagger.spi.internal.shaded.kotlinx.metadata.internal.metadata.deserialization", - "dagger.spi.internal.shaded.kotlinx.metadata.internal.metadata.jvm", - "dagger.spi.internal.shaded.kotlinx.metadata.internal.metadata.jvm.deserialization", - "dagger.spi.internal.shaded.kotlinx.metadata.internal.metadata.jvm.serialization", - "dagger.spi.internal.shaded.kotlinx.metadata.internal.metadata.serialization", - "dagger.spi.internal.shaded.kotlinx.metadata.internal.protobuf", - "dagger.spi.internal.shaded.kotlinx.metadata.jvm", - "dagger.spi.internal.shaded.kotlinx.metadata.jvm.internal", + "dagger.spi.internal.shaded.kotlin.metadata", + "dagger.spi.internal.shaded.kotlin.metadata.internal", + "dagger.spi.internal.shaded.kotlin.metadata.internal.common", + "dagger.spi.internal.shaded.kotlin.metadata.internal.extensions", + "dagger.spi.internal.shaded.kotlin.metadata.internal.metadata", + "dagger.spi.internal.shaded.kotlin.metadata.internal.metadata.builtins", + "dagger.spi.internal.shaded.kotlin.metadata.internal.metadata.deserialization", + "dagger.spi.internal.shaded.kotlin.metadata.internal.metadata.jvm", + "dagger.spi.internal.shaded.kotlin.metadata.internal.metadata.jvm.deserialization", + "dagger.spi.internal.shaded.kotlin.metadata.internal.metadata.jvm.serialization", + "dagger.spi.internal.shaded.kotlin.metadata.internal.metadata.serialization", + "dagger.spi.internal.shaded.kotlin.metadata.internal.protobuf", + "dagger.spi.internal.shaded.kotlin.metadata.jvm", + "dagger.spi.internal.shaded.kotlin.metadata.jvm.internal", "dagger.spi.model" ], "com.google.devtools.ksp:symbol-processing-api": [ @@ -989,6 +1007,9 @@ "dev.zacsweers.autoservice:auto-service-ksp": [ "dev.zacsweers.autoservice.ksp" ], + "jakarta.inject:jakarta.inject-api": [ + "jakarta.inject" + ], "javax.annotation:javax.annotation-api": [ "javax.annotation", "javax.annotation.security", @@ -1399,12 +1420,16 @@ "kotlin.text", "kotlin.text.jdk8", "kotlin.time", - "kotlin.time.jdk8" + "kotlin.time.jdk8", + "kotlin.uuid" ], "org.jetbrains:annotations": [ "org.intellij.lang.annotations", "org.jetbrains.annotations" ], + "org.jspecify:jspecify": [ + "org.jspecify.annotations" + ], "org.ow2.asm:asm": [ "org.objectweb.asm", "org.objectweb.asm.signature" @@ -1493,6 +1518,8 @@ "commons-io:commons-io:jar:sources", "dev.zacsweers.autoservice:auto-service-ksp", "dev.zacsweers.autoservice:auto-service-ksp:jar:sources", + "jakarta.inject:jakarta.inject-api", + "jakarta.inject:jakarta.inject-api:jar:sources", "javax.annotation:javax.annotation-api", "javax.annotation:javax.annotation-api:jar:sources", "javax.annotation:jsr250-api", @@ -1545,6 +1572,8 @@ "org.jetbrains.kotlin:kotlin-stdlib:jar:sources", "org.jetbrains:annotations", "org.jetbrains:annotations:jar:sources", + "org.jspecify:jspecify", + "org.jspecify:jspecify:jar:sources", "org.ow2.asm:asm", "org.ow2.asm:asm-analysis", "org.ow2.asm:asm-analysis:jar:sources", @@ -1624,6 +1653,8 @@ "commons-io:commons-io:jar:sources", "dev.zacsweers.autoservice:auto-service-ksp", "dev.zacsweers.autoservice:auto-service-ksp:jar:sources", + "jakarta.inject:jakarta.inject-api", + "jakarta.inject:jakarta.inject-api:jar:sources", "javax.annotation:javax.annotation-api", "javax.annotation:javax.annotation-api:jar:sources", "javax.annotation:jsr250-api", @@ -1676,6 +1707,8 @@ "org.jetbrains.kotlin:kotlin-stdlib:jar:sources", "org.jetbrains:annotations", "org.jetbrains:annotations:jar:sources", + "org.jspecify:jspecify", + "org.jspecify:jspecify:jar:sources", "org.ow2.asm:asm", "org.ow2.asm:asm-analysis", "org.ow2.asm:asm-analysis:jar:sources", @@ -1755,6 +1788,8 @@ "commons-io:commons-io:jar:sources", "dev.zacsweers.autoservice:auto-service-ksp", "dev.zacsweers.autoservice:auto-service-ksp:jar:sources", + "jakarta.inject:jakarta.inject-api", + "jakarta.inject:jakarta.inject-api:jar:sources", "javax.annotation:javax.annotation-api", "javax.annotation:javax.annotation-api:jar:sources", "javax.annotation:jsr250-api", @@ -1807,6 +1842,8 @@ "org.jetbrains.kotlin:kotlin-stdlib:jar:sources", "org.jetbrains:annotations", "org.jetbrains:annotations:jar:sources", + "org.jspecify:jspecify", + "org.jspecify:jspecify:jar:sources", "org.ow2.asm:asm", "org.ow2.asm:asm-analysis", "org.ow2.asm:asm-analysis:jar:sources", diff --git a/scripts/reflow_skylark b/scripts/reflow_skylark index e093658a3..987b1065f 100755 --- a/scripts/reflow_skylark +++ b/scripts/reflow_skylark @@ -16,8 +16,10 @@ # Note: Written on a mac please make it compatible with linux if needed. -buildifier --warnings=-confusing-name,-constant-glob,-duplicated-name,-function-docstring,-function-docstring-args,-function-docstring-header,-module-docstring,-name-conventions,-no-effect,-constant-glob,-provider-params,-print,-rule-impl-return,-bzl-visibility,-unnamed-macro,-uninitialized,-unreachable -lint warn $(find . -type f \ - -iname "*.bzl" -or \ - -name "*.bazel" -and -not -name "MODULE.*" -or \ - -name "WORKSPACE" +buildifier --warnings=-confusing-name,-constant-glob,-duplicated-name,-function-docstring,-function-docstring-args,-function-docstring-header,-module-docstring,-name-conventions,-no-effect,-constant-glob,-provider-params,-print,-rule-impl-return,-bzl-visibility,-unnamed-macro,-uninitialized,-unreachable -lint warn $(find . \ + -path ./.ijwb -prune \ + -type f \ + -iname "*.bzl" -or -name "*.bazel" \ + -and -not \( -name "MODULE.*" -or \ + -name "WORKSPACE" \) ) diff --git a/src/main/kotlin/bootstrap.bzl b/src/main/kotlin/bootstrap.bzl index 8dbe61f00..cf6e53bc5 100644 --- a/src/main/kotlin/bootstrap.bzl +++ b/src/main/kotlin/bootstrap.bzl @@ -11,9 +11,9 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -load("@released_rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") load("@rules_java//java:defs.bzl", "java_binary") load("//kotlin:lint.bzl", _ktlint_fix = "ktlint_fix", _ktlint_test = "ktlint_test") +load("//src/main/starlark/core/compile:rules.bzl", "core_kt_jvm_library") load("//third_party:jarjar.bzl", "jar_jar") def kt_bootstrap_library(name, deps = [], neverlink_deps = [], srcs = [], visibility = [], **kwargs): @@ -23,13 +23,13 @@ def kt_bootstrap_library(name, deps = [], neverlink_deps = [], srcs = [], visibi deps: the dependenices, the are setup as runtime_deps of the library. neverlink_deps: deps that won't be linked. """ - kt_jvm_library( + core_kt_jvm_library( name = "%s_neverlink" % name, exports = neverlink_deps, neverlink = True, ) - kt_jvm_library( + core_kt_jvm_library( name = name, srcs = srcs, visibility = visibility, diff --git a/src/main/kotlin/io/bazel/kotlin/generate/BUILD.bazel b/src/main/kotlin/io/bazel/kotlin/generate/BUILD.bazel index 4ce016764..83fcb5809 100644 --- a/src/main/kotlin/io/bazel/kotlin/generate/BUILD.bazel +++ b/src/main/kotlin/io/bazel/kotlin/generate/BUILD.bazel @@ -1,10 +1,26 @@ -load("//kotlin:jvm.bzl", "kt_jvm_binary", "kt_jvm_library") +load("//kotlin:jvm.bzl", "kt_jvm_binary", "kt_jvm_import", "kt_jvm_library") + +# Work around neverlink. +kt_jvm_import( + name = "kotlinc_jar", + jars = [ + "@com_github_jetbrains_kotlin//:kotlin-compiler", + ], + deps = [ + "//kotlin/compiler:annotations", + "//kotlin/compiler:kotlin-stdlib", + "//kotlin/compiler:kotlin-stdlib-jdk7", + "//kotlin/compiler:kotlin-stdlib-jdk8", + "//kotlin/compiler:kotlinx-coroutines-core-jvm", + "//kotlin/compiler:trove4j", + ], +) kt_jvm_library( name = "kotlin_release_options_lib", srcs = glob(["**/*.kt"]), deps = [ - "//kotlin/compiler:kotlin-compiler", + ":kotlinc_jar", "//kotlin/compiler:kotlin-reflect", ], ) diff --git a/src/main/kotlin/io/bazel/kotlin/generate/WriteKotlincCapabilities.kt b/src/main/kotlin/io/bazel/kotlin/generate/WriteKotlincCapabilities.kt index 278fc8691..7d9eb2211 100644 --- a/src/main/kotlin/io/bazel/kotlin/generate/WriteKotlincCapabilities.kt +++ b/src/main/kotlin/io/bazel/kotlin/generate/WriteKotlincCapabilities.kt @@ -1,9 +1,12 @@ package io.bazel.kotlin.generate import io.bazel.kotlin.generate.WriteKotlincCapabilities.KotlincCapabilities.Companion.asCapabilities +import io.bazel.kotlin.generate.WriteKotlincCapabilities.KotlincCapability import org.jetbrains.kotlin.cli.common.arguments.Argument import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments import org.jetbrains.kotlin.config.LanguageVersion +import org.jetbrains.kotlin.load.java.JvmAbi +import java.nio.charset.StandardCharsets import java.nio.file.FileSystems import java.nio.file.Files import java.time.Year @@ -77,22 +80,11 @@ object WriteKotlincCapabilities { Files.createDirectories(parent) } writeText( - K2JVMCompilerArguments::class.members.asSequence() - .map { member -> - member.annotations.find { it is Argument }?.let { argument -> - member to (argument as Argument) - } - } - .filterNotNull() - .map { (member, argument) -> - KotlincCapability( - flag = argument.value, - default = "${member.call(instance)}", - type = member.returnType.toString(), - ) - } + getArguments(K2JVMCompilerArguments::class.java) .filterNot(KotlincCapability::shouldSuppress) - .asCapabilities().asCapabilitiesBzl(), + .asCapabilities() + .asCapabilitiesBzl(), + StandardCharsets.UTF_8 ) } .let { @@ -100,6 +92,26 @@ object WriteKotlincCapabilities { } } + private fun getArguments(klass: Class<*>) : Sequence = sequence { + val instance = K2JVMCompilerArguments() + klass.superclass?.let { + yieldAll(getArguments(it)) + } + + for (field in klass.declaredFields) { + field.getAnnotation(Argument::class.java)?.let { argument -> + val getter = klass.getMethod(JvmAbi.getterName(field.name)) + yield( + KotlincCapability( + flag = argument.value, + default = "${ getter.invoke(instance)}", + type = field.type.toString(), + ) + ) + } + } + } + private class KotlincCapabilities(capabilities: Iterable) : List by capabilities.toList() { diff --git a/src/main/kotlin/io/bazel/kotlin/plugin/jdeps/k2/checker/declaration/FileChecker.kt b/src/main/kotlin/io/bazel/kotlin/plugin/jdeps/k2/checker/declaration/FileChecker.kt index cea3571fa..123bc8b57 100644 --- a/src/main/kotlin/io/bazel/kotlin/plugin/jdeps/k2/checker/declaration/FileChecker.kt +++ b/src/main/kotlin/io/bazel/kotlin/plugin/jdeps/k2/checker/declaration/FileChecker.kt @@ -9,8 +9,10 @@ import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirFileChecker import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.declarations.FirResolvedImport import org.jetbrains.kotlin.fir.declarations.fullyExpandedClass -import org.jetbrains.kotlin.fir.resolve.providers.getClassDeclaredFunctionSymbols import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider +import org.jetbrains.kotlin.fir.scopes.FirContainingNamesAwareScope +import org.jetbrains.kotlin.fir.scopes.getFunctions +import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousObjectSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol @@ -48,6 +50,7 @@ internal class FileChecker( } @Suppress("ReturnCount") +@OptIn(org.jetbrains.kotlin.fir.symbols.SymbolInternals::class) private fun FirResolvedImport.resolveToFun(context: CheckerContext): FirCallableSymbol<*>? { val funName = this.importedName ?: return null val topLevelFun = @@ -57,9 +60,18 @@ private fun FirResolvedImport.resolveToFun(context: CheckerContext): FirCallable if (topLevelFun != null) return topLevelFun val parentClassId = resolvedParentClassId ?: return null - return context.session.symbolProvider - .getClassDeclaredFunctionSymbols(parentClassId, funName) - .firstOrNull() + + val classSymbol = + context.session.symbolProvider + .getClassLikeSymbolByClassId(parentClassId) as? FirRegularClassSymbol ?: return null + + val classMemberScope: FirContainingNamesAwareScope = + context.session.declaredMemberScope( + classSymbol.fir, + memberRequiredPhase = null, + ) + + return classMemberScope?.getFunctions(funName)?.orEmpty()?.firstOrNull() } private fun FirResolvedImport.classId(): ClassId? { diff --git a/src/main/kotlin/io/bazel/kotlin/test/BazelIntegrationTestRunner.kt b/src/main/kotlin/io/bazel/kotlin/test/BazelIntegrationTestRunner.kt index 90ff06603..7b13295d6 100644 --- a/src/main/kotlin/io/bazel/kotlin/test/BazelIntegrationTestRunner.kt +++ b/src/main/kotlin/io/bazel/kotlin/test/BazelIntegrationTestRunner.kt @@ -60,27 +60,40 @@ object BazelIntegrationTestRunner { bzlmod && workspace.hasModule() || !bzlmod && workspace.hasWorkspace() }.forEach { bzlmod -> println("Starting bzlmod $bzlmod test") + val overrideFlag = if (bzlmod) "--override_module=rules_kotlin=$unpack" else "--override_repository=rules_kotlin=$unpack" + bazel.run( + workspace, + "--bazelrc=$bazelrc", + "clean", + "--expunge", + "--async" + ).onFailThrow() + bazel.run( + workspace, + "--bazelrc=$bazelrc", + "shutdown", + ).onFailThrow() bazel.run( workspace, "--bazelrc=$bazelrc", "info", - version.workspaceFlag(bzlmod), - "--override_repository=rules_kotlin=$unpack", + *version.workspaceFlag(bzlmod), + overrideFlag ).onFailThrow() bazel.run( workspace, "--bazelrc=$bazelrc", "build", - version.workspaceFlag(bzlmod), - "--override_repository=rules_kotlin=$unpack", + overrideFlag, "//...", + *version.workspaceFlag(bzlmod) ).onFailThrow() bazel.run( workspace, "--bazelrc=$bazelrc", "query", - version.workspaceFlag(bzlmod), - "--override_repository=rules_kotlin=$unpack", + *version.workspaceFlag(bzlmod), + overrideFlag, "kind(\".*_test\", \"//...\")", ).ok { process -> if (process.stdOut.isNotEmpty()) { @@ -88,8 +101,8 @@ object BazelIntegrationTestRunner { workspace, "--bazelrc=$bazelrc", "test", - version.workspaceFlag(bzlmod), - "--override_repository=rules_kotlin=$unpack", + *version.workspaceFlag(bzlmod), + overrideFlag, "--test_output=all", "//...", ).onFailThrow() @@ -105,7 +118,7 @@ object BazelIntegrationTestRunner { sealed class Version { abstract fun resolveBazelRc(workspace: Path): Path; - abstract fun workspaceFlag(isBzlMod: Boolean): String + abstract fun workspaceFlag(isBzlMod: Boolean): Array class Head : Version() { override fun resolveBazelRc(workspace: Path): Path { @@ -118,11 +131,7 @@ object BazelIntegrationTestRunner { return workspace.resolve("/dev/null") } - override fun workspaceFlag(isBzlMod: Boolean): String = if (isBzlMod) { - "--enable_bzlmod=true" - } else { - "--enable_workspace=true" - } + override fun workspaceFlag(isBzlMod: Boolean): Array = arrayOf("--enable_bzlmod=$isBzlMod", "--enable_workspace=${!isBzlMod}") } class Known(private val major: Int, private val minor: Int, private val patch: Int) : @@ -142,12 +151,12 @@ object BazelIntegrationTestRunner { return workspace.resolve("/dev/null") } - override fun workspaceFlag(isBzlMod: Boolean): String = if (isBzlMod) { - "--enable_bzlmod=true" + override fun workspaceFlag(isBzlMod: Boolean): Array = if (isBzlMod) { + arrayOf("--enable_bzlmod=true") } else if (major >= 7) { - "--enable_workspace=true" + arrayOf("--enable_workspace=true", "--enable_bzlmod=false") } else { - "--enable_bzlmod=false" + arrayOf("--enable_bzlmod=false") } } } diff --git a/src/main/starlark/core/BUILD.bazel b/src/main/starlark/core/BUILD.bazel index ce8674dab..76b85edb9 100644 --- a/src/main/starlark/core/BUILD.bazel +++ b/src/main/starlark/core/BUILD.bazel @@ -10,6 +10,7 @@ release_archive( "BUILD.release.bazel": "BUILD.bazel", }, deps = [ + "//src/main/starlark/core/compile:pkg", "//src/main/starlark/core/options:pkg", "//src/main/starlark/core/plugin:pkg", "//src/main/starlark/core/repositories:pkg", @@ -21,6 +22,7 @@ bzl_library( srcs = glob(["*.bzl"]), visibility = ["//:__subpackages__"], deps = [ + "//src/main/starlark/core/compile", "//src/main/starlark/core/plugin", "//src/main/starlark/core/repositories", ], diff --git a/src/main/starlark/core/BUILD.release.bazel b/src/main/starlark/core/BUILD.release.bazel index b7f296080..f157c647b 100644 --- a/src/main/starlark/core/BUILD.release.bazel +++ b/src/main/starlark/core/BUILD.release.bazel @@ -19,6 +19,7 @@ bzl_library( srcs = glob(["*.bzl"]), visibility = ["//visibility:public"], deps = [ + "//src/main/starlark/core/compile", "//src/main/starlark/core/options", "//src/main/starlark/core/repositories", ], diff --git a/src/main/starlark/core/compile/BUILD.bazel b/src/main/starlark/core/compile/BUILD.bazel new file mode 100644 index 000000000..6164469ff --- /dev/null +++ b/src/main/starlark/core/compile/BUILD.bazel @@ -0,0 +1,30 @@ +load("@bazel_skylib//:bzl_library.bzl", "bzl_library") +load("//src/main/starlark/release:packager.bzl", "release_archive") + +toolchain_type( + name = "toolchain_type", + visibility = [ + "//visibility:public", + ], +) + +bzl_library( + name = "compile", + srcs = [ + "common.bzl", + ], + visibility = [ + "//visibility:public", + ], +) + +release_archive( + name = "pkg", + srcs = glob( + ["common.bzl"], + ), + src_map = { + "BUILD.release.bazel": "BUILD.bazel", + }, + deps = [], +) diff --git a/src/main/starlark/core/compile/BUILD.release.bazel b/src/main/starlark/core/compile/BUILD.release.bazel new file mode 100644 index 000000000..ccb61946a --- /dev/null +++ b/src/main/starlark/core/compile/BUILD.release.bazel @@ -0,0 +1,25 @@ +# Copyright 2020 The Bazel Authors. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +load("@bazel_skylib//:bzl_library.bzl", "bzl_library") + +bzl_library( + name = "compile", + srcs = [ + "common.bzl", + ], + visiblity = [ + "//visibility:public", + ], +) diff --git a/src/main/starlark/core/compile/cli/BUILD.bazel b/src/main/starlark/core/compile/cli/BUILD.bazel new file mode 100644 index 000000000..d8e4d4a8d --- /dev/null +++ b/src/main/starlark/core/compile/cli/BUILD.bazel @@ -0,0 +1,40 @@ +load("//src/main/starlark/core/compile:common.bzl", "TYPE") +load("//src/main/starlark/core/repositories:versions.bzl", "versions") +load(":toolchain.bzl", "cli_toolchain") + +java_import( + name = "kotlinc_jar", + jars = [ + "@com_github_jetbrains_kotlin//:kotlin-compiler", + ], + deps = [], +) + +java_binary( + name = "kotlinc", + main_class = "org.jetbrains.kotlin.cli.jvm.K2JVMCompiler", + runtime_deps = [":kotlinc_jar"], +) + +cli_toolchain( + name = "cli_toolchain", + api_version = versions.KOTLIN_CURRENT_COMPILER_RELEASE.version, + jvm_target = "11", + kotlin_stdlibs = [ + "//kotlin/compiler:annotations", + "//kotlin/compiler:kotlin-stdlib", + "//kotlin/compiler:kotlin-stdlib-jdk7", + "//kotlin/compiler:kotlin-stdlib-jdk8", + "//kotlin/compiler:kotlinx-coroutines-core-jvm", + "//kotlin/compiler:trove4j", + ], + kotlinc = ":kotlinc", + language_version = versions.KOTLIN_CURRENT_COMPILER_RELEASE.version, + zip = "@bazel_tools//tools/zip:zipper", +) + +toolchain( + name = "cli", + toolchain = ":cli_toolchain", + toolchain_type = TYPE, +) diff --git a/src/main/starlark/core/compile/cli/compile.bzl b/src/main/starlark/core/compile/cli/compile.bzl new file mode 100644 index 000000000..cabf96969 --- /dev/null +++ b/src/main/starlark/core/compile/cli/compile.bzl @@ -0,0 +1,125 @@ +load("//src/main/starlark/core/compile:common.bzl", "TYPE") + +def compile_kotlin_for_jvm( + actions, + srcs, + dep_jars, + class_jar, + module_name, + path_separator, + toolchain_info, + kotlinc_opts, + output_srcjar = None): + if not srcs: + # still gotta create the jars for keep bazel haps. + actions.symlink( + output = output_srcjar, + target_file = toolchain_info.empty_jar, + ) + actions.symlink( + output = class_jar, + target_file = toolchain_info.empty_jar, + ) + return + + classpath = depset( + transitive = [ + dep_jars, + toolchain_info.kotlin_stdlib.transitive_compile_time_jars, + ], + ) + + # Set the stdlib for the compiler to run on. + args = actions.args().add("--wrapper_script_flag=--main_advice_classpath=%s" % ( + ":".join([f.path for f in toolchain_info.kotlin_stdlib.transitive_compile_time_jars.to_list()]) + )) + args.add("-d", class_jar) + args.add("-jdk-home", toolchain_info.java_runtime.java_home) + args.add("-jvm-target", toolchain_info.jvm_target) + args.add("-no-stdlib") + args.add("-api-version", toolchain_info.api_version) + args.add("-language-version", toolchain_info.language_version) + args.add("-module-name", module_name) + args.add_joined("-cp", classpath, join_with = path_separator) + for (k, v) in kotlinc_opts.items(): + args.add(k, v) + args.add_all(srcs) + + actions.run( + outputs = [class_jar], + executable = toolchain_info.kotlinc, + inputs = depset(direct = srcs, transitive = [classpath, toolchain_info.java_runtime.files]), + arguments = [args], + mnemonic = toolchain_info.compile_mnemonic, + toolchain = TYPE, + ) + + if output_srcjar: + actions.run( + outputs = [output_srcjar], + executable = toolchain_info.executable_zip, + inputs = srcs, + arguments = [actions.args().add("c").add(output_srcjar).add_all(srcs)], + mnemonic = "SourceJar", + toolchain = TYPE, + ) + +def write_jvm_launcher(toolchain_info, actions, path_separator, workspace_prefix, jvm_flags, runtime_jars, main_class, executable_output): + template = toolchain_info.java_stub_template + java_runtime = toolchain_info.java_runtime + java_bin_path = java_runtime.java_executable_runfiles_path + + # Following https://github.com/bazelbuild/bazel/blob/6d5b084025a26f2f6d5041f7a9e8d302c590bc80/src/main/starlark/builtins_bzl/bazel/java/bazel_java_binary.bzl#L66-L67 + # Enable the security manager past deprecation. + # On bazel 6, this check isn't possible... + if getattr(java_runtime, "version", 0) >= 17: + jvm_flags = jvm_flags + " -Djava.security.manager=allow" + + classpath = path_separator.join( + ["${RUNPATH}%s" % (j.short_path) for j in runtime_jars.to_list() + toolchain_info.kotlin_stdlib.transitive_compile_time_jars.to_list()], + ) + needs_runfiles = "0" if java_bin_path.startswith("/") or (len(java_bin_path) > 2 and java_bin_path[1] == ":") else "1" + + actions.expand_template( + template = template, + output = executable_output, + substitutions = { + "%classpath%": classpath, + "%runfiles_manifest_only%": "", + "%java_start_class%": main_class, + "%javabin%": "JAVABIN=" + java_bin_path, + "%jvm_flags%": jvm_flags, + "%set_jacoco_metadata%": "", + "%set_jacoco_main_class%": "", + "%set_jacoco_java_runfiles_root%": "", + "%set_java_coverage_new_implementation%": """export JAVA_COVERAGE_NEW_IMPLEMENTATION=NO""", + "%workspace_prefix%": workspace_prefix, + "%test_runtime_classpath_file%": "export TEST_RUNTIME_CLASSPATH_FILE=${JAVA_RUNFILES}", + "%needs_runfiles%": needs_runfiles, + }, + is_executable = True, + ) + + return depset( + transitive = [ + runtime_jars, + java_runtime.files, + toolchain_info.kotlin_stdlib.transitive_compile_time_jars, + ], + ) + +def build_deploy_jar(toolchain_info, actions, jars, output_jar): + args = actions.args() + args.add("--exclude_build_data") + args.add("--dont_change_compression") + args.add_all("--sources", jars) + args.add("--normalize") + args.add("--output", output_jar) + actions.run( + inputs = jars, + outputs = [output_jar], + executable = toolchain_info.single_jar, + mnemonic = "SingleJar", + arguments = [args], + toolchain = TYPE, + ) diff --git a/src/main/starlark/core/compile/cli/toolchain.bzl b/src/main/starlark/core/compile/cli/toolchain.bzl new file mode 100644 index 000000000..c877d2559 --- /dev/null +++ b/src/main/starlark/core/compile/cli/toolchain.bzl @@ -0,0 +1,95 @@ +load("//src/main/starlark/core/compile:common.bzl", "JAVA_RUNTIME_TOOLCHAIN_TYPE", "JAVA_TOOLCHAIN_TYPE") +load(":compile.bzl", "build_deploy_jar", "compile_kotlin_for_jvm", "write_jvm_launcher") + +KotlincJvmCompileInfo = provider( + doc = "Necessary compilation info for compiling kotlin for the jvm", + fields = { + "jvm_target": "java target byte compatiblity.", + "api_version": "kotlin api version.", + "language_version": "Kotlin source version.", + "compile_mnemonic": "Mnemonic for the compile action(s).", + "executable_zip": "Executable for creating zip files.", + "kotlinc": "kotlinc executable", + "single_jar": "single jar executable", + "java_stub_template": "Launcher template for running kotlin jars", + "java_runtime": "Current kotlin java runtime", + "kotlin_stdlib": "Koltin standard libs", + "empty_jar": "Symlinked when compilation is not possible.", + }, +) + +def _cli_toolchain(ctx): + java_runtime = ctx.toolchains[JAVA_RUNTIME_TOOLCHAIN_TYPE].java_runtime + java_toolchain = ctx.toolchains[JAVA_TOOLCHAIN_TYPE].java + + toolchain_info = KotlincJvmCompileInfo( + jvm_target = ctx.attr.jvm_target, + api_version = ".".join(ctx.attr.api_version.split(".")[:2]), + language_version = ".".join(ctx.attr.api_version.split(".")[:2]), + executable_zip = ctx.attr.zip[DefaultInfo].files_to_run, + kotlinc = ctx.attr.kotlinc[DefaultInfo].files_to_run, + compile_mnemonic = "CliKotlinc", + single_jar = java_toolchain.single_jar, + java_stub_template = ctx.files.java_stub_template[0], + java_runtime = java_runtime, + kotlin_stdlib = java_common.merge([j[JavaInfo] for j in ctx.attr.kotlin_stdlibs]), + empty_jar = ctx.files._empty_jar[0], + ) + return [ + platform_common.ToolchainInfo( + compile = _partial(compile_kotlin_for_jvm, toolchain_info = toolchain_info), + launch = _partial(write_jvm_launcher, toolchain_info = toolchain_info), + deploy = _partial(build_deploy_jar, toolchain_info = toolchain_info), + ), + ] + +cli_toolchain = rule( + doc = """The kotlin toolchain. This should not be created directly `define_kt_toolchain` should be used. The + rules themselves define the toolchain using that macro.""", + implementation = _cli_toolchain, + attrs = { + "language_version": attr.string( + doc = "this is the -language_version flag [see](https://kotlinlang.org/docs/reference/compatibility.html)", + ), + "api_version": attr.string( + doc = "this is the -api_version flag [see](https://kotlinlang.org/docs/reference/compatibility.html).", + ), + "jvm_target": attr.string( + doc = "target jvm version", + ), + "zip": attr.label( + executable = True, + cfg = "exec", + ), + "kotlinc": attr.label( + executable = True, + cfg = "exec", + ), + "kotlin_stdlibs": attr.label_list( + cfg = "exec", + providers = [JavaInfo], + ), + "java_stub_template": attr.label( + cfg = "exec", + default = Label("@bazel_tools//tools/java:java_stub_template.txt"), + allow_single_file = True, + ), + "_empty_jar": attr.label( + cfg = "exec", + default = Label("//third_party:empty"), + allow_single_file = True, + ), + }, + toolchains = [ + JAVA_RUNTIME_TOOLCHAIN_TYPE, + JAVA_TOOLCHAIN_TYPE, + ], +) + +def _partial(function, **defaults): + def partial(**call): + resolved = dict(defaults) + resolved.update(call) + return function(**resolved) + + return partial diff --git a/src/main/starlark/core/compile/common.bzl b/src/main/starlark/core/compile/common.bzl new file mode 100644 index 000000000..00eb59024 --- /dev/null +++ b/src/main/starlark/core/compile/common.bzl @@ -0,0 +1,21 @@ +TYPE = "//src/main/starlark/core/compile:toolchain_type" + +# Java toolchains +JAVA_TOOLCHAIN_TYPE = "@bazel_tools//tools/jdk:toolchain_type" +JAVA_RUNTIME_TOOLCHAIN_TYPE = "@bazel_tools//tools/jdk:runtime_toolchain_type" + +KtJvmInfo = provider( + fields = { + "module_name": "the module name", + "module_jars": "Jars comprising the module (logical compilation unit), a.k.a. associates", + "exported_compiler_plugins": "compiler plugins to be invoked by targets depending on this.", + "srcs": "the source files. [intelij-aspect]", + "outputs": "output jars produced by this rule. [intelij-aspect]", + "language_version": "version of kotlin used. [intellij-aspect]", + "transitive_compile_time_jars": "Returns the transitive set of Jars required to build the target. [intellij-aspect]", + "transitive_source_jars": "Returns the Jars containing source files of the current target and all of its transitive dependencies. [intellij-aspect]", + "annotation_processing": "Generated annotation processing jars. [intellij-aspect]", + "additional_generated_source_jars": "Returns additional Jars containing generated source files from kapt, ksp, etc. [bazel-bsp-aspect]", + "all_output_jars": "Returns all the output Jars produced by this rule. [bazel-bsp-aspect]", + }, +) diff --git a/src/main/starlark/core/compile/rules.bzl b/src/main/starlark/core/compile/rules.bzl new file mode 100644 index 000000000..8c3d2935c --- /dev/null +++ b/src/main/starlark/core/compile/rules.bzl @@ -0,0 +1,199 @@ +load("@rules_java//java:defs.bzl", "JavaInfo") +load(":common.bzl", "KtJvmInfo", "TYPE") + +_COMMON_ATTRS = { + "srcs": attr.label_list( + doc = """The list of source files that are processed to create the target, this can contain both Java and Kotlin + files. Java analysis occurs first so Kotlin classes may depend on Java classes in the same compilation unit.""", + default = [], + allow_files = [".kt", ".java"], + ), + "deps": attr.label_list( + doc = """A list of dependencies of this rule. See general comments about `deps` at + [Attributes common to all build rules](https://docs.bazel.build/versions/master/be/common-definitions.html#common-attributes).""", + providers = [ + [JavaInfo], + [KtJvmInfo], + ], + allow_files = False, + ), + "exports": attr.label_list( + doc = """\ + Exported libraries. + + Deps listed here will be made available to other rules, as if the parents explicitly depended on + these deps. This is not true for regular (non-exported) deps.""", + default = [], + providers = [[JavaInfo], [JavaInfo, KtJvmInfo]], + ), + "neverlink": attr.bool( + doc = """If true only use this library for compilation and not at runtime.""", + default = False, + ), + "runtime_deps": attr.label_list( + doc = """Libraries to make available to the final binary or test at runtime only. Like ordinary deps, these will + appear on the runtime classpath, but unlike them, not on the compile-time classpath.""", + default = [], + allow_files = False, + ), + "resources": attr.label_list( + doc = """A list of files that should be include in a Java jar.""", + default = [], + allow_files = True, + ), + "data": attr.label_list( + doc = """A list of files that should be include the runfiles.""", + default = [], + allow_files = True, + ), + "kotlinc_opts": attr.string_dict(doc = "Options to pass to the kotlinc compiler as key: value pairs."), + "module_name": attr.string( + doc = """The name of the module, if not provided the module name is derived from the label. --e.g., + `//some/package/path:label_name` is translated to + `some_package_path-label_name`.""", + mandatory = False, + ), + "class_jar": attr.output(doc = "jar containing .kt and .java class files"), + "source_jar": attr.output(doc = "jar containing .kt and .java sources"), +} + +def _kt_jvm_library_impl(ctx): + kt_tools = ctx.toolchains[TYPE] + class_jar = ctx.outputs.class_jar + source_jar = ctx.outputs.source_jar + java_info_deps = [d[JavaInfo] for d in ctx.attr.deps if JavaInfo in d] + module_name = ctx.attr.module_name or str(ctx.label).lstrip("/").replace("/", "_").replace(":", "-").replace("@", "") + kt_tools.compile( + actions = ctx.actions, + srcs = ctx.files.srcs, + dep_jars = depset(transitive = [j.compile_jars for j in java_info_deps]), + class_jar = class_jar, + output_srcjar = source_jar, + module_name = module_name, + path_separator = ctx.configuration.host_path_separator, + kotlinc_opts = ctx.attr.kotlinc_opts, + ) + + java_info = JavaInfo( + compile_jar = class_jar, + output_jar = class_jar, + source_jar = source_jar, + deps = java_info_deps, + neverlink = ctx.attr.neverlink, + exports = [e[JavaInfo] for e in ctx.attr.exports], + ) + return [ + KtJvmInfo( + module_name = module_name, + module_jars = depset([class_jar]), + srcs = ctx.files.srcs, + outputs = struct( + jdeps = None, + jars = [struct( + class_jar = class_jar, + ijar = class_jar, + source_jars = [source_jar], + )], + ), + transitive_compile_time_jars = java_info.transitive_compile_time_jars, + transitive_source_jars = java_info.transitive_source_jars, + annotation_processing = None, + additional_generated_source_jars = [], + all_output_jars = [class_jar, source_jar], + exported_compiler_plugins = depset(), + ), + java_info, + DefaultInfo( + files = depset([class_jar]), + runfiles = ctx.runfiles( + # explicitly include data files, otherwise they appear to be missing + files = ctx.files.data, + ).merge_all([ + d[DefaultInfo].default_runfiles + for d in ctx.attr.deps + if DefaultInfo in d + ]), + ), + ] + +_kt_jvm_library = rule( + implementation = _kt_jvm_library_impl, + attrs = _COMMON_ATTRS, + toolchains = [ + TYPE, + ], + provides = [JavaInfo, KtJvmInfo], +) + +def core_kt_jvm_library(name, **kwargs): + _kt_jvm_library( + name = name, + class_jar = "%s.jar" % name, + source_jar = "%s.srcjar" % name, + **kwargs + ) + +def _kt_jvm_binary_impl(ctx): + kt_tools = ctx.toolchains[TYPE] + + providers = _kt_jvm_library_impl(ctx) + java_info_deps = [d[JavaInfo] for d in ctx.attr.deps if JavaInfo in d] + runtime_jars = depset([ctx.outputs.class_jar], transitive = [j.transitive_runtime_jars for j in java_info_deps]) + executable = ctx.outputs.executable + + launch_runfiles = kt_tools.launch( + main_class = ctx.attr.main_class, + executable_output = executable, + actions = ctx.actions, + path_separator = ctx.configuration.host_path_separator, + workspace_prefix = ctx.workspace_name + "/", + jvm_flags = " ".join([ctx.expand_location(f, ctx.attr.data) for f in ctx.attr.jvm_flags]), + runtime_jars = runtime_jars, + ) + + kt_tools.deploy( + actions = ctx.actions, + jars = runtime_jars, + output_jar = ctx.outputs.deploy_jar, + ) + + return [p for p in providers if type(p) != type(DefaultInfo())] + [ + DefaultInfo( + files = depset([executable]), + runfiles = ctx.runfiles( + # explicitly include data files, otherwise they appear to be missing + files = ctx.files.data, + transitive_files = launch_runfiles, + ).merge_all([ + d[DefaultInfo].default_runfiles + for d in ctx.attr.deps + if DefaultInfo in d + ]), + executable = executable, + ), + ] + +_kt_jvm_binary = rule( + implementation = _kt_jvm_binary_impl, + attrs = { + k: v + for (k, v) in _COMMON_ATTRS.items() + { + "jvm_flags": attr.string_list(default = []), + "main_class": attr.string(mandatory = True, doc = ""), + "deploy_jar": attr.output(doc = "jar containing all dependencies."), + }.items() + }, + toolchains = [ + TYPE, + ], + executable = True, +) + +def core_kt_jvm_binary(name, **kwargs): + _kt_jvm_binary( + name = name, + class_jar = "%s.jar" % name, + source_jar = "%s.srcjar" % name, + deploy_jar = "%s_deploy.jar" % name, + **kwargs + ) diff --git a/src/main/starlark/core/options/opts.kotlinc.bzl b/src/main/starlark/core/options/opts.kotlinc.bzl index ded858551..dd51d5068 100644 --- a/src/main/starlark/core/options/opts.kotlinc.bzl +++ b/src/main/starlark/core/options/opts.kotlinc.bzl @@ -410,7 +410,7 @@ _KOPTS_ALL = { "jvm_target": struct( args = dict( default = "", - doc = "The -jvm_target flag. This is only tested at 1.8.", + doc = "The target version of the generated JVM bytecode", values = ["1.6", "1.8", "9", "10", "11", "12", "13", "15", "16", "17"], ), type = attr.string, @@ -420,7 +420,9 @@ _KOPTS_ALL = { "x_jdk_release": struct( args = dict( default = "", - doc = "The -jvm_target flag. This is only tested at 1.8.", + doc = """Compile against the specified JDK API version, similarly to javac's '-release'. This requires JDK 9 or newer. + The supported versions depend on the JDK used; for JDK 17+, the supported versions are 1.8 and 9–21. + This also sets the value of '-jvm-target' to be equal to the selected JDK version.""", values = ["1.6", "1.8", "9", "10", "11", "12", "13", "15", "16", "17"], ), type = attr.string, diff --git a/src/main/starlark/core/repositories/bzlmod_bootstrap.bzl b/src/main/starlark/core/repositories/bzlmod_bootstrap.bzl deleted file mode 100644 index e4337b2ab..000000000 --- a/src/main/starlark/core/repositories/bzlmod_bootstrap.bzl +++ /dev/null @@ -1,13 +0,0 @@ -load("@released_rules_kotlin//src/main/starlark/core/repositories:initialize.bzl", "kotlin_repositories") - -def _rules_kotlin_bootstrap_extensions_impl(_): - kotlin_repositories( - is_bzlmod = True, - compiler_repository_name = "released_com_github_jetbrains_kotlin", - ksp_repository_name = "released_com_github_google_ksp", - ) - -rules_kotlin_bootstrap_extensions = module_extension( - implementation = _rules_kotlin_bootstrap_extensions_impl, - tag_classes = {}, -) diff --git a/src/main/starlark/core/repositories/bzlmod_setup.bzl b/src/main/starlark/core/repositories/bzlmod_setup.bzl index fa5ab156f..23fe23865 100644 --- a/src/main/starlark/core/repositories/bzlmod_setup.bzl +++ b/src/main/starlark/core/repositories/bzlmod_setup.bzl @@ -1,14 +1,12 @@ """Definitions for bzlmod module extensions.""" load("@bazel_skylib//lib:modules.bzl", "modules") -load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") load( "//src/main/starlark/core/repositories:initialize.release.bzl", _kotlin_repositories = "kotlin_repositories", _kotlinc_version = "kotlinc_version", _ksp_version = "ksp_version", ) -load("//src/main/starlark/core/repositories:versions.bzl", _versions = "versions") load(":bzlmod_impl.bzl", "configure_modules_and_repositories", "tag_classes") def _rules_kotlin_extensions_impl(mctx): @@ -18,20 +16,6 @@ def _rules_kotlin_extensions_impl(mctx): _kotlinc_version, _ksp_version, ) - - _versions.use_repository( - name = "released_rules_kotlin", - rule = http_archive, - version = _versions.RULES_KOTLIN, - patch_cmds = [ - # without repo mapping, force remap the internal dependencies to use the correct version of kotlin - "grep -rl '\"@*{repo}' src kotlin | xargs -I F perl -i -pe 's/\"(@*)({repo})/\"\\1released_\\2/g' F".format( - repo = repo, - ) - for repo in ["com_github_jetbrains_kotlin", "com_github_google_ksp"] - ], - ) - return modules.use_all_repos(mctx, reproducible = True) rules_kotlin_extensions = module_extension( diff --git a/src/main/starlark/core/repositories/compiler.bzl b/src/main/starlark/core/repositories/compiler.bzl index 2c947c6d0..02006456a 100644 --- a/src/main/starlark/core/repositories/compiler.bzl +++ b/src/main/starlark/core/repositories/compiler.bzl @@ -62,6 +62,7 @@ _CAPABILITIES_TEMPLATES = { "1.8": "//src/main/starlark/core/repositories/kotlin:capabilities_1.8.bzl.com_github_jetbrains_kotlin.bazel", "1.9": "//src/main/starlark/core/repositories/kotlin:capabilities_1.9.bzl.com_github_jetbrains_kotlin.bazel", "2.0": "//src/main/starlark/core/repositories/kotlin:capabilities_2.0.bzl.com_github_jetbrains_kotlin.bazel", + "2.1": "//src/main/starlark/core/repositories/kotlin:capabilities_2.1.bzl.com_github_jetbrains_kotlin.bazel", } kotlin_capabilities_repository = repository_rule( diff --git a/src/main/starlark/core/repositories/download.bzl b/src/main/starlark/core/repositories/download.bzl index 29122e645..c08af13f7 100644 --- a/src/main/starlark/core/repositories/download.bzl +++ b/src/main/starlark/core/repositories/download.bzl @@ -124,16 +124,3 @@ def kt_download_local_dev_dependencies(): rule = http_archive, version = versions.CGRINDEL_BAZEL_STARLIB, ) - - versions.use_repository( - name = "released_rules_kotlin", - rule = http_archive, - version = versions.RULES_KOTLIN, - patch_cmds = [ - # without repo mapping, force remap the internal dependencies to use the correct version of kotlin - "for f in $(grep -rl '\"@*{repo}' src kotlin); do perl -i -pe 's/\"(@?)({repo})/\"\\1released_\\2/g' $f; done".format( - repo = repo, - ) - for repo in ["com_github_jetbrains_kotlin", "com_github_google_ksp"] - ], - ) diff --git a/src/main/starlark/core/repositories/kotlin/capabilities_2.1.bzl.com_github_jetbrains_kotlin.bazel b/src/main/starlark/core/repositories/kotlin/capabilities_2.1.bzl.com_github_jetbrains_kotlin.bazel new file mode 100644 index 000000000..dd9be4866 --- /dev/null +++ b/src/main/starlark/core/repositories/kotlin/capabilities_2.1.bzl.com_github_jetbrains_kotlin.bazel @@ -0,0 +1,147 @@ +# Copyright 2024 The Bazel Authors. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +KOTLIN_OPTS = [ + "-Werror", + "-Wextra", + "-XXexplicit-return-types", + "-Xabi-stability", + "-Xadd-modules", + "-Xallow-any-scripts-in-source-roots", + "-Xallow-kotlin-package", + "-Xallow-no-source-files", + "-Xallow-unstable-dependencies", + "-Xassertions", + "-Xbackend-threads", + "-Xcheck-phase-conditions", + "-Xcheck-sticky-phase-conditions", + "-Xcommon-sources", + "-Xcompile-java", + "-Xconsistent-data-class-copy-visibility", + "-Xcontext-receivers", + "-Xdebug", + "-Xdefault-script-extension", + "-Xdirect-java-actualization", + "-Xdisable-default-scripting-plugin", + "-Xdisable-phases", + "-Xdisable-standard-script", + "-Xdont-warn-on-error-suppression", + "-Xemit-jvm-type-annotations", + "-Xenable-builder-inference", + "-Xenable-incremental-compilation", + "-Xenhance-type-parameter-types-to-def-not-null", + "-Xexpect-actual-classes", + "-Xexplicit-api", + "-Xextended-compiler-checks", + "-Xfragment-refines", + "-Xfragment-sources", + "-Xfragments", + "-Xfriend-paths", + "-Xgenerate-strict-metadata-version", + "-Xignore-const-optimization-errors", + "-Xinference-compatibility", + "-Xinline-classes", + "-Xir-do-not-clear-binding-context", + "-Xir-inliner", + "-Xjava-package-prefix", + "-Xjava-source-roots", + "-Xjavac-arguments", + "-Xjdk-release", + "-Xjspecify-annotations", + "-Xjsr305", + "-Xjvm-default", + "-Xjvm-enable-preview", + "-Xklib", + "-Xlambdas", + "-Xlegacy-smart-cast-after-try", + "-Xlink-via-signatures", + "-Xlist-phases", + "-Xmetadata-klib", + "-Xmetadata-version", + "-Xmodule-path", + "-Xmulti-dollar-interpolation", + "-Xmulti-platform", + "-Xmultifile-parts-inherit", + "-Xnew-inference", + "-Xno-call-assertions", + "-Xno-check-actual", + "-Xno-inline", + "-Xno-new-java-annotation-targets", + "-Xno-optimize", + "-Xno-param-assertions", + "-Xno-receiver-assertions", + "-Xno-reset-jar-timestamps", + "-Xno-source-debug-extension", + "-Xno-unified-null-checks", + "-Xnon-local-break-continue", + "-Xnullability-annotations", + "-Xphases-to-dump", + "-Xphases-to-dump-after", + "-Xphases-to-dump-before", + "-Xphases-to-validate", + "-Xphases-to-validate-after", + "-Xphases-to-validate-before", + "-Xprofile", + "-Xprofile-phases", + "-Xrender-internal-diagnostic-names", + "-Xreport-all-warnings", + "-Xreport-output-files", + "-Xreport-perf", + "-Xsam-conversions", + "-Xsanitize-parentheses", + "-Xscript-resolver-environment", + "-Xself-upper-bound-inference", + "-Xserialize-ir", + "-Xskip-metadata-version-check", + "-Xskip-prerelease-check", + "-Xstdlib-compilation", + "-Xstring-concat", + "-Xsupport-compatqual-checker-framework-annotations", + "-Xsuppress-api-version-greater-than-language-version-error", + "-Xsuppress-deprecated-jvm-target-warning", + "-Xsuppress-missing-builtins-error", + "-Xsuppress-version-warnings", + "-Xsuppress-warning", + "-Xtype-enhancement-improvements-strict-mode", + "-Xunrestricted-builder-inference", + "-Xuse-14-inline-classes-mangling-scheme", + "-Xuse-fast-jar-file-system", + "-Xuse-fir-experimental-checkers", + "-Xuse-fir-ic", + "-Xuse-fir-lt", + "-Xuse-inline-scopes-numbers", + "-Xuse-javac", + "-Xuse-k2", + "-Xuse-k2-kapt", + "-Xuse-old-backend", + "-Xuse-old-class-files-reading", + "-Xuse-old-innerclasses-logic", + "-Xuse-type-table", + "-Xvalidate-bytecode", + "-Xvalue-classes", + "-Xverbose-phases", + "-Xverify-ir", + "-Xverify-ir-visibility", + "-Xverify-ir-visibility-after-inlining", + "-Xwhen-guards", + "-api-version", + "-java-parameters", + "-jvm-target", + "-language-version", + "-no-reflect", + "-nowarn", + "-opt-in", + "-progressive", + "-verbose", + "-version", +] diff --git a/src/main/starlark/core/repositories/setup.bzl b/src/main/starlark/core/repositories/setup.bzl index f984de68e..7f7f12457 100644 --- a/src/main/starlark/core/repositories/setup.bzl +++ b/src/main/starlark/core/repositories/setup.bzl @@ -15,7 +15,6 @@ load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace") load("@cgrindel_bazel_starlib//:deps.bzl", "bazel_starlib_dependencies") load("@io_bazel_stardoc//:setup.bzl", "stardoc_repositories") -load("@released_rules_kotlin//src/main/starlark/core/repositories:initialize.bzl", release_kotlin_repositories = "kotlin_repositories") load("@rules_bazel_integration_test//bazel_integration_test:deps.bzl", "bazel_integration_test_rules_dependencies") load("@rules_cc//cc:repositories.bzl", "rules_cc_dependencies", "rules_cc_toolchains") load("@rules_java//java:repositories.bzl", "rules_java_dependencies", "rules_java_toolchains") @@ -25,14 +24,6 @@ load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_ def kt_configure(): """Setup dependencies. Must be called AFTER kt_download_local_dev_dependencies() """ - release_kotlin_repositories( - is_bzlmod = True, - compiler_repository_name = "released_com_github_jetbrains_kotlin", - ksp_repository_name = "released_com_github_google_ksp", - ) - - native.register_toolchains("@released_rules_kotlin//kotlin/internal:default_toolchain") - rules_cc_dependencies() rules_cc_toolchains() @@ -54,22 +45,19 @@ def kt_configure(): "com.google.truth:truth:0.45", "com.google.auto.service:auto-service:1.1.1", "com.google.auto.service:auto-service-annotations:1.1.1", - "com.google.auto.service:auto-service-annotations:jar:1.1.1", "com.google.auto.value:auto-value:1.10.1", "com.google.auto.value:auto-value-annotations:1.10.1", - "org.apache.commons:commons-compress:1.26.2", - "com.google.dagger:dagger:2.51", - "com.google.dagger:dagger-compiler:2.51", - "com.google.dagger:dagger-producers:2.51", + "com.google.dagger:dagger:2.53.1", + "com.google.dagger:dagger-compiler:2.53.1", + "com.google.dagger:dagger-producers:2.53.1", "javax.annotation:javax.annotation-api:1.3.2", "javax.inject:javax.inject:1", + "org.apache.commons:commons-compress:1.26.2", "org.pantsbuild:jarjar:1.7.2", - "org.jetbrains.kotlinx:atomicfu-js:0.15.2", - "org.jetbrains.kotlinx:kotlinx-serialization-runtime:1.0-M1-1.4.0-rc", - "dev.zacsweers.autoservice:auto-service-ksp:jar:1.1.0", - "com.squareup.moshi:moshi:1.15.0", - "com.squareup.moshi:moshi-kotlin:1.15.0", - "com.squareup.moshi:moshi-kotlin-codegen:1.15.0", + "dev.zacsweers.autoservice:auto-service-ksp:jar:1.2.0", + "com.squareup.moshi:moshi:1.15.1", + "com.squareup.moshi:moshi-kotlin:1.15.1", + "com.squareup.moshi:moshi-kotlin-codegen:1.15.1", ], repositories = [ "https://maven-central.storage.googleapis.com/repos/central/data/", diff --git a/src/main/starlark/core/repositories/versions.bzl b/src/main/starlark/core/repositories/versions.bzl index 5b7b49a1a..6f724696a 100644 --- a/src/main/starlark/core/repositories/versions.bzl +++ b/src/main/starlark/core/repositories/versions.bzl @@ -57,18 +57,18 @@ versions = struct( sha256 = "a9f923be58fbd32670a17f0b729b1df804af882fa57402165741cb26e5440ca1", ), KOTLIN_CURRENT_COMPILER_RELEASE = version( - version = "2.0.10", + version = "2.1.0", url_templates = [ "https://github.com/JetBrains/kotlin/releases/download/v{version}/kotlin-compiler-{version}.zip", ], - sha256 = "88d7d8bad362ae4e114a8b9668c6887b8c85f48e340883db0e317e47c8dc2f4f", + sha256 = "b6698d5728ad8f9edcdd01617d638073191d8a03139cc538a391b4e3759ad297", ), KSP_CURRENT_COMPILER_PLUGIN_RELEASE = version( - version = "2.0.10-1.0.24", + version = "2.1.0-1.0.28", url_templates = [ "https://github.com/google/ksp/releases/download/{version}/artifacts.zip", ], - sha256 = "e6a79e649ee383b372fa982be89686c10ee42b25e60147b3271a70fd75a9eb19", + sha256 = "fc27b08cadc061a4a989af01cbeccb613feef1995f4aad68f2be0f886a3ee251", ), ANDROID = struct( VERSION = "0.1.1", @@ -91,14 +91,6 @@ versions = struct( sha256 = "d20c951960ed77cb7b341c2a59488534e494d5ad1d30c4818c736d57772a9fef", ), # needed for rules_pkg and java - RULES_KOTLIN = version( - version = "1.9.6", - url_templates = [ - "https://github.com/bazelbuild/rules_kotlin/releases/download/v{version}/rules_kotlin-v{version}.tar.gz", - ], - sha256 = "3b772976fec7bdcda1d84b9d39b176589424c047eb2175bed09aac630e50af43", - ), - # needed for rules_pkg and java RULES_PYTHON = version( version = "0.23.1", strip_prefix_template = "rules_python-{version}", diff --git a/src/test/kotlin/io/bazel/kotlin/builder/tasks/jvm/KotlinBuilderJvmJdepsTest.kt b/src/test/kotlin/io/bazel/kotlin/builder/tasks/jvm/KotlinBuilderJvmJdepsTest.kt index aded5fac3..00738d64f 100644 --- a/src/test/kotlin/io/bazel/kotlin/builder/tasks/jvm/KotlinBuilderJvmJdepsTest.kt +++ b/src/test/kotlin/io/bazel/kotlin/builder/tasks/jvm/KotlinBuilderJvmJdepsTest.kt @@ -18,7 +18,7 @@ package io.bazel.kotlin.builder.tasks.jvm; import com.google.common.truth.Truth.assertThat import com.google.devtools.build.lib.view.proto.Deps -import io.bazel.kotlin.builder.Deps.* +import io.bazel.kotlin.builder.Deps.Dep import io.bazel.kotlin.builder.KotlinJvmTestBuilder import org.junit.Test import org.junit.runner.RunWith @@ -455,8 +455,14 @@ class KotlinBuilderJvmJdepsTest(private val enableK2Compiler: Boolean) { .setRuleLabel(dependingTarget.label()) .setSuccess(true) .addExplicitDep(connectionNotFoundExceptionDep.singleCompileJar()) - .addExplicitDep(KOTLIN_STDLIB_DEP.singleCompileJar()) - .buildSorted() + .apply { + if (!enableK2Compiler) { + // TODO(https://github.com/bazelbuild/rules_kotlin/issues/1246): Uncomment for 2.1.20. + // See https://youtrack.jetbrains.com/issue/KTIJ-25347/K2-IDE.-Different-resolve-of-types-from-type-aliases-of-stdlib-jvm-comparing-to-K1 + addExplicitDep(KOTLIN_STDLIB_DEP.singleCompileJar()) + } + }.buildSorted() + assertThat(jdeps).isEqualTo(expected) } diff --git a/src/test/kotlin/io/bazel/kotlin/integration/BUILD.bazel b/src/test/kotlin/io/bazel/kotlin/integration/BUILD.bazel deleted file mode 100644 index 8ae74f48b..000000000 --- a/src/test/kotlin/io/bazel/kotlin/integration/BUILD.bazel +++ /dev/null @@ -1,52 +0,0 @@ -load("//kotlin:jvm.bzl", "kt_jvm_library", "kt_jvm_test") - -kt_jvm_library( - name = "lib", - srcs = glob( - ["*.kt"], - exclude = ["*Test.kt"], - ), -) - -kt_jvm_test( - name = "WriteWorkspaceTest", - size = "enormous", - srcs = ["WriteWorkspaceTest.kt"], - deps = [ - ":lib", - "//kotlin/compiler:kotlin-test", - "@kotlin_rules_maven//:com_google_truth_truth", - "@kotlin_rules_maven//:junit_junit", - ], -) - -kt_jvm_test( - name = "MixedSourceCompileTest", - srcs = ["MixedSourceCompileTest.kt"], - resources = [ - "//:rules_kotlin_release.tgz", - ], - tags = ["local"], # necessary for running Bazel in a test. - test_class = "io.bazel.kotlin.integration.MixedSourceCompileTest", - deps = [ - ":lib", - "//kotlin/compiler:kotlin-test", - "@kotlin_rules_maven//:com_google_truth_truth", - "@kotlin_rules_maven//:junit_junit", - ], -) - -test_suite( - name = "integration_tests", - tests = [ - ":WriteWorkspaceTest", - ], -) - -test_suite( - name = "local_integration_tests", - tests = [ - ":MixedSourceCompileTest", - ":integration_tests", - ], -) diff --git a/src/test/kotlin/io/bazel/kotlin/integration/MixedSourceCompileTest.kt b/src/test/kotlin/io/bazel/kotlin/integration/MixedSourceCompileTest.kt deleted file mode 100644 index 98f735e66..000000000 --- a/src/test/kotlin/io/bazel/kotlin/integration/MixedSourceCompileTest.kt +++ /dev/null @@ -1,71 +0,0 @@ -package io.bazel.kotlin.integration - -import com.google.common.truth.Truth -import com.google.common.truth.Truth.assertWithMessage -import io.bazel.kotlin.integration.RulesKotlinWorkspace.Companion.build -import org.junit.Test -import java.nio.file.Files - -class MixedSourceCompileTest { - - @Test - fun `kotlin and java sources with dependency`() { - val workspace = RulesKotlinWorkspace.write(rulesRepo = "rules_kotlin_release") { - - workspace { - val (kt_register_toolchains) = load( - "@rules_kotlin_release//kotlin:core.bzl", - "kt_register_toolchains" - ) - kt_register_toolchains() - } - - "library" { - build { - val (ktJvmLibrary) = load("@rules_kotlin_release//kotlin:jvm.bzl", "kt_jvm_library") - - ktJvmLibrary( - "name" to "library", - "srcs" to !"['Library.kt']", - "visibility" to !"['//:__subpackages__']" - ) - } - kotlin("Library.kt") { - `package`("library") - `class`("Library") {} - } - } - - "mixed" { - build { - val (ktJvmLibrary) = load("@rules_kotlin_release//kotlin:jvm.bzl", "kt_jvm_library") - - ktJvmLibrary( - "name" to "mixed", - "srcs".list("Main.java", "Dep.kt"), - "visibility" to !"['//:__subpackages__']", - "deps".list("//library") - ) - } - - java("Main.java") { - `package`("mixed") - - "public class Main" { - "public void run()" { - +"new Dep();" - } - } - } - - kotlin("Dep.kt") { - `package`("mixed") - `class`("Dep") {} - } - } - } - - val result = workspace.build("//mixed") - assertWithMessage("failed with $result").that(result.exit).isEqualTo(0) - } -} diff --git a/src/test/kotlin/io/bazel/kotlin/integration/RulesKotlinWorkspace.kt b/src/test/kotlin/io/bazel/kotlin/integration/RulesKotlinWorkspace.kt deleted file mode 100644 index cc70b6469..000000000 --- a/src/test/kotlin/io/bazel/kotlin/integration/RulesKotlinWorkspace.kt +++ /dev/null @@ -1,125 +0,0 @@ -package io.bazel.kotlin.integration - -import io.bazel.kotlin.integration.WriteWorkspace.BzlWorkspace -import io.bazel.kotlin.integration.WriteWorkspace.Workspace -import java.nio.file.Files -import java.nio.file.Path -import java.nio.file.StandardOpenOption.CREATE_NEW -import java.util.concurrent.TimeUnit - -class RulesKotlinWorkspace private constructor( - private val rulesRepo: String, - private val write: Workspace -) : Workspace by write { - - companion object { - fun write( - rulesRepo: String = "rules_kotlin_release", - contents: RulesKotlinWorkspace.() -> Unit - ): Path { - return WriteWorkspace.using { - RulesKotlinWorkspace(rulesRepo, this) - .apply(contents) - } - } - - fun Path.build(vararg targets: String): BuildResult { - return this.executeCommand(cmd = "build", targets = targets) - } - - fun Path.run(vararg targets: String): BuildResult { - return this.executeCommand(cmd = "run", targets = targets) - } - - fun Path.test(vararg targets: String): BuildResult { - return this.executeCommand(cmd = "test", targets = targets) - } - - private fun Path.executeCommand(cmd: String, vararg targets: String): BuildResult { - val out = Files.createTempFile("out", "txt").toFile().apply { - deleteOnExit() - } - val err = Files.createTempFile("err", "txt").toFile().apply { - deleteOnExit() - } - - return ProcessBuilder() - .command( - listOf( - "bazel", - cmd, - ) + targets - ) - .redirectOutput(out) - .redirectError(err) - .directory(this.toFile()) - .start().runCatching { - if (!waitFor(5, TimeUnit.MINUTES)) { - error("build took too long:\nout: ${out.readText(Charsets.UTF_8)}\nerr: ${err.readText( - Charsets.UTF_8 - )}") - } - BuildResult( - exit = exitValue(), - out = out.readText(Charsets.UTF_8), - err = err.readText(Charsets.UTF_8) - ) - } - .recover { exception -> - BuildResult( - exit = 1, - out = "", - err = exception.toString() - ) - } - .getOrThrow() - } - data class BuildResult( - val exit: Int, - val out: String, - val err: String, - ) - } - - override fun workspace(contents: BzlWorkspace.() -> Unit) { - val rulesRepo = this.rulesRepo - val (location, archive_repository) = defineArchiveRepository() - val releaseArchive = writeReleaseArchive().toString() - write.workspace { - load(location, archive_repository) - archive_repository( - "name" to rulesRepo, - "path" to releaseArchive - ) - load("@$rulesRepo//kotlin:repositories.bzl", "kotlin_repositories") - "kotlin_repositories"() - apply(contents) - } - } - - private fun writeReleaseArchive(): Path { - return RulesKotlinWorkspace::class.java.classLoader.getResourceAsStream("_release.tgz") - ?.let { stream -> - Files.createTempDirectory("rules_kotlin_release").resolve("$rulesRepo.tgz").also { - Files.newOutputStream(it, CREATE_NEW).buffered().write(stream.readAllBytes()) - } - } - ?: error("Cannot find release repo") - } - - private fun defineArchiveRepository(): Pair { - starlark("archive_repository.bzl") { - "def _archive_repository_impl"(!"repository_ctx") { - "repository_ctx.extract"( - "archive" to !"repository_ctx.attr.path", - ) - } - - "archive_repository=repository_rule"( - "implementation" to !"_archive_repository_impl", - "attrs" to !"{'path': attr.string()}" - ) - } - return "//:archive_repository.bzl" to "archive_repository" - } -} diff --git a/src/test/kotlin/io/bazel/kotlin/integration/WriteWorkspace.kt b/src/test/kotlin/io/bazel/kotlin/integration/WriteWorkspace.kt deleted file mode 100644 index 4ec5d87a9..000000000 --- a/src/test/kotlin/io/bazel/kotlin/integration/WriteWorkspace.kt +++ /dev/null @@ -1,461 +0,0 @@ -package io.bazel.kotlin.integration - -import java.io.Closeable -import java.nio.charset.StandardCharsets -import java.nio.file.Files -import java.nio.file.Files.exists -import java.nio.file.Path -import java.nio.file.StandardOpenOption -import java.nio.file.StandardOpenOption.CREATE_NEW -import java.nio.file.attribute.FileTime -import java.time.Instant -import kotlin.streams.toList - -object WriteWorkspace { - fun using(prefix: String, contents: Workspace.() -> Unit): Path { - return Files.createTempDirectory(prefix).also { root -> - CreateWorkspace(root).use(contents) - } - } - - inline fun using(noinline contents: Workspace.() -> Unit): Path = using( - CLASS::class.run { qualifiedName ?: simpleName ?: error("Cannot use unnamed class") }, contents - ) - - /** - * [open] the [root] of an existing [Workspace] and apply [contents] - * - * An opened workspace only allows modification of non-workspace files. - */ - fun open(root: Path, contents: MutablePackage.() -> Unit) { - ModifyWorkspace(root).use(contents) - } - - @DslMarker - annotation class WorkspaceContext - - interface Text : Appendable { - - operator fun CharSequence.unaryPlus(): CharSequence = apply { - line(toString()) - } - - fun line(contents: CharSequence) { - append(contents).appendLine() - } - - fun indent(contents: Text.() -> Unit) - } - - class Indenting(out: Appendable) : Text, Appendable by out { - private var indent = 0 - override fun indent(contents: Text.() -> Unit) { - indent++ - apply(contents) - indent-- - } - - override fun line(contents: CharSequence) { - append(" ".repeat(indent)).append(contents).appendLine() - } - } - - @WorkspaceContext - interface Paths { - fun new(path: String, contents: Text.() -> Unit): Path { - val text = StringBuilder().apply { - Indenting(this).apply(contents) - } - return new(path, text.toString().toByteArray(StandardCharsets.UTF_8)) - } - - fun new(path: String, contents: ByteArray): Path { - return write(path, contents, CREATE_NEW) - } - - fun write(path: String, contents: ByteArray, vararg options: StandardOpenOption): Path { - return Files.write(resolve(path), contents, *options).also { - Files.setLastModifiedTime(it, FileTime.from(Instant.EPOCH)) - } - } - - fun resolve(path: String): Path - } - - - private class Rendered(private val value: CharSequence) : CharSequence by value { - override fun toString(): String = value.toString() - } - - interface Variables : Text { - - fun Any?.render(): CharSequence = when (this) { - null -> "null" - is Rendered -> this - is String -> Rendered("\"$this\"") - else -> Rendered(toString()) - } - - fun Array.render( - separator: String = " ", - prefix: String = "", - postfix: String = "" - ): CharSequence = Rendered(joinToString(separator, prefix, postfix) { it.render() }) - - operator fun CharSequence.not(): CharSequence = Rendered(this) - - infix fun CharSequence.eq(value: Any) { - +"$this = ${value.render()}" - } - } - - interface Block> : Text { - fun block(label: CharSequence, contents: Block.() -> Unit) { - +label - indent { - apply(contents) - } - } - - operator fun CharSequence.invoke(contents: Block.() -> Unit) { - block(this, contents) - } - } - - interface Define> { - fun define(name: CharSequence, vararg arguments: CharSequence, contents: Define.() -> Unit) - - operator fun CharSequence.invoke( - argument: CharSequence, - vararg arguments: CharSequence, - contents: Define.() -> Unit - ) { - define(this, *(arrayOf(argument) + arguments), contents = contents) - } - } - - interface Invoke : Variables { - fun call(name: CharSequence) { - +"$name()" - } - - fun call(name: CharSequence, vararg arguments: CharSequence) { - +"$name(${arguments.render(", ")})" - } - - fun call(name: CharSequence, vararg arguments: Pair) { - +"$name(" - indent { - arguments - .map { (name, value) -> "$name = ${value.render()}" } - .forEach { argument -> - +"$argument," - } - } - +")" - } - - operator fun CharSequence.invoke() { - call(toString()) - } - - operator fun CharSequence.invoke(vararg arguments: CharSequence) { - call(toString(), *arguments) - } - - operator fun CharSequence.invoke(vararg arguments: Pair) { - call(toString(), *arguments) - } - - fun CharSequence.list(vararg elements:Any?) : Pair { - return this to !"[${elements.joinToString(","){ it.render() }}]" - } - } - - @WorkspaceContext - interface Starlark> : Block, Variables, Invoke { - - @Suppress("PropertyName") - val True: CharSequence - get() = Rendered("True") - - @Suppress("PropertyName") - val False: CharSequence - get() = Rendered("False") - - override fun block(label: CharSequence, contents: Block.() -> Unit) { - super.block("$label:", contents) - } - - fun load(pkg: CharSequence, vararg functions: CharSequence): List { - "load"(pkg.toString(), functions.render(separator = ", ")) - return functions.map { !it } - } - - fun tuple(vararg values: CharSequence): CharSequence { - return Rendered(values.render(prefix = "(", separator = ",", postfix = ")")) - } - - operator fun String.rem(value: CharSequence): CharSequence { - return Rendered("${render()} % ${value.render()}") - } - } - - interface BzlWorkspace : Starlark { - fun local_repository(name: CharSequence, location: Path) { - "local_repository"( - "name" to name, - "path" to location.toString() - ) - } - } - - interface Bzl : Starlark, Define { - - override fun define( - name: CharSequence, - vararg arguments: CharSequence, - contents: Define.() -> Unit - ) { - block(arguments.render(prefix = "$name(", separator = ", ", postfix = ")")) { - contents() - } - } - - fun rule( - name: String, - implementation: CharSequence, - vararg attributes: Pair - ) { - +"$name = rule(" - indent { - "implementation" eq "$implementation," - attributes.forEach { (name, value) -> - name eq value - } - } - } - } - - interface BuildBazel : Starlark - - @WorkspaceContext - interface Jvm> : Block, Define, Invoke { - override fun block(label: CharSequence, contents: Block.() -> Unit) { - super.block("$label {") { - contents() - } - +"}" - } - - override fun define( - name: CharSequence, - vararg arguments: CharSequence, - contents: Define.() -> Unit - ) { - block(arguments.render(separator = ", ", prefix = "$name(", postfix = ")")) { - contents() - } - } - } - - interface KotlinSource : Variables, Jvm { - fun `package`(pkg: CharSequence) { - +"package $pkg" - } - - fun `import`(kClass: CharSequence) { - +"import $kClass" - } - - fun `class`(name: String, vararg parents: String, contents: KotlinSource.() -> Unit) { - "class $name ${ - parents - .takeIf { it.isNotEmpty() } - ?.joinToString(prefix = ":", separator = ", ") - ?: "" - }" { - contents() - } - } - } - - interface JavaSource : Variables, Jvm { - fun `package`(pkg: CharSequence) { - +"package $pkg;" - } - - fun `import`(jClass: CharSequence) { - +"import $jClass;" - } - - fun `class`(name: String, vararg parents: String, contents: JavaSource.() -> Unit) { - "class $name ${ - parents - .takeIf { it.isNotEmpty() } - ?.joinToString(prefix = ":", separator = ", ") - ?: "" - }" { - contents() - } - } - } - - interface Resolve { - fun target(name: String): String - } - - interface SubPackage> { - fun pkg(name: String, contents: T.() -> Unit): Resolve - - operator fun String.invoke(contents: T.() -> Unit): Resolve { - return pkg(this, contents) - } - } - - interface CreatePackage : Package, SubPackage - - interface MutablePackage : Package, SubPackage { - fun remove(path: String) { - resolve(path).let { location -> - when { - Files.isDirectory(location) -> Files - .walk(location) - .toList() - .sorted() - .reversed() - .forEach(Files::deleteIfExists) - else -> Files.deleteIfExists(location) - } - } - } - } - - interface Package : Paths, Closeable { - - fun build(contents: BuildBazel.() -> Unit) { - new("BUILD.bazel") { - object : BuildBazel, Text by this {}.apply(contents) - } - } - - fun kotlin(path: String, contents: KotlinSource.() -> Unit) { - new(path) { - object : KotlinSource, Text by this {}.apply(contents) - } - } - - fun java(path: String, contents: JavaSource.() -> Unit) { - new(path) { - object : JavaSource, Text by this {}.apply(contents) - } - } - - fun starlark(path: String, contents: Bzl.() -> Unit) { - new(path) { - object : Bzl, Text by this {}.apply(contents) - } - } - - override fun close() { - if (!exists(resolve("BUILD.bazel"))) { - build { +"# default package marker" } - } - } - } - - - interface Workspace : Paths, Closeable, CreatePackage { - fun workspace(contents: BzlWorkspace.() -> Unit) { - new("WORKSPACE") { - object : BzlWorkspace, Text by this {}.apply(contents) - } - } - - override fun close() { - if (!exists(resolve("WORKSPACE"))) { - workspace { - +"# Workspace Marker" - } - } - super.close() - } - } - - private interface Structure : Paths { - val workspace: Path - val root: Path - fun child(path: String): Structure - - override fun resolve(path: String): Path { - return root.resolve(path).toAbsolutePath().also { newPath -> - check(newPath == root || newPath.startsWith(root)) { - "$path is invalid. Only paths under the $root are allowed." - } - Files.createDirectories(newPath.parent) - } - } - } - - private class WriteStructure(override val workspace: Path, override val root: Path) : Structure { - override fun child(path: String): Structure { - return WriteStructure(workspace, resolve(path)) - } - } - - private class ReplaceStructure(override val workspace: Path, override val root: Path) : - Structure { - override fun write( - path: String, - contents: ByteArray, - vararg options: StandardOpenOption - ): Path { - Files.deleteIfExists(resolve(path)) - return super.write(path, contents, *options) - } - - override fun child(path: String): Structure { - return ReplaceStructure(workspace, resolve(path)) - } - } - - private interface ResolveByPath : Resolve, Structure { - override fun target(name: String): String { - return "\"//${workspace.relativize(root)}:$name\"" - } - } - - private interface WritePackage : CreatePackage, Structure, ResolveByPath { - override fun pkg(name: String, contents: CreatePackage.() -> Unit): Resolve { - return object : WritePackage, Structure by child(name) {}.apply { use(contents) } - } - } - - private interface ChangePackage : MutablePackage, Structure, ResolveByPath { - override fun pkg(name: String, contents: MutablePackage.() -> Unit): Resolve { - return object : ChangePackage, Structure by child(name) {}.apply { use(contents) } - } - } - - private class CreateWorkspace( - root: Path, - write: WriteStructure = WriteStructure(root, root) - ) : Workspace, WritePackage, Structure by write { - override fun close() { - super.close() - super.close() - } - } - - private class ModifyWorkspace( - root: Path, - val replace: ReplaceStructure = ReplaceStructure(root, root) - ) : ChangePackage, Structure by replace { - override fun resolve(path: String): Path { - check(!path.endsWith("WORKSPACE")) { - "cannot modify the WORKSPACE file." - } - return replace.resolve(path) - } - } -} diff --git a/src/test/kotlin/io/bazel/kotlin/integration/WriteWorkspaceTest.kt b/src/test/kotlin/io/bazel/kotlin/integration/WriteWorkspaceTest.kt deleted file mode 100644 index 0af80edcd..000000000 --- a/src/test/kotlin/io/bazel/kotlin/integration/WriteWorkspaceTest.kt +++ /dev/null @@ -1,61 +0,0 @@ -package io.bazel.kotlin.integration - -import com.google.common.truth.Truth.assertThat -import io.bazel.kotlin.integration.WriteWorkspace.Indenting -import io.bazel.kotlin.integration.WriteWorkspace.Text -import org.junit.Test -import java.nio.file.Files.exists - -class WriteWorkspaceTest { - @Test - fun indent() { - val out = StringBuilder() - object : Text by Indenting(out) {}.apply { - +"foozle" - indent { - +"fizzle" - indent { - +"fop" - } - } - } - - assertThat(out.toString()).isEqualTo( - """|foozle - | fizzle - | fop - |""".trimMargin()) - } - - @Test - fun bzlLoad() { - val out = StringBuilder() - object : WriteWorkspace.BzlWorkspace, Text by Indenting(out) {}.apply { - load("@a_repo//in/a:place.bzl", "here", "no", "there") - } - assertThat(out.toString()).isEqualTo( - """|load("@a_repo//in/a:place.bzl", "here", "no", "there") - |""".trimMargin()) - } - - @Test - fun starklarkBlock() { - val out = StringBuilder() - object : WriteWorkspace.Bzl, Text by Indenting(out) {}.apply { - "def scooby"(!"dooby") { - "print"("%s doo" % !"dooby") - } - } - assertThat(out.toString()).isEqualTo( - """|def scooby(dooby): - | print("%s doo" % dooby) - |""".trimMargin()) - } - - @Test - fun alwaysWriteBuild() { - val workspace = WriteWorkspace.using {} - assertThat(exists(workspace.resolve("WORKSPACE"))).isTrue() - assertThat(exists(workspace.resolve("BUILD.bazel"))).isTrue() - } -} diff --git a/src/test/starlark/case.bzl b/src/test/starlark/case.bzl index 19827f91e..9f7819d64 100644 --- a/src/test/starlark/case.bzl +++ b/src/test/starlark/case.bzl @@ -1,3 +1,4 @@ +load("@rules_testing//lib:analysis_test.bzl", "analysis_test") load("@rules_testing//lib:util.bzl", "util") def _prepend(rule, name, **kwargs): @@ -8,6 +9,28 @@ def _prepend(rule, name, **kwargs): ) return ":" + name +Want = provider( + fields = { + "attr": "attr type of the value.", + "value": "attr value", + }, +) + +def _claim(name, what, got, wants): + analysis_test( + name = name, + impl = what, + target = got, + attr_values = { + name: want.value + for (name, want) in wants.items() + }, + attrs = { + name: want.attr + for (name, want) in wants.items() + }, + ) + def case(namespace): return struct( name = namespace, @@ -18,6 +41,7 @@ def case(namespace): ), got = lambda rule, name, **kwargs: _prepend(rule, namespace + "_" + name, **kwargs), ref = lambda name: ":" + namespace + "_" + name, + claim = lambda **kwargs: _claim(name = namespace, **kwargs), ) def suite(name, *tests): diff --git a/src/test/starlark/compile/BUILD.bazel b/src/test/starlark/compile/BUILD.bazel new file mode 100644 index 000000000..69258ba1b --- /dev/null +++ b/src/test/starlark/compile/BUILD.bazel @@ -0,0 +1,5 @@ +load(":common_tests.bzl", "test_suite") + +test_suite( + name = "common_tests", +) diff --git a/src/test/starlark/compile/cli/BUILD.bazel b/src/test/starlark/compile/cli/BUILD.bazel new file mode 100644 index 000000000..8c4c08b10 --- /dev/null +++ b/src/test/starlark/compile/cli/BUILD.bazel @@ -0,0 +1,41 @@ +load("@bazel_skylib//rules:write_file.bzl", "write_file") +load("//src/main/starlark/core/compile:rules.bzl", "core_kt_jvm_binary") + +want = "Hello From Koltinc" + +write_file( + name = "write_hello.kt", + out = "hello.kt", + content = [ + "class Hello {", + " companion object {", + " @JvmStatic", + " fun main(args: Array){", + " println(\"%s\")" % want, + " }", + " }", + "}", + ], +) + +core_kt_jvm_binary( + name = "hello", + srcs = [ + ":write_hello.kt", + ], + main_class = "Hello", +) + +sh_test( + name = "test_execution", + srcs = ["test_execution.sh"], + args = [ + "$(location :hello)", + "'%s'" % want, + ], + data = [ + ":hello", + "@bazel_tools//tools/bash/runfiles", + ], + deps = [], +) diff --git a/src/test/starlark/compile/cli/test_execution.sh b/src/test/starlark/compile/cli/test_execution.sh new file mode 100755 index 000000000..e92098117 --- /dev/null +++ b/src/test/starlark/compile/cli/test_execution.sh @@ -0,0 +1,10 @@ +#!/bin/bash +set -e -x +have=$1 +want=$2 +got=$($have | tr -d "\n") +if [[ "${got}" != "${want}" ]]; then + echo "Want: |$want|" + echo "Got: |$got|" + exit 1 +fi \ No newline at end of file diff --git a/src/test/starlark/compile/common_tests.bzl b/src/test/starlark/compile/common_tests.bzl new file mode 100644 index 000000000..c9ddafc58 --- /dev/null +++ b/src/test/starlark/compile/common_tests.bzl @@ -0,0 +1,212 @@ +load("//src/main/starlark/core/compile:common.bzl", "KtJvmInfo") +load("//src/main/starlark/core/compile:rules.bzl", "core_kt_jvm_binary", "core_kt_jvm_library") +load("//src/test/starlark:case.bzl", "Want", "suite") + +#load("//src/test/starlark:truth.bzl", "fail_messages_in", "flags_and_values_of") +load(":subjects.bzl", "java_info_subject_factory") + +def map_to(attr): + return { + "desc": attr, + "map_each": lambda o: getattr(o, attr, None), + } + +def _outputs(env, got): + got_target = env.expect.that_target(got) + + # assert java outputs + got_target.has_provider(JavaInfo) + got_java_info = got_target.provider(JavaInfo, java_info_subject_factory) + got_java_info.java_outputs().transform(**map_to("class_jar")).contains(env.ctx.file.class_jar) + + want_compile_jars = [ + j + for d in env.ctx.attr.transitive_compile_deps + if JavaInfo in d + for j in d[JavaInfo].compile_jars.to_list() + ] + + want_runtime_jars = [ + j + for d in env.ctx.attr.transitive_runtime_deps + if JavaInfo in d + for j in d[JavaInfo].transitive_runtime_jars.to_list() + ] + + got_java_info.transitive_compile_time_jars().contains_exactly([j.short_path for j in want_compile_jars]) + got_java_info.transitive_runtime_jars().contains_exactly([j.short_path for j in want_runtime_jars]) + got_java_info.source_jars().contains(env.ctx.file.source_jar) + + # get actions + got_target.action_generating(env.ctx.file.source_jar.short_path) + + compile = got_target.action_generating(env.ctx.file.class_jar.short_path) + compile.contains_at_least_inputs( + [i[JavaInfo].compile_jars.to_list() for i in env.ctx.attr.inputs if JavaInfo in i] + env.ctx.files.inputs, + ) + +def _test_neverlink_deps(test, rule_under_test, **kwargs): + have = test.have( + rule_under_test, + name = "have", + srcs = [test.artifact("hold.kt")], + deps = [], + neverlink = True, + **kwargs + ) + + got_src = test.artifact("gave.kt") + got = test.got( + rule_under_test, + name = "got", + srcs = [got_src], + deps = [have], + **kwargs + ) + test.claim( + got = got, + what = _outputs, + wants = { + "class_jar": Want( + attr = attr.label(allow_single_file = True), + value = got + ".jar", + ), + "source_jar": Want( + attr = attr.label(allow_single_file = True), + value = got + ".srcjar", + ), + "inputs": Want( + attr = attr.label_list(allow_empty = True, allow_files = True), + value = [got_src, have + ".jar"], + ), + "transitive_compile_deps": Want( + attr = attr.label_list(providers = [[JavaInfo], [KtJvmInfo]]), + value = [got, have], + ), + "transitive_runtime_deps": Want( + attr = attr.label_list(providers = [[JavaInfo], [KtJvmInfo]]), + value = [got], + ), + }, + ) + +def _test_deps_core(test, rule_under_test, **kwargs): + have = test.have( + rule_under_test, + name = "have", + srcs = [ + test.artifact("hold.kt"), + ], + deps = [ + ], + **kwargs + ) + + got = test.got( + rule_under_test, + name = "got", + srcs = [ + test.artifact("gave.kt"), + ], + deps = [ + have, + ], + **kwargs + ) + test.claim( + got = got, + what = _outputs, + wants = { + "class_jar": Want( + attr = attr.label(allow_single_file = True), + value = got + ".jar", + ), + "source_jar": Want( + attr = attr.label(allow_single_file = True), + value = got + ".srcjar", + ), + "inputs": Want( + attr = attr.label_list(allow_empty = True, allow_files = True), + value = [have + ".jar"], + ), + "transitive_compile_deps": Want( + attr = attr.label_list(providers = [[JavaInfo], [KtJvmInfo]]), + value = [ + have, + got, + ], + ), + "transitive_runtime_deps": Want( + attr = attr.label_list(providers = [[JavaInfo], [KtJvmInfo]]), + value = [got], + ), + }, + ) + +def test_no_deps_core(test, rule_under_test, **kwargs): + have_src = test.artifact("a.kt") + got = test.got( + rule_under_test, + name = "got", + srcs = [ + have_src, + ], + deps = [ + ], + **kwargs + ) + test.claim( + got = got, + what = _outputs, + wants = { + "class_jar": Want( + attr = attr.label(allow_single_file = True), + value = got + ".jar", + ), + "source_jar": Want( + attr = attr.label(allow_single_file = True), + value = got + ".srcjar", + ), + "transitive_compile_deps": Want( + attr = attr.label_list(providers = [[JavaInfo], [KtJvmInfo]]), + value = [got], + ), + "transitive_runtime_deps": Want( + attr = attr.label_list(providers = [[JavaInfo], [KtJvmInfo]]), + value = [got], + ), + "inputs": Want( + attr = attr.label_list(allow_empty = True, allow_files = True), + value = [have_src], + ), + }, + ) + +def test_deps_core_kt_jvm_binary(test): + _test_deps_core(test, core_kt_jvm_binary, main_class = "Foo") + +def test_neverlink_deps_core_kt_jvm_binary(test): + _test_neverlink_deps(test, core_kt_jvm_binary, main_class = "Foo") + +def test_no_deps_core_kt_jvm_binary(test): + test_no_deps_core(test, core_kt_jvm_binary, main_class = "Foo") + +def test_deps_core_kt_jvm_library(test): + _test_deps_core(test, core_kt_jvm_library) + +def test_neverlink_deps_core_kt_jvm_library(test): + _test_neverlink_deps(test, core_kt_jvm_library) + +def test_no_deps_core_kt_jvm_library(test): + test_no_deps_core(test, core_kt_jvm_library) + +def test_suite(name): + suite( + name, + test_deps_core_kt_jvm_binary, + test_deps_core_kt_jvm_library, + test_neverlink_deps_core_kt_jvm_library, + test_neverlink_deps_core_kt_jvm_binary, + test_no_deps_core_kt_jvm_binary, + test_no_deps_core_kt_jvm_library, + ) diff --git a/src/test/starlark/compile/subjects.bzl b/src/test/starlark/compile/subjects.bzl new file mode 100644 index 000000000..311f7c16b --- /dev/null +++ b/src/test/starlark/compile/subjects.bzl @@ -0,0 +1,13 @@ +load("@rules_testing//lib:truth.bzl", "subjects") + +def java_info_subject_factory(value, meta): + return subjects.struct( + value, + meta = meta.derive("JavaInfo"), + attrs = { + "java_outputs": subjects.collection, + "source_jars": subjects.collection, + "transitive_compile_time_jars": subjects.depset_file, + "transitive_runtime_jars": subjects.depset_file, + }, + )