From 863113e8eaa35dcb0ec6ff582d1aaf5529c0cccc Mon Sep 17 00:00:00 2001 From: raghulvelusamy Date: Thu, 8 Aug 2024 22:42:35 -0700 Subject: [PATCH 01/23] Update some random dep --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 804e72a..91d2118 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ minSdk = "23" compileSdk = "34" targetSdk = "34" -androidGradlePlugin = "8.2.0-alpha14" +androidGradlePlugin = "8.2.2" androidxActivity = "1.8.0-alpha06" androidxBrowser = "1.5.0" androidxComposeBom = "2023.08.00" From a118586cd5bbf28bfa64a4af6274122eab15b27e Mon Sep 17 00:00:00 2001 From: raghulvelusamy Date: Fri, 9 Aug 2024 17:32:41 -0700 Subject: [PATCH 02/23] Before hilt conflicts --- .bazelrc | 10 +++++++ .bazelversion | 1 + .gitignore | 6 +++++ BUILD.bazel | 0 MODULE.bazel | 48 +++++++++++++++++++++++++++++++++ WORKSPACE.bzlmod | 1 + app/BUILD.bazel | 0 bazel-Cheddar | 1 + bazel-bin | 1 + bazel-out | 1 + bazel-testlogs | 1 + core/common/BUILD.bazel | 12 +++++++++ core/domain/BUILD.bazel | 0 core/hackernews/BUILD.bazel | 16 +++++++++++ core/model/BUILD.bazel | 11 ++++++++ core/network/BUILD.bazel | 14 ++++++++++ core/testing/BUILD.bazel | 0 core/ui/BUILD.bazel | 0 core/webpreview/BUILD.bazel | 14 ++++++++++ feature/storydetail/BUILD.bazel | 14 ++++++++++ feature/storyfeed/BUILD.bazel | 14 ++++++++++ 21 files changed, 165 insertions(+) create mode 100644 .bazelrc create mode 100644 .bazelversion create mode 100644 BUILD.bazel create mode 100644 MODULE.bazel create mode 100644 WORKSPACE.bzlmod create mode 100644 app/BUILD.bazel create mode 120000 bazel-Cheddar create mode 120000 bazel-bin create mode 120000 bazel-out create mode 120000 bazel-testlogs create mode 100644 core/common/BUILD.bazel create mode 100644 core/domain/BUILD.bazel create mode 100644 core/hackernews/BUILD.bazel create mode 100644 core/model/BUILD.bazel create mode 100644 core/network/BUILD.bazel create mode 100644 core/testing/BUILD.bazel create mode 100644 core/ui/BUILD.bazel create mode 100644 core/webpreview/BUILD.bazel create mode 100644 feature/storydetail/BUILD.bazel create mode 100644 feature/storyfeed/BUILD.bazel diff --git a/.bazelrc b/.bazelrc new file mode 100644 index 0000000..e17323f --- /dev/null +++ b/.bazelrc @@ -0,0 +1,10 @@ +# Flags needed while the Android rules are being migrated to Starlark. +common --experimental_google_legacy_api +common --experimental_enable_android_migration_apis +common --android_sdk=@androidsdk//:sdk +common:core_library_desugaring --desugar_java8_libs + +# Flags to enable mobile-install v3 +mobile-install --mode=skylark --mobile_install_aspect=@rules_android//mobile_install:mi.bzl --mobile_install_supported_rules=android_binary +# Required to invoke the Studio deployer jar +mobile-install --tool_java_runtime_version=17 \ No newline at end of file diff --git a/.bazelversion b/.bazelversion new file mode 100644 index 0000000..468c41f --- /dev/null +++ b/.bazelversion @@ -0,0 +1 @@ +7.2.1 \ No newline at end of file diff --git a/.gitignore b/.gitignore index fff5b46..fac9af6 100644 --- a/.gitignore +++ b/.gitignore @@ -59,3 +59,9 @@ fastlane/Preview.html fastlane/screenshots fastlane/test_output fastlane/readme.md +*.lock +bazel-out/ +bazel-bin/ +bazel-testlogs/ +bazel-Cheddar/ +.gitignore \ No newline at end of file diff --git a/BUILD.bazel b/BUILD.bazel new file mode 100644 index 0000000..e69de29 diff --git a/MODULE.bazel b/MODULE.bazel new file mode 100644 index 0000000..73ea70f --- /dev/null +++ b/MODULE.bazel @@ -0,0 +1,48 @@ +module(name = "cheddarapp") + +remote_android_extensions = use_extension("@bazel_tools//tools/android:android_extensions.bzl", "remote_android_tools_extensions") +use_repo(remote_android_extensions, "android_gmaven_r8", "android_tools") + +bazel_dep(name = "rules_java", version = "7.4.0") +bazel_dep(name = "bazel_skylib", version = "1.3.0") +bazel_dep(name = "rules_jvm_external", version = "6.2") +bazel_dep(name = "rules_android", version = "0.5.1") +bazel_dep(name = "rules_kotlin", version = "1.9.6") + +register_toolchains( + "@rules_android//toolchains/android:android_default_toolchain", + "@rules_android//toolchains/android_sdk:android_sdk_tools", +) + +android_sdk_repository_extension = use_extension("@rules_android//rules/android_sdk_repository:rule.bzl", "android_sdk_repository_extension") +use_repo(android_sdk_repository_extension, "androidsdk") + +register_toolchains("@androidsdk//:sdk-toolchain", "@androidsdk//:all") + +maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven") +maven.install( + artifacts = [ + "androidx.compose.runtime:runtime:1.1.0", + "org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.4", + "androidx.compose.ui:ui:1.2.0", + "androidx.compose.material:material:1.2.0", + "androidx.compose.ui:ui-tooling:1.2.0", + "org.jsoup:jsoup:1.16.1", + "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3", + "com.google.dagger:dagger:2.45", + "com.google.dagger:dagger-compiler:2.45", + "junit:junit:4.13.2", + "com.jakewharton.timber:timber:5.0.1", + "org.jetbrains.kotlinx:kotlinx-serialization-core:1.5.1", + "org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1", + "com.squareup.retrofit2:retrofit:2.9.0", # Replace with the correct version for Retrofit + "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.8.0", + "com.squareup.okhttp3:okhttp:4.9.3", + "com.squareup.okhttp3:logging-interceptor:4.9.3", + ], + repositories = [ + "https://maven.google.com", + "https://repo1.maven.org/maven2", + ], +) +use_repo(maven, "maven") diff --git a/WORKSPACE.bzlmod b/WORKSPACE.bzlmod new file mode 100644 index 0000000..b554743 --- /dev/null +++ b/WORKSPACE.bzlmod @@ -0,0 +1 @@ +android_sdk_repository(name = "androidsdk") \ No newline at end of file diff --git a/app/BUILD.bazel b/app/BUILD.bazel new file mode 100644 index 0000000..e69de29 diff --git a/bazel-Cheddar b/bazel-Cheddar new file mode 120000 index 0000000..faab2d9 --- /dev/null +++ b/bazel-Cheddar @@ -0,0 +1 @@ +/private/var/tmp/_bazel_rvelusamy/980eb5de3c8144aab67d02e7ff61853e/execroot/_main \ No newline at end of file diff --git a/bazel-bin b/bazel-bin new file mode 120000 index 0000000..60b27a5 --- /dev/null +++ b/bazel-bin @@ -0,0 +1 @@ +/private/var/tmp/_bazel_rvelusamy/980eb5de3c8144aab67d02e7ff61853e/execroot/_main/bazel-out/darwin_arm64-fastbuild/bin \ No newline at end of file diff --git a/bazel-out b/bazel-out new file mode 120000 index 0000000..fd5da93 --- /dev/null +++ b/bazel-out @@ -0,0 +1 @@ +/private/var/tmp/_bazel_rvelusamy/980eb5de3c8144aab67d02e7ff61853e/execroot/_main/bazel-out \ No newline at end of file diff --git a/bazel-testlogs b/bazel-testlogs new file mode 120000 index 0000000..ca20085 --- /dev/null +++ b/bazel-testlogs @@ -0,0 +1 @@ +/private/var/tmp/_bazel_rvelusamy/980eb5de3c8144aab67d02e7ff61853e/execroot/_main/bazel-out/darwin_arm64-fastbuild/testlogs \ No newline at end of file diff --git a/core/common/BUILD.bazel b/core/common/BUILD.bazel new file mode 100644 index 0000000..44a3828 --- /dev/null +++ b/core/common/BUILD.bazel @@ -0,0 +1,12 @@ +load("@rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") + +kt_jvm_library( + name = "lib", + srcs = glob(["**/*.kt"]), + deps = [ + "//core/model:lib", + "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_android", + "@maven//:junit_junit", + ], + visibility = ["//visibility:public"], +) \ No newline at end of file diff --git a/core/domain/BUILD.bazel b/core/domain/BUILD.bazel new file mode 100644 index 0000000..e69de29 diff --git a/core/hackernews/BUILD.bazel b/core/hackernews/BUILD.bazel new file mode 100644 index 0000000..6e701fa --- /dev/null +++ b/core/hackernews/BUILD.bazel @@ -0,0 +1,16 @@ +load("@rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") + +kt_jvm_library( + name = "lib", + srcs = glob(["**/*.kt"]), + deps = [ + "@maven//:androidx_compose_runtime_runtime", + "@maven//:org_jetbrains_kotlinx_kotlinx_collections_immutable_jvm", + "@maven//:com_google_dagger_dagger", + "@maven//:org_jetbrains_kotlinx_kotlinx_serialization_core", + "@maven//:org_jetbrains_kotlinx_kotlinx_serialization_core_jvm", + "@maven//:org_jetbrains_kotlinx_kotlinx_serialization_json", + "@maven//:org_jetbrains_kotlinx_kotlinx_serialization_json_jvm", + ], + visibility = ["//visibility:public"], +) diff --git a/core/model/BUILD.bazel b/core/model/BUILD.bazel new file mode 100644 index 0000000..532841e --- /dev/null +++ b/core/model/BUILD.bazel @@ -0,0 +1,11 @@ +load("@rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") + +kt_jvm_library( + name = "lib", + srcs = glob(["**/*.kt"]), + deps = [ + "@maven//:androidx_compose_runtime_runtime", + "@maven//:org_jetbrains_kotlinx_kotlinx_collections_immutable_jvm", + ], + visibility = ["//visibility:public"], +) \ No newline at end of file diff --git a/core/network/BUILD.bazel b/core/network/BUILD.bazel new file mode 100644 index 0000000..c4584eb --- /dev/null +++ b/core/network/BUILD.bazel @@ -0,0 +1,14 @@ +load("@rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") + +kt_jvm_library( + name = "lib", + srcs = glob(["**/*.kt"]), + deps = [ + "@maven//:com_google_dagger_dagger", + "@maven//:com_jakewharton_retrofit_retrofit2_kotlinx_serialization_converter", + "@maven//:com_squareup_retrofit2_retrofit", + "@maven//:com_squareup_okhttp3_okhttp", + "@maven//:com_squareup_okhttp3_logging_interceptor", + ], + visibility = ["//visibility:public"], +) \ No newline at end of file diff --git a/core/testing/BUILD.bazel b/core/testing/BUILD.bazel new file mode 100644 index 0000000..e69de29 diff --git a/core/ui/BUILD.bazel b/core/ui/BUILD.bazel new file mode 100644 index 0000000..e69de29 diff --git a/core/webpreview/BUILD.bazel b/core/webpreview/BUILD.bazel new file mode 100644 index 0000000..a28314e --- /dev/null +++ b/core/webpreview/BUILD.bazel @@ -0,0 +1,14 @@ +load("@rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") + +kt_jvm_library( + name = "lib", + srcs = glob(["**/*.kt"]), + deps = [ + "//core/common:lib", + "//core/model:lib", + "@maven//:org_jsoup_jsoup", + "@maven//:com_google_dagger_dagger", + "@maven//:com_jakewharton_timber_timber", + ], + visibility = ["//visibility:public"], + ) diff --git a/feature/storydetail/BUILD.bazel b/feature/storydetail/BUILD.bazel new file mode 100644 index 0000000..50067ae --- /dev/null +++ b/feature/storydetail/BUILD.bazel @@ -0,0 +1,14 @@ +load("@rules_kotlin//kotlin:android.bzl", "kt_android_library") + +kt_android_library( + name = "lib", + custom_package = "co.adrianblan.storydetail", + srcs = glob(["**/*.kt"]), + manifest = "src/main/AndroidManifest.xml", + resource_files = glob(["res/**"]), + deps = [ + "//core/webprevieew:lib", + "//core/hackernews:lib", + ], + visibility = ["//visibility:public"], + ) diff --git a/feature/storyfeed/BUILD.bazel b/feature/storyfeed/BUILD.bazel new file mode 100644 index 0000000..7a81640 --- /dev/null +++ b/feature/storyfeed/BUILD.bazel @@ -0,0 +1,14 @@ +load("@rules_kotlin//kotlin:android.bzl", "kt_android_library") + +kt_android_library( + name = "lib", + custom_package = "co.adrianblan.storyfeed", + srcs = glob(["**/*.kt"]), + manifest = "src/main/AndroidManifest.xml", + resource_files = glob(["res/**"]), + deps = [ + "//core/webprevieew:lib", + "//core/hackernews:lib", + ], + visibility = ["//visibility:public"], + ) From d775f36fddb36b56e4b6ac9ea682c549238363ba Mon Sep 17 00:00:00 2001 From: raghulvelusamy Date: Fri, 9 Aug 2024 18:23:55 -0700 Subject: [PATCH 03/23] Partial Fix --- MODULE.bazel | 25 ++++++++++++++++--------- bazel-Cheddar | 1 - bazel-bin | 1 - bazel-out | 1 - bazel-testlogs | 1 - 5 files changed, 16 insertions(+), 13 deletions(-) delete mode 120000 bazel-Cheddar delete mode 120000 bazel-bin delete mode 120000 bazel-out delete mode 120000 bazel-testlogs diff --git a/MODULE.bazel b/MODULE.bazel index 73ea70f..cde0815 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -22,23 +22,30 @@ register_toolchains("@androidsdk//:sdk-toolchain", "@androidsdk//:all") maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven") maven.install( artifacts = [ - "androidx.compose.runtime:runtime:1.1.0", "org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.4", - "androidx.compose.ui:ui:1.2.0", - "androidx.compose.material:material:1.2.0", + "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3", + "org.jetbrains.kotlinx:kotlinx-serialization-core:1.5.1", + "org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1", + "androidx.compose.runtime:runtime:1.0.0", + "androidx.compose.ui:ui:1.0.0", + "androidx.compose.material:material:1.0.0", + "androidx.compose.ui:ui-tooling-android:1.0.0", "androidx.compose.ui:ui-tooling:1.2.0", + "androidx.activity:activity:1.5.1", + "androidx.activity:activity-compose:1.5.1", + "androidx.activity:activity-ktx:1.5.1", + "androidx.fragment:fragment:1.5.1", "org.jsoup:jsoup:1.16.1", - "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3", - "com.google.dagger:dagger:2.45", - "com.google.dagger:dagger-compiler:2.45", "junit:junit:4.13.2", "com.jakewharton.timber:timber:5.0.1", - "org.jetbrains.kotlinx:kotlinx-serialization-core:1.5.1", - "org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1", - "com.squareup.retrofit2:retrofit:2.9.0", # Replace with the correct version for Retrofit "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.8.0", "com.squareup.okhttp3:okhttp:4.9.3", "com.squareup.okhttp3:logging-interceptor:4.9.3", + "com.squareup.retrofit2:retrofit:2.9.0", + "com.google.dagger:dagger:2.45", + "com.google.dagger:dagger-compiler:2.45", + "com.google.dagger:hilt-android:2.44", + "androidx.hilt:hilt-lifecycle-viewmodel:1.2.0", ], repositories = [ "https://maven.google.com", diff --git a/bazel-Cheddar b/bazel-Cheddar deleted file mode 120000 index faab2d9..0000000 --- a/bazel-Cheddar +++ /dev/null @@ -1 +0,0 @@ -/private/var/tmp/_bazel_rvelusamy/980eb5de3c8144aab67d02e7ff61853e/execroot/_main \ No newline at end of file diff --git a/bazel-bin b/bazel-bin deleted file mode 120000 index 60b27a5..0000000 --- a/bazel-bin +++ /dev/null @@ -1 +0,0 @@ -/private/var/tmp/_bazel_rvelusamy/980eb5de3c8144aab67d02e7ff61853e/execroot/_main/bazel-out/darwin_arm64-fastbuild/bin \ No newline at end of file diff --git a/bazel-out b/bazel-out deleted file mode 120000 index fd5da93..0000000 --- a/bazel-out +++ /dev/null @@ -1 +0,0 @@ -/private/var/tmp/_bazel_rvelusamy/980eb5de3c8144aab67d02e7ff61853e/execroot/_main/bazel-out \ No newline at end of file diff --git a/bazel-testlogs b/bazel-testlogs deleted file mode 120000 index ca20085..0000000 --- a/bazel-testlogs +++ /dev/null @@ -1 +0,0 @@ -/private/var/tmp/_bazel_rvelusamy/980eb5de3c8144aab67d02e7ff61853e/execroot/_main/bazel-out/darwin_arm64-fastbuild/testlogs \ No newline at end of file From e7ca2abe1d3ded61f203534c5f3569eb30ca92b5 Mon Sep 17 00:00:00 2001 From: raghulvelusamy Date: Sat, 10 Aug 2024 09:18:15 -0700 Subject: [PATCH 04/23] Test 2 --- MODULE.bazel | 7 +-- bazel-Cheddar | 1 + bazel-bin | 1 + bazel-out | 1 + bazel-testlogs | 1 + core/hackernews/AndroidManifest.xml | 10 ++++ core/hackernews/BUILD.bazel | 47 +++++++++++++++---- core/hackernews/src/main/AndroidManifest.xml | 10 ++++ .../adrianblan/hackernews/api/Serializers.kt | 3 ++ core/network/BUILD.bazel | 3 ++ core/ui/BUILD.bazel | 13 +++++ core/ui/src/main/AndroidManifest.xml | 10 ++++ gradle/libs.versions.toml | 4 -- 13 files changed, 96 insertions(+), 15 deletions(-) create mode 120000 bazel-Cheddar create mode 120000 bazel-bin create mode 120000 bazel-out create mode 120000 bazel-testlogs create mode 100644 core/hackernews/AndroidManifest.xml create mode 100644 core/hackernews/src/main/AndroidManifest.xml create mode 100644 core/ui/src/main/AndroidManifest.xml diff --git a/MODULE.bazel b/MODULE.bazel index cde0815..0e548da 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -29,7 +29,6 @@ maven.install( "androidx.compose.runtime:runtime:1.0.0", "androidx.compose.ui:ui:1.0.0", "androidx.compose.material:material:1.0.0", - "androidx.compose.ui:ui-tooling-android:1.0.0", "androidx.compose.ui:ui-tooling:1.2.0", "androidx.activity:activity:1.5.1", "androidx.activity:activity-compose:1.5.1", @@ -44,8 +43,10 @@ maven.install( "com.squareup.retrofit2:retrofit:2.9.0", "com.google.dagger:dagger:2.45", "com.google.dagger:dagger-compiler:2.45", - "com.google.dagger:hilt-android:2.44", - "androidx.hilt:hilt-lifecycle-viewmodel:1.2.0", + "com.google.dagger:hilt-android:2.48", + "com.squareup.moshi:moshi:jar:1.15.1", + "com.squareup.moshi:moshi-kotlin:jar:1.15.1", + "com.squareup.moshi:moshi-kotlin-codegen:jar:1.15.1", ], repositories = [ "https://maven.google.com", diff --git a/bazel-Cheddar b/bazel-Cheddar new file mode 120000 index 0000000..faab2d9 --- /dev/null +++ b/bazel-Cheddar @@ -0,0 +1 @@ +/private/var/tmp/_bazel_rvelusamy/980eb5de3c8144aab67d02e7ff61853e/execroot/_main \ No newline at end of file diff --git a/bazel-bin b/bazel-bin new file mode 120000 index 0000000..60b27a5 --- /dev/null +++ b/bazel-bin @@ -0,0 +1 @@ +/private/var/tmp/_bazel_rvelusamy/980eb5de3c8144aab67d02e7ff61853e/execroot/_main/bazel-out/darwin_arm64-fastbuild/bin \ No newline at end of file diff --git a/bazel-out b/bazel-out new file mode 120000 index 0000000..fd5da93 --- /dev/null +++ b/bazel-out @@ -0,0 +1 @@ +/private/var/tmp/_bazel_rvelusamy/980eb5de3c8144aab67d02e7ff61853e/execroot/_main/bazel-out \ No newline at end of file diff --git a/bazel-testlogs b/bazel-testlogs new file mode 120000 index 0000000..ca20085 --- /dev/null +++ b/bazel-testlogs @@ -0,0 +1 @@ +/private/var/tmp/_bazel_rvelusamy/980eb5de3c8144aab67d02e7ff61853e/execroot/_main/bazel-out/darwin_arm64-fastbuild/testlogs \ No newline at end of file diff --git a/core/hackernews/AndroidManifest.xml b/core/hackernews/AndroidManifest.xml new file mode 100644 index 0000000..222fd10 --- /dev/null +++ b/core/hackernews/AndroidManifest.xml @@ -0,0 +1,10 @@ + + + + + diff --git a/core/hackernews/BUILD.bazel b/core/hackernews/BUILD.bazel index 6e701fa..9801ab8 100644 --- a/core/hackernews/BUILD.bazel +++ b/core/hackernews/BUILD.bazel @@ -1,16 +1,47 @@ -load("@rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") +load("@rules_kotlin//kotlin:android.bzl", "kt_android_library") +load("@rules_kotlin//kotlin:core.bzl", "kt_compiler_plugin", "kt_ksp_plugin") -kt_jvm_library( +kt_ksp_plugin( + name = "moshi-kotlin-codegen", + processor_class = "com.squareup.moshi.kotlin.codegen.ksp.JsonClassSymbolProcessorProvider", + deps = [ + "@maven//:com_squareup_moshi_moshi", + "@maven//:com_squareup_moshi_moshi_kotlin", + "@maven//:com_squareup_moshi_moshi_kotlin_codegen", + ], +) + +kt_compiler_plugin( + name = "serialization_plugin", + compile_phase = True, + id = "org.jetbrains.kotlin.serialization", + stubs_phase = True, + deps = [ + "@rules_kotlin//kotlin/compiler:kotlinx-serialization-compiler-plugin", + ], +) + +kt_android_library( name = "lib", - srcs = glob(["**/*.kt"]), + srcs = glob(["src/main/java/**/*.kt"]), + manifest = "src/main/AndroidManifest.xml", + plugins = [ + ":serialization_plugin" + ], + tags = ["trace"], + custom_package = "co.adrianblan.hackernews", deps = [ + "//core/model:lib", + "//core/network:lib", + "//core/common:lib", "@maven//:androidx_compose_runtime_runtime", "@maven//:org_jetbrains_kotlinx_kotlinx_collections_immutable_jvm", - "@maven//:com_google_dagger_dagger", - "@maven//:org_jetbrains_kotlinx_kotlinx_serialization_core", - "@maven//:org_jetbrains_kotlinx_kotlinx_serialization_core_jvm", - "@maven//:org_jetbrains_kotlinx_kotlinx_serialization_json", - "@maven//:org_jetbrains_kotlinx_kotlinx_serialization_json_jvm", + "@maven//:com_google_dagger_dagger", + "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_android", + "@maven//:com_squareup_retrofit2_retrofit", + "@maven//:com_jakewharton_retrofit_retrofit2_kotlinx_serialization_converter", + "@maven//:org_jetbrains_kotlinx_kotlinx_serialization_json_1_5_1", + "@maven//:org_jetbrains_kotlinx_kotlinx_serialization_core_1_5_1", ], visibility = ["//visibility:public"], ) diff --git a/core/hackernews/src/main/AndroidManifest.xml b/core/hackernews/src/main/AndroidManifest.xml new file mode 100644 index 0000000..222fd10 --- /dev/null +++ b/core/hackernews/src/main/AndroidManifest.xml @@ -0,0 +1,10 @@ + + + + + diff --git a/core/hackernews/src/main/java/co/adrianblan/hackernews/api/Serializers.kt b/core/hackernews/src/main/java/co/adrianblan/hackernews/api/Serializers.kt index 35e7f8e..a30fb4c 100644 --- a/core/hackernews/src/main/java/co/adrianblan/hackernews/api/Serializers.kt +++ b/core/hackernews/src/main/java/co/adrianblan/hackernews/api/Serializers.kt @@ -1,7 +1,9 @@ +@file:OptIn(ExperimentalSerializationApi::class) @file:UseSerializers(InstantSerializer::class) package co.adrianblan.hackernews.api +import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.UseSerializers import kotlinx.serialization.KSerializer import kotlinx.serialization.Serializer @@ -27,6 +29,7 @@ object ApiCommentSerializer * Sometimes the api just returns null literal for certain comments, * we must then convert it to null comment. */ +@ExperimentalSerializationApi object NullableApiCommentSerializer : KSerializer { override val descriptor: SerialDescriptor diff --git a/core/network/BUILD.bazel b/core/network/BUILD.bazel index c4584eb..7f37fe0 100644 --- a/core/network/BUILD.bazel +++ b/core/network/BUILD.bazel @@ -9,6 +9,9 @@ kt_jvm_library( "@maven//:com_squareup_retrofit2_retrofit", "@maven//:com_squareup_okhttp3_okhttp", "@maven//:com_squareup_okhttp3_logging_interceptor", + "@maven//:com_google_dagger_hilt_core", + "@maven//:com_google_dagger_hilt_android", + "@maven//:com_jakewharton_timber_timber", ], visibility = ["//visibility:public"], ) \ No newline at end of file diff --git a/core/ui/BUILD.bazel b/core/ui/BUILD.bazel index e69de29..81eb0e8 100644 --- a/core/ui/BUILD.bazel +++ b/core/ui/BUILD.bazel @@ -0,0 +1,13 @@ +load("@rules_kotlin//kotlin:android.bzl", "kt_android_library") + +kt_android_library( + name = "lib", + custom_package = "co.adrianblan.ui", + srcs = glob(["src/main/java/**/*.kt"]), + manifest = "src/main/AndroidManifest.xml", + resource_files = glob(["src/res/**"]), + deps = [ + + ], + visibility = ["//visibility:public"], + ) diff --git a/core/ui/src/main/AndroidManifest.xml b/core/ui/src/main/AndroidManifest.xml new file mode 100644 index 0000000..f84f53a --- /dev/null +++ b/core/ui/src/main/AndroidManifest.xml @@ -0,0 +1,10 @@ + + + + + diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 91d2118..f1ca85f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -66,11 +66,7 @@ androidx-constraintlayout = { group = "androidx.constraintlayout", name = "const coil = { group = "io.coil-kt", name = "coil-compose", version.ref = "coil" } coil-svg = { group = "io.coil-kt", name = "coil-svg", version.ref = "coil" } -desugar = { group = "com.android.tools", name = "desugar_jdk_libs", version.ref = "desugar" } -hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" } hilt-android-testing = { group = "com.google.dagger", name = "hilt-android-testing", version.ref = "hilt" } -hilt-compiler = { group = "com.google.dagger", name = "hilt-android-compiler", version.ref = "hilt" } -hilt-ext-compiler = { group = "androidx.hilt", name = "hilt-compiler", version.ref = "hiltExt" } jsoup = { group = "org.jsoup", name = "jsoup", version.ref = "jsoup"} kotlinx-coroutines-android = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-android", version.ref = "kotlinxCoroutines" } kotlinx-coroutines-test = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-test", version.ref = "kotlinxCoroutines" } From 004c0ab157443ebc15ce6f5839dddd9b2350ee39 Mon Sep 17 00:00:00 2001 From: raghulvelusamy Date: Mon, 12 Aug 2024 09:18:51 -0700 Subject: [PATCH 05/23] fix testing target --- MODULE.bazel | 1 + app/build.gradle.kts | 3 +++ build.gradle.kts | 36 ++++++++++++++++++++++++++++++++++++ core/testing/BUILD.bazel | 16 ++++++++++++++++ gradle/libs.versions.toml | 3 +++ 5 files changed, 59 insertions(+) diff --git a/MODULE.bazel b/MODULE.bazel index 0e548da..a4d8a53 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -47,6 +47,7 @@ maven.install( "com.squareup.moshi:moshi:jar:1.15.1", "com.squareup.moshi:moshi-kotlin:jar:1.15.1", "com.squareup.moshi:moshi-kotlin-codegen:jar:1.15.1", + "org.jetbrains.kotlinx:kotlinx-coroutines-test:1.8.1" ], repositories = [ "https://maven.google.com", diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 53a6d43..93e3382 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -56,6 +56,9 @@ dependencies { implementation(project(":core:network")) testImplementation(project(":core:testing")) + implementation (libs.airin.gradle) + implementation (libs.airin.gradle.android) + implementation(libs.androidx.navigation.compose) implementation(libs.androidx.splashscreen) implementation(libs.timber) diff --git a/build.gradle.kts b/build.gradle.kts index 2712714..4b23b21 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,3 +1,12 @@ +import io.morfly.airin.MissingComponentResolution +import io.morfly.airin.feature.AndroidBinaryFeature +import io.morfly.airin.feature.AndroidToolchainFeature +import io.morfly.airin.feature.ForcedMavenArtifactsFeature +import io.morfly.airin.feature.HiltFeature +import io.morfly.airin.feature.JetpackComposeFeature +import io.morfly.airin.module.AndroidLibraryModule +import io.morfly.airin.module.RootModule + buildscript { repositories { google() @@ -14,4 +23,31 @@ plugins { alias(libs.plugins.kotlin.jvm) apply false alias(libs.plugins.kotlin.serialization) apply false alias(libs.plugins.ksp) apply false + + id("io.morfly.airin.android") version libs.versions.airinGradle +} + +airin { + targets += setOf(":app") + onMissingComponent = MissingComponentResolution.Fail + register { + include() + include() + include() + } + register { + include() + + // When a conflict with transitive dependency versions occurs, Gradle and Bazel resolve + // them differently. While Gradle resolves them automatically for the most part, Bazel + // requires to explicitly force artifact versions. + include { + artifacts = listOf( + "androidx.lifecycle:lifecycle-runtime:2.6.1", + "androidx.activity:activity-ktx:1.7.0", + "androidx.compose.animation:animation-core:1.2.1", + "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1", + ) + } + } } \ No newline at end of file diff --git a/core/testing/BUILD.bazel b/core/testing/BUILD.bazel index e69de29..7e4bf05 100644 --- a/core/testing/BUILD.bazel +++ b/core/testing/BUILD.bazel @@ -0,0 +1,16 @@ +load("@rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") + +kt_jvm_library( + name = "lib", + srcs = glob(["**/*.kt"]), + deps = [ + "//core/common:lib", + "@maven//:junit_junit", + "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_android", + "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_core", + "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm", + "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_test", + "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_test_jvm", + ], + visibility = ["//visibility:public"], +) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f1ca85f..c92bd0d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,4 +1,5 @@ [versions] +airinGradle = "0.5.2" minSdk = "23" compileSdk = "34" targetSdk = "34" @@ -41,6 +42,8 @@ mockitoKotlin = "2.2.0" dependencyUpdatesPlugin = "0.43.0" [libraries] +airin-gradle = { module = "org.morfly.airin:airin-gradle", version.ref = "airinGradle" } +airin-gradle-android = { module = "org.morfly.airin:airin-gradle-android", version.ref = "airinGradle" } androidx-activity = { group = "androidx.activity", name = "activity", version.ref = "androidxActivity" } androidx-browser = { group = "androidx.browser", name = "browser", version.ref = "androidxBrowser" } androidx-core = { group = "androidx.core", name = "core-ktx", version.ref = "androidxCore" } From f61ae856245285efa0598581ec6007debfde778d Mon Sep 17 00:00:00 2001 From: raghulvelusamy Date: Mon, 12 Aug 2024 12:30:59 -0700 Subject: [PATCH 06/23] Test --- app/build.gradle.kts | 3 -- build.gradle.kts | 36 ------------------------ core/domain/BUILD.bazel | 36 ++++++++++++++++++++++++ core/domain/src/main/AndroidManifest.xml | 9 ++++++ gradle/libs.versions.toml | 7 +++-- 5 files changed, 49 insertions(+), 42 deletions(-) create mode 100644 core/domain/src/main/AndroidManifest.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 93e3382..53a6d43 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -56,9 +56,6 @@ dependencies { implementation(project(":core:network")) testImplementation(project(":core:testing")) - implementation (libs.airin.gradle) - implementation (libs.airin.gradle.android) - implementation(libs.androidx.navigation.compose) implementation(libs.androidx.splashscreen) implementation(libs.timber) diff --git a/build.gradle.kts b/build.gradle.kts index 4b23b21..2712714 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,12 +1,3 @@ -import io.morfly.airin.MissingComponentResolution -import io.morfly.airin.feature.AndroidBinaryFeature -import io.morfly.airin.feature.AndroidToolchainFeature -import io.morfly.airin.feature.ForcedMavenArtifactsFeature -import io.morfly.airin.feature.HiltFeature -import io.morfly.airin.feature.JetpackComposeFeature -import io.morfly.airin.module.AndroidLibraryModule -import io.morfly.airin.module.RootModule - buildscript { repositories { google() @@ -23,31 +14,4 @@ plugins { alias(libs.plugins.kotlin.jvm) apply false alias(libs.plugins.kotlin.serialization) apply false alias(libs.plugins.ksp) apply false - - id("io.morfly.airin.android") version libs.versions.airinGradle -} - -airin { - targets += setOf(":app") - onMissingComponent = MissingComponentResolution.Fail - register { - include() - include() - include() - } - register { - include() - - // When a conflict with transitive dependency versions occurs, Gradle and Bazel resolve - // them differently. While Gradle resolves them automatically for the most part, Bazel - // requires to explicitly force artifact versions. - include { - artifacts = listOf( - "androidx.lifecycle:lifecycle-runtime:2.6.1", - "androidx.activity:activity-ktx:1.7.0", - "androidx.compose.animation:animation-core:1.2.1", - "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1", - ) - } - } } \ No newline at end of file diff --git a/core/domain/BUILD.bazel b/core/domain/BUILD.bazel index e69de29..748feb7 100644 --- a/core/domain/BUILD.bazel +++ b/core/domain/BUILD.bazel @@ -0,0 +1,36 @@ +load("@rules_android//android:rules.bzl", "android_binary", "android_library") +load("@rules_kotlin//kotlin:android.bzl", "kt_android_library") +load("@rules_kotlin//kotlin:core.bzl", "kt_compiler_plugin", "kt_ksp_plugin") + +kt_compiler_plugin( + name = "serialization_plugin", + compile_phase = True, + id = "org.jetbrains.kotlin.serialization", + stubs_phase = True, + deps = [ + "@rules_kotlin//kotlin/compiler:kotlinx-serialization-compiler-plugin", + ], +) + +kt_android_library( + name = "lib", + # srcs = glob(["**/*.kt"]), + srcs = glob(["src/**/*.kt"]), + manifest = "src/main/AndroidManifest.xml", + plugins = [ + ":serialization_plugin", + ], + visibility = ["//visibility:public"], + deps = [ + "//core/common:lib", + "@maven//:com_google_dagger_dagger", + "@maven//:com_google_dagger_hilt_android", + "@maven//:com_jakewharton_timber_timber", + ], +) + +#android_library( +# name = "lib", +# srcs = glob(["src/main/java/co/adrianblan/domain/**/*.kt"]), +# manifest = "src/main/AndroidManifest.xml", +#) diff --git a/core/domain/src/main/AndroidManifest.xml b/core/domain/src/main/AndroidManifest.xml new file mode 100644 index 0000000..def4a4c --- /dev/null +++ b/core/domain/src/main/AndroidManifest.xml @@ -0,0 +1,9 @@ + + + + diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c92bd0d..91d2118 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,4 @@ [versions] -airinGradle = "0.5.2" minSdk = "23" compileSdk = "34" targetSdk = "34" @@ -42,8 +41,6 @@ mockitoKotlin = "2.2.0" dependencyUpdatesPlugin = "0.43.0" [libraries] -airin-gradle = { module = "org.morfly.airin:airin-gradle", version.ref = "airinGradle" } -airin-gradle-android = { module = "org.morfly.airin:airin-gradle-android", version.ref = "airinGradle" } androidx-activity = { group = "androidx.activity", name = "activity", version.ref = "androidxActivity" } androidx-browser = { group = "androidx.browser", name = "browser", version.ref = "androidxBrowser" } androidx-core = { group = "androidx.core", name = "core-ktx", version.ref = "androidxCore" } @@ -69,7 +66,11 @@ androidx-constraintlayout = { group = "androidx.constraintlayout", name = "const coil = { group = "io.coil-kt", name = "coil-compose", version.ref = "coil" } coil-svg = { group = "io.coil-kt", name = "coil-svg", version.ref = "coil" } +desugar = { group = "com.android.tools", name = "desugar_jdk_libs", version.ref = "desugar" } +hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" } hilt-android-testing = { group = "com.google.dagger", name = "hilt-android-testing", version.ref = "hilt" } +hilt-compiler = { group = "com.google.dagger", name = "hilt-android-compiler", version.ref = "hilt" } +hilt-ext-compiler = { group = "androidx.hilt", name = "hilt-compiler", version.ref = "hiltExt" } jsoup = { group = "org.jsoup", name = "jsoup", version.ref = "jsoup"} kotlinx-coroutines-android = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-android", version.ref = "kotlinxCoroutines" } kotlinx-coroutines-test = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-test", version.ref = "kotlinxCoroutines" } From 8d867e7a03f17767cb8dc916bf7a9f38326693e8 Mon Sep 17 00:00:00 2001 From: raghulvelusamy Date: Mon, 12 Aug 2024 13:48:11 -0700 Subject: [PATCH 07/23] Update BUILD.bazel Update BUILD.bazel --- core/domain/BUILD.bazel | 1 + 1 file changed, 1 insertion(+) diff --git a/core/domain/BUILD.bazel b/core/domain/BUILD.bazel index 748feb7..af36b50 100644 --- a/core/domain/BUILD.bazel +++ b/core/domain/BUILD.bazel @@ -16,6 +16,7 @@ kt_android_library( name = "lib", # srcs = glob(["**/*.kt"]), srcs = glob(["src/**/*.kt"]), + custom_package = "co.adrianblan.domain", manifest = "src/main/AndroidManifest.xml", plugins = [ ":serialization_plugin", From 57456eb006a231feed5315472ffc1ef6bf17ad76 Mon Sep 17 00:00:00 2001 From: raghulvelusamy Date: Mon, 12 Aug 2024 17:10:09 -0700 Subject: [PATCH 08/23] working android targets? --- .bazelversion | 2 +- MODULE.bazel | 36 +++++++++++++++++++++++----- core/.DS_Store | Bin 0 -> 6148 bytes core/domain/BUILD.bazel | 29 +++++----------------- core/domain/src/AndroidManifest.xml | 9 +++++++ core/hackernews/BUILD.bazel | 17 +++++++------ 6 files changed, 54 insertions(+), 39 deletions(-) create mode 100644 core/.DS_Store create mode 100644 core/domain/src/AndroidManifest.xml diff --git a/.bazelversion b/.bazelversion index 468c41f..ef09838 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -7.2.1 \ No newline at end of file +7.1.1 \ No newline at end of file diff --git a/MODULE.bazel b/MODULE.bazel index a4d8a53..ae6ee6e 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -1,13 +1,33 @@ module(name = "cheddarapp") remote_android_extensions = use_extension("@bazel_tools//tools/android:android_extensions.bzl", "remote_android_tools_extensions") + use_repo(remote_android_extensions, "android_gmaven_r8", "android_tools") -bazel_dep(name = "rules_java", version = "7.4.0") -bazel_dep(name = "bazel_skylib", version = "1.3.0") -bazel_dep(name = "rules_jvm_external", version = "6.2") -bazel_dep(name = "rules_android", version = "0.5.1") -bazel_dep(name = "rules_kotlin", version = "1.9.6") +bazel_dep( + name = "rules_java", + version = "7.4.0", +) + +bazel_dep( + name = "bazel_skylib", + version = "1.3.0", +) + +bazel_dep( + name = "rules_jvm_external", + version = "6.2", +) + +bazel_dep( + name = "rules_android", + version = "0.5.1", +) + +bazel_dep( + name = "rules_kotlin", + version = "1.9.6", +) register_toolchains( "@rules_android//toolchains/android:android_default_toolchain", @@ -15,11 +35,13 @@ register_toolchains( ) android_sdk_repository_extension = use_extension("@rules_android//rules/android_sdk_repository:rule.bzl", "android_sdk_repository_extension") + use_repo(android_sdk_repository_extension, "androidsdk") register_toolchains("@androidsdk//:sdk-toolchain", "@androidsdk//:all") maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven") + maven.install( artifacts = [ "org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.4", @@ -47,11 +69,13 @@ maven.install( "com.squareup.moshi:moshi:jar:1.15.1", "com.squareup.moshi:moshi-kotlin:jar:1.15.1", "com.squareup.moshi:moshi-kotlin-codegen:jar:1.15.1", - "org.jetbrains.kotlinx:kotlinx-coroutines-test:1.8.1" + "org.jetbrains.kotlinx:kotlinx-coroutines-test:1.8.1", + "androidx.browser:browser:jar:1.5.0", ], repositories = [ "https://maven.google.com", "https://repo1.maven.org/maven2", ], ) + use_repo(maven, "maven") diff --git a/core/.DS_Store b/core/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5c76b96f6cd016a009676728799c7f7f8a89fa1f GIT binary patch literal 6148 zcmeHK%}T>S5Z-O8O({YS3Oz1(E!aOr@e*Qv0V8@)sR=0>OtYnF&7l->))(?gd>&_Z zH-})rn~0r(-EVe&b~7Jje;8xjU4?zdY{r-c4UwZ#A!x32)l4uVS93%x39@t^#4@Ou z=r5Y^+jm*WB%3jxmB0TZn8#7N?Dal*t=`z#ZCXvMZ9RC;GV_-Ha+SLN;togGQpQ1{ z`@u~#%_jE#g-n)yluQ>YAquAua(^2oq0C&lO2Sm-dfH*Ntk%Tttk>0lQo&M}y4)ai_?m0=#Ua`AZKYIU#+70$S$k$Pf)7$`GP*Fzi6|4aB~ zDj)gf6dDl&#K1pefH%h8*oC6Z+4`+KJZlBCM`$P*m!kp#dg&4X1KdYC%BlSVb%=8e W<{EJpw5xPLx(Fyjs3Qh`fq^d~4@?jM literal 0 HcmV?d00001 diff --git a/core/domain/BUILD.bazel b/core/domain/BUILD.bazel index af36b50..6bcf303 100644 --- a/core/domain/BUILD.bazel +++ b/core/domain/BUILD.bazel @@ -1,37 +1,20 @@ -load("@rules_android//android:rules.bzl", "android_binary", "android_library") load("@rules_kotlin//kotlin:android.bzl", "kt_android_library") -load("@rules_kotlin//kotlin:core.bzl", "kt_compiler_plugin", "kt_ksp_plugin") - -kt_compiler_plugin( - name = "serialization_plugin", - compile_phase = True, - id = "org.jetbrains.kotlin.serialization", - stubs_phase = True, - deps = [ - "@rules_kotlin//kotlin/compiler:kotlinx-serialization-compiler-plugin", - ], -) kt_android_library( name = "lib", - # srcs = glob(["**/*.kt"]), - srcs = glob(["src/**/*.kt"]), + srcs = glob(["src/main/java/**/*.kt"]), custom_package = "co.adrianblan.domain", manifest = "src/main/AndroidManifest.xml", - plugins = [ - ":serialization_plugin", - ], visibility = ["//visibility:public"], deps = [ "//core/common:lib", + "//core/hackernews:lib", + "//core/webpreview:lib", + "@maven//:androidx_browser_browser", "@maven//:com_google_dagger_dagger", "@maven//:com_google_dagger_hilt_android", "@maven//:com_jakewharton_timber_timber", + "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_android", + "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm", ], ) - -#android_library( -# name = "lib", -# srcs = glob(["src/main/java/co/adrianblan/domain/**/*.kt"]), -# manifest = "src/main/AndroidManifest.xml", -#) diff --git a/core/domain/src/AndroidManifest.xml b/core/domain/src/AndroidManifest.xml new file mode 100644 index 0000000..def4a4c --- /dev/null +++ b/core/domain/src/AndroidManifest.xml @@ -0,0 +1,9 @@ + + + + diff --git a/core/hackernews/BUILD.bazel b/core/hackernews/BUILD.bazel index 9801ab8..27ac978 100644 --- a/core/hackernews/BUILD.bazel +++ b/core/hackernews/BUILD.bazel @@ -24,24 +24,23 @@ kt_compiler_plugin( kt_android_library( name = "lib", srcs = glob(["src/main/java/**/*.kt"]), + custom_package = "co.adrianblan.hackernews", manifest = "src/main/AndroidManifest.xml", plugins = [ - ":serialization_plugin" + ":serialization_plugin", ], - tags = ["trace"], - custom_package = "co.adrianblan.hackernews", + visibility = ["//visibility:public"], deps = [ + "//core/common:lib", "//core/model:lib", "//core/network:lib", - "//core/common:lib", "@maven//:androidx_compose_runtime_runtime", - "@maven//:org_jetbrains_kotlinx_kotlinx_collections_immutable_jvm", "@maven//:com_google_dagger_dagger", - "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_android", - "@maven//:com_squareup_retrofit2_retrofit", "@maven//:com_jakewharton_retrofit_retrofit2_kotlinx_serialization_converter", - "@maven//:org_jetbrains_kotlinx_kotlinx_serialization_json_1_5_1", + "@maven//:com_squareup_retrofit2_retrofit", + "@maven//:org_jetbrains_kotlinx_kotlinx_collections_immutable_jvm", + "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_android", "@maven//:org_jetbrains_kotlinx_kotlinx_serialization_core_1_5_1", + "@maven//:org_jetbrains_kotlinx_kotlinx_serialization_json_1_5_1", ], - visibility = ["//visibility:public"], ) From 5f4d356660a462be3f21c37230c922ca1ae769e0 Mon Sep 17 00:00:00 2001 From: raghulvelusamy Date: Mon, 12 Aug 2024 20:43:28 -0700 Subject: [PATCH 09/23] Compile UI plugin: --- .bazelversion | 2 +- BUILD.bazel | 57 + MODULE.bazel | 48 +- core/ui/BUILD.bazel | 43 +- feature/storydetail/BUILD.bazel | 8 +- feature/storyfeed/BUILD.bazel | 8 +- rules_jvm_external~~maven~maven_install.json | 2159 ++++++++++++++++++ 7 files changed, 2297 insertions(+), 28 deletions(-) create mode 100755 rules_jvm_external~~maven~maven_install.json diff --git a/.bazelversion b/.bazelversion index ef09838..468c41f 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -7.1.1 \ No newline at end of file +7.2.1 \ No newline at end of file diff --git a/BUILD.bazel b/BUILD.bazel index e69de29..6b79df4 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -0,0 +1,57 @@ +load( + "@io_bazel_rules_kotlin//kotlin:core.bzl", + "define_kt_toolchain", + "kt_compiler_plugin", + "kt_kotlinc_options", +) +load( + "@io_bazel_rules_kotlin//kotlin:jvm.bzl", + "kt_javac_options", + "kt_jvm_import", +) + +# Kotlin Toolchain + +kt_kotlinc_options( + name = "kt_kotlinc_options", +) + +kt_javac_options( + name = "kt_javac_options", +) + +define_kt_toolchain( + name = "kotlin_toolchain", + api_version = "1.6", + experimental_use_abi_jars = True, + javac_options = "//:kt_javac_options", + jvm_target = "1.8", + kotlinc_options = "//:kt_kotlinc_options", + language_version = "1.6", +) + +# Define the compose compiler plugin +# Used by referencing //:jetpack_compose_compiler_plugin + +kt_compiler_plugin( + name = "jetpack_compose_compiler_plugin", + id = "androidx.compose.compiler", + target_embedded_compiler = True, + visibility = ["//visibility:public"], + deps = [ + "@maven//:androidx_compose_compiler_compiler", + ], +) + +# Add missing 'sun.misc' files to coroutines artifact +# Used in 'override_targets' by referencing @//:kotlinx_coroutines_core_jvm +kt_jvm_import( + name = "kotlinx_coroutines_core_jvm", + jars = ["@maven_secondary//:v1/https/repo1.maven.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-core-jvm/1.6.1/kotlinx-coroutines-core-jvm-1.6.1.jar"], + srcjar = "@maven_secondary//:v1/https/repo1.maven.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-core-jvm/1.6.1/kotlinx-coroutines-core-jvm-1.6.1-sources.jar", + visibility = ["//visibility:public"], + deps = [ + "//stub:sun_misc", + "@maven//:org_jetbrains_kotlin_kotlin_stdlib", + ], +) diff --git a/MODULE.bazel b/MODULE.bazel index ae6ee6e..a0a65b2 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -4,11 +4,6 @@ remote_android_extensions = use_extension("@bazel_tools//tools/android:android_e use_repo(remote_android_extensions, "android_gmaven_r8", "android_tools") -bazel_dep( - name = "rules_java", - version = "7.4.0", -) - bazel_dep( name = "bazel_skylib", version = "1.3.0", @@ -48,14 +43,6 @@ maven.install( "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3", "org.jetbrains.kotlinx:kotlinx-serialization-core:1.5.1", "org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1", - "androidx.compose.runtime:runtime:1.0.0", - "androidx.compose.ui:ui:1.0.0", - "androidx.compose.material:material:1.0.0", - "androidx.compose.ui:ui-tooling:1.2.0", - "androidx.activity:activity:1.5.1", - "androidx.activity:activity-compose:1.5.1", - "androidx.activity:activity-ktx:1.5.1", - "androidx.fragment:fragment:1.5.1", "org.jsoup:jsoup:1.16.1", "junit:junit:4.13.2", "com.jakewharton.timber:timber:5.0.1", @@ -65,17 +52,50 @@ maven.install( "com.squareup.retrofit2:retrofit:2.9.0", "com.google.dagger:dagger:2.45", "com.google.dagger:dagger-compiler:2.45", - "com.google.dagger:hilt-android:2.48", + "com.google.dagger:hilt-android:2.51", "com.squareup.moshi:moshi:jar:1.15.1", "com.squareup.moshi:moshi-kotlin:jar:1.15.1", "com.squareup.moshi:moshi-kotlin-codegen:jar:1.15.1", "org.jetbrains.kotlinx:kotlinx-coroutines-test:1.8.1", "androidx.browser:browser:jar:1.5.0", + "androidx.activity:activity:1.5.1", + "androidx.activity:activity-compose:1.5.1", + "androidx.activity:activity-ktx:1.5.1", + "androidx.fragment:fragment:1.5.1", + "androidx.compose.material3:material3:jar:1.2.1", + "androidx.loader:loader:1.0.0", + "androidx.lifecycle:lifecycle-viewmodel:2.5.1", + "androidx.lifecycle:lifecycle-viewmodel-savedstate:2.5.1", + "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1", + "androidx.compose.ui:ui-android:1.6.0", + "androidx.lifecycle:lifecycle-runtime-ktx:2.5.1", + "androidx.lifecycle:lifecycle-process:2.4.1", + "androidx.lifecycle:lifecycle-livedata-core:2.5.1", + "androidx.collection:collection:1.0.0", + "androidx.compose.material:material-ripple:1.6.0", + "androidx.compose.runtime:runtime:1.0.0", + "androidx.compose.material:material:1.6.8", + "androidx.compose.ui:ui-graphics:1.6.0", + "androidx.compose.ui:ui-text:1.6.8", + "androidx.compose.ui:ui-unit:1.6.0", + "androidx.compose.ui:ui-util:1.0.0", + "androidx.compose.ui:ui-geometry:1.6.0", + "androidx.compose.ui:ui:1.0.0", + "androidx.compose.ui:ui-tooling:1.6.8", + "androidx.lifecycle:lifecycle-common:2.5.1", + "androidx.lifecycle:lifecycle-runtime:2.5.1", + "io.coil-kt:coil:jar:2.5.0", + "io.coil-kt:coil-svg:jar:2.7.0", + "androidx.compose.material:material-icons-extended:jar:1.5.0", + "androidx.compose.material:material-icons-core:jar:1.6.8", + "io.coil-kt:coil-compose:jar:2.7.0", + "androidx.compose.compiler:compiler:jar:1.5.12", ], repositories = [ "https://maven.google.com", "https://repo1.maven.org/maven2", ], + version_conflict_policy = "pinned", ) use_repo(maven, "maven") diff --git a/core/ui/BUILD.bazel b/core/ui/BUILD.bazel index 81eb0e8..f79e546 100644 --- a/core/ui/BUILD.bazel +++ b/core/ui/BUILD.bazel @@ -1,13 +1,46 @@ load("@rules_kotlin//kotlin:android.bzl", "kt_android_library") +load("@rules_kotlin//kotlin:core.bzl", "kt_compiler_plugin") + +kt_compiler_plugin( + name = "jetpack_compose_compiler_plugin", + id = "androidx.compose.compiler", + target_embedded_compiler = True, + visibility = ["//visibility:public"], + deps = [ + "@maven//:androidx_compose_compiler_compiler", + ], +) kt_android_library( name = "lib", - custom_package = "co.adrianblan.ui", srcs = glob(["src/main/java/**/*.kt"]), + custom_package = "co.adrianblan.ui", manifest = "src/main/AndroidManifest.xml", - resource_files = glob(["src/res/**"]), + plugins = [":jetpack_compose_compiler_plugin"], + resource_files = glob(["src/main/res/**"]), + visibility = ["//visibility:public"], deps = [ - + "//core/model:lib", + "@maven//:androidx_activity_activity_compose", + "@maven//:androidx_compose_material3_material3", + "@maven//:androidx_compose_material3_material3_android", + "@maven//:androidx_compose_material_material", + "@maven//:androidx_compose_material_material_icons_core", + "@maven//:androidx_compose_material_material_icons_core_android", + "@maven//:androidx_compose_material_material_icons_extended", + "@maven//:androidx_compose_runtime_runtime_android", + "@maven//:androidx_compose_ui_ui_graphics_android", + "@maven//:androidx_compose_ui_ui_text_android", + "@maven//:androidx_compose_ui_ui_tooling_preview_android", + "@maven//:io_coil_kt_coil", + "@maven//:io_coil_kt_coil_base", + "@maven//:io_coil_kt_coil_compose", + "@maven//:io_coil_kt_coil_svg", + "@maven//:androidx_compose_ui_ui_android", + "@maven//:androidx_compose_ui_ui", + "@maven//:androidx_compose_runtime_runtime", + "@maven//:androidx_compose_foundation_foundation_layout", + "@maven//:androidx_compose_foundation_foundation_android", + "@maven//:androidx_compose_foundation_foundation", ], - visibility = ["//visibility:public"], - ) +) diff --git a/feature/storydetail/BUILD.bazel b/feature/storydetail/BUILD.bazel index 50067ae..2b30931 100644 --- a/feature/storydetail/BUILD.bazel +++ b/feature/storydetail/BUILD.bazel @@ -2,13 +2,13 @@ load("@rules_kotlin//kotlin:android.bzl", "kt_android_library") kt_android_library( name = "lib", - custom_package = "co.adrianblan.storydetail", srcs = glob(["**/*.kt"]), + custom_package = "co.adrianblan.storydetail", manifest = "src/main/AndroidManifest.xml", resource_files = glob(["res/**"]), + visibility = ["//visibility:public"], deps = [ - "//core/webprevieew:lib", "//core/hackernews:lib", + "//core/webpreview:lib", ], - visibility = ["//visibility:public"], - ) +) diff --git a/feature/storyfeed/BUILD.bazel b/feature/storyfeed/BUILD.bazel index 7a81640..016281b 100644 --- a/feature/storyfeed/BUILD.bazel +++ b/feature/storyfeed/BUILD.bazel @@ -2,13 +2,13 @@ load("@rules_kotlin//kotlin:android.bzl", "kt_android_library") kt_android_library( name = "lib", - custom_package = "co.adrianblan.storyfeed", srcs = glob(["**/*.kt"]), + custom_package = "co.adrianblan.storyfeed", manifest = "src/main/AndroidManifest.xml", resource_files = glob(["res/**"]), + visibility = ["//visibility:public"], deps = [ - "//core/webprevieew:lib", "//core/hackernews:lib", + "//core/webpreview:lib", ], - visibility = ["//visibility:public"], - ) +) diff --git a/rules_jvm_external~~maven~maven_install.json b/rules_jvm_external~~maven~maven_install.json new file mode 100755 index 0000000..6cf4ca5 --- /dev/null +++ b/rules_jvm_external~~maven~maven_install.json @@ -0,0 +1,2159 @@ +{ + "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", + "__INPUT_ARTIFACTS_HASH": -444404928, + "__RESOLVED_ARTIFACTS_HASH": -840981604, + "artifacts": { + "androidx.activity:activity-compose:aar": { + "shasums": { + "jar": "8374138f15251cc3ed375425599e94a36038c05cf877f877281ae019b95b844a" + }, + "version": "1.5.1" + }, + "androidx.activity:activity-ktx:aar": { + "shasums": { + "jar": "fd69a5ccb99244cb7c5224580a58e23238d10ed4086199a33e9bfc31c4e4834f" + }, + "version": "1.5.1" + }, + "androidx.activity:activity:aar": { + "shasums": { + "jar": "4b04b42d2c1f81c02faf0f7b6e9cc9fede10fdee8f66136cd4b99f88e8f48c0f" + }, + "version": "1.5.1" + }, + "androidx.annotation:annotation": { + "shasums": { + "jar": "9029262bddce116e6d02be499e4afdba21f24c239087b76b3b57d7e98b490a36" + }, + "version": "1.2.0" + }, + "androidx.annotation:annotation-experimental:aar": { + "shasums": { + "jar": "0157de61a2064047896a058080f3fd67ba57ad9a94857b3f7a363660243e3f90" + }, + "version": "1.1.0" + }, + "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.browser:browser:aar": { + "shasums": { + "jar": "94f24e272b3a269ff9a5ba21da5e652615dc59ac3fa2ba2d7a5ae30d1c4df748" + }, + "version": "1.5.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": "1ef28dd57922f8432972b596e592504cde886cfbdfca5ede832871b54d654ef3" + }, + "version": "1.0.0" + }, + "androidx.compose.foundation:foundation:aar": { + "shasums": { + "jar": "dc9efde98d865b5b16ad26628cb3909ba94b487e9749124e15b57362cc587615" + }, + "version": "1.0.0" + }, + "androidx.compose.material:material-icons-core:aar": { + "shasums": { + "jar": "6e049492ec2ff0a6a1166a5985a924cf4de03465d17462594284f81eafe1a9dd" + }, + "version": "1.0.0" + }, + "androidx.compose.material:material-ripple:aar": { + "shasums": { + "jar": "0d3ac24c815fba15c57e1ca03f406399cd69ac1e41e390f61258c22a3226f550" + }, + "version": "1.0.0" + }, + "androidx.compose.material:material:aar": { + "shasums": { + "jar": "5b1efb82311098418e9f61c5d3aa95d8e44fc36319d23a2901232fbe7f147d8b" + }, + "version": "1.0.0" + }, + "androidx.compose.runtime:runtime-saveable:aar": { + "shasums": { + "jar": "1ff0734a254b775cb7e7f9a301e1b07cac1a72bd571f618477f3a4142571b94f" + }, + "version": "1.0.1" + }, + "androidx.compose.runtime:runtime:aar": { + "shasums": { + "jar": "6f1b4762fb8db93506aae72555ed2da1ee6bcfe0acb80dd9053868807422a5f1" + }, + "version": "1.0.0" + }, + "androidx.compose.ui:ui-geometry:aar": { + "shasums": { + "jar": "da5b6793c694beca64efc165afb5831ebb34a0c9bafb9ef7ee636a3b7de910d0" + }, + "version": "1.0.0" + }, + "androidx.compose.ui:ui-graphics:aar": { + "shasums": { + "jar": "00da5e7f92f2adadf96e6ee89e0a65479f83c60a85fbbefd7bcb71b05a2b29f8" + }, + "version": "1.0.0" + }, + "androidx.compose.ui:ui-text:aar": { + "shasums": { + "jar": "ee38b166b926984393b79936617e77c9ae212a7c250d0cc125fcdb22e83261b0" + }, + "version": "1.0.0" + }, + "androidx.compose.ui:ui-tooling-data:aar": { + "shasums": { + "jar": "824bb692d88aaaaa0173983f4d9ee31dfc7776fc3bf337bec98ae52b3d0888ca" + }, + "version": "1.2.0" + }, + "androidx.compose.ui:ui-tooling-preview:aar": { + "shasums": { + "jar": "3a54390bd0196bc73b9179f56d488421911d73cbd6aff55532d0db8c52694839" + }, + "version": "1.2.0" + }, + "androidx.compose.ui:ui-tooling:aar": { + "shasums": { + "jar": "88f0d3a88cf9f769abe9fb7663664849cba1a06a7a66e7da54de8b391aba2137" + }, + "version": "1.2.0" + }, + "androidx.compose.ui:ui-unit:aar": { + "shasums": { + "jar": "17bb4fe548680e9bc11d4a605b01a6d7744e2ddab04ca93b7709378522792b72" + }, + "version": "1.0.0" + }, + "androidx.compose.ui:ui-util:aar": { + "shasums": { + "jar": "06dc15e9cbb724bb1f4678af2a354acc5a15fb0ee5dcc6322e780caaf0559078" + }, + "version": "1.0.0" + }, + "androidx.compose.ui:ui:aar": { + "shasums": { + "jar": "ce083682bacb4dd929402c11b2c3f6817de400b4839538ac186563e3f6e46840" + }, + "version": "1.0.0" + }, + "androidx.concurrent:concurrent-futures": { + "shasums": { + "jar": "5595a40e278a7b39fa78a09490e3d7f3faa95c7b01447148bd38b5ade0605c35" + }, + "version": "1.0.0" + }, + "androidx.core:core-ktx:aar": { + "shasums": { + "jar": "dcb74d510d552b35eff73b0dd27b829649535f3902e5b5a1f26040383c10a940" + }, + "version": "1.2.0" + }, + "androidx.core:core:aar": { + "shasums": { + "jar": "48c64a15ec3eb11bfb33339e5ceb70ec7f821bd2dfa2eb8675ebd5353317e792" + }, + "version": "1.8.0" + }, + "androidx.customview:customview:aar": { + "shasums": { + "jar": "20e5b8f6526a34595a604f56718da81167c0b40a7a94a57daa355663f2594df2" + }, + "version": "1.0.0" + }, + "androidx.fragment:fragment:aar": { + "shasums": { + "jar": "82b04780eda21b0a5eea02475415887a1cadfb368b371221aeb40703c067f338" + }, + "version": "1.5.1" + }, + "androidx.interpolator:interpolator:aar": { + "shasums": { + "jar": "33193135a64fe21fa2c35eec6688f1a76e512606c0fc83dc1b689e37add7732a" + }, + "version": "1.0.0" + }, + "androidx.lifecycle:lifecycle-common": { + "shasums": { + "jar": "20ad1520f625cf455e6afd7290988306d3a9886efa993e0860fbabf4bb3f7bda" + }, + "version": "2.5.1" + }, + "androidx.lifecycle:lifecycle-common-java8": { + "shasums": { + "jar": "69e1a62e5752ca3f43fb1607f161379bbe88b64af89c1a543c126160adf7cc53" + }, + "version": "2.5.1" + }, + "androidx.lifecycle:lifecycle-livedata-core:aar": { + "shasums": { + "jar": "ee792103ca248bfaf150c45a93871e4cf7e8cebab990e0f62f7de5d4ff2f209f" + }, + "version": "2.5.1" + }, + "androidx.lifecycle:lifecycle-livedata:aar": { + "shasums": { + "jar": "c82609ced8c498f0a701a30fb6771bb7480860daee84d82e0a81ee86edf7ba39" + }, + "version": "2.0.0" + }, + "androidx.lifecycle:lifecycle-runtime-ktx:aar": { + "shasums": { + "jar": "b3988ae01aae021ac666f232b85f88e8a75cacb2ac7bd6749cab73972540ce07" + }, + "version": "2.5.1" + }, + "androidx.lifecycle:lifecycle-runtime:aar": { + "shasums": { + "jar": "33b0d73dc2f028fceb3599bacabe563c3db6d26f3513d889595863536a4ac8c0" + }, + "version": "2.5.1" + }, + "androidx.lifecycle:lifecycle-viewmodel-ktx:aar": { + "shasums": { + "jar": "30eecb351d81f0c429e186e65a892a42ce1d5bc5c80420bfece4ae279333023d" + }, + "version": "2.5.1" + }, + "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar": { + "shasums": { + "jar": "8481141f97f0e6213dd33fcc89a784c4bd11a6ff7d4779a1cf6a0e9fbdbf24e0" + }, + "version": "2.5.1" + }, + "androidx.lifecycle:lifecycle-viewmodel:aar": { + "shasums": { + "jar": "14a27d5fb8a1436b1b7dec18bebaa66c830cdbbc8e28a81ce5f85b7c33b3ae9d" + }, + "version": "2.5.1" + }, + "androidx.loader:loader:aar": { + "shasums": { + "jar": "11f735cb3b55c458d470bed9e25254375b518b4b1bad6926783a7026db0f5025" + }, + "version": "1.0.0" + }, + "androidx.profileinstaller:profileinstaller:aar": { + "shasums": { + "jar": "2e73a7c40e4dda1482a0537b77fdfb2db46b5c4b4cd33ad05d265097fb8a05da" + }, + "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": "ff081d2db7dd28aec59f74934c514fbaf4ae5aac5258495fe10d612a3622f876" + }, + "version": "1.0.0" + }, + "androidx.tracing:tracing:aar": { + "shasums": { + "jar": "07b8b6139665b884a162eccf97891ca50f7f56831233bf25168ae04f7b568612" + }, + "version": "1.0.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.auto.service:auto-service-annotations": { + "shasums": { + "jar": "44752893119fdaf01b4c5ee74e46e5dab86f2dcda18114c562f877355c6ed26e" + }, + "version": "1.0" + }, + "com.google.auto.value:auto-value-annotations": { + "shasums": { + "jar": "fedd59b0b4986c342f6ab2d182f2a4ee9fceb2c7e2d5bdc4dc764c92394a23d3" + }, + "version": "1.7.4" + }, + "com.google.code.findbugs:jsr305": { + "shasums": { + "jar": "766ad2a0783f2687962c8ad74ceecc38a28b9f72a2d085ee438b7813e928d0c7" + }, + "version": "3.0.2" + }, + "com.google.code.gson:gson": { + "shasums": { + "jar": "d3999291855de495c94c743761b8ab5176cfeabe281a5ab0d8e8d45326fd703e" + }, + "version": "2.8.9" + }, + "com.google.dagger:dagger": { + "shasums": { + "jar": "f011cae7d2c0fb7ea17c34e05bc10e768b1081a5892ad019cf1fdb0e125c49c1" + }, + "version": "2.45" + }, + "com.google.dagger:dagger-compiler": { + "shasums": { + "jar": "5617dfb994537dba5b41f3744a6dd13ec3cd99789c065e0d5c6fa9f21cf7ca25" + }, + "version": "2.45" + }, + "com.google.dagger:dagger-lint-aar:aar": { + "shasums": { + "jar": "e621c103bf61b4566f3f7dbc8055abcceef15881019d149b867ad9edf407a8ab" + }, + "version": "2.48" + }, + "com.google.dagger:dagger-producers": { + "shasums": { + "jar": "a05abb4c3ccf6bb0f056bdcb5ef973898ecf172952ab5948a824aeea6c86ecaa" + }, + "version": "2.45" + }, + "com.google.dagger:dagger-spi": { + "shasums": { + "jar": "7cd6f0b09d88e64a9c97bc80e544ab8ac8fdee9301754413585a74cf64222b27" + }, + "version": "2.45" + }, + "com.google.dagger:hilt-android:aar": { + "shasums": { + "jar": "24768f5a27c60dc8b1894728867fc4c70dfa58a384d9ff60c9212ce48a2137ea" + }, + "version": "2.48" + }, + "com.google.dagger:hilt-core": { + "shasums": { + "jar": "ca82a5330b37252f3dded1e5ce05f744b354ab11b6c7e49bdac10896c5193361" + }, + "version": "2.48" + }, + "com.google.devtools.ksp:symbol-processing-api": { + "shasums": { + "jar": "adc29417be5ca9ff42118105fea4e36d9ef44987abfc41432309371a60198941" + }, + "version": "1.7.0-1.0.6" + }, + "com.google.errorprone:error_prone_annotations": { + "shasums": { + "jar": "357cd6cfb067c969226c442451502aee13800a24e950fdfde77bcdb4565a668d" + }, + "version": "2.3.2" + }, + "com.google.errorprone:javac-shaded": { + "shasums": { + "jar": "65bfccf60986c47fbc17c9ebab0be626afc41741e0a6ec7109e0768817a36f30" + }, + "version": "9-dev-r4023-3" + }, + "com.google.googlejavaformat:google-java-format": { + "shasums": { + "jar": "aa19ad7850fb85178aa22f2fddb163b84d6ce4d0035872f30d4408195ca1144e" + }, + "version": "1.5" + }, + "com.google.guava:failureaccess": { + "shasums": { + "jar": "a171ee4c734dd2da837e4b16be9df4661afab72a41adaf31eb84dfdaf936ca26" + }, + "version": "1.0.1" + }, + "com.google.guava:guava": { + "shasums": { + "jar": "a42edc9cab792e39fe39bb94f3fca655ed157ff87a8af78e1d6ba5b07c4a00ab" + }, + "version": "31.1-jre" + }, + "com.google.guava:guava-testlib": { + "shasums": { + "jar": "aadc71b10d5c3ac474dd16be84cfb18d257e584d1e0a59f8cab64ef4376226ce" + }, + "version": "31.1-jre" + }, + "com.google.guava:listenablefuture": { + "shasums": { + "jar": "b372a037d4230aa57fbeffdef30fd6123f9c0c2db85d0aced00c91b974f33f99" + }, + "version": "9999.0-empty-to-avoid-conflict-with-guava" + }, + "com.google.j2objc:j2objc-annotations": { + "shasums": { + "jar": "21af30c92267bd6122c0e0b4d20cccb6641a37eaf956c6540ec471d584e64a7b" + }, + "version": "1.3" + }, + "com.google.truth:truth": { + "shasums": { + "jar": "a85e03b8b6ae8780f060cfded9500a3d1b5f52808f99a2ea6da9c683313c7518" + }, + "version": "1.1.2" + }, + "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter": { + "shasums": { + "jar": "fe3fcb6d2f693867640776eee41989189adc7961797ea88bd2282a1b46b16b77" + }, + "version": "0.8.0" + }, + "com.jakewharton.timber:timber:aar": { + "shasums": { + "jar": "c6edddfcc8eff42a1604c8577fcfa4b4ffd9f252122c52ea36cfe7967f512f71" + }, + "version": "5.0.1" + }, + "com.squareup.moshi:moshi": { + "shasums": { + "jar": "46a1118fe1fc12723a575c94133fc8936dcc78d3f8873c0e70a055de9e5861a6" + }, + "version": "1.15.1" + }, + "com.squareup.moshi:moshi-kotlin": { + "shasums": { + "jar": "3c5a577200fc49a696647a52b1a97598a56d8d6f00e343ffed09d88b4007cdd0" + }, + "version": "1.15.1" + }, + "com.squareup.moshi:moshi-kotlin-codegen": { + "shasums": { + "jar": "14ab79736dc806a245ad76354eb7d53e83bead1d87b092a6b07da6a3287a39ed" + }, + "version": "1.15.1" + }, + "com.squareup.okhttp3:logging-interceptor": { + "shasums": { + "jar": "e7358b4877f2dc2ea5f03276ad8980f96ad3da745c80006b58b01386b83a8d94" + }, + "version": "4.9.3" + }, + "com.squareup.okhttp3:okhttp": { + "shasums": { + "jar": "93ecd6cba19d87dccfe566ec848d91aae799e3cf16c00709358ea69bd9227219" + }, + "version": "4.9.3" + }, + "com.squareup.okio:okio": { + "shasums": { + "jar": "4496b06e73982fcdd8a5393f46e5df2ce2fa4465df5895454cac68a32f09bbc8" + }, + "version": "2.8.0" + }, + "com.squareup.okio:okio-jvm": { + "shasums": { + "jar": "d8b35adc28768f43ae5afe6a7d1aa2a878ba51e0b96a4f308811f3b1f5b13e55" + }, + "version": "3.7.0" + }, + "com.squareup.retrofit2:retrofit": { + "shasums": { + "jar": "e6ea1929c46852f5bec66ab3357da383476cef4e8d1deefdbf195b79cc4d6581" + }, + "version": "2.9.0" + }, + "com.squareup:javapoet": { + "shasums": { + "jar": "4c7517e848a71b36d069d12bb3bf46a70fd4cda3105d822b0ed2e19c00b69291" + }, + "version": "1.13.0" + }, + "com.squareup:kotlinpoet": { + "shasums": { + "jar": "7cbf7f4330170f9459d15c105fae6e13784cb37855fd68cf2826dfa0b5deb676" + }, + "version": "1.13.2" + }, + "com.squareup:kotlinpoet-ksp": { + "shasums": { + "jar": "d1de5e3d6f7405dc10cb14a43f39400ba75604e1cf86da1fe08e9007a8a17d08" + }, + "version": "1.13.2" + }, + "javax.inject:javax.inject": { + "shasums": { + "jar": "91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff" + }, + "version": "1" + }, + "junit:junit": { + "shasums": { + "jar": "8e495b634469d64fb8acfa3495a065cbacc8a0fff55ce1e31007be4c16dc57d3" + }, + "version": "4.13.2" + }, + "net.bytebuddy:byte-buddy": { + "shasums": { + "jar": "d2e46555699e70361b5471a7e142f9c67855bba6907a285177ebd8ad973775d8" + }, + "version": "1.12.7" + }, + "net.bytebuddy:byte-buddy-agent": { + "shasums": { + "jar": "73d84bb6e8e8980e674d796a29063f510ceb527c6f8c912a08a13e236be05c71" + }, + "version": "1.12.7" + }, + "net.ltgt.gradle.incap:incap": { + "shasums": { + "jar": "b625b9806b0f1e4bc7a2e3457119488de3cd57ea20feedd513db070a573a4ffd" + }, + "version": "0.2" + }, + "org.checkerframework:checker-compat-qual": { + "shasums": { + "jar": "11d134b245e9cacc474514d2d66b5b8618f8039a1465cdc55bbc0b34e0008b7a" + }, + "version": "2.5.5" + }, + "org.checkerframework:checker-qual": { + "shasums": { + "jar": "ff10785ac2a357ec5de9c293cb982a2cbb605c0309ea4cc1cb9b9bc6dbe7f3cb" + }, + "version": "3.12.0" + }, + "org.hamcrest:hamcrest-core": { + "shasums": { + "jar": "66fdef91e9739348df7a096aa384a5685f4e875584cce89386a7a47251c4d8e9" + }, + "version": "1.3" + }, + "org.jetbrains.kotlin:kotlin-reflect": { + "shasums": { + "jar": "8a6cd5a3cf092acee274ce2c444dc36eefdb631579859dd4d857b3309a529c91" + }, + "version": "1.8.21" + }, + "org.jetbrains.kotlin:kotlin-stdlib": { + "shasums": { + "jar": "3b479313ab6caea4e5e25d3dee8ca80c302c89ba73e1af4dafaa100f6ef9296a" + }, + "version": "1.9.21" + }, + "org.jetbrains.kotlin:kotlin-stdlib-common": { + "shasums": { + "jar": "6a44c9ecc9d7754d9e943fb1e3588c74d4a3f1785be51074f49d6c5723682a73" + }, + "version": "1.8.21" + }, + "org.jetbrains.kotlin:kotlin-stdlib-jdk7": { + "shasums": { + "jar": "33d148db0e11debd0d90677d28242bced907f9c77730000fd597867089039d86" + }, + "version": "1.8.21" + }, + "org.jetbrains.kotlin:kotlin-stdlib-jdk8": { + "shasums": { + "jar": "3db752a30074f06ee6c57984aa6f27da44f4d2bbc7f5442651f6988f1cb2b7d7" + }, + "version": "1.8.21" + }, + "org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm": { + "shasums": { + "jar": "91d253c00c5e20e3af35604504609a475fbcee37aaeebc195e72e8aeccf7ac6e" + }, + "version": "0.3.4" + }, + "org.jetbrains.kotlinx:kotlinx-coroutines-android": { + "shasums": { + "jar": "59fffb26bee12c32dadcfa5d420c2a7db85d3253518128b170efda726613256d" + }, + "version": "1.7.3" + }, + "org.jetbrains.kotlinx:kotlinx-coroutines-core": { + "shasums": { + "jar": "1962ebc6cffb7645c6f5f17524690d8a728086344f1219e63c9ca0c4d8f327d7" + }, + "version": "1.5.2" + }, + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm": { + "shasums": { + "jar": "f3d4f5de1c391bbcc20f3b3435ccbac013521e76b6902d7d59635ec15c1f797e" + }, + "version": "1.8.1" + }, + "org.jetbrains.kotlinx:kotlinx-coroutines-test": { + "shasums": { + "jar": "d5a9b8769a2167eb9dc911d1b2c54fe8270387b8160533d8ae8bda942e2998b1" + }, + "version": "1.8.1" + }, + "org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm": { + "shasums": { + "jar": "c4ef1deb31be3f81ed82ecf237220cc95886868a7ec527a418599dfff159dedb" + }, + "version": "1.8.1" + }, + "org.jetbrains.kotlinx:kotlinx-metadata-jvm": { + "shasums": { + "jar": "ca063a96639b08b9eaa0de4d65e899480740a6efbe28ab9a8681a2ced03055a4" + }, + "version": "0.5.0" + }, + "org.jetbrains.kotlinx:kotlinx-serialization-core": { + "shasums": { + "jar": "6b945ed3abdc83195afabfa74a289ac818522000ad5e7021bd7e9eb3864224d9" + }, + "version": "1.5.1" + }, + "org.jetbrains.kotlinx:kotlinx-serialization-core-jvm": { + "shasums": { + "jar": "a4053a35abeb59bf707d7948245556fe8dc379e9cfed088aec08134c899605d4" + }, + "version": "1.5.1" + }, + "org.jetbrains.kotlinx:kotlinx-serialization-json": { + "shasums": { + "jar": "1463d5c83781ca47b9edcf4fc44017f6ac1ab4caffb2a69778814654c1c03b5e" + }, + "version": "1.5.1" + }, + "org.jetbrains.kotlinx:kotlinx-serialization-json-jvm": { + "shasums": { + "jar": "6fc10b056e1006963abb2b9fc393dcd4e38425358b6f16285e8f63d3429ffd21" + }, + "version": "1.5.1" + }, + "org.jetbrains:annotations": { + "shasums": { + "jar": "7b0f19724082cbfcbc66e5abea2b9bc92cf08a1ea11e191933ed43801eb3cd05" + }, + "version": "23.0.0" + }, + "org.jsoup:jsoup": { + "shasums": { + "jar": "1f115726540ddf71958c14bc517ebfc49cf481e91cd917b0face84f01272e901" + }, + "version": "1.16.1" + }, + "org.mockito:mockito-core": { + "shasums": { + "jar": "148de2c6928365db29443ca12d35c930d9f481172b934fdd801d1cb1409ea83a" + }, + "version": "4.3.1" + }, + "org.objenesis:objenesis": { + "shasums": { + "jar": "03d960bd5aef03c653eb000413ada15eb77cdd2b8e4448886edf5692805e35f3" + }, + "version": "3.2" + }, + "org.ow2.asm:asm": { + "shasums": { + "jar": "1263369b59e29c943918de11d6d6152e2ec6085ce63e5710516f8c67d368e4bc" + }, + "version": "9.3" + } + }, + "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-common-java8", + "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", + "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.browser:browser:aar": [ + "androidx.annotation:annotation", + "androidx.collection:collection", + "androidx.concurrent:concurrent-futures", + "androidx.core:core:aar", + "androidx.interpolator:interpolator:aar", + "com.google.guava:listenablefuture" + ], + "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.runtime:runtime:aar", + "androidx.compose.ui:ui-util:aar", + "androidx.compose.ui:ui: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-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.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", + "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" + ], + "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.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.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.lifecycle:lifecycle-runtime:aar", + "androidx.versionedparcelable:versionedparcelable:aar" + ], + "androidx.customview:customview:aar": [ + "androidx.annotation:annotation", + "androidx.core:core: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.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-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.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.startup:startup-runtime:aar" + ], + "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.versionedparcelable:versionedparcelable:aar": [ + "androidx.annotation:annotation", + "androidx.collection:collection" + ], + "androidx.viewpager:viewpager:aar": [ + "androidx.annotation:annotation", + "androidx.core:core:aar", + "androidx.customview:customview:aar" + ], + "com.google.dagger:dagger": [ + "javax.inject:javax.inject" + ], + "com.google.dagger:dagger-compiler": [ + "com.google.code.findbugs:jsr305", + "com.google.dagger:dagger", + "com.google.dagger:dagger-producers", + "com.google.dagger:dagger-spi", + "com.google.devtools.ksp:symbol-processing-api", + "com.google.googlejavaformat:google-java-format", + "com.google.guava:failureaccess", + "com.google.guava:guava", + "com.squareup:javapoet", + "javax.inject:javax.inject", + "net.ltgt.gradle.incap:incap", + "org.checkerframework:checker-compat-qual", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlinx:kotlinx-metadata-jvm" + ], + "com.google.dagger:dagger-producers": [ + "com.google.dagger:dagger", + "com.google.guava:failureaccess", + "com.google.guava:guava", + "javax.inject:javax.inject", + "org.checkerframework:checker-compat-qual" + ], + "com.google.dagger:dagger-spi": [ + "com.google.code.findbugs:jsr305", + "com.google.dagger:dagger", + "com.google.dagger:dagger-producers", + "com.google.devtools.ksp:symbol-processing-api", + "com.google.guava:failureaccess", + "com.google.guava:guava", + "com.squareup:javapoet", + "com.squareup:kotlinpoet", + "javax.inject:javax.inject", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlin:kotlin-stdlib-jdk8" + ], + "com.google.dagger:hilt-android:aar": [ + "androidx.activity:activity:aar", + "androidx.annotation:annotation", + "androidx.fragment:fragment:aar", + "androidx.lifecycle:lifecycle-common", + "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar", + "androidx.lifecycle:lifecycle-viewmodel:aar", + "androidx.savedstate:savedstate:aar", + "com.google.code.findbugs:jsr305", + "com.google.dagger:dagger", + "com.google.dagger:dagger-lint-aar:aar", + "com.google.dagger:hilt-core", + "javax.inject:javax.inject", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "com.google.dagger:hilt-core": [ + "com.google.code.findbugs:jsr305", + "com.google.dagger:dagger", + "javax.inject:javax.inject" + ], + "com.google.devtools.ksp:symbol-processing-api": [ + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "com.google.googlejavaformat:google-java-format": [ + "com.google.errorprone:javac-shaded", + "com.google.guava:guava" + ], + "com.google.guava:guava": [ + "com.google.code.findbugs:jsr305", + "com.google.errorprone:error_prone_annotations", + "com.google.guava:failureaccess", + "com.google.guava:listenablefuture", + "com.google.j2objc:j2objc-annotations", + "org.checkerframework:checker-qual" + ], + "com.google.guava:guava-testlib": [ + "com.google.code.findbugs:jsr305", + "com.google.errorprone:error_prone_annotations", + "com.google.guava:guava", + "com.google.j2objc:j2objc-annotations", + "junit:junit", + "org.checkerframework:checker-qual" + ], + "com.google.truth:truth": [ + "com.google.auto.value:auto-value-annotations", + "com.google.errorprone:error_prone_annotations", + "com.google.guava:guava", + "junit:junit", + "org.checkerframework:checker-qual", + "org.ow2.asm:asm" + ], + "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter": [ + "com.squareup.retrofit2:retrofit", + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlinx:kotlinx-serialization-core-jvm" + ], + "com.jakewharton.timber:timber:aar": [ + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains:annotations" + ], + "com.squareup.moshi:moshi": [ + "com.squareup.okio:okio-jvm", + "org.jetbrains.kotlin:kotlin-stdlib-jdk8" + ], + "com.squareup.moshi:moshi-kotlin": [ + "com.squareup.moshi:moshi", + "org.jetbrains.kotlin:kotlin-reflect", + "org.jetbrains.kotlin:kotlin-stdlib-jdk8" + ], + "com.squareup.moshi:moshi-kotlin-codegen": [ + "com.google.auto.service:auto-service-annotations", + "com.google.guava:guava", + "com.squareup.moshi:moshi", + "com.squareup:kotlinpoet", + "com.squareup:kotlinpoet-ksp", + "org.jetbrains.kotlin:kotlin-reflect", + "org.jetbrains.kotlin:kotlin-stdlib-jdk8", + "org.ow2.asm:asm" + ], + "com.squareup.okhttp3:logging-interceptor": [ + "com.squareup.okhttp3:okhttp", + "org.jetbrains.kotlin:kotlin-stdlib-jdk8" + ], + "com.squareup.okhttp3:okhttp": [ + "com.squareup.okio:okio", + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "com.squareup.okio:okio": [ + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlin:kotlin-stdlib-common" + ], + "com.squareup.okio:okio-jvm": [ + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "com.squareup.retrofit2:retrofit": [ + "com.squareup.okhttp3:okhttp" + ], + "com.squareup:kotlinpoet": [ + "org.jetbrains.kotlin:kotlin-reflect", + "org.jetbrains.kotlin:kotlin-stdlib-jdk8" + ], + "com.squareup:kotlinpoet-ksp": [ + "com.squareup:kotlinpoet", + "org.jetbrains.kotlin:kotlin-stdlib-jdk8" + ], + "junit:junit": [ + "org.hamcrest:hamcrest-core" + ], + "org.jetbrains.kotlin:kotlin-reflect": [ + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "org.jetbrains.kotlin:kotlin-stdlib": [ + "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-collections-immutable-jvm": [ + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlin:kotlin-stdlib-common" + ], + "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", + "org.jetbrains:annotations" + ], + "org.jetbrains.kotlinx:kotlinx-coroutines-test": [ + "org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm" + ], + "org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm": [ + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm", + "org.jetbrains:annotations" + ], + "org.jetbrains.kotlinx:kotlinx-metadata-jvm": [ + "org.jetbrains.kotlin:kotlin-stdlib" + ], + "org.jetbrains.kotlinx:kotlinx-serialization-core": [ + "org.jetbrains.kotlinx:kotlinx-serialization-core-jvm" + ], + "org.jetbrains.kotlinx:kotlinx-serialization-core-jvm": [ + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlin:kotlin-stdlib-common" + ], + "org.jetbrains.kotlinx:kotlinx-serialization-json": [ + "org.jetbrains.kotlinx:kotlinx-serialization-json-jvm" + ], + "org.jetbrains.kotlinx:kotlinx-serialization-json-jvm": [ + "org.jetbrains.kotlin:kotlin-stdlib", + "org.jetbrains.kotlin:kotlin-stdlib-common", + "org.jetbrains.kotlinx:kotlinx-serialization-core-jvm" + ], + "org.mockito:mockito-core": [ + "net.bytebuddy:byte-buddy", + "net.bytebuddy:byte-buddy-agent", + "org.objenesis:objenesis" + ] + }, + "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" + ], + "com.google.auto.service:auto-service-annotations": [ + "com.google.auto.service" + ], + "com.google.auto.value:auto-value-annotations": [ + "com.google.auto.value", + "com.google.auto.value.extension.memoized", + "com.google.auto.value.extension.serializable" + ], + "com.google.code.findbugs:jsr305": [ + "javax.annotation", + "javax.annotation.concurrent", + "javax.annotation.meta" + ], + "com.google.code.gson:gson": [ + "com.google.gson", + "com.google.gson.annotations", + "com.google.gson.internal", + "com.google.gson.internal.bind", + "com.google.gson.internal.bind.util", + "com.google.gson.internal.reflect", + "com.google.gson.internal.sql", + "com.google.gson.reflect", + "com.google.gson.stream" + ], + "com.google.dagger:dagger": [ + "dagger", + "dagger.assisted", + "dagger.internal", + "dagger.multibindings" + ], + "com.google.dagger:dagger-compiler": [ + "dagger.internal.codegen", + "dagger.internal.codegen.base", + "dagger.internal.codegen.binding", + "dagger.internal.codegen.bindinggraphvalidation", + "dagger.internal.codegen.compileroption", + "dagger.internal.codegen.componentgenerator", + "dagger.internal.codegen.javapoet", + "dagger.internal.codegen.kotlin", + "dagger.internal.codegen.langmodel", + "dagger.internal.codegen.processingstep", + "dagger.internal.codegen.validation", + "dagger.internal.codegen.writing" + ], + "com.google.dagger:dagger-producers": [ + "dagger.producers", + "dagger.producers.internal", + "dagger.producers.monitoring", + "dagger.producers.monitoring.internal" + ], + "com.google.dagger:dagger-spi": [ + "dagger.internal.codegen.extension", + "dagger.internal.codegen.xprocessing", + "dagger.model", + "dagger.spi", + "dagger.spi.model", + "dagger.spi.shaded.androidx.room.compiler.codegen", + "dagger.spi.shaded.androidx.room.compiler.codegen.java", + "dagger.spi.shaded.androidx.room.compiler.codegen.kotlin", + "dagger.spi.shaded.androidx.room.compiler.processing", + "dagger.spi.shaded.androidx.room.compiler.processing.compat", + "dagger.spi.shaded.androidx.room.compiler.processing.javac", + "dagger.spi.shaded.androidx.room.compiler.processing.javac.kotlin", + "dagger.spi.shaded.androidx.room.compiler.processing.ksp", + "dagger.spi.shaded.androidx.room.compiler.processing.ksp.synthetic", + "dagger.spi.shaded.androidx.room.compiler.processing.util", + "dagger.spi.shaded.auto.common" + ], + "com.google.dagger:hilt-core": [ + "dagger.hilt", + "dagger.hilt.codegen", + "dagger.hilt.components", + "dagger.hilt.internal", + "dagger.hilt.internal.aliasof", + "dagger.hilt.internal.definecomponent", + "dagger.hilt.internal.generatesrootinput", + "dagger.hilt.migration", + "dagger.hilt.processor.internal.aggregateddeps", + "dagger.hilt.processor.internal.definecomponent.codegen", + "dagger.hilt.processor.internal.generatesrootinput.codegen" + ], + "com.google.devtools.ksp:symbol-processing-api": [ + "com.google.devtools.ksp", + "com.google.devtools.ksp.processing", + "com.google.devtools.ksp.symbol", + "com.google.devtools.ksp.visitor" + ], + "com.google.errorprone:error_prone_annotations": [ + "com.google.errorprone.annotations", + "com.google.errorprone.annotations.concurrent" + ], + "com.google.errorprone:javac-shaded": [ + "org.openjdk.javax.annotation.processing", + "org.openjdk.javax.lang.model", + "org.openjdk.javax.lang.model.element", + "org.openjdk.javax.lang.model.type", + "org.openjdk.javax.lang.model.util", + "org.openjdk.javax.tools", + "org.openjdk.source.doctree", + "org.openjdk.source.tree", + "org.openjdk.source.util", + "org.openjdk.tools.doclint", + "org.openjdk.tools.doclint.resources", + "org.openjdk.tools.javac", + "org.openjdk.tools.javac.api", + "org.openjdk.tools.javac.code", + "org.openjdk.tools.javac.comp", + "org.openjdk.tools.javac.file", + "org.openjdk.tools.javac.jvm", + "org.openjdk.tools.javac.main", + "org.openjdk.tools.javac.model", + "org.openjdk.tools.javac.parser", + "org.openjdk.tools.javac.platform", + "org.openjdk.tools.javac.processing", + "org.openjdk.tools.javac.resources", + "org.openjdk.tools.javac.tree", + "org.openjdk.tools.javac.util", + "org.openjdk.tools.javah", + "org.openjdk.tools.javah.resources", + "org.openjdk.tools.sjavac", + "org.openjdk.tools.sjavac.client", + "org.openjdk.tools.sjavac.comp", + "org.openjdk.tools.sjavac.comp.dependencies", + "org.openjdk.tools.sjavac.options", + "org.openjdk.tools.sjavac.pubapi", + "org.openjdk.tools.sjavac.server", + "org.openjdk.tools.sjavac.server.log" + ], + "com.google.googlejavaformat:google-java-format": [ + "com.google.googlejavaformat", + "com.google.googlejavaformat.java", + "com.google.googlejavaformat.java.filer", + "com.google.googlejavaformat.java.javadoc" + ], + "com.google.guava:failureaccess": [ + "com.google.common.util.concurrent.internal" + ], + "com.google.guava:guava": [ + "com.google.common.annotations", + "com.google.common.base", + "com.google.common.base.internal", + "com.google.common.cache", + "com.google.common.collect", + "com.google.common.escape", + "com.google.common.eventbus", + "com.google.common.graph", + "com.google.common.hash", + "com.google.common.html", + "com.google.common.io", + "com.google.common.math", + "com.google.common.net", + "com.google.common.primitives", + "com.google.common.reflect", + "com.google.common.util.concurrent", + "com.google.common.xml", + "com.google.thirdparty.publicsuffix" + ], + "com.google.guava:guava-testlib": [ + "com.google.common.collect.testing", + "com.google.common.collect.testing.features", + "com.google.common.collect.testing.google", + "com.google.common.collect.testing.testers", + "com.google.common.escape.testing", + "com.google.common.testing", + "com.google.common.util.concurrent.testing" + ], + "com.google.j2objc:j2objc-annotations": [ + "com.google.j2objc.annotations" + ], + "com.google.truth:truth": [ + "com.google.common.truth" + ], + "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter": [ + "com.jakewharton.retrofit2.converter.kotlinx.serialization" + ], + "com.squareup.moshi:moshi": [ + "com.squareup.moshi", + "com.squareup.moshi.internal" + ], + "com.squareup.moshi:moshi-kotlin": [ + "com.squareup.moshi", + "com.squareup.moshi.kotlin.reflect" + ], + "com.squareup.moshi:moshi-kotlin-codegen": [ + "com.squareup.moshi.kotlin.codegen.api", + "com.squareup.moshi.kotlin.codegen.apt", + "com.squareup.moshi.kotlin.codegen.ksp", + "com.squareup.moshi.kotlinpoet.metadata", + "com.squareup.moshi.kotlinpoet.metadata.classinspectors", + "com.squareup.moshi.kotlinpoet.metadata.specs", + "com.squareup.moshi.kotlinx.metadata", + "com.squareup.moshi.kotlinx.metadata.internal", + "com.squareup.moshi.kotlinx.metadata.internal.common", + "com.squareup.moshi.kotlinx.metadata.internal.extensions", + "com.squareup.moshi.kotlinx.metadata.internal.metadata", + "com.squareup.moshi.kotlinx.metadata.internal.metadata.builtins", + "com.squareup.moshi.kotlinx.metadata.internal.metadata.deserialization", + "com.squareup.moshi.kotlinx.metadata.internal.metadata.jvm", + "com.squareup.moshi.kotlinx.metadata.internal.metadata.jvm.deserialization", + "com.squareup.moshi.kotlinx.metadata.internal.metadata.jvm.serialization", + "com.squareup.moshi.kotlinx.metadata.internal.metadata.serialization", + "com.squareup.moshi.kotlinx.metadata.internal.protobuf", + "com.squareup.moshi.kotlinx.metadata.jvm", + "com.squareup.moshi.kotlinx.metadata.jvm.internal", + "shadow.com.google.auto.common" + ], + "com.squareup.okhttp3:logging-interceptor": [ + "okhttp3.logging" + ], + "com.squareup.okhttp3:okhttp": [ + "okhttp3", + "okhttp3.internal", + "okhttp3.internal.authenticator", + "okhttp3.internal.cache", + "okhttp3.internal.cache2", + "okhttp3.internal.concurrent", + "okhttp3.internal.connection", + "okhttp3.internal.http", + "okhttp3.internal.http1", + "okhttp3.internal.http2", + "okhttp3.internal.io", + "okhttp3.internal.platform", + "okhttp3.internal.platform.android", + "okhttp3.internal.proxy", + "okhttp3.internal.publicsuffix", + "okhttp3.internal.tls", + "okhttp3.internal.ws" + ], + "com.squareup.okio:okio": [ + "okio", + "okio.internal" + ], + "com.squareup.okio:okio-jvm": [ + "okio", + "okio.internal" + ], + "com.squareup.retrofit2:retrofit": [ + "retrofit2", + "retrofit2.http", + "retrofit2.internal" + ], + "com.squareup:javapoet": [ + "com.squareup.javapoet" + ], + "com.squareup:kotlinpoet": [ + "com.squareup.kotlinpoet", + "com.squareup.kotlinpoet.jvm", + "com.squareup.kotlinpoet.tags" + ], + "com.squareup:kotlinpoet-ksp": [ + "com.squareup.kotlinpoet.ksp" + ], + "javax.inject:javax.inject": [ + "javax.inject" + ], + "junit:junit": [ + "junit.extensions", + "junit.framework", + "junit.runner", + "junit.textui", + "org.junit", + "org.junit.experimental", + "org.junit.experimental.categories", + "org.junit.experimental.max", + "org.junit.experimental.results", + "org.junit.experimental.runners", + "org.junit.experimental.theories", + "org.junit.experimental.theories.internal", + "org.junit.experimental.theories.suppliers", + "org.junit.function", + "org.junit.internal", + "org.junit.internal.builders", + "org.junit.internal.management", + "org.junit.internal.matchers", + "org.junit.internal.requests", + "org.junit.internal.runners", + "org.junit.internal.runners.model", + "org.junit.internal.runners.rules", + "org.junit.internal.runners.statements", + "org.junit.matchers", + "org.junit.rules", + "org.junit.runner", + "org.junit.runner.manipulation", + "org.junit.runner.notification", + "org.junit.runners", + "org.junit.runners.model", + "org.junit.runners.parameterized", + "org.junit.validator" + ], + "net.bytebuddy:byte-buddy": [ + "net.bytebuddy", + "net.bytebuddy.agent.builder", + "net.bytebuddy.asm", + "net.bytebuddy.build", + "net.bytebuddy.description", + "net.bytebuddy.description.annotation", + "net.bytebuddy.description.enumeration", + "net.bytebuddy.description.field", + "net.bytebuddy.description.method", + "net.bytebuddy.description.modifier", + "net.bytebuddy.description.type", + "net.bytebuddy.dynamic", + "net.bytebuddy.dynamic.loading", + "net.bytebuddy.dynamic.scaffold", + "net.bytebuddy.dynamic.scaffold.inline", + "net.bytebuddy.dynamic.scaffold.subclass", + "net.bytebuddy.implementation", + "net.bytebuddy.implementation.attribute", + "net.bytebuddy.implementation.auxiliary", + "net.bytebuddy.implementation.bind", + "net.bytebuddy.implementation.bind.annotation", + "net.bytebuddy.implementation.bytecode", + "net.bytebuddy.implementation.bytecode.assign", + "net.bytebuddy.implementation.bytecode.assign.primitive", + "net.bytebuddy.implementation.bytecode.assign.reference", + "net.bytebuddy.implementation.bytecode.collection", + "net.bytebuddy.implementation.bytecode.constant", + "net.bytebuddy.implementation.bytecode.member", + "net.bytebuddy.jar.asm", + "net.bytebuddy.jar.asm.commons", + "net.bytebuddy.jar.asm.signature", + "net.bytebuddy.matcher", + "net.bytebuddy.pool", + "net.bytebuddy.utility", + "net.bytebuddy.utility.dispatcher", + "net.bytebuddy.utility.nullability", + "net.bytebuddy.utility.privilege", + "net.bytebuddy.utility.visitor" + ], + "net.bytebuddy:byte-buddy-agent": [ + "net.bytebuddy.agent", + "net.bytebuddy.agent.utility.nullability" + ], + "net.ltgt.gradle.incap:incap": [ + "net.ltgt.gradle.incap" + ], + "org.checkerframework:checker-compat-qual": [ + "org.checkerframework.checker.nullness.compatqual" + ], + "org.checkerframework:checker-qual": [ + "org.checkerframework.checker.builder.qual", + "org.checkerframework.checker.calledmethods.qual", + "org.checkerframework.checker.compilermsgs.qual", + "org.checkerframework.checker.fenum.qual", + "org.checkerframework.checker.formatter.qual", + "org.checkerframework.checker.guieffect.qual", + "org.checkerframework.checker.i18n.qual", + "org.checkerframework.checker.i18nformatter.qual", + "org.checkerframework.checker.index.qual", + "org.checkerframework.checker.initialization.qual", + "org.checkerframework.checker.interning.qual", + "org.checkerframework.checker.lock.qual", + "org.checkerframework.checker.nullness.qual", + "org.checkerframework.checker.optional.qual", + "org.checkerframework.checker.propkey.qual", + "org.checkerframework.checker.regex.qual", + "org.checkerframework.checker.signature.qual", + "org.checkerframework.checker.signedness.qual", + "org.checkerframework.checker.tainting.qual", + "org.checkerframework.checker.units.qual", + "org.checkerframework.common.aliasing.qual", + "org.checkerframework.common.initializedfields.qual", + "org.checkerframework.common.reflection.qual", + "org.checkerframework.common.returnsreceiver.qual", + "org.checkerframework.common.subtyping.qual", + "org.checkerframework.common.util.report.qual", + "org.checkerframework.common.value.qual", + "org.checkerframework.dataflow.qual", + "org.checkerframework.framework.qual" + ], + "org.hamcrest:hamcrest-core": [ + "org.hamcrest", + "org.hamcrest.core", + "org.hamcrest.internal" + ], + "org.jetbrains.kotlin:kotlin-reflect": [ + "kotlin.reflect.full", + "kotlin.reflect.jvm", + "kotlin.reflect.jvm.internal", + "kotlin.reflect.jvm.internal.calls", + "kotlin.reflect.jvm.internal.impl", + "kotlin.reflect.jvm.internal.impl.builtins", + "kotlin.reflect.jvm.internal.impl.builtins.functions", + "kotlin.reflect.jvm.internal.impl.builtins.jvm", + "kotlin.reflect.jvm.internal.impl.descriptors", + "kotlin.reflect.jvm.internal.impl.descriptors.annotations", + "kotlin.reflect.jvm.internal.impl.descriptors.deserialization", + "kotlin.reflect.jvm.internal.impl.descriptors.impl", + "kotlin.reflect.jvm.internal.impl.descriptors.java", + "kotlin.reflect.jvm.internal.impl.descriptors.runtime.components", + "kotlin.reflect.jvm.internal.impl.descriptors.runtime.structure", + "kotlin.reflect.jvm.internal.impl.incremental", + "kotlin.reflect.jvm.internal.impl.incremental.components", + "kotlin.reflect.jvm.internal.impl.load.java", + "kotlin.reflect.jvm.internal.impl.load.java.components", + "kotlin.reflect.jvm.internal.impl.load.java.descriptors", + "kotlin.reflect.jvm.internal.impl.load.java.lazy", + "kotlin.reflect.jvm.internal.impl.load.java.lazy.descriptors", + "kotlin.reflect.jvm.internal.impl.load.java.lazy.types", + "kotlin.reflect.jvm.internal.impl.load.java.sources", + "kotlin.reflect.jvm.internal.impl.load.java.structure", + "kotlin.reflect.jvm.internal.impl.load.java.typeEnhancement", + "kotlin.reflect.jvm.internal.impl.load.kotlin", + "kotlin.reflect.jvm.internal.impl.load.kotlin.header", + "kotlin.reflect.jvm.internal.impl.metadata", + "kotlin.reflect.jvm.internal.impl.metadata.builtins", + "kotlin.reflect.jvm.internal.impl.metadata.deserialization", + "kotlin.reflect.jvm.internal.impl.metadata.jvm", + "kotlin.reflect.jvm.internal.impl.metadata.jvm.deserialization", + "kotlin.reflect.jvm.internal.impl.name", + "kotlin.reflect.jvm.internal.impl.platform", + "kotlin.reflect.jvm.internal.impl.protobuf", + "kotlin.reflect.jvm.internal.impl.renderer", + "kotlin.reflect.jvm.internal.impl.resolve", + "kotlin.reflect.jvm.internal.impl.resolve.calls.inference", + "kotlin.reflect.jvm.internal.impl.resolve.constants", + "kotlin.reflect.jvm.internal.impl.resolve.deprecation", + "kotlin.reflect.jvm.internal.impl.resolve.descriptorUtil", + "kotlin.reflect.jvm.internal.impl.resolve.jvm", + "kotlin.reflect.jvm.internal.impl.resolve.sam", + "kotlin.reflect.jvm.internal.impl.resolve.scopes", + "kotlin.reflect.jvm.internal.impl.resolve.scopes.receivers", + "kotlin.reflect.jvm.internal.impl.serialization", + "kotlin.reflect.jvm.internal.impl.serialization.deserialization", + "kotlin.reflect.jvm.internal.impl.serialization.deserialization.builtins", + "kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors", + "kotlin.reflect.jvm.internal.impl.storage", + "kotlin.reflect.jvm.internal.impl.types", + "kotlin.reflect.jvm.internal.impl.types.checker", + "kotlin.reflect.jvm.internal.impl.types.error", + "kotlin.reflect.jvm.internal.impl.types.extensions", + "kotlin.reflect.jvm.internal.impl.types.model", + "kotlin.reflect.jvm.internal.impl.types.typeUtil", + "kotlin.reflect.jvm.internal.impl.types.typesApproximation", + "kotlin.reflect.jvm.internal.impl.util", + "kotlin.reflect.jvm.internal.impl.util.capitalizeDecapitalize", + "kotlin.reflect.jvm.internal.impl.util.collectionUtils", + "kotlin.reflect.jvm.internal.impl.utils" + ], + "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.kotlinx:kotlinx-collections-immutable-jvm": [ + "kotlinx.collections.immutable", + "kotlinx.collections.immutable.adapters", + "kotlinx.collections.immutable.implementations.immutableList", + "kotlinx.collections.immutable.implementations.immutableMap", + "kotlinx.collections.immutable.implementations.immutableSet", + "kotlinx.collections.immutable.implementations.persistentOrderedMap", + "kotlinx.collections.immutable.implementations.persistentOrderedSet", + "kotlinx.collections.immutable.internal" + ], + "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.kotlinx:kotlinx-coroutines-test-jvm": [ + "kotlinx.coroutines.test", + "kotlinx.coroutines.test.internal" + ], + "org.jetbrains.kotlinx:kotlinx-metadata-jvm": [ + "kotlinx.metadata", + "kotlinx.metadata.impl", + "kotlinx.metadata.impl.extensions", + "kotlinx.metadata.internal.common", + "kotlinx.metadata.internal.metadata", + "kotlinx.metadata.internal.metadata.builtins", + "kotlinx.metadata.internal.metadata.deserialization", + "kotlinx.metadata.internal.metadata.jvm", + "kotlinx.metadata.internal.metadata.jvm.deserialization", + "kotlinx.metadata.internal.metadata.jvm.serialization", + "kotlinx.metadata.internal.metadata.serialization", + "kotlinx.metadata.internal.protobuf", + "kotlinx.metadata.jvm", + "kotlinx.metadata.jvm.impl" + ], + "org.jetbrains.kotlinx:kotlinx-serialization-core-jvm": [ + "kotlinx.serialization", + "kotlinx.serialization.builtins", + "kotlinx.serialization.descriptors", + "kotlinx.serialization.encoding", + "kotlinx.serialization.internal", + "kotlinx.serialization.modules" + ], + "org.jetbrains.kotlinx:kotlinx-serialization-json-jvm": [ + "kotlinx.serialization.json", + "kotlinx.serialization.json.internal" + ], + "org.jetbrains:annotations": [ + "org.intellij.lang.annotations", + "org.jetbrains.annotations" + ], + "org.jsoup:jsoup": [ + "org.jsoup", + "org.jsoup.helper", + "org.jsoup.internal", + "org.jsoup.nodes", + "org.jsoup.parser", + "org.jsoup.safety", + "org.jsoup.select" + ], + "org.mockito:mockito-core": [ + "org.mockito", + "org.mockito.codegen", + "org.mockito.configuration", + "org.mockito.creation.instance", + "org.mockito.exceptions.base", + "org.mockito.exceptions.misusing", + "org.mockito.exceptions.stacktrace", + "org.mockito.exceptions.verification", + "org.mockito.exceptions.verification.junit", + "org.mockito.exceptions.verification.opentest4j", + "org.mockito.hamcrest", + "org.mockito.internal", + "org.mockito.internal.configuration", + "org.mockito.internal.configuration.injection", + "org.mockito.internal.configuration.injection.filter", + "org.mockito.internal.configuration.injection.scanner", + "org.mockito.internal.configuration.plugins", + "org.mockito.internal.creation", + "org.mockito.internal.creation.bytebuddy", + "org.mockito.internal.creation.instance", + "org.mockito.internal.creation.proxy", + "org.mockito.internal.creation.settings", + "org.mockito.internal.creation.util", + "org.mockito.internal.debugging", + "org.mockito.internal.exceptions", + "org.mockito.internal.exceptions.stacktrace", + "org.mockito.internal.exceptions.util", + "org.mockito.internal.framework", + "org.mockito.internal.hamcrest", + "org.mockito.internal.handler", + "org.mockito.internal.invocation", + "org.mockito.internal.invocation.finder", + "org.mockito.internal.invocation.mockref", + "org.mockito.internal.junit", + "org.mockito.internal.listeners", + "org.mockito.internal.matchers", + "org.mockito.internal.matchers.apachecommons", + "org.mockito.internal.matchers.text", + "org.mockito.internal.progress", + "org.mockito.internal.reporting", + "org.mockito.internal.runners", + "org.mockito.internal.runners.util", + "org.mockito.internal.session", + "org.mockito.internal.stubbing", + "org.mockito.internal.stubbing.answers", + "org.mockito.internal.stubbing.defaultanswers", + "org.mockito.internal.util", + "org.mockito.internal.util.collections", + "org.mockito.internal.util.concurrent", + "org.mockito.internal.util.io", + "org.mockito.internal.util.reflection", + "org.mockito.internal.verification", + "org.mockito.internal.verification.api", + "org.mockito.internal.verification.argumentmatching", + "org.mockito.internal.verification.checkers", + "org.mockito.invocation", + "org.mockito.junit", + "org.mockito.listeners", + "org.mockito.mock", + "org.mockito.plugins", + "org.mockito.quality", + "org.mockito.session", + "org.mockito.stubbing", + "org.mockito.verification" + ], + "org.objenesis:objenesis": [ + "org.objenesis", + "org.objenesis.instantiator", + "org.objenesis.instantiator.android", + "org.objenesis.instantiator.annotations", + "org.objenesis.instantiator.basic", + "org.objenesis.instantiator.gcj", + "org.objenesis.instantiator.perc", + "org.objenesis.instantiator.sun", + "org.objenesis.instantiator.util", + "org.objenesis.strategy" + ], + "org.ow2.asm:asm": [ + "org.objectweb.asm", + "org.objectweb.asm.signature" + ] + }, + "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.arch.core:core-common", + "androidx.arch.core:core-runtime:aar", + "androidx.autofill:autofill:aar", + "androidx.browser:browser: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.customview:customview: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-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.savedstate:savedstate-ktx:aar", + "androidx.savedstate:savedstate:aar", + "androidx.startup:startup-runtime:aar", + "androidx.tracing:tracing:aar", + "androidx.versionedparcelable:versionedparcelable:aar", + "androidx.viewpager:viewpager:aar", + "com.google.auto.service:auto-service-annotations", + "com.google.auto.value:auto-value-annotations", + "com.google.code.findbugs:jsr305", + "com.google.code.gson:gson", + "com.google.dagger:dagger", + "com.google.dagger:dagger-compiler", + "com.google.dagger:dagger-lint-aar:aar", + "com.google.dagger:dagger-producers", + "com.google.dagger:dagger-spi", + "com.google.dagger:hilt-android:aar", + "com.google.dagger:hilt-core", + "com.google.devtools.ksp:symbol-processing-api", + "com.google.errorprone:error_prone_annotations", + "com.google.errorprone:javac-shaded", + "com.google.googlejavaformat:google-java-format", + "com.google.guava:failureaccess", + "com.google.guava:guava", + "com.google.guava:guava-testlib", + "com.google.guava:listenablefuture", + "com.google.j2objc:j2objc-annotations", + "com.google.truth:truth", + "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter", + "com.jakewharton.timber:timber:aar", + "com.squareup.moshi:moshi", + "com.squareup.moshi:moshi-kotlin", + "com.squareup.moshi:moshi-kotlin-codegen", + "com.squareup.okhttp3:logging-interceptor", + "com.squareup.okhttp3:okhttp", + "com.squareup.okio:okio", + "com.squareup.okio:okio-jvm", + "com.squareup.retrofit2:retrofit", + "com.squareup:javapoet", + "com.squareup:kotlinpoet", + "com.squareup:kotlinpoet-ksp", + "javax.inject:javax.inject", + "junit:junit", + "net.bytebuddy:byte-buddy", + "net.bytebuddy:byte-buddy-agent", + "net.ltgt.gradle.incap:incap", + "org.checkerframework:checker-compat-qual", + "org.checkerframework:checker-qual", + "org.hamcrest:hamcrest-core", + "org.jetbrains.kotlin:kotlin-reflect", + "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-collections-immutable-jvm", + "org.jetbrains.kotlinx:kotlinx-coroutines-android", + "org.jetbrains.kotlinx:kotlinx-coroutines-core", + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm", + "org.jetbrains.kotlinx:kotlinx-coroutines-test", + "org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm", + "org.jetbrains.kotlinx:kotlinx-metadata-jvm", + "org.jetbrains.kotlinx:kotlinx-serialization-core", + "org.jetbrains.kotlinx:kotlinx-serialization-core-jvm", + "org.jetbrains.kotlinx:kotlinx-serialization-json", + "org.jetbrains.kotlinx:kotlinx-serialization-json-jvm", + "org.jetbrains:annotations", + "org.jsoup:jsoup", + "org.mockito:mockito-core", + "org.objenesis:objenesis", + "org.ow2.asm:asm" + ], + "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.arch.core:core-common", + "androidx.arch.core:core-runtime:aar", + "androidx.autofill:autofill:aar", + "androidx.browser:browser: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.customview:customview: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-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.savedstate:savedstate-ktx:aar", + "androidx.savedstate:savedstate:aar", + "androidx.startup:startup-runtime:aar", + "androidx.tracing:tracing:aar", + "androidx.versionedparcelable:versionedparcelable:aar", + "androidx.viewpager:viewpager:aar", + "com.google.auto.service:auto-service-annotations", + "com.google.auto.value:auto-value-annotations", + "com.google.code.findbugs:jsr305", + "com.google.code.gson:gson", + "com.google.dagger:dagger", + "com.google.dagger:dagger-compiler", + "com.google.dagger:dagger-lint-aar:aar", + "com.google.dagger:dagger-producers", + "com.google.dagger:dagger-spi", + "com.google.dagger:hilt-android:aar", + "com.google.dagger:hilt-core", + "com.google.devtools.ksp:symbol-processing-api", + "com.google.errorprone:error_prone_annotations", + "com.google.errorprone:javac-shaded", + "com.google.googlejavaformat:google-java-format", + "com.google.guava:failureaccess", + "com.google.guava:guava", + "com.google.guava:guava-testlib", + "com.google.guava:listenablefuture", + "com.google.j2objc:j2objc-annotations", + "com.google.truth:truth", + "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter", + "com.jakewharton.timber:timber:aar", + "com.squareup.moshi:moshi", + "com.squareup.moshi:moshi-kotlin", + "com.squareup.moshi:moshi-kotlin-codegen", + "com.squareup.okhttp3:logging-interceptor", + "com.squareup.okhttp3:okhttp", + "com.squareup.okio:okio", + "com.squareup.okio:okio-jvm", + "com.squareup.retrofit2:retrofit", + "com.squareup:javapoet", + "com.squareup:kotlinpoet", + "com.squareup:kotlinpoet-ksp", + "javax.inject:javax.inject", + "junit:junit", + "net.bytebuddy:byte-buddy", + "net.bytebuddy:byte-buddy-agent", + "net.ltgt.gradle.incap:incap", + "org.checkerframework:checker-compat-qual", + "org.checkerframework:checker-qual", + "org.hamcrest:hamcrest-core", + "org.jetbrains.kotlin:kotlin-reflect", + "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-collections-immutable-jvm", + "org.jetbrains.kotlinx:kotlinx-coroutines-android", + "org.jetbrains.kotlinx:kotlinx-coroutines-core", + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm", + "org.jetbrains.kotlinx:kotlinx-coroutines-test", + "org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm", + "org.jetbrains.kotlinx:kotlinx-metadata-jvm", + "org.jetbrains.kotlinx:kotlinx-serialization-core", + "org.jetbrains.kotlinx:kotlinx-serialization-core-jvm", + "org.jetbrains.kotlinx:kotlinx-serialization-json", + "org.jetbrains.kotlinx:kotlinx-serialization-json-jvm", + "org.jetbrains:annotations", + "org.jsoup:jsoup", + "org.mockito:mockito-core", + "org.objenesis:objenesis", + "org.ow2.asm:asm" + ] + }, + "services": { + "com.google.dagger:dagger-compiler": { + "javax.annotation.processing.Processor": [ + "dagger.internal.codegen.ComponentProcessor" + ] + }, + "com.squareup.moshi:moshi-kotlin-codegen": { + "com.google.devtools.ksp.processing.SymbolProcessorProvider": [ + "com.squareup.moshi.kotlin.codegen.ksp.JsonClassSymbolProcessorProvider" + ], + "com.squareup.moshi.kotlinx.metadata.internal.extensions.MetadataExtensions": [ + "com.squareup.moshi.kotlinx.metadata.jvm.internal.JvmMetadataExtensions" + ], + "javax.annotation.processing.Processor": [ + "com.squareup.moshi.kotlin.codegen.apt.JsonClassCodegenProcessor" + ] + }, + "org.jetbrains.kotlin:kotlin-reflect": { + "kotlin.reflect.jvm.internal.impl.builtins.BuiltInsLoader": [ + "kotlin.reflect.jvm.internal.impl.serialization.deserialization.builtins.BuiltInsLoaderImpl" + ], + "kotlin.reflect.jvm.internal.impl.resolve.ExternalOverridabilityCondition": [ + "kotlin.reflect.jvm.internal.impl.load.java.ErasedOverridabilityCondition", + "kotlin.reflect.jvm.internal.impl.load.java.FieldOverridabilityCondition", + "kotlin.reflect.jvm.internal.impl.load.java.JavaIncompatibilityRulesOverridabilityCondition" + ] + }, + "org.jetbrains.kotlinx:kotlinx-coroutines-android": { + "kotlinx.coroutines.CoroutineExceptionHandler": [ + "kotlinx.coroutines.android.AndroidExceptionPreHandler" + ], + "kotlinx.coroutines.internal.MainDispatcherFactory": [ + "kotlinx.coroutines.android.AndroidDispatcherFactory" + ] + }, + "org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm": { + "kotlinx.coroutines.CoroutineExceptionHandler": [ + "kotlinx.coroutines.test.internal.ExceptionCollectorAsService" + ], + "kotlinx.coroutines.internal.MainDispatcherFactory": [ + "kotlinx.coroutines.test.internal.TestMainDispatcherFactory" + ] + }, + "org.jetbrains.kotlinx:kotlinx-metadata-jvm": { + "kotlinx.metadata.impl.extensions.MetadataExtensions": [ + "kotlinx.metadata.jvm.impl.JvmMetadataExtensions" + ] + } + }, + "version": "2" +} From 5d6dd9cae7ef8ffebc577a0158744e3d454799ce Mon Sep 17 00:00:00 2001 From: raghulvelusamy Date: Mon, 12 Aug 2024 23:24:43 -0700 Subject: [PATCH 10/23] Fix storydetail --- MODULE.bazel | 14 ++++++++--- core/ui/BUILD.bazel | 13 +++-------- feature/storydetail/BUILD.bazel | 41 +++++++++++++++++++++++++++++++-- feature/storyfeed/BUILD.bazel | 13 +++++++++++ 4 files changed, 66 insertions(+), 15 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index a0a65b2..c2ed620 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -64,16 +64,15 @@ maven.install( "androidx.fragment:fragment:1.5.1", "androidx.compose.material3:material3:jar:1.2.1", "androidx.loader:loader:1.0.0", - "androidx.lifecycle:lifecycle-viewmodel:2.5.1", + "androidx.lifecycle:lifecycle-viewmodel:2.6.1", "androidx.lifecycle:lifecycle-viewmodel-savedstate:2.5.1", - "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1", "androidx.compose.ui:ui-android:1.6.0", "androidx.lifecycle:lifecycle-runtime-ktx:2.5.1", "androidx.lifecycle:lifecycle-process:2.4.1", "androidx.lifecycle:lifecycle-livedata-core:2.5.1", "androidx.collection:collection:1.0.0", "androidx.compose.material:material-ripple:1.6.0", - "androidx.compose.runtime:runtime:1.0.0", + "androidx.compose.runtime:runtime:1.6.0", "androidx.compose.material:material:1.6.8", "androidx.compose.ui:ui-graphics:1.6.0", "androidx.compose.ui:ui-text:1.6.8", @@ -90,6 +89,15 @@ maven.install( "androidx.compose.material:material-icons-core:jar:1.6.8", "io.coil-kt:coil-compose:jar:2.7.0", "androidx.compose.compiler:compiler:jar:1.5.12", + "androidx.constraintlayout:constraintlayout:jar:2.1.4", + "androidx.navigation:navigation-compose:jar:2.5.3", + "androidx.lifecycle:lifecycle-common-java8:2.5.1", + "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1", + "androidx.hilt:hilt-lifecycle-viewmodel:jar:1.0.0-alpha03", + "androidx.hilt:hilt-navigation-compose:jar:1.2.0", + "androidx.constraintlayout:constraintlayout-compose:jar:1.1.0-alpha11", + "androidx.lifecycle:lifecycle-viewmodel-compose:jar:2.6.1", + "androidx.lifecycle:lifecycle-runtime-compose:jar:2.6.1", ], repositories = [ "https://maven.google.com", diff --git a/core/ui/BUILD.bazel b/core/ui/BUILD.bazel index f79e546..2c0c620 100644 --- a/core/ui/BUILD.bazel +++ b/core/ui/BUILD.bazel @@ -22,13 +22,12 @@ kt_android_library( deps = [ "//core/model:lib", "@maven//:androidx_activity_activity_compose", - "@maven//:androidx_compose_material3_material3", + "@maven//:androidx_compose_foundation_foundation_android", + "@maven//:androidx_compose_foundation_foundation_layout", "@maven//:androidx_compose_material3_material3_android", - "@maven//:androidx_compose_material_material", - "@maven//:androidx_compose_material_material_icons_core", - "@maven//:androidx_compose_material_material_icons_core_android", "@maven//:androidx_compose_material_material_icons_extended", "@maven//:androidx_compose_runtime_runtime_android", + "@maven//:androidx_compose_ui_ui_android", "@maven//:androidx_compose_ui_ui_graphics_android", "@maven//:androidx_compose_ui_ui_text_android", "@maven//:androidx_compose_ui_ui_tooling_preview_android", @@ -36,11 +35,5 @@ kt_android_library( "@maven//:io_coil_kt_coil_base", "@maven//:io_coil_kt_coil_compose", "@maven//:io_coil_kt_coil_svg", - "@maven//:androidx_compose_ui_ui_android", - "@maven//:androidx_compose_ui_ui", - "@maven//:androidx_compose_runtime_runtime", - "@maven//:androidx_compose_foundation_foundation_layout", - "@maven//:androidx_compose_foundation_foundation_android", - "@maven//:androidx_compose_foundation_foundation", ], ) diff --git a/feature/storydetail/BUILD.bazel b/feature/storydetail/BUILD.bazel index 2b30931..d9e94a5 100644 --- a/feature/storydetail/BUILD.bazel +++ b/feature/storydetail/BUILD.bazel @@ -1,14 +1,51 @@ load("@rules_kotlin//kotlin:android.bzl", "kt_android_library") +load("@rules_kotlin//kotlin:core.bzl", "kt_compiler_plugin") + +kt_compiler_plugin( + name = "jetpack_compose_compiler_plugin", + id = "androidx.compose.compiler", + target_embedded_compiler = True, + visibility = ["//visibility:public"], + deps = [ + "@maven//:androidx_compose_compiler_compiler", + ], +) kt_android_library( name = "lib", - srcs = glob(["**/*.kt"]), + srcs = glob(["src/main/**/*.kt"]), custom_package = "co.adrianblan.storydetail", manifest = "src/main/AndroidManifest.xml", - resource_files = glob(["res/**"]), + plugins = [":jetpack_compose_compiler_plugin"], + resource_files = glob(["src/main/res/**"]), visibility = ["//visibility:public"], deps = [ + "//core/domain:lib", "//core/hackernews:lib", + "//core/ui:lib", "//core/webpreview:lib", + "@maven//:androidx_activity_activity_compose", + "@maven//:androidx_compose_animation_animation_core", + "@maven//:androidx_compose_animation_animation_core_android", + "@maven//:androidx_compose_foundation_foundation", + "@maven//:androidx_compose_foundation_foundation_android", + "@maven//:androidx_compose_foundation_foundation_layout", + "@maven//:androidx_compose_material3_material3", + "@maven//:androidx_compose_material3_material3_android", + "@maven//:androidx_compose_material_material_icons_extended", + "@maven//:androidx_compose_ui_ui", + "@maven//:androidx_compose_ui_ui_android", + "@maven//:androidx_compose_ui_ui_geometry", + "@maven//:androidx_compose_ui_ui_graphics_android", + "@maven//:androidx_compose_ui_ui_text_android", + "@maven//:androidx_compose_ui_ui_tooling_preview", + "@maven//:androidx_compose_ui_ui_tooling_preview_android", + "@maven//:androidx_constraintlayout_constraintlayout", + "@maven//:androidx_constraintlayout_constraintlayout_compose", + "@maven//:androidx_hilt_hilt_lifecycle_viewmodel", + "@maven//:androidx_hilt_hilt_navigation_compose", + "@maven//:androidx_lifecycle_lifecycle_runtime_compose", + "@maven//:androidx_lifecycle_lifecycle_viewmodel_ktx", + "@maven//:androidx_navigation_navigation_compose", ], ) diff --git a/feature/storyfeed/BUILD.bazel b/feature/storyfeed/BUILD.bazel index 016281b..eaefd08 100644 --- a/feature/storyfeed/BUILD.bazel +++ b/feature/storyfeed/BUILD.bazel @@ -1,4 +1,15 @@ load("@rules_kotlin//kotlin:android.bzl", "kt_android_library") +load("@rules_kotlin//kotlin:core.bzl", "kt_compiler_plugin") + +kt_compiler_plugin( + name = "jetpack_compose_compiler_plugin", + id = "androidx.compose.compiler", + target_embedded_compiler = True, + visibility = ["//visibility:public"], + deps = [ + "@maven//:androidx_compose_compiler_compiler", + ], +) kt_android_library( name = "lib", @@ -12,3 +23,5 @@ kt_android_library( "//core/webpreview:lib", ], ) +], +) From d237b4e9ee8d339fda95bc908edee49eec5c79c1 Mon Sep 17 00:00:00 2001 From: raghulvelusamy Date: Mon, 12 Aug 2024 23:30:51 -0700 Subject: [PATCH 11/23] Fix all features code. Pending test targets --- feature/storydetail/BUILD.bazel | 1 + feature/storyfeed/BUILD.bazel | 19 +++++++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/feature/storydetail/BUILD.bazel b/feature/storydetail/BUILD.bazel index d9e94a5..13d1347 100644 --- a/feature/storydetail/BUILD.bazel +++ b/feature/storydetail/BUILD.bazel @@ -46,6 +46,7 @@ kt_android_library( "@maven//:androidx_hilt_hilt_navigation_compose", "@maven//:androidx_lifecycle_lifecycle_runtime_compose", "@maven//:androidx_lifecycle_lifecycle_viewmodel_ktx", + "@maven//:androidx_navigation_navigation_common", "@maven//:androidx_navigation_navigation_compose", ], ) diff --git a/feature/storyfeed/BUILD.bazel b/feature/storyfeed/BUILD.bazel index eaefd08..c981a1e 100644 --- a/feature/storyfeed/BUILD.bazel +++ b/feature/storyfeed/BUILD.bazel @@ -13,15 +13,26 @@ kt_compiler_plugin( kt_android_library( name = "lib", - srcs = glob(["**/*.kt"]), + srcs = glob(["src/main/**/*.kt"]), custom_package = "co.adrianblan.storyfeed", manifest = "src/main/AndroidManifest.xml", - resource_files = glob(["res/**"]), + plugins = [":jetpack_compose_compiler_plugin"], + resource_files = glob(["src/main/res/**"]), visibility = ["//visibility:public"], deps = [ + "//core/domain:lib", "//core/hackernews:lib", + "//core/ui:lib", "//core/webpreview:lib", + "@maven//:androidx_activity_activity_compose", + "@maven//:androidx_compose_material3_material3", + "@maven//:androidx_compose_material3_material3_android", + "@maven//:androidx_compose_ui_ui", + "@maven//:androidx_compose_ui_ui_android", + "@maven//:androidx_compose_ui_ui_tooling_preview", + "@maven//:androidx_compose_ui_ui_tooling_preview_android", + "@maven//:androidx_hilt_hilt_lifecycle_viewmodel", + "@maven//:androidx_hilt_hilt_navigation_compose", + "@maven//:androidx_lifecycle_lifecycle_runtime_compose", ], ) -], -) From 54ccec35413539a869b4514e09124c4ffc300723 Mon Sep 17 00:00:00 2001 From: raghulvelusamy Date: Tue, 13 Aug 2024 09:44:53 -0700 Subject: [PATCH 12/23] Fix all features code. Pending test targets --- app/src/main/java/co/adrianblan/cheddar/BuildConfig.kt | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 app/src/main/java/co/adrianblan/cheddar/BuildConfig.kt diff --git a/app/src/main/java/co/adrianblan/cheddar/BuildConfig.kt b/app/src/main/java/co/adrianblan/cheddar/BuildConfig.kt new file mode 100644 index 0000000..d208b70 --- /dev/null +++ b/app/src/main/java/co/adrianblan/cheddar/BuildConfig.kt @@ -0,0 +1,4 @@ +package co.adrianblan.cheddar + +class BuildConfig { +} \ No newline at end of file From 5631a173eebc61f3490f6771cd741d6dd462db77 Mon Sep 17 00:00:00 2001 From: raghulvelusamy Date: Tue, 13 Aug 2024 09:47:19 -0700 Subject: [PATCH 13/23] Everything other than test targets --- MODULE.bazel | 3 +- app/BUILD.bazel | 28 +++++++++++++++++++ .../java/co/adrianblan/cheddar/BuildConfig.kt | 4 ++- core/domain/src/AndroidManifest.xml | 2 +- core/domain/src/main/AndroidManifest.xml | 2 +- core/hackernews/AndroidManifest.xml | 2 +- core/hackernews/src/main/AndroidManifest.xml | 2 +- core/ui/src/main/AndroidManifest.xml | 2 +- 8 files changed, 38 insertions(+), 7 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index c2ed620..a0d8b53 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -58,7 +58,7 @@ maven.install( "com.squareup.moshi:moshi-kotlin-codegen:jar:1.15.1", "org.jetbrains.kotlinx:kotlinx-coroutines-test:1.8.1", "androidx.browser:browser:jar:1.5.0", - "androidx.activity:activity:1.5.1", + "androidx.activity:activity:1.8.0-alpha06", "androidx.activity:activity-compose:1.5.1", "androidx.activity:activity-ktx:1.5.1", "androidx.fragment:fragment:1.5.1", @@ -98,6 +98,7 @@ maven.install( "androidx.constraintlayout:constraintlayout-compose:jar:1.1.0-alpha11", "androidx.lifecycle:lifecycle-viewmodel-compose:jar:2.6.1", "androidx.lifecycle:lifecycle-runtime-compose:jar:2.6.1", + "androidx.core:core-splashscreen:jar:1.2.0-alpha01", ], repositories = [ "https://maven.google.com", diff --git a/app/BUILD.bazel b/app/BUILD.bazel index e69de29..03b135a 100644 --- a/app/BUILD.bazel +++ b/app/BUILD.bazel @@ -0,0 +1,28 @@ +load("@rules_kotlin//kotlin:android.bzl", "kt_android_library") +load("@rules_kotlin//kotlin:core.bzl", "kt_compiler_plugin") + +kt_compiler_plugin( + name = "jetpack_compose_compiler_plugin", + id = "androidx.compose.compiler", + target_embedded_compiler = True, + visibility = ["//visibility:public"], + deps = [ + "@maven//:androidx_compose_compiler_compiler", + ], +) + +kt_android_library( + name = "lib", + srcs = glob(["**/*.kt"]), + custom_package = "co.adrianblan.webpreview", + manifest = "src/main/AndroidManifest.xml", + plugins = [":jetpack_compose_compiler_plugin"], + resource_files = glob(["res/**"]), + visibility = ["//visibility:public"], + deps = [ + "//feature/storydetail:lib", + "//feature/storyfeed:lib", + "@maven//:androidx_activity_activity", + "@maven//:androidx_core_core_splashscreen", + ], +) diff --git a/app/src/main/java/co/adrianblan/cheddar/BuildConfig.kt b/app/src/main/java/co/adrianblan/cheddar/BuildConfig.kt index d208b70..9da3d72 100644 --- a/app/src/main/java/co/adrianblan/cheddar/BuildConfig.kt +++ b/app/src/main/java/co/adrianblan/cheddar/BuildConfig.kt @@ -1,4 +1,6 @@ package co.adrianblan.cheddar -class BuildConfig { +object BuildConfig { + + const val DEBUG: Boolean = true } \ No newline at end of file diff --git a/core/domain/src/AndroidManifest.xml b/core/domain/src/AndroidManifest.xml index def4a4c..070a38a 100644 --- a/core/domain/src/AndroidManifest.xml +++ b/core/domain/src/AndroidManifest.xml @@ -4,6 +4,6 @@ android:versionName="1.0" > diff --git a/core/domain/src/main/AndroidManifest.xml b/core/domain/src/main/AndroidManifest.xml index def4a4c..070a38a 100644 --- a/core/domain/src/main/AndroidManifest.xml +++ b/core/domain/src/main/AndroidManifest.xml @@ -4,6 +4,6 @@ android:versionName="1.0" > diff --git a/core/hackernews/AndroidManifest.xml b/core/hackernews/AndroidManifest.xml index 222fd10..19b4528 100644 --- a/core/hackernews/AndroidManifest.xml +++ b/core/hackernews/AndroidManifest.xml @@ -4,7 +4,7 @@ android:versionName="1.0" > diff --git a/core/hackernews/src/main/AndroidManifest.xml b/core/hackernews/src/main/AndroidManifest.xml index 222fd10..19b4528 100644 --- a/core/hackernews/src/main/AndroidManifest.xml +++ b/core/hackernews/src/main/AndroidManifest.xml @@ -4,7 +4,7 @@ android:versionName="1.0" > diff --git a/core/ui/src/main/AndroidManifest.xml b/core/ui/src/main/AndroidManifest.xml index f84f53a..2e03ffb 100644 --- a/core/ui/src/main/AndroidManifest.xml +++ b/core/ui/src/main/AndroidManifest.xml @@ -4,7 +4,7 @@ android:versionName="1.0" > From f5a6675bbdf7e076fb577b616911ba75cf1b7857 Mon Sep 17 00:00:00 2001 From: raghulvelusamy Date: Tue, 13 Aug 2024 10:43:37 -0700 Subject: [PATCH 14/23] Fix one test target --- MODULE.bazel | 2 ++ feature/storyfeed/BUILD.bazel | 18 ++++++++++++++++++ .../adrianblan/storyfeed/PagingTransformer.kt | 4 ++-- .../adrianblan/storyfeed/StoryFeedViewModel.kt | 4 ++-- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index a0d8b53..76af639 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -99,6 +99,8 @@ maven.install( "androidx.lifecycle:lifecycle-viewmodel-compose:jar:2.6.1", "androidx.lifecycle:lifecycle-runtime-compose:jar:2.6.1", "androidx.core:core-splashscreen:jar:1.2.0-alpha01", + "app.cash.turbine:turbine-jvm:jar:1.1.0", + "org.jetbrains.kotlin:kotlin-test:jar:2.0.0", ], repositories = [ "https://maven.google.com", diff --git a/feature/storyfeed/BUILD.bazel b/feature/storyfeed/BUILD.bazel index c981a1e..32f7e1e 100644 --- a/feature/storyfeed/BUILD.bazel +++ b/feature/storyfeed/BUILD.bazel @@ -1,5 +1,6 @@ load("@rules_kotlin//kotlin:android.bzl", "kt_android_library") load("@rules_kotlin//kotlin:core.bzl", "kt_compiler_plugin") +load("@rules_kotlin//kotlin:jvm.bzl", "kt_jvm_test") kt_compiler_plugin( name = "jetpack_compose_compiler_plugin", @@ -36,3 +37,20 @@ kt_android_library( "@maven//:androidx_lifecycle_lifecycle_runtime_compose", ], ) + +# TODO figure out how to expose internal values to test target. Friends is not an option for kt_android_library target type +kt_jvm_test( + name = "test", + srcs = glob(["src/test/**/*.kt"]), + visibility = ["//visibility:public"], + deps = [ + ":lib", + "//core/common:lib", + "//core/domain:lib", + "//core/hackernews:lib", + "//core/testing:lib", + "@maven//:app_cash_turbine_turbine_jvm", + "@maven//:org_jetbrains_kotlin_kotlin_test", + "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_test_jvm", + ], +) diff --git a/feature/storyfeed/src/main/java/co/adrianblan/storyfeed/PagingTransformer.kt b/feature/storyfeed/src/main/java/co/adrianblan/storyfeed/PagingTransformer.kt index 310dd4d..1a3fc48 100644 --- a/feature/storyfeed/src/main/java/co/adrianblan/storyfeed/PagingTransformer.kt +++ b/feature/storyfeed/src/main/java/co/adrianblan/storyfeed/PagingTransformer.kt @@ -41,7 +41,7 @@ internal fun StateFlow.observePages( * and returns a flow of content for all pages. */ @VisibleForTesting -internal fun StateFlow.transformPaginationChunks(): Flow> { +fun StateFlow.transformPaginationChunks(): Flow> { val pageIndexFlow = this @@ -111,7 +111,7 @@ internal fun List.takePage(pageIndex: PageIndex, pageSize: Int): List * Eg [1, [A]], [2, [B]], [1, [AA]] emits [A], [A, B], [AA, B] */ @VisibleForTesting -internal fun Flow>>.mergePages(): Flow> = +fun Flow>>.mergePages(): Flow> = this.scan(sortedMapOf>()) { map, (pageIndex: PageIndex, value: List) -> map[pageIndex] = value map diff --git a/feature/storyfeed/src/main/java/co/adrianblan/storyfeed/StoryFeedViewModel.kt b/feature/storyfeed/src/main/java/co/adrianblan/storyfeed/StoryFeedViewModel.kt index 6f84129..2a20015 100644 --- a/feature/storyfeed/src/main/java/co/adrianblan/storyfeed/StoryFeedViewModel.kt +++ b/feature/storyfeed/src/main/java/co/adrianblan/storyfeed/StoryFeedViewModel.kt @@ -87,12 +87,12 @@ class StoryFeedViewModel @Inject constructor( ) ) - internal fun onStoryTypeChanged(storyType: StoryType) { + fun onStoryTypeChanged(storyType: StoryType) { pageIndexFlow.tryEmit(0) savedStateHandle[KEY_STORY_TYPE] = storyType } - internal fun onPageEndReached() { + fun onPageEndReached() { val state = viewState.value.storyFeedState if (state is StoryFeedState.Success) { val newPageIndex = state.stories.size / PAGE_SIZE From 24b2aa6994fb28b2410a20e475d427f654ff9ee2 Mon Sep 17 00:00:00 2001 From: raghulvelusamy Date: Tue, 13 Aug 2024 10:57:24 -0700 Subject: [PATCH 15/23] Fix test targets --- BUILD.bazel | 48 +------------------ feature/storydetail/BUILD.bazel | 17 +++++++ .../storydetail/StoryDetailNavigation.kt | 4 +- feature/storyfeed/BUILD.bazel | 2 +- .../storyfeed/StoryFeedViewModel.kt | 2 +- 5 files changed, 22 insertions(+), 51 deletions(-) diff --git a/BUILD.bazel b/BUILD.bazel index 6b79df4..a32a974 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -1,37 +1,4 @@ -load( - "@io_bazel_rules_kotlin//kotlin:core.bzl", - "define_kt_toolchain", - "kt_compiler_plugin", - "kt_kotlinc_options", -) -load( - "@io_bazel_rules_kotlin//kotlin:jvm.bzl", - "kt_javac_options", - "kt_jvm_import", -) - -# Kotlin Toolchain - -kt_kotlinc_options( - name = "kt_kotlinc_options", -) - -kt_javac_options( - name = "kt_javac_options", -) - -define_kt_toolchain( - name = "kotlin_toolchain", - api_version = "1.6", - experimental_use_abi_jars = True, - javac_options = "//:kt_javac_options", - jvm_target = "1.8", - kotlinc_options = "//:kt_kotlinc_options", - language_version = "1.6", -) - -# Define the compose compiler plugin -# Used by referencing //:jetpack_compose_compiler_plugin +load("@rules_kotlin//kotlin:core.bzl", "kt_compiler_plugin") kt_compiler_plugin( name = "jetpack_compose_compiler_plugin", @@ -42,16 +9,3 @@ kt_compiler_plugin( "@maven//:androidx_compose_compiler_compiler", ], ) - -# Add missing 'sun.misc' files to coroutines artifact -# Used in 'override_targets' by referencing @//:kotlinx_coroutines_core_jvm -kt_jvm_import( - name = "kotlinx_coroutines_core_jvm", - jars = ["@maven_secondary//:v1/https/repo1.maven.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-core-jvm/1.6.1/kotlinx-coroutines-core-jvm-1.6.1.jar"], - srcjar = "@maven_secondary//:v1/https/repo1.maven.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-core-jvm/1.6.1/kotlinx-coroutines-core-jvm-1.6.1-sources.jar", - visibility = ["//visibility:public"], - deps = [ - "//stub:sun_misc", - "@maven//:org_jetbrains_kotlin_kotlin_stdlib", - ], -) diff --git a/feature/storydetail/BUILD.bazel b/feature/storydetail/BUILD.bazel index 13d1347..7b05a15 100644 --- a/feature/storydetail/BUILD.bazel +++ b/feature/storydetail/BUILD.bazel @@ -1,5 +1,6 @@ load("@rules_kotlin//kotlin:android.bzl", "kt_android_library") load("@rules_kotlin//kotlin:core.bzl", "kt_compiler_plugin") +load("@rules_kotlin//kotlin:jvm.bzl", "kt_jvm_test") kt_compiler_plugin( name = "jetpack_compose_compiler_plugin", @@ -50,3 +51,19 @@ kt_android_library( "@maven//:androidx_navigation_navigation_compose", ], ) + +kt_jvm_test( + name = "test", + srcs = glob(["src/test/**/java/**/*.kt"]), + visibility = ["//visibility:public"], + deps = [ + ":lib", + "//core/common:lib", + "//core/domain:lib", + "//core/hackernews:lib", + "//core/testing:lib", + "@maven//:app_cash_turbine_turbine_jvm", + "@maven//:org_jetbrains_kotlin_kotlin_test", + "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_test_jvm", + ], +) diff --git a/feature/storydetail/src/main/java/co/adrianblan/storydetail/StoryDetailNavigation.kt b/feature/storydetail/src/main/java/co/adrianblan/storydetail/StoryDetailNavigation.kt index 211a1bc..08a5740 100644 --- a/feature/storydetail/src/main/java/co/adrianblan/storydetail/StoryDetailNavigation.kt +++ b/feature/storydetail/src/main/java/co/adrianblan/storydetail/StoryDetailNavigation.kt @@ -14,13 +14,13 @@ import co.adrianblan.storydetail.ui.StoryDetailRoute internal const val storyIdArg = "storyId" -internal class StoryDetailArgs(val storyId: StoryId) { +class StoryDetailArgs(val storyId: StoryId) { constructor(savedStateHandle: SavedStateHandle) : this(StoryId(savedStateHandle[storyIdArg]!!)) } @VisibleForTesting -internal fun StoryDetailArgs.toSavedStateHandle() = +fun StoryDetailArgs.toSavedStateHandle() = SavedStateHandle(mapOf(storyIdArg to this.storyId.id)) fun NavController.navigateToTopic(storyId: StoryId) { diff --git a/feature/storyfeed/BUILD.bazel b/feature/storyfeed/BUILD.bazel index 32f7e1e..4b7370d 100644 --- a/feature/storyfeed/BUILD.bazel +++ b/feature/storyfeed/BUILD.bazel @@ -41,7 +41,7 @@ kt_android_library( # TODO figure out how to expose internal values to test target. Friends is not an option for kt_android_library target type kt_jvm_test( name = "test", - srcs = glob(["src/test/**/*.kt"]), + srcs = glob(["src/test/**/java/**/*.kt"]), visibility = ["//visibility:public"], deps = [ ":lib", diff --git a/feature/storyfeed/src/main/java/co/adrianblan/storyfeed/StoryFeedViewModel.kt b/feature/storyfeed/src/main/java/co/adrianblan/storyfeed/StoryFeedViewModel.kt index 2a20015..e876bfa 100644 --- a/feature/storyfeed/src/main/java/co/adrianblan/storyfeed/StoryFeedViewModel.kt +++ b/feature/storyfeed/src/main/java/co/adrianblan/storyfeed/StoryFeedViewModel.kt @@ -87,7 +87,7 @@ class StoryFeedViewModel @Inject constructor( ) ) - fun onStoryTypeChanged(storyType: StoryType) { + internal fun onStoryTypeChanged(storyType: StoryType) { pageIndexFlow.tryEmit(0) savedStateHandle[KEY_STORY_TYPE] = storyType } From acc232f02c749bbcea2639c03c085ead9dbd9e8a Mon Sep 17 00:00:00 2001 From: raghulvelusamy Date: Tue, 13 Aug 2024 18:54:24 -0700 Subject: [PATCH 16/23] Remove redundant declarations --- app/BUILD.bazel | 13 +------------ core/ui/BUILD.bazel | 13 +------------ feature/storyfeed/BUILD.bazel | 13 +------------ 3 files changed, 3 insertions(+), 36 deletions(-) diff --git a/app/BUILD.bazel b/app/BUILD.bazel index 03b135a..57a3a49 100644 --- a/app/BUILD.bazel +++ b/app/BUILD.bazel @@ -1,22 +1,11 @@ load("@rules_kotlin//kotlin:android.bzl", "kt_android_library") -load("@rules_kotlin//kotlin:core.bzl", "kt_compiler_plugin") - -kt_compiler_plugin( - name = "jetpack_compose_compiler_plugin", - id = "androidx.compose.compiler", - target_embedded_compiler = True, - visibility = ["//visibility:public"], - deps = [ - "@maven//:androidx_compose_compiler_compiler", - ], -) kt_android_library( name = "lib", srcs = glob(["**/*.kt"]), custom_package = "co.adrianblan.webpreview", manifest = "src/main/AndroidManifest.xml", - plugins = [":jetpack_compose_compiler_plugin"], + plugins = ["//:jetpack_compose_compiler_plugin"], resource_files = glob(["res/**"]), visibility = ["//visibility:public"], deps = [ diff --git a/core/ui/BUILD.bazel b/core/ui/BUILD.bazel index 2c0c620..9abcd49 100644 --- a/core/ui/BUILD.bazel +++ b/core/ui/BUILD.bazel @@ -1,22 +1,11 @@ load("@rules_kotlin//kotlin:android.bzl", "kt_android_library") -load("@rules_kotlin//kotlin:core.bzl", "kt_compiler_plugin") - -kt_compiler_plugin( - name = "jetpack_compose_compiler_plugin", - id = "androidx.compose.compiler", - target_embedded_compiler = True, - visibility = ["//visibility:public"], - deps = [ - "@maven//:androidx_compose_compiler_compiler", - ], -) kt_android_library( name = "lib", srcs = glob(["src/main/java/**/*.kt"]), custom_package = "co.adrianblan.ui", manifest = "src/main/AndroidManifest.xml", - plugins = [":jetpack_compose_compiler_plugin"], + plugins = ["//:jetpack_compose_compiler_plugin"], resource_files = glob(["src/main/res/**"]), visibility = ["//visibility:public"], deps = [ diff --git a/feature/storyfeed/BUILD.bazel b/feature/storyfeed/BUILD.bazel index 4b7370d..e5da22f 100644 --- a/feature/storyfeed/BUILD.bazel +++ b/feature/storyfeed/BUILD.bazel @@ -1,23 +1,12 @@ load("@rules_kotlin//kotlin:android.bzl", "kt_android_library") -load("@rules_kotlin//kotlin:core.bzl", "kt_compiler_plugin") load("@rules_kotlin//kotlin:jvm.bzl", "kt_jvm_test") -kt_compiler_plugin( - name = "jetpack_compose_compiler_plugin", - id = "androidx.compose.compiler", - target_embedded_compiler = True, - visibility = ["//visibility:public"], - deps = [ - "@maven//:androidx_compose_compiler_compiler", - ], -) - kt_android_library( name = "lib", srcs = glob(["src/main/**/*.kt"]), custom_package = "co.adrianblan.storyfeed", manifest = "src/main/AndroidManifest.xml", - plugins = [":jetpack_compose_compiler_plugin"], + plugins = ["//:jetpack_compose_compiler_plugin"], resource_files = glob(["src/main/res/**"]), visibility = ["//visibility:public"], deps = [ From b2d2d0313362b7b3bf75b78ca0756c149877f49f Mon Sep 17 00:00:00 2001 From: raghulvelusamy Date: Tue, 13 Aug 2024 18:57:29 -0700 Subject: [PATCH 17/23] Fix all --- core/ui/BUILD.bazel | 1 + 1 file changed, 1 insertion(+) diff --git a/core/ui/BUILD.bazel b/core/ui/BUILD.bazel index 9abcd49..1a6099e 100644 --- a/core/ui/BUILD.bazel +++ b/core/ui/BUILD.bazel @@ -20,6 +20,7 @@ kt_android_library( "@maven//:androidx_compose_ui_ui_graphics_android", "@maven//:androidx_compose_ui_ui_text_android", "@maven//:androidx_compose_ui_ui_tooling_preview_android", + "@maven//:androidx_core_core_splashscreen", "@maven//:io_coil_kt_coil", "@maven//:io_coil_kt_coil_base", "@maven//:io_coil_kt_coil_compose", From c44268d8f72f3dbe9593b08dd9a7b6133e956246 Mon Sep 17 00:00:00 2001 From: raghulvelusamy Date: Fri, 23 Aug 2024 13:54:28 -0700 Subject: [PATCH 18/23] Add all --- .bazelrc | 3 +- .bazelversion | 2 +- .editorconfig | 6 + BUILD.bazel | 14 ++ MODULE.bazel | 17 +- app/BUILD.bazel | 38 +++- app/src/main/AndroidManifest.xml | 3 +- core/hackernews/BUILD.bazel | 14 +- core/testing/BUILD.bazel | 3 +- feature/storydetail/BUILD.bazel | 38 ++-- feature/storydetail/build.gradle.kts | 1 + .../storydetail/src/main/AndroidManifest.xml | 11 +- .../storydetail/StoryDetailNavigation.kt | 6 +- .../storydetail/StoryDetailViewModelTest.kt | 214 +++++++++--------- feature/storyfeed/BUILD.bazel | 10 +- .../storyfeed/src/main/AndroidManifest.xml | 10 +- .../adrianblan/storyfeed/PagingTransformer.kt | 6 +- .../storyfeed/StoryFeedViewModel.kt | 4 +- .../co/adrianblan/storyfeed/PagingTest.kt | 26 ++- .../storyfeed/StoryFeedViewModelTest.kt | 7 +- gradle/libs.versions.toml | 1 + some/AndroidManifest.xml | 7 + some/BUILD.bazel | 14 ++ some/MODULE.bazel | 31 +++ some/SparseArraySetTest.java | 25 ++ some/WORKSPACE | 55 +++++ some/WORKSPACE.bzlmod | 1 + some2/BUILD.bazel | 59 +++++ some2/res/values/strings.xml | 3 + some2/res2/values/strings.xml | 3 + some2/src/main/AndroidManifest.xml | 8 + .../main/java/examples/android/lib/Data.kt | 6 + .../examples/android/lib/DataJsonModel.kt | 6 + .../java/examples/android/lib/MainActivity.kt | 33 +++ .../java/examples/android/lib/TestKtValue.kt | 21 ++ .../examples/android/lib/AndroidManifest.xml | 8 + .../java/examples/android/lib/BUILD.bazel | 13 ++ .../java/examples/android/lib/SomeTest.kt | 15 ++ 38 files changed, 571 insertions(+), 171 deletions(-) create mode 100644 .editorconfig create mode 100644 some/AndroidManifest.xml create mode 100644 some/BUILD.bazel create mode 100644 some/MODULE.bazel create mode 100644 some/SparseArraySetTest.java create mode 100644 some/WORKSPACE create mode 100644 some/WORKSPACE.bzlmod create mode 100644 some2/BUILD.bazel create mode 100644 some2/res/values/strings.xml create mode 100644 some2/res2/values/strings.xml create mode 100644 some2/src/main/AndroidManifest.xml create mode 100644 some2/src/main/java/examples/android/lib/Data.kt create mode 100644 some2/src/main/java/examples/android/lib/DataJsonModel.kt create mode 100644 some2/src/main/java/examples/android/lib/MainActivity.kt create mode 100644 some2/src/main/java/examples/android/lib/TestKtValue.kt create mode 100644 some2/src/test/java/examples/android/lib/AndroidManifest.xml create mode 100644 some2/src/test/java/examples/android/lib/BUILD.bazel create mode 100644 some2/src/test/java/examples/android/lib/SomeTest.kt diff --git a/.bazelrc b/.bazelrc index e17323f..b35f2de 100644 --- a/.bazelrc +++ b/.bazelrc @@ -7,4 +7,5 @@ common:core_library_desugaring --desugar_java8_libs # Flags to enable mobile-install v3 mobile-install --mode=skylark --mobile_install_aspect=@rules_android//mobile_install:mi.bzl --mobile_install_supported_rules=android_binary # Required to invoke the Studio deployer jar -mobile-install --tool_java_runtime_version=17 \ No newline at end of file +mobile-install --tool_java_runtime_version=17 +--javacopt="-J-Xms8G -J-Xmx8G" diff --git a/.bazelversion b/.bazelversion index 468c41f..00bc581 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -7.2.1 \ No newline at end of file +8.0.0-pre.20240730.1 \ No newline at end of file diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..162b39c --- /dev/null +++ b/.editorconfig @@ -0,0 +1,6 @@ +[*.{kt, kts}] +indent_size = 2 +insert_final_newline = true +max_line_length = 100 +ij_kotlin_allow_trailing_comma = true +ij_kotlin_allow_trailing_comma_on_call_site = true \ No newline at end of file diff --git a/BUILD.bazel b/BUILD.bazel index a32a974..6534fe0 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -1,4 +1,5 @@ load("@rules_kotlin//kotlin:core.bzl", "kt_compiler_plugin") +load("@rules_kotlin//kotlin:lint.bzl", "ktlint_config", "ktlint_fix", "ktlint_test") kt_compiler_plugin( name = "jetpack_compose_compiler_plugin", @@ -9,3 +10,16 @@ kt_compiler_plugin( "@maven//:androidx_compose_compiler_compiler", ], ) + +filegroup( + name = "editorconfig", + srcs = [".editorconfig"], +) + +ktlint_config( + name = "ktlint_editorconfig", + android_rules_enabled = False, + editorconfig = ":editorconfig", + experimental_rules_enabled = False, + visibility = ["//visibility:public"], +) diff --git a/MODULE.bazel b/MODULE.bazel index 76af639..c8c4b91 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -9,11 +9,21 @@ bazel_dep( version = "1.3.0", ) +bazel_dep( + name = "rules_robolectric", + version = "4.13", +) + bazel_dep( name = "rules_jvm_external", version = "6.2", ) +bazel_dep( + name = "rules_java", + version = "7.9.0", +) + bazel_dep( name = "rules_android", version = "0.5.1", @@ -38,10 +48,12 @@ register_toolchains("@androidsdk//:sdk-toolchain", "@androidsdk//:all") maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven") maven.install( + aar_import_bzl_label = "@rules_android//rules:rules.bzl", artifacts = [ "org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.4", "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3", "org.jetbrains.kotlinx:kotlinx-serialization-core:1.5.1", + "org.jetbrains.kotlinx:kotlinx-serialization-runtime:jar:1.0-M1-1.4.0-rc", "org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1", "org.jsoup:jsoup:1.16.1", "junit:junit:4.13.2", @@ -79,7 +91,6 @@ maven.install( "androidx.compose.ui:ui-unit:1.6.0", "androidx.compose.ui:ui-util:1.0.0", "androidx.compose.ui:ui-geometry:1.6.0", - "androidx.compose.ui:ui:1.0.0", "androidx.compose.ui:ui-tooling:1.6.8", "androidx.lifecycle:lifecycle-common:2.5.1", "androidx.lifecycle:lifecycle-runtime:2.5.1", @@ -101,11 +112,15 @@ maven.install( "androidx.core:core-splashscreen:jar:1.2.0-alpha01", "app.cash.turbine:turbine-jvm:jar:1.1.0", "org.jetbrains.kotlin:kotlin-test:jar:2.0.0", + "org.robolectric:robolectric:4.13", + "com.google.truth:truth:1.1.3", + "com.google.auto.value:auto-value:jar:1.11.0", ], repositories = [ "https://maven.google.com", "https://repo1.maven.org/maven2", ], + use_starlark_android_rules = True, version_conflict_policy = "pinned", ) diff --git a/app/BUILD.bazel b/app/BUILD.bazel index 57a3a49..68ac041 100644 --- a/app/BUILD.bazel +++ b/app/BUILD.bazel @@ -1,17 +1,51 @@ +load("@rules_android//android:rules.bzl", "android_binary") load("@rules_kotlin//kotlin:android.bzl", "kt_android_library") +load("@rules_kotlin//kotlin:lint.bzl", "ktlint_fix", "ktlint_test") kt_android_library( name = "lib", srcs = glob(["**/*.kt"]), - custom_package = "co.adrianblan.webpreview", + custom_package = "co.adrianblan.cheddar", manifest = "src/main/AndroidManifest.xml", plugins = ["//:jetpack_compose_compiler_plugin"], - resource_files = glob(["res/**"]), + resource_files = glob(["src/main/res/**/*"]), visibility = ["//visibility:public"], + exports = [ + "//core/ui:lib", + "@maven//:androidx_core_core_splashscreen", + ], + deps = [ + "//feature/storydetail:lib", + "//feature/storyfeed:lib", + "@maven//:androidx_activity_activity", + ], +) + +android_binary( + name = "app2", + custom_package = "co.adrianblan.cheddar", + manifest = "src/main/AndroidManifest.xml", + manifest_values = { + "lib_name": "lib_base", + }, deps = [ + ":lib_base", + ":lib_kt", "//feature/storydetail:lib", "//feature/storyfeed:lib", "@maven//:androidx_activity_activity", "@maven//:androidx_core_core_splashscreen", ], ) + +ktlint_fix( + name = "lint_fix", + srcs = glob(["**/*.kt"]), + config = "//:ktlint_editorconfig", +) + +ktlint_test( + name = "lint_test", + srcs = glob(["**/*.kt"]), + config = "//:ktlint_editorconfig", +) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f63d73b..1eb644b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,7 @@ + xmlns:android="http://schemas.android.com/apk/res/android" + package = "co.adrianblan.cheddar"> diff --git a/core/hackernews/BUILD.bazel b/core/hackernews/BUILD.bazel index 27ac978..d7d7afd 100644 --- a/core/hackernews/BUILD.bazel +++ b/core/hackernews/BUILD.bazel @@ -1,16 +1,6 @@ load("@rules_kotlin//kotlin:android.bzl", "kt_android_library") load("@rules_kotlin//kotlin:core.bzl", "kt_compiler_plugin", "kt_ksp_plugin") -kt_ksp_plugin( - name = "moshi-kotlin-codegen", - processor_class = "com.squareup.moshi.kotlin.codegen.ksp.JsonClassSymbolProcessorProvider", - deps = [ - "@maven//:com_squareup_moshi_moshi", - "@maven//:com_squareup_moshi_moshi_kotlin", - "@maven//:com_squareup_moshi_moshi_kotlin_codegen", - ], -) - kt_compiler_plugin( name = "serialization_plugin", compile_phase = True, @@ -40,7 +30,7 @@ kt_android_library( "@maven//:com_squareup_retrofit2_retrofit", "@maven//:org_jetbrains_kotlinx_kotlinx_collections_immutable_jvm", "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_android", - "@maven//:org_jetbrains_kotlinx_kotlinx_serialization_core_1_5_1", - "@maven//:org_jetbrains_kotlinx_kotlinx_serialization_json_1_5_1", + "@maven//:org_jetbrains_kotlinx_kotlinx_serialization_core", + "@maven//:org_jetbrains_kotlinx_kotlinx_serialization_json", ], ) diff --git a/core/testing/BUILD.bazel b/core/testing/BUILD.bazel index 7e4bf05..b1f1abd 100644 --- a/core/testing/BUILD.bazel +++ b/core/testing/BUILD.bazel @@ -3,8 +3,10 @@ load("@rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") kt_jvm_library( name = "lib", srcs = glob(["**/*.kt"]), + visibility = ["//visibility:public"], deps = [ "//core/common:lib", + "@maven//:androidx_lifecycle_lifecycle_viewmodel_savedstate", "@maven//:junit_junit", "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_android", "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_core", @@ -12,5 +14,4 @@ kt_jvm_library( "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_test", "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_test_jvm", ], - visibility = ["//visibility:public"], ) diff --git a/feature/storydetail/BUILD.bazel b/feature/storydetail/BUILD.bazel index 7b05a15..d872fa7 100644 --- a/feature/storydetail/BUILD.bazel +++ b/feature/storydetail/BUILD.bazel @@ -1,23 +1,13 @@ -load("@rules_kotlin//kotlin:android.bzl", "kt_android_library") -load("@rules_kotlin//kotlin:core.bzl", "kt_compiler_plugin") +load("@rules_android//android:rules.bzl", "android_local_test") +load("@rules_kotlin//kotlin:android.bzl", "kt_android_library", "kt_android_local_test") load("@rules_kotlin//kotlin:jvm.bzl", "kt_jvm_test") -kt_compiler_plugin( - name = "jetpack_compose_compiler_plugin", - id = "androidx.compose.compiler", - target_embedded_compiler = True, - visibility = ["//visibility:public"], - deps = [ - "@maven//:androidx_compose_compiler_compiler", - ], -) - kt_android_library( name = "lib", srcs = glob(["src/main/**/*.kt"]), custom_package = "co.adrianblan.storydetail", manifest = "src/main/AndroidManifest.xml", - plugins = [":jetpack_compose_compiler_plugin"], + plugins = ["//:jetpack_compose_compiler_plugin"], resource_files = glob(["src/main/res/**"]), visibility = ["//visibility:public"], deps = [ @@ -34,7 +24,6 @@ kt_android_library( "@maven//:androidx_compose_material3_material3", "@maven//:androidx_compose_material3_material3_android", "@maven//:androidx_compose_material_material_icons_extended", - "@maven//:androidx_compose_ui_ui", "@maven//:androidx_compose_ui_ui_android", "@maven//:androidx_compose_ui_ui_geometry", "@maven//:androidx_compose_ui_ui_graphics_android", @@ -49,12 +38,25 @@ kt_android_library( "@maven//:androidx_lifecycle_lifecycle_viewmodel_ktx", "@maven//:androidx_navigation_navigation_common", "@maven//:androidx_navigation_navigation_compose", + "@maven//:org_robolectric_annotations", + "@maven//:org_robolectric_junit", + "@maven//:org_robolectric_nativeruntime", + "@maven//:org_robolectric_nativeruntime_dist_compat", + "@maven//:org_robolectric_pluginapi", + "@maven//:org_robolectric_robolectric", + "@maven//:org_robolectric_utils", + "@maven//:org_robolectric_utils_reflector", ], ) -kt_jvm_test( +kt_android_local_test( name = "test", - srcs = glob(["src/test/**/java/**/*.kt"]), + srcs = glob([ + "src/test/java/**/*.kt", + ]), + associates = [":lib_kt"], + manifest = "src/main/AndroidManifest.xml", + test_class = "co.adrianblan.storydetail.StoryDetailViewModelTest", visibility = ["//visibility:public"], deps = [ ":lib", @@ -63,7 +65,9 @@ kt_jvm_test( "//core/hackernews:lib", "//core/testing:lib", "@maven//:app_cash_turbine_turbine_jvm", + "@maven//:com_google_truth_truth", + "@maven//:junit_junit", "@maven//:org_jetbrains_kotlin_kotlin_test", - "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_test_jvm", + "@rules_robolectric//bazel:android-all", ], ) diff --git a/feature/storydetail/build.gradle.kts b/feature/storydetail/build.gradle.kts index 6c8e933..ce81c2e 100644 --- a/feature/storydetail/build.gradle.kts +++ b/feature/storydetail/build.gradle.kts @@ -10,4 +10,5 @@ android { dependencies { implementation(project(":core:hackernews")) implementation(project(":core:webpreview")) + api(libs.robo) } \ No newline at end of file diff --git a/feature/storydetail/src/main/AndroidManifest.xml b/feature/storydetail/src/main/AndroidManifest.xml index 9b65eb0..00a5007 100644 --- a/feature/storydetail/src/main/AndroidManifest.xml +++ b/feature/storydetail/src/main/AndroidManifest.xml @@ -1 +1,10 @@ - + + + + + diff --git a/feature/storydetail/src/main/java/co/adrianblan/storydetail/StoryDetailNavigation.kt b/feature/storydetail/src/main/java/co/adrianblan/storydetail/StoryDetailNavigation.kt index 08a5740..5bd0cb8 100644 --- a/feature/storydetail/src/main/java/co/adrianblan/storydetail/StoryDetailNavigation.kt +++ b/feature/storydetail/src/main/java/co/adrianblan/storydetail/StoryDetailNavigation.kt @@ -14,13 +14,13 @@ import co.adrianblan.storydetail.ui.StoryDetailRoute internal const val storyIdArg = "storyId" -class StoryDetailArgs(val storyId: StoryId) { +internal class StoryDetailArgs(val storyId: StoryId) { constructor(savedStateHandle: SavedStateHandle) : this(StoryId(savedStateHandle[storyIdArg]!!)) } @VisibleForTesting -fun StoryDetailArgs.toSavedStateHandle() = +internal fun StoryDetailArgs.toSavedStateHandle() = SavedStateHandle(mapOf(storyIdArg to this.storyId.id)) fun NavController.navigateToTopic(storyId: StoryId) { @@ -46,4 +46,4 @@ fun NavGraphBuilder.storyDetailScreen( onBackPressed = onBackPressed ) } -} \ No newline at end of file +} diff --git a/feature/storydetail/src/test/java/co/adrianblan/storydetail/StoryDetailViewModelTest.kt b/feature/storydetail/src/test/java/co/adrianblan/storydetail/StoryDetailViewModelTest.kt index c0a62a1..e198c16 100644 --- a/feature/storydetail/src/test/java/co/adrianblan/storydetail/StoryDetailViewModelTest.kt +++ b/feature/storydetail/src/test/java/co/adrianblan/storydetail/StoryDetailViewModelTest.kt @@ -1,7 +1,7 @@ package co.adrianblan.storydetail +import android.util.SparseArray import app.cash.turbine.test -import co.adrianblan.common.AsyncResource import co.adrianblan.domain.DecoratedStory import co.adrianblan.domain.StoryPreviewUseCase import co.adrianblan.hackernews.FakeHackerNewsRepository @@ -14,6 +14,7 @@ import co.adrianblan.model.StoryType import co.adrianblan.model.placeholderLink import co.adrianblan.testing.CoroutineTestRule import co.adrianblan.testing.delayAndThrow +import junit.framework.TestCase.assertEquals import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.flow.Flow @@ -23,117 +24,120 @@ import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Rule import org.junit.Test -import kotlin.test.assertEquals +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config import kotlin.test.assertIs import kotlin.time.Duration.Companion.seconds - +@RunWith(RobolectricTestRunner::class) +@Config(sdk = [Config.ALL_SDKS]) class StoryDetailViewModelTest { - @get:Rule - val coroutineRule = CoroutineTestRule() - - private lateinit var storyDetailViewModel: StoryDetailViewModel - - object TestStoryPreviewUseCase : StoryPreviewUseCase { - override fun observeDecoratedStory(storyId: StoryId): Flow = - flowOf(DecoratedStory(story = Story.placeholderLink, webPreviewState = null)) - } - - @Before - fun setUp() { - buildViewModel() + @get:Rule + val coroutineRule = CoroutineTestRule() + + private lateinit var storyDetailViewModel: StoryDetailViewModel + + object TestStoryPreviewUseCase : StoryPreviewUseCase { + override fun observeDecoratedStory(storyId: StoryId): Flow = + flowOf(DecoratedStory(story = Story.placeholderLink, webPreviewState = null)) + } + + @Before + fun setUp() { + buildViewModel() + } + + private fun buildViewModel( + hackerNewsRepository: HackerNewsRepository = FakeHackerNewsRepository(responseDelay = 1.seconds), + ) { + storyDetailViewModel = StoryDetailViewModel( + StoryDetailArgs(StoryId(1)).toSavedStateHandle(), + dispatcherProvider = coroutineRule.testDispatcherProvider, + hackerNewsRepository = hackerNewsRepository, + storyPreviewUseCase = TestStoryPreviewUseCase, + ) + } + + @Test + fun testInitialState() = runTest { + assertIs(storyDetailViewModel.viewState.value) + } + + @Test + fun testEmptySuccessStory() = runTest { + buildViewModel( + FakeHackerNewsRepository( + story = Story.placeholderLink.copy(kids = persistentListOf()), + responseDelay = 1.seconds, + ), + ) + storyDetailViewModel.viewState + .test { + assertIs(this.awaitItem()) + var item = this.awaitItem() + assertIs(item) + assertIs(item.commentsState) + item = this.awaitItem() + assertIs(item) + assertIs(item.commentsState) + cancelAndIgnoreRemainingEvents() + } + } + + @Test + fun testSuccessStory() = runTest { + + val numComments = 10 + + buildViewModel( + FakeHackerNewsRepository( + story = Story.placeholderLink.copy(kids = List(numComments) { CommentId(it.toLong()) }.toImmutableList()), + responseDelay = 1.seconds, + ), + ) + storyDetailViewModel.viewState + .test { + assertIs(this.awaitItem()) + + var item = this.awaitItem() + assertIs(item) + assertIs(item.commentsState) + item = this.awaitItem() + assertIs(item) + val commentsState = item.commentsState + assertIs(commentsState) + assertEquals(numComments, commentsState.comments.size) + cancelAndIgnoreRemainingEvents() + } + } + + @Test + fun testStoriesError() { + + val evilDelay = 1.seconds + + val evilHackerNewsRepository = object : HackerNewsRepository { + override suspend fun fetchStory(storyId: StoryId): Story = + delayAndThrow(evilDelay) + + override suspend fun fetchStoryIds(storyType: StoryType): List = + delayAndThrow(evilDelay) + + override suspend fun fetchComment(commentId: CommentId): Comment = + delayAndThrow(evilDelay) } - private fun buildViewModel( - hackerNewsRepository: HackerNewsRepository = FakeHackerNewsRepository(responseDelay = 1.seconds) - ) { - storyDetailViewModel = StoryDetailViewModel( - StoryDetailArgs(StoryId(1)).toSavedStateHandle(), - dispatcherProvider = coroutineRule.testDispatcherProvider, - hackerNewsRepository = hackerNewsRepository, - storyPreviewUseCase = TestStoryPreviewUseCase - ) - } - - @Test - fun testInitialState() = runTest { - assertIs(storyDetailViewModel.viewState.value) - } - - @Test - fun testEmptySuccessStory() = runTest { - buildViewModel( - FakeHackerNewsRepository( - story = Story.placeholderLink.copy(kids = persistentListOf()), - responseDelay = 1.seconds - ) - ) - storyDetailViewModel.viewState - .test { - assertIs(this.awaitItem()) - var item = this.awaitItem() - assertIs(item) - assertIs(item.commentsState) - item = this.awaitItem() - assertIs(item) - assertIs(item.commentsState) - cancelAndIgnoreRemainingEvents() - } - } - - @Test - fun testSuccessStory() = runTest { - - val numComments = 10 - - buildViewModel( - FakeHackerNewsRepository( - story = Story.placeholderLink.copy(kids = List(numComments) { CommentId(it.toLong()) }.toImmutableList()), - responseDelay = 1.seconds - ) - ) - storyDetailViewModel.viewState - .test { - assertIs(this.awaitItem()) - - var item = this.awaitItem() - assertIs(item) - assertIs(item.commentsState) - item = this.awaitItem() - assertIs(item) - val commentsState = item.commentsState - assertIs(commentsState) - assertEquals(numComments, commentsState.comments.size) - cancelAndIgnoreRemainingEvents() - } - } - - @Test - fun testStoriesError() { - - val evilDelay = 1.seconds - - val evilHackerNewsRepository = object : HackerNewsRepository { - override suspend fun fetchStory(storyId: StoryId): Story = - delayAndThrow(evilDelay) - - override suspend fun fetchStoryIds(storyType: StoryType): List = - delayAndThrow(evilDelay) - - override suspend fun fetchComment(commentId: CommentId): Comment = - delayAndThrow(evilDelay) - } - - buildViewModel(evilHackerNewsRepository) + buildViewModel(evilHackerNewsRepository) - runTest { - storyDetailViewModel.viewState - .test { - assertIs(awaitItem()) - assertIs(awaitItem()) - } - assert(this.isActive) + runTest { + storyDetailViewModel.viewState + .test { + assertIs(awaitItem()) + assertIs(awaitItem()) } + assert(this.isActive) } -} \ No newline at end of file + } +} diff --git a/feature/storyfeed/BUILD.bazel b/feature/storyfeed/BUILD.bazel index e5da22f..237ff60 100644 --- a/feature/storyfeed/BUILD.bazel +++ b/feature/storyfeed/BUILD.bazel @@ -1,4 +1,4 @@ -load("@rules_kotlin//kotlin:android.bzl", "kt_android_library") +load("@rules_kotlin//kotlin:android.bzl", "kt_android_library", "kt_android_local_test") load("@rules_kotlin//kotlin:jvm.bzl", "kt_jvm_test") kt_android_library( @@ -17,7 +17,6 @@ kt_android_library( "@maven//:androidx_activity_activity_compose", "@maven//:androidx_compose_material3_material3", "@maven//:androidx_compose_material3_material3_android", - "@maven//:androidx_compose_ui_ui", "@maven//:androidx_compose_ui_ui_android", "@maven//:androidx_compose_ui_ui_tooling_preview", "@maven//:androidx_compose_ui_ui_tooling_preview_android", @@ -27,10 +26,11 @@ kt_android_library( ], ) -# TODO figure out how to expose internal values to test target. Friends is not an option for kt_android_library target type -kt_jvm_test( +kt_android_local_test( name = "test", srcs = glob(["src/test/**/java/**/*.kt"]), + associates = [":lib_kt"], + test_class = "co.adrianblan.storydetail.StoryDetailViewModelTest", visibility = ["//visibility:public"], deps = [ ":lib", @@ -40,6 +40,6 @@ kt_jvm_test( "//core/testing:lib", "@maven//:app_cash_turbine_turbine_jvm", "@maven//:org_jetbrains_kotlin_kotlin_test", - "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_test_jvm", + "@rules_robolectric//bazel:android-all", ], ) diff --git a/feature/storyfeed/src/main/AndroidManifest.xml b/feature/storyfeed/src/main/AndroidManifest.xml index 9b65eb0..cd05f6d 100644 --- a/feature/storyfeed/src/main/AndroidManifest.xml +++ b/feature/storyfeed/src/main/AndroidManifest.xml @@ -1 +1,9 @@ - + + + + diff --git a/feature/storyfeed/src/main/java/co/adrianblan/storyfeed/PagingTransformer.kt b/feature/storyfeed/src/main/java/co/adrianblan/storyfeed/PagingTransformer.kt index 1a3fc48..180ca1a 100644 --- a/feature/storyfeed/src/main/java/co/adrianblan/storyfeed/PagingTransformer.kt +++ b/feature/storyfeed/src/main/java/co/adrianblan/storyfeed/PagingTransformer.kt @@ -41,7 +41,7 @@ internal fun StateFlow.observePages( * and returns a flow of content for all pages. */ @VisibleForTesting -fun StateFlow.transformPaginationChunks(): Flow> { +internal fun StateFlow.transformPaginationChunks(): Flow> { val pageIndexFlow = this @@ -111,7 +111,7 @@ internal fun List.takePage(pageIndex: PageIndex, pageSize: Int): List * Eg [1, [A]], [2, [B]], [1, [AA]] emits [A], [A, B], [AA, B] */ @VisibleForTesting -fun Flow>>.mergePages(): Flow> = +internal fun Flow>>.mergePages(): Flow> = this.scan(sortedMapOf>()) { map, (pageIndex: PageIndex, value: List) -> map[pageIndex] = value map @@ -120,4 +120,4 @@ fun Flow>>.mergePages(): Flow> = .drop(1) .map { it.values.flatten() - } \ No newline at end of file + } diff --git a/feature/storyfeed/src/main/java/co/adrianblan/storyfeed/StoryFeedViewModel.kt b/feature/storyfeed/src/main/java/co/adrianblan/storyfeed/StoryFeedViewModel.kt index e876bfa..b772e00 100644 --- a/feature/storyfeed/src/main/java/co/adrianblan/storyfeed/StoryFeedViewModel.kt +++ b/feature/storyfeed/src/main/java/co/adrianblan/storyfeed/StoryFeedViewModel.kt @@ -92,7 +92,7 @@ class StoryFeedViewModel @Inject constructor( savedStateHandle[KEY_STORY_TYPE] = storyType } - fun onPageEndReached() { + internal fun onPageEndReached() { val state = viewState.value.storyFeedState if (state is StoryFeedState.Success) { val newPageIndex = state.stories.size / PAGE_SIZE @@ -104,4 +104,4 @@ class StoryFeedViewModel @Inject constructor( private const val KEY_STORY_TYPE = "storyType" private const val PAGE_SIZE = 20 } -} \ No newline at end of file +} diff --git a/feature/storyfeed/src/test/java/co/adrianblan/storyfeed/PagingTest.kt b/feature/storyfeed/src/test/java/co/adrianblan/storyfeed/PagingTest.kt index df16788..38ae021 100644 --- a/feature/storyfeed/src/test/java/co/adrianblan/storyfeed/PagingTest.kt +++ b/feature/storyfeed/src/test/java/co/adrianblan/storyfeed/PagingTest.kt @@ -7,19 +7,21 @@ import kotlinx.coroutines.flow.toList import kotlinx.coroutines.test.runTest import org.junit.Assert.assertEquals import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.JUnit4 -class PagingTest { +@RunWith(JUnit4::class) +class PagingTest1 { - - @Test - fun testChunksSimple() = runTest { - val flow = MutableStateFlow(0) - flow.transformPaginationChunks().test { - assertEquals(listOf(0), this.awaitItem()) - flow.value = 1 - assertEquals(listOf(1), this.awaitItem()) - } - } +// @Test +// fun testChunksSimple() = runTest { +// val flow = MutableStateFlow(0) +// flow.transformPaginationChunks().test { +// assertEquals(listOf(0), this.awaitItem()) +// flow.value = 1 +// assertEquals(listOf(1), this.awaitItem()) +// } +// } @Test fun testChunksSkipped() = runTest { @@ -90,4 +92,4 @@ class PagingTest { // Different containers, same contents assertEquals(expected.toString(), result.toString()) } -} \ No newline at end of file +} diff --git a/feature/storyfeed/src/test/java/co/adrianblan/storyfeed/StoryFeedViewModelTest.kt b/feature/storyfeed/src/test/java/co/adrianblan/storyfeed/StoryFeedViewModelTest.kt index 6bc47e5..60ba661 100644 --- a/feature/storyfeed/src/test/java/co/adrianblan/storyfeed/StoryFeedViewModelTest.kt +++ b/feature/storyfeed/src/test/java/co/adrianblan/storyfeed/StoryFeedViewModelTest.kt @@ -2,7 +2,6 @@ package co.adrianblan.storyfeed import androidx.lifecycle.SavedStateHandle import app.cash.turbine.test -import co.adrianblan.common.AsyncResource import co.adrianblan.domain.DecoratedStory import co.adrianblan.domain.StoryPreviewUseCase import co.adrianblan.hackernews.FakeHackerNewsRepository @@ -24,11 +23,13 @@ import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Rule import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.JUnit4 import kotlin.test.assertEquals import kotlin.test.assertIs import kotlin.time.Duration.Companion.seconds - +@RunWith(JUnit4::class) class StoryFeedViewModelTest { @get:Rule @@ -142,4 +143,4 @@ class StoryFeedViewModelTest { cancelAndIgnoreRemainingEvents() } } -} \ No newline at end of file +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 91d2118..4631f93 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -86,6 +86,7 @@ turbine = { group = "app.cash.turbine", name = "turbine", version.ref = "turbine androidx-core-test = { group = "androidx.arch.core", name = "core-testing", version.ref = "androidxCoreTesting" } junit = { group = "junit", name = "junit", version.ref = "junit" } +robo = { group = 'org.robolectric', name = 'robolectric', version = '4.13' } android-gradleplugin = { group = "com.android.tools.build", name = "gradle", version.ref = "androidGradlePlugin" } kotlin-gradleplugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" } diff --git a/some/AndroidManifest.xml b/some/AndroidManifest.xml new file mode 100644 index 0000000..5ae4879 --- /dev/null +++ b/some/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/some/BUILD.bazel b/some/BUILD.bazel new file mode 100644 index 0000000..c9599ea --- /dev/null +++ b/some/BUILD.bazel @@ -0,0 +1,14 @@ +load("@rules_android//android:rules.bzl", "android_local_test") + +android_local_test( + name = "SparseArraySetTest", + srcs = ["SparseArraySetTest.java"], + custom_package = "org.robolectric.integrationtests.sparsearray", + test_class = "org.robolectric.integrationtests.sparsearray.SparseArraySetTest", + deps = [ + "@maven//:com_google_truth_truth", + "@maven//:org_robolectric_annotations", + "@maven//:org_robolectric_robolectric", + "@rules_robolectric//bazel:android-all", + ], +) diff --git a/some/MODULE.bazel b/some/MODULE.bazel new file mode 100644 index 0000000..8d48d3d --- /dev/null +++ b/some/MODULE.bazel @@ -0,0 +1,31 @@ +module( + name = "rules_robolectric_examples_bzlmod", + version = "TODO", +) + +# I don't think this bazel_dep version actually matters because it's being overriden by the local_path_override. +bazel_dep(name = "rules_robolectric", version = "1", repo_name = "robolectric") +local_path_override( + module_name = "rules_robolectric", + path = "../..", +) + +bazel_dep(name = "platforms", version = "0.0.6") +bazel_dep(name = "rules_android", version = "0.1.1") +bazel_dep(name = "rules_jvm_external", version = "5.3") + +maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven") +maven.install( + artifacts = [ + "com.google.truth:truth:1.1.3", + "org.robolectric:robolectric:4.13", + ], + repositories = [ + "https://maven.google.com", + "https://repo1.maven.org/maven2", + ], +) +use_repo(maven, "maven") + +remote_android_extensions = use_extension("@bazel_tools//tools/android:android_extensions.bzl", "remote_android_tools_extensions") +use_repo(remote_android_extensions, "android_gmaven_r8", "android_tools") diff --git a/some/SparseArraySetTest.java b/some/SparseArraySetTest.java new file mode 100644 index 0000000..f82946f --- /dev/null +++ b/some/SparseArraySetTest.java @@ -0,0 +1,25 @@ +package org.robolectric.integrationtests.sparsearray; + +import android.util.SparseArray; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.annotation.Config; + +import static com.google.common.truth.Truth.assertThat; + +@RunWith(RobolectricTestRunner.class) +@Config(sdk = Config.ALL_SDKS) +public class SparseArraySetTest { + + @Test + public void testSparseArrayBracketOperator_callsSetMethodPreApi31() { + // Setup + final SparseArray sparseArray = new SparseArray<>(); + sparseArray.set(0, "Blizzard"); + sparseArray.set(1, "Blizzara"); + // Assertions + assertThat(sparseArray.get(0)).isEqualTo("Blizzard"); + assertThat(sparseArray.get(1)).isEqualTo("Blizzara"); + } +} diff --git a/some/WORKSPACE b/some/WORKSPACE new file mode 100644 index 0000000..6ec1902 --- /dev/null +++ b/some/WORKSPACE @@ -0,0 +1,55 @@ +workspace(name = "robolectric-simple-example") + +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +local_repository( + name = "robolectric", + path = "../../", +) + +http_archive( + name = "bazel_skylib", + sha256 = "c6966ec828da198c5d9adbaa94c05e3a1c7f21bd012a0b29ba8ddbccb2c93b0d", + urls = ["https://github.com/bazelbuild/bazel-skylib/releases/download/1.1.1/bazel-skylib-1.1.1.tar.gz"], +) + +load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace") + +bazel_skylib_workspace() + +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"], +) + +load("@rules_android//android:rules.bzl", "android_sdk_repository") + +android_sdk_repository(name = "androidsdk") + +#---SNIP--- Below here is re-used in the workspace snippet published on releases +load("@robolectric//bazel:robolectric.bzl", "robolectric_repositories") + +robolectric_repositories() + +http_archive( + name = "rules_jvm_external", + sha256 = "d31e369b854322ca5098ea12c69d7175ded971435e55c18dd9dd5f29cc5249ac", + strip_prefix = "rules_jvm_external-5.3", + url = "https://github.com/bazelbuild/rules_jvm_external/releases/download/5.3/rules_jvm_external-5.3.tar.gz", +) + +load("@rules_jvm_external//:defs.bzl", "maven_install") + +maven_install( + name = "maven", + artifacts = [ + "com.google.truth:truth:1.1.3", + "org.robolectric:robolectric:4.13", + ], + repositories = [ + "https://maven.google.com", + "https://repo1.maven.org/maven2", + ], +) diff --git a/some/WORKSPACE.bzlmod b/some/WORKSPACE.bzlmod new file mode 100644 index 0000000..9cc43bb --- /dev/null +++ b/some/WORKSPACE.bzlmod @@ -0,0 +1 @@ +android_sdk_repository(name = "androidsdk") diff --git a/some2/BUILD.bazel b/some2/BUILD.bazel new file mode 100644 index 0000000..8a4d02c --- /dev/null +++ b/some2/BUILD.bazel @@ -0,0 +1,59 @@ +load("@rules_java//java:defs.bzl", "java_plugin") +load("@rules_kotlin//kotlin:android.bzl", "kt_android_library") +load("@rules_kotlin//kotlin:core.bzl", "kt_compiler_plugin", "kt_ksp_plugin") + +kt_compiler_plugin( + name = "serialization_plugin", + compile_phase = True, + id = "org.jetbrains.kotlin.serialization", + stubs_phase = True, + deps = [ + "@rules_kotlin//kotlin/compiler:kotlinx-serialization-compiler-plugin", + ], +) + +java_plugin( + name = "autovalue", + generates_api = 1, + processor_class = "com.google.auto.value.processor.AutoValueProcessor", + deps = ["@maven//:com_google_auto_value_auto_value"], +) + +kt_ksp_plugin( + name = "moshi-kotlin-codegen", + processor_class = "com.squareup.moshi.kotlin.codegen.ksp.JsonClassSymbolProcessorProvider", + deps = [ + "@maven//:com_squareup_moshi_moshi", + "@maven//:com_squareup_moshi_moshi_kotlin", + "@maven//:com_squareup_moshi_moshi_kotlin_codegen", + ], +) + +kt_android_library( + name = "my_kt", + srcs = glob(["src/main/java/**/*.kt"]), + custom_package = "examples.android.lib", + manifest = "src/main/AndroidManifest.xml", + plugins = [ + ":moshi-kotlin-codegen", + ":serialization_plugin", + ":autovalue", + ], + resource_files = glob(["res/**"]), + tags = ["trace"], + visibility = ["//visibility:public"], + deps = [ + ":res2", + "@maven//:androidx_appcompat_appcompat", + "@maven//:com_google_auto_value_auto_value_annotations", + "@maven//:com_squareup_moshi_moshi", + "@maven//:org_jetbrains_kotlinx_kotlinx_serialization_runtime", + ], +) + +android_library( + name = "res2", + custom_package = "examples.android.lib", + manifest = "src/main/AndroidManifest.xml", + resource_files = glob(["res2/**"]), +) diff --git a/some2/res/values/strings.xml b/some2/res/values/strings.xml new file mode 100644 index 0000000..4438981 --- /dev/null +++ b/some2/res/values/strings.xml @@ -0,0 +1,3 @@ + + Where you at? + diff --git a/some2/res2/values/strings.xml b/some2/res2/values/strings.xml new file mode 100644 index 0000000..d659243 --- /dev/null +++ b/some2/res2/values/strings.xml @@ -0,0 +1,3 @@ + + hello? + diff --git a/some2/src/main/AndroidManifest.xml b/some2/src/main/AndroidManifest.xml new file mode 100644 index 0000000..c31b018 --- /dev/null +++ b/some2/src/main/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + diff --git a/some2/src/main/java/examples/android/lib/Data.kt b/some2/src/main/java/examples/android/lib/Data.kt new file mode 100644 index 0000000..88f81ee --- /dev/null +++ b/some2/src/main/java/examples/android/lib/Data.kt @@ -0,0 +1,6 @@ +package examples.android.lib + +import kotlinx.serialization.Serializable + +@Serializable +data class Data(val stringValue: String, val intValue: Int) diff --git a/some2/src/main/java/examples/android/lib/DataJsonModel.kt b/some2/src/main/java/examples/android/lib/DataJsonModel.kt new file mode 100644 index 0000000..7b2ba61 --- /dev/null +++ b/some2/src/main/java/examples/android/lib/DataJsonModel.kt @@ -0,0 +1,6 @@ +package examples.android.lib + +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) +data class DataJsonModel(val data: String) diff --git a/some2/src/main/java/examples/android/lib/MainActivity.kt b/some2/src/main/java/examples/android/lib/MainActivity.kt new file mode 100644 index 0000000..ed0b474 --- /dev/null +++ b/some2/src/main/java/examples/android/lib/MainActivity.kt @@ -0,0 +1,33 @@ +package examples.android.lib + +import androidx.appcompat.app.AlertDialog +import android.os.Bundle +import android.widget.Button +import android.widget.LinearLayout +import android.widget.LinearLayout.LayoutParams +import androidx.appcompat.app.AppCompatActivity +import com.squareup.moshi.Moshi + +class MainActivity : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val parent = LinearLayout(this).apply { + orientation = LinearLayout.VERTICAL + }.also { it.addView(Button(this).apply { text = "Foo!" }) } + setContentView(parent, LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)) + AlertDialog.Builder(this) + .setTitle(this.getString(R.string.where_you_at)) + .setMessage("Blah blah blah? " + getString(R.string.hello)) + .show() + // Ensure Serialization plugin has run and generated code correctly. + Data.serializer() + + val adapter = DataJsonModelJsonAdapter(Moshi.Builder().build()) + println(adapter.toJson(DataJsonModel("foo"))) + + TestKtValue.create { + setName("Auto Value Test") // can't use property syntax, because autovalue builder's codegen + } + } +} diff --git a/some2/src/main/java/examples/android/lib/TestKtValue.kt b/some2/src/main/java/examples/android/lib/TestKtValue.kt new file mode 100644 index 0000000..c25528c --- /dev/null +++ b/some2/src/main/java/examples/android/lib/TestKtValue.kt @@ -0,0 +1,21 @@ +package examples.android.lib + +import com.google.auto.value.AutoValue + +@AutoValue +abstract class TestKtValue { + abstract fun name(): String + internal fun nameInternal() = "${name()}_internal" + + @AutoValue.Builder + abstract class Builder { + abstract fun setName(name: String): Builder + abstract fun build(): TestKtValue + } + companion object { + fun create(builderFunction: Builder.() -> Unit) = AutoValue_TestKtValue.Builder().also { + builderFunction.invoke(it) + }.build() + } + +} diff --git a/some2/src/test/java/examples/android/lib/AndroidManifest.xml b/some2/src/test/java/examples/android/lib/AndroidManifest.xml new file mode 100644 index 0000000..c31b018 --- /dev/null +++ b/some2/src/test/java/examples/android/lib/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + diff --git a/some2/src/test/java/examples/android/lib/BUILD.bazel b/some2/src/test/java/examples/android/lib/BUILD.bazel new file mode 100644 index 0000000..8620434 --- /dev/null +++ b/some2/src/test/java/examples/android/lib/BUILD.bazel @@ -0,0 +1,13 @@ +load("@rules_kotlin//kotlin:android.bzl", "kt_android_local_test") + +kt_android_local_test( + name = "SomeTest", + srcs = ["SomeTest.kt"], + associates = ["//some2:my_kt_kt"], + custom_package = "examples.android.lib", + manifest = "AndroidManifest.xml", + deps = [ + "@maven//:junit_junit", + "@robolectric//bazel:android-all", + ], +) diff --git a/some2/src/test/java/examples/android/lib/SomeTest.kt b/some2/src/test/java/examples/android/lib/SomeTest.kt new file mode 100644 index 0000000..39b3cd8 --- /dev/null +++ b/some2/src/test/java/examples/android/lib/SomeTest.kt @@ -0,0 +1,15 @@ +package examples.android.lib + +import org.junit.Assert.assertEquals +import org.junit.Test + +class SomeTest { + + @Test + fun someTest() { + val value = TestKtValue.create { + setName("foo") + } + assertEquals("foo_internal", value.nameInternal()) + } +} From 5024c7290faf96dd075e0ab61b6da690b79eb602 Mon Sep 17 00:00:00 2001 From: raghulvelusamy Date: Mon, 9 Sep 2024 21:12:10 -0700 Subject: [PATCH 19/23] Test infinity --- MODULE.bazel | 64 ++++++++++++++----- app/BUILD.bazel | 28 ++++---- core/ui/BUILD.bazel | 8 +++ core/ui/src/main/AndroidManifest.xml | 2 +- feature/storyfeed/BUILD.bazel | 34 +++++----- some/AndroidManifest.xml | 7 -- some/BUILD.bazel | 14 ---- some/MODULE.bazel | 31 --------- some/SparseArraySetTest.java | 25 -------- some/WORKSPACE | 55 ---------------- some/WORKSPACE.bzlmod | 1 - some2/BUILD.bazel | 59 ----------------- some2/res/values/strings.xml | 3 - some2/res2/values/strings.xml | 3 - some2/src/main/AndroidManifest.xml | 8 --- .../main/java/examples/android/lib/Data.kt | 6 -- .../examples/android/lib/DataJsonModel.kt | 6 -- .../java/examples/android/lib/MainActivity.kt | 33 ---------- .../java/examples/android/lib/TestKtValue.kt | 21 ------ .../examples/android/lib/AndroidManifest.xml | 8 --- .../java/examples/android/lib/BUILD.bazel | 13 ---- .../java/examples/android/lib/SomeTest.kt | 15 ----- 22 files changed, 87 insertions(+), 357 deletions(-) delete mode 100644 some/AndroidManifest.xml delete mode 100644 some/BUILD.bazel delete mode 100644 some/MODULE.bazel delete mode 100644 some/SparseArraySetTest.java delete mode 100644 some/WORKSPACE delete mode 100644 some/WORKSPACE.bzlmod delete mode 100644 some2/BUILD.bazel delete mode 100644 some2/res/values/strings.xml delete mode 100644 some2/res2/values/strings.xml delete mode 100644 some2/src/main/AndroidManifest.xml delete mode 100644 some2/src/main/java/examples/android/lib/Data.kt delete mode 100644 some2/src/main/java/examples/android/lib/DataJsonModel.kt delete mode 100644 some2/src/main/java/examples/android/lib/MainActivity.kt delete mode 100644 some2/src/main/java/examples/android/lib/TestKtValue.kt delete mode 100644 some2/src/test/java/examples/android/lib/AndroidManifest.xml delete mode 100644 some2/src/test/java/examples/android/lib/BUILD.bazel delete mode 100644 some2/src/test/java/examples/android/lib/SomeTest.kt diff --git a/MODULE.bazel b/MODULE.bazel index c8c4b91..80aef0a 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -6,22 +6,28 @@ use_repo(remote_android_extensions, "android_gmaven_r8", "android_tools") bazel_dep( name = "bazel_skylib", - version = "1.3.0", + version = "1.7.1", ) +#bazel_dep(name = "rules_robolectric", version = "4.10.3", repo_name = "robolectric") bazel_dep( - name = "rules_robolectric", - version = "4.13", + name = "rules_java", + version = "7.7.2", ) bazel_dep( - name = "rules_jvm_external", - version = "6.2", + name = "platforms", + version = "0.0.10", ) +#bazel_dep( +# name = "bazel_skylib", +# version = "1.3.0", +#) + bazel_dep( - name = "rules_java", - version = "7.9.0", + name = "rules_robolectric", + version = "4.13", ) bazel_dep( @@ -29,26 +35,49 @@ bazel_dep( version = "0.5.1", ) +#archive_override( +# module_name = "rules_android", +# integrity = "sha256-6nNroqvGU3/bKC5o9cevMmXOcJbSDu3L5KDr2EGyndE=", +# strip_prefix = "rules_android-7a876c3d55bc43a696143ef1da069f9dff79e2c0", +# urls = ["https://github.com/bazelbuild/rules_android/archive/7a876c3d55bc43a696143ef1da069f9dff79e2c0.tar.gz"], +#) + +#remote_android_extensions = use_extension("@bazel_tools//tools/android:android_extensions.bzl", "remote_android_tools_extensions") +# +#use_repo(remote_android_extensions, "android_gmaven_r8", "android_tools") + bazel_dep( name = "rules_kotlin", version = "1.9.6", ) -register_toolchains( - "@rules_android//toolchains/android:android_default_toolchain", - "@rules_android//toolchains/android_sdk:android_sdk_tools", -) - -android_sdk_repository_extension = use_extension("@rules_android//rules/android_sdk_repository:rule.bzl", "android_sdk_repository_extension") +#register_toolchains( +# "@rules_android//toolchains/android:android_default_toolchain", +# "@rules_android//toolchains/android_sdk:android_sdk_tools", +#) +# +#android_sdk_repository_extension = use_extension("@rules_android//rules/android_sdk_repository:rule.bzl", "android_sdk_repository_extension") +# +#use_repo(android_sdk_repository_extension, "androidsdk") +# +#register_toolchains("@androidsdk//:sdk-toolchain", "@androidsdk//:all") -use_repo(android_sdk_repository_extension, "androidsdk") +bazel_dep( + name = "rules_jvm_external", + version = "0.0", +) -register_toolchains("@androidsdk//:sdk-toolchain", "@androidsdk//:all") +archive_override( + module_name = "rules_jvm_external", + integrity = "sha256-gukGSHM/wBgkJhkXGgzMBtD36aYBzqVNuhYr5b3lL8g=", + strip_prefix = "rules_jvm_external-9a10cae516d46ccce805d03b7886331bd55fb4c1", + urls = ["https://github.com/bazelbuild/rules_jvm_external/archive/9a10cae516d46ccce805d03b7886331bd55fb4c1.tar.gz"], +) maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven") maven.install( - aar_import_bzl_label = "@rules_android//rules:rules.bzl", + # aar_import_bzl_label = "@rules_android//rules:rules.bzl", artifacts = [ "org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.4", "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3", @@ -115,12 +144,13 @@ maven.install( "org.robolectric:robolectric:4.13", "com.google.truth:truth:1.1.3", "com.google.auto.value:auto-value:jar:1.11.0", + "androidx.compose.ui:ui-tooling-preview:1.7.0", ], repositories = [ "https://maven.google.com", "https://repo1.maven.org/maven2", ], - use_starlark_android_rules = True, + # use_starlark_android_rules = True, version_conflict_policy = "pinned", ) diff --git a/app/BUILD.bazel b/app/BUILD.bazel index 68ac041..7f946a0 100644 --- a/app/BUILD.bazel +++ b/app/BUILD.bazel @@ -1,6 +1,6 @@ load("@rules_android//android:rules.bzl", "android_binary") load("@rules_kotlin//kotlin:android.bzl", "kt_android_library") -load("@rules_kotlin//kotlin:lint.bzl", "ktlint_fix", "ktlint_test") +#load("@rules_kotlin//kotlin:lint.bzl", "ktlint_fix", "ktlint_test") kt_android_library( name = "lib", @@ -22,8 +22,8 @@ kt_android_library( ) android_binary( - name = "app2", - custom_package = "co.adrianblan.cheddar", + name = "app", + custom_package = "co.adrianblan.cheddar.prod", manifest = "src/main/AndroidManifest.xml", manifest_values = { "lib_name": "lib_base", @@ -38,14 +38,14 @@ android_binary( ], ) -ktlint_fix( - name = "lint_fix", - srcs = glob(["**/*.kt"]), - config = "//:ktlint_editorconfig", -) - -ktlint_test( - name = "lint_test", - srcs = glob(["**/*.kt"]), - config = "//:ktlint_editorconfig", -) +#ktlint_fix( +# name = "lint_fix", +# srcs = glob(["**/*.kt"]), +# config = "//:ktlint_editorconfig", +#) +# +#ktlint_test( +# name = "lint_test", +# srcs = glob(["**/*.kt"]), +# config = "//:ktlint_editorconfig", +#) diff --git a/core/ui/BUILD.bazel b/core/ui/BUILD.bazel index 1a6099e..06a8fda 100644 --- a/core/ui/BUILD.bazel +++ b/core/ui/BUILD.bazel @@ -7,6 +7,7 @@ kt_android_library( manifest = "src/main/AndroidManifest.xml", plugins = ["//:jetpack_compose_compiler_plugin"], resource_files = glob(["src/main/res/**"]), + tags = ["trace"], visibility = ["//visibility:public"], deps = [ "//core/model:lib", @@ -27,3 +28,10 @@ kt_android_library( "@maven//:io_coil_kt_coil_svg", ], ) + +android_library( + name = "res2", + custom_package = "co.adrianblan.ui", + manifest = "src/main/AndroidManifest.xml", + resource_files = glob(["src/main/res/**"]), +) diff --git a/core/ui/src/main/AndroidManifest.xml b/core/ui/src/main/AndroidManifest.xml index 2e03ffb..022969b 100644 --- a/core/ui/src/main/AndroidManifest.xml +++ b/core/ui/src/main/AndroidManifest.xml @@ -1,5 +1,5 @@ diff --git a/feature/storyfeed/BUILD.bazel b/feature/storyfeed/BUILD.bazel index 237ff60..c2bbef2 100644 --- a/feature/storyfeed/BUILD.bazel +++ b/feature/storyfeed/BUILD.bazel @@ -26,20 +26,20 @@ kt_android_library( ], ) -kt_android_local_test( - name = "test", - srcs = glob(["src/test/**/java/**/*.kt"]), - associates = [":lib_kt"], - test_class = "co.adrianblan.storydetail.StoryDetailViewModelTest", - visibility = ["//visibility:public"], - deps = [ - ":lib", - "//core/common:lib", - "//core/domain:lib", - "//core/hackernews:lib", - "//core/testing:lib", - "@maven//:app_cash_turbine_turbine_jvm", - "@maven//:org_jetbrains_kotlin_kotlin_test", - "@rules_robolectric//bazel:android-all", - ], -) +#kt_android_local_test( +# name = "test", +# srcs = glob(["src/test/**/java/**/*.kt"]), +# associates = [":lib_kt"], +# test_class = "co.adrianblan.storydetail.StoryDetailViewModelTest", +# visibility = ["//visibility:public"], +# deps = [ +# ":lib", +# "//core/common:lib", +# "//core/domain:lib", +# "//core/hackernews:lib", +# "//core/testing:lib", +# "@maven//:app_cash_turbine_turbine_jvm", +# "@maven//:org_jetbrains_kotlin_kotlin_test", +# "@rules_robolectric//bazel:android-all", +# ], +#) diff --git a/some/AndroidManifest.xml b/some/AndroidManifest.xml deleted file mode 100644 index 5ae4879..0000000 --- a/some/AndroidManifest.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - diff --git a/some/BUILD.bazel b/some/BUILD.bazel deleted file mode 100644 index c9599ea..0000000 --- a/some/BUILD.bazel +++ /dev/null @@ -1,14 +0,0 @@ -load("@rules_android//android:rules.bzl", "android_local_test") - -android_local_test( - name = "SparseArraySetTest", - srcs = ["SparseArraySetTest.java"], - custom_package = "org.robolectric.integrationtests.sparsearray", - test_class = "org.robolectric.integrationtests.sparsearray.SparseArraySetTest", - deps = [ - "@maven//:com_google_truth_truth", - "@maven//:org_robolectric_annotations", - "@maven//:org_robolectric_robolectric", - "@rules_robolectric//bazel:android-all", - ], -) diff --git a/some/MODULE.bazel b/some/MODULE.bazel deleted file mode 100644 index 8d48d3d..0000000 --- a/some/MODULE.bazel +++ /dev/null @@ -1,31 +0,0 @@ -module( - name = "rules_robolectric_examples_bzlmod", - version = "TODO", -) - -# I don't think this bazel_dep version actually matters because it's being overriden by the local_path_override. -bazel_dep(name = "rules_robolectric", version = "1", repo_name = "robolectric") -local_path_override( - module_name = "rules_robolectric", - path = "../..", -) - -bazel_dep(name = "platforms", version = "0.0.6") -bazel_dep(name = "rules_android", version = "0.1.1") -bazel_dep(name = "rules_jvm_external", version = "5.3") - -maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven") -maven.install( - artifacts = [ - "com.google.truth:truth:1.1.3", - "org.robolectric:robolectric:4.13", - ], - repositories = [ - "https://maven.google.com", - "https://repo1.maven.org/maven2", - ], -) -use_repo(maven, "maven") - -remote_android_extensions = use_extension("@bazel_tools//tools/android:android_extensions.bzl", "remote_android_tools_extensions") -use_repo(remote_android_extensions, "android_gmaven_r8", "android_tools") diff --git a/some/SparseArraySetTest.java b/some/SparseArraySetTest.java deleted file mode 100644 index f82946f..0000000 --- a/some/SparseArraySetTest.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.robolectric.integrationtests.sparsearray; - -import android.util.SparseArray; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.RobolectricTestRunner; -import org.robolectric.annotation.Config; - -import static com.google.common.truth.Truth.assertThat; - -@RunWith(RobolectricTestRunner.class) -@Config(sdk = Config.ALL_SDKS) -public class SparseArraySetTest { - - @Test - public void testSparseArrayBracketOperator_callsSetMethodPreApi31() { - // Setup - final SparseArray sparseArray = new SparseArray<>(); - sparseArray.set(0, "Blizzard"); - sparseArray.set(1, "Blizzara"); - // Assertions - assertThat(sparseArray.get(0)).isEqualTo("Blizzard"); - assertThat(sparseArray.get(1)).isEqualTo("Blizzara"); - } -} diff --git a/some/WORKSPACE b/some/WORKSPACE deleted file mode 100644 index 6ec1902..0000000 --- a/some/WORKSPACE +++ /dev/null @@ -1,55 +0,0 @@ -workspace(name = "robolectric-simple-example") - -load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") - -local_repository( - name = "robolectric", - path = "../../", -) - -http_archive( - name = "bazel_skylib", - sha256 = "c6966ec828da198c5d9adbaa94c05e3a1c7f21bd012a0b29ba8ddbccb2c93b0d", - urls = ["https://github.com/bazelbuild/bazel-skylib/releases/download/1.1.1/bazel-skylib-1.1.1.tar.gz"], -) - -load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace") - -bazel_skylib_workspace() - -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"], -) - -load("@rules_android//android:rules.bzl", "android_sdk_repository") - -android_sdk_repository(name = "androidsdk") - -#---SNIP--- Below here is re-used in the workspace snippet published on releases -load("@robolectric//bazel:robolectric.bzl", "robolectric_repositories") - -robolectric_repositories() - -http_archive( - name = "rules_jvm_external", - sha256 = "d31e369b854322ca5098ea12c69d7175ded971435e55c18dd9dd5f29cc5249ac", - strip_prefix = "rules_jvm_external-5.3", - url = "https://github.com/bazelbuild/rules_jvm_external/releases/download/5.3/rules_jvm_external-5.3.tar.gz", -) - -load("@rules_jvm_external//:defs.bzl", "maven_install") - -maven_install( - name = "maven", - artifacts = [ - "com.google.truth:truth:1.1.3", - "org.robolectric:robolectric:4.13", - ], - repositories = [ - "https://maven.google.com", - "https://repo1.maven.org/maven2", - ], -) diff --git a/some/WORKSPACE.bzlmod b/some/WORKSPACE.bzlmod deleted file mode 100644 index 9cc43bb..0000000 --- a/some/WORKSPACE.bzlmod +++ /dev/null @@ -1 +0,0 @@ -android_sdk_repository(name = "androidsdk") diff --git a/some2/BUILD.bazel b/some2/BUILD.bazel deleted file mode 100644 index 8a4d02c..0000000 --- a/some2/BUILD.bazel +++ /dev/null @@ -1,59 +0,0 @@ -load("@rules_java//java:defs.bzl", "java_plugin") -load("@rules_kotlin//kotlin:android.bzl", "kt_android_library") -load("@rules_kotlin//kotlin:core.bzl", "kt_compiler_plugin", "kt_ksp_plugin") - -kt_compiler_plugin( - name = "serialization_plugin", - compile_phase = True, - id = "org.jetbrains.kotlin.serialization", - stubs_phase = True, - deps = [ - "@rules_kotlin//kotlin/compiler:kotlinx-serialization-compiler-plugin", - ], -) - -java_plugin( - name = "autovalue", - generates_api = 1, - processor_class = "com.google.auto.value.processor.AutoValueProcessor", - deps = ["@maven//:com_google_auto_value_auto_value"], -) - -kt_ksp_plugin( - name = "moshi-kotlin-codegen", - processor_class = "com.squareup.moshi.kotlin.codegen.ksp.JsonClassSymbolProcessorProvider", - deps = [ - "@maven//:com_squareup_moshi_moshi", - "@maven//:com_squareup_moshi_moshi_kotlin", - "@maven//:com_squareup_moshi_moshi_kotlin_codegen", - ], -) - -kt_android_library( - name = "my_kt", - srcs = glob(["src/main/java/**/*.kt"]), - custom_package = "examples.android.lib", - manifest = "src/main/AndroidManifest.xml", - plugins = [ - ":moshi-kotlin-codegen", - ":serialization_plugin", - ":autovalue", - ], - resource_files = glob(["res/**"]), - tags = ["trace"], - visibility = ["//visibility:public"], - deps = [ - ":res2", - "@maven//:androidx_appcompat_appcompat", - "@maven//:com_google_auto_value_auto_value_annotations", - "@maven//:com_squareup_moshi_moshi", - "@maven//:org_jetbrains_kotlinx_kotlinx_serialization_runtime", - ], -) - -android_library( - name = "res2", - custom_package = "examples.android.lib", - manifest = "src/main/AndroidManifest.xml", - resource_files = glob(["res2/**"]), -) diff --git a/some2/res/values/strings.xml b/some2/res/values/strings.xml deleted file mode 100644 index 4438981..0000000 --- a/some2/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - Where you at? - diff --git a/some2/res2/values/strings.xml b/some2/res2/values/strings.xml deleted file mode 100644 index d659243..0000000 --- a/some2/res2/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - hello? - diff --git a/some2/src/main/AndroidManifest.xml b/some2/src/main/AndroidManifest.xml deleted file mode 100644 index c31b018..0000000 --- a/some2/src/main/AndroidManifest.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/some2/src/main/java/examples/android/lib/Data.kt b/some2/src/main/java/examples/android/lib/Data.kt deleted file mode 100644 index 88f81ee..0000000 --- a/some2/src/main/java/examples/android/lib/Data.kt +++ /dev/null @@ -1,6 +0,0 @@ -package examples.android.lib - -import kotlinx.serialization.Serializable - -@Serializable -data class Data(val stringValue: String, val intValue: Int) diff --git a/some2/src/main/java/examples/android/lib/DataJsonModel.kt b/some2/src/main/java/examples/android/lib/DataJsonModel.kt deleted file mode 100644 index 7b2ba61..0000000 --- a/some2/src/main/java/examples/android/lib/DataJsonModel.kt +++ /dev/null @@ -1,6 +0,0 @@ -package examples.android.lib - -import com.squareup.moshi.JsonClass - -@JsonClass(generateAdapter = true) -data class DataJsonModel(val data: String) diff --git a/some2/src/main/java/examples/android/lib/MainActivity.kt b/some2/src/main/java/examples/android/lib/MainActivity.kt deleted file mode 100644 index ed0b474..0000000 --- a/some2/src/main/java/examples/android/lib/MainActivity.kt +++ /dev/null @@ -1,33 +0,0 @@ -package examples.android.lib - -import androidx.appcompat.app.AlertDialog -import android.os.Bundle -import android.widget.Button -import android.widget.LinearLayout -import android.widget.LinearLayout.LayoutParams -import androidx.appcompat.app.AppCompatActivity -import com.squareup.moshi.Moshi - -class MainActivity : AppCompatActivity() { - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - val parent = LinearLayout(this).apply { - orientation = LinearLayout.VERTICAL - }.also { it.addView(Button(this).apply { text = "Foo!" }) } - setContentView(parent, LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)) - AlertDialog.Builder(this) - .setTitle(this.getString(R.string.where_you_at)) - .setMessage("Blah blah blah? " + getString(R.string.hello)) - .show() - // Ensure Serialization plugin has run and generated code correctly. - Data.serializer() - - val adapter = DataJsonModelJsonAdapter(Moshi.Builder().build()) - println(adapter.toJson(DataJsonModel("foo"))) - - TestKtValue.create { - setName("Auto Value Test") // can't use property syntax, because autovalue builder's codegen - } - } -} diff --git a/some2/src/main/java/examples/android/lib/TestKtValue.kt b/some2/src/main/java/examples/android/lib/TestKtValue.kt deleted file mode 100644 index c25528c..0000000 --- a/some2/src/main/java/examples/android/lib/TestKtValue.kt +++ /dev/null @@ -1,21 +0,0 @@ -package examples.android.lib - -import com.google.auto.value.AutoValue - -@AutoValue -abstract class TestKtValue { - abstract fun name(): String - internal fun nameInternal() = "${name()}_internal" - - @AutoValue.Builder - abstract class Builder { - abstract fun setName(name: String): Builder - abstract fun build(): TestKtValue - } - companion object { - fun create(builderFunction: Builder.() -> Unit) = AutoValue_TestKtValue.Builder().also { - builderFunction.invoke(it) - }.build() - } - -} diff --git a/some2/src/test/java/examples/android/lib/AndroidManifest.xml b/some2/src/test/java/examples/android/lib/AndroidManifest.xml deleted file mode 100644 index c31b018..0000000 --- a/some2/src/test/java/examples/android/lib/AndroidManifest.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/some2/src/test/java/examples/android/lib/BUILD.bazel b/some2/src/test/java/examples/android/lib/BUILD.bazel deleted file mode 100644 index 8620434..0000000 --- a/some2/src/test/java/examples/android/lib/BUILD.bazel +++ /dev/null @@ -1,13 +0,0 @@ -load("@rules_kotlin//kotlin:android.bzl", "kt_android_local_test") - -kt_android_local_test( - name = "SomeTest", - srcs = ["SomeTest.kt"], - associates = ["//some2:my_kt_kt"], - custom_package = "examples.android.lib", - manifest = "AndroidManifest.xml", - deps = [ - "@maven//:junit_junit", - "@robolectric//bazel:android-all", - ], -) diff --git a/some2/src/test/java/examples/android/lib/SomeTest.kt b/some2/src/test/java/examples/android/lib/SomeTest.kt deleted file mode 100644 index 39b3cd8..0000000 --- a/some2/src/test/java/examples/android/lib/SomeTest.kt +++ /dev/null @@ -1,15 +0,0 @@ -package examples.android.lib - -import org.junit.Assert.assertEquals -import org.junit.Test - -class SomeTest { - - @Test - fun someTest() { - val value = TestKtValue.create { - setName("foo") - } - assertEquals("foo_internal", value.nameInternal()) - } -} From 2be59317155dca3fb28dea48f27625cbf61a3918 Mon Sep 17 00:00:00 2001 From: raghulvelusamy Date: Sat, 14 Sep 2024 14:41:03 -0700 Subject: [PATCH 20/23] Update deps Update deps and try --- .bazelrc | 1 + .bazelversion | 2 +- MODULE.bazel | 45 +++++++++++++-------------------- app/BUILD.bazel | 21 +++------------ core/ui/BUILD.bazel | 8 ------ feature/storydetail/BUILD.bazel | 44 ++++++++++++++++---------------- 6 files changed, 44 insertions(+), 77 deletions(-) diff --git a/.bazelrc b/.bazelrc index b35f2de..003e740 100644 --- a/.bazelrc +++ b/.bazelrc @@ -3,6 +3,7 @@ common --experimental_google_legacy_api common --experimental_enable_android_migration_apis common --android_sdk=@androidsdk//:sdk common:core_library_desugaring --desugar_java8_libs +common --incompatible_disable_native_android_rules=true # Flags to enable mobile-install v3 mobile-install --mode=skylark --mobile_install_aspect=@rules_android//mobile_install:mi.bzl --mobile_install_supported_rules=android_binary diff --git a/.bazelversion b/.bazelversion index 00bc581..81be669 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -8.0.0-pre.20240730.1 \ No newline at end of file +8.0.0-pre.20240826.1 \ No newline at end of file diff --git a/MODULE.bazel b/MODULE.bazel index 80aef0a..9063db4 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -9,10 +9,9 @@ bazel_dep( version = "1.7.1", ) -#bazel_dep(name = "rules_robolectric", version = "4.10.3", repo_name = "robolectric") bazel_dep( name = "rules_java", - version = "7.7.2", + version = "7.9.0", ) bazel_dep( @@ -20,11 +19,6 @@ bazel_dep( version = "0.0.10", ) -#bazel_dep( -# name = "bazel_skylib", -# version = "1.3.0", -#) - bazel_dep( name = "rules_robolectric", version = "4.13", @@ -35,33 +29,19 @@ bazel_dep( version = "0.5.1", ) -#archive_override( -# module_name = "rules_android", -# integrity = "sha256-6nNroqvGU3/bKC5o9cevMmXOcJbSDu3L5KDr2EGyndE=", -# strip_prefix = "rules_android-7a876c3d55bc43a696143ef1da069f9dff79e2c0", -# urls = ["https://github.com/bazelbuild/rules_android/archive/7a876c3d55bc43a696143ef1da069f9dff79e2c0.tar.gz"], -#) - -#remote_android_extensions = use_extension("@bazel_tools//tools/android:android_extensions.bzl", "remote_android_tools_extensions") -# -#use_repo(remote_android_extensions, "android_gmaven_r8", "android_tools") - bazel_dep( name = "rules_kotlin", version = "1.9.6", ) -#register_toolchains( -# "@rules_android//toolchains/android:android_default_toolchain", -# "@rules_android//toolchains/android_sdk:android_sdk_tools", -#) -# -#android_sdk_repository_extension = use_extension("@rules_android//rules/android_sdk_repository:rule.bzl", "android_sdk_repository_extension") -# -#use_repo(android_sdk_repository_extension, "androidsdk") # #register_toolchains("@androidsdk//:sdk-toolchain", "@androidsdk//:all") +#bazel_dep( +# name = "rules_jvm_external", +# version = "6.2", +#) + bazel_dep( name = "rules_jvm_external", version = "0.0", @@ -74,6 +54,15 @@ archive_override( urls = ["https://github.com/bazelbuild/rules_jvm_external/archive/9a10cae516d46ccce805d03b7886331bd55fb4c1.tar.gz"], ) +register_toolchains( + "@rules_android//toolchains/android:android_default_toolchain", + "@rules_android//toolchains/android_sdk:android_sdk_tools", +) + +android_sdk_repository_extension = use_extension("@rules_android//rules/android_sdk_repository:rule.bzl", "android_sdk_repository_extension") + +use_repo(android_sdk_repository_extension, "androidsdk") + maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven") maven.install( @@ -138,11 +127,11 @@ maven.install( "androidx.constraintlayout:constraintlayout-compose:jar:1.1.0-alpha11", "androidx.lifecycle:lifecycle-viewmodel-compose:jar:2.6.1", "androidx.lifecycle:lifecycle-runtime-compose:jar:2.6.1", - "androidx.core:core-splashscreen:jar:1.2.0-alpha01", + "androidx.core:core-splashscreen:aar:1.0.0-beta02", "app.cash.turbine:turbine-jvm:jar:1.1.0", "org.jetbrains.kotlin:kotlin-test:jar:2.0.0", "org.robolectric:robolectric:4.13", - "com.google.truth:truth:1.1.3", + "com.google.truth:truth:1.1.2", "com.google.auto.value:auto-value:jar:1.11.0", "androidx.compose.ui:ui-tooling-preview:1.7.0", ], diff --git a/app/BUILD.bazel b/app/BUILD.bazel index 7f946a0..7f8cabb 100644 --- a/app/BUILD.bazel +++ b/app/BUILD.bazel @@ -1,6 +1,5 @@ load("@rules_android//android:rules.bzl", "android_binary") load("@rules_kotlin//kotlin:android.bzl", "kt_android_library") -#load("@rules_kotlin//kotlin:lint.bzl", "ktlint_fix", "ktlint_test") kt_android_library( name = "lib", @@ -23,29 +22,15 @@ kt_android_library( android_binary( name = "app", - custom_package = "co.adrianblan.cheddar.prod", + custom_package = "co.adrianblan.cheddar.app", manifest = "src/main/AndroidManifest.xml", - manifest_values = { - "lib_name": "lib_base", - }, deps = [ - ":lib_base", + ":lib", ":lib_kt", + "//core/ui:lib", "//feature/storydetail:lib", "//feature/storyfeed:lib", "@maven//:androidx_activity_activity", "@maven//:androidx_core_core_splashscreen", ], ) - -#ktlint_fix( -# name = "lint_fix", -# srcs = glob(["**/*.kt"]), -# config = "//:ktlint_editorconfig", -#) -# -#ktlint_test( -# name = "lint_test", -# srcs = glob(["**/*.kt"]), -# config = "//:ktlint_editorconfig", -#) diff --git a/core/ui/BUILD.bazel b/core/ui/BUILD.bazel index 06a8fda..1a6099e 100644 --- a/core/ui/BUILD.bazel +++ b/core/ui/BUILD.bazel @@ -7,7 +7,6 @@ kt_android_library( manifest = "src/main/AndroidManifest.xml", plugins = ["//:jetpack_compose_compiler_plugin"], resource_files = glob(["src/main/res/**"]), - tags = ["trace"], visibility = ["//visibility:public"], deps = [ "//core/model:lib", @@ -28,10 +27,3 @@ kt_android_library( "@maven//:io_coil_kt_coil_svg", ], ) - -android_library( - name = "res2", - custom_package = "co.adrianblan.ui", - manifest = "src/main/AndroidManifest.xml", - resource_files = glob(["src/main/res/**"]), -) diff --git a/feature/storydetail/BUILD.bazel b/feature/storydetail/BUILD.bazel index d872fa7..df898b5 100644 --- a/feature/storydetail/BUILD.bazel +++ b/feature/storydetail/BUILD.bazel @@ -49,25 +49,25 @@ kt_android_library( ], ) -kt_android_local_test( - name = "test", - srcs = glob([ - "src/test/java/**/*.kt", - ]), - associates = [":lib_kt"], - manifest = "src/main/AndroidManifest.xml", - test_class = "co.adrianblan.storydetail.StoryDetailViewModelTest", - visibility = ["//visibility:public"], - deps = [ - ":lib", - "//core/common:lib", - "//core/domain:lib", - "//core/hackernews:lib", - "//core/testing:lib", - "@maven//:app_cash_turbine_turbine_jvm", - "@maven//:com_google_truth_truth", - "@maven//:junit_junit", - "@maven//:org_jetbrains_kotlin_kotlin_test", - "@rules_robolectric//bazel:android-all", - ], -) +#kt_android_local_test( +# name = "test", +# srcs = glob([ +# "src/test/java/**/*.kt", +# ]), +# associates = [":lib_kt"], +# manifest = "src/main/AndroidManifest.xml", +# test_class = "co.adrianblan.storydetail.StoryDetailViewModelTest", +# visibility = ["//visibility:public"], +# deps = [ +# ":lib", +# "//core/common:lib", +# "//core/domain:lib", +# "//core/hackernews:lib", +# "//core/testing:lib", +# "@maven//:app_cash_turbine_turbine_jvm", +# "@maven//:com_google_truth_truth", +# "@maven//:junit_junit", +# "@maven//:org_jetbrains_kotlin_kotlin_test", +# "@rules_robolectric//bazel:android-all", +# ], +#) From 9b4cf86084eaf498ea6a4e78593b3fc1f63b58a7 Mon Sep 17 00:00:00 2001 From: raghulvelusamy Date: Thu, 19 Sep 2024 23:09:57 -0700 Subject: [PATCH 21/23] Working all working all --- .editorconfig | 2 +- BUILD.bazel | 2 +- MODULE.bazel | 15 +++-------- app/BUILD.bazel | 13 ++++++++++ feature/storydetail/BUILD.bazel | 44 ++++++++++++++++----------------- feature/storyfeed/BUILD.bazel | 34 ++++++++++++------------- 6 files changed, 57 insertions(+), 53 deletions(-) diff --git a/.editorconfig b/.editorconfig index 162b39c..965cc27 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,5 +1,5 @@ [*.{kt, kts}] -indent_size = 2 +indent_size = 4 insert_final_newline = true max_line_length = 100 ij_kotlin_allow_trailing_comma = true diff --git a/BUILD.bazel b/BUILD.bazel index 6534fe0..4f9c8c1 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -7,7 +7,7 @@ kt_compiler_plugin( target_embedded_compiler = True, visibility = ["//visibility:public"], deps = [ - "@maven//:androidx_compose_compiler_compiler", + "@maven//:org_jetbrains_kotlin_kotlin_compose_compiler_plugin_embeddable", ], ) diff --git a/MODULE.bazel b/MODULE.bazel index 9063db4..cab7814 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -31,17 +31,9 @@ bazel_dep( bazel_dep( name = "rules_kotlin", - version = "1.9.6", + version = "2.0.0", ) -# -#register_toolchains("@androidsdk//:sdk-toolchain", "@androidsdk//:all") - -#bazel_dep( -# name = "rules_jvm_external", -# version = "6.2", -#) - bazel_dep( name = "rules_jvm_external", version = "0.0", @@ -66,7 +58,6 @@ use_repo(android_sdk_repository_extension, "androidsdk") maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven") maven.install( - # aar_import_bzl_label = "@rules_android//rules:rules.bzl", artifacts = [ "org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.4", "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3", @@ -117,7 +108,7 @@ maven.install( "androidx.compose.material:material-icons-extended:jar:1.5.0", "androidx.compose.material:material-icons-core:jar:1.6.8", "io.coil-kt:coil-compose:jar:2.7.0", - "androidx.compose.compiler:compiler:jar:1.5.12", + "org.jetbrains.kotlin:kotlin-compose-compiler-plugin-embeddable:jar:2.0.0", "androidx.constraintlayout:constraintlayout:jar:2.1.4", "androidx.navigation:navigation-compose:jar:2.5.3", "androidx.lifecycle:lifecycle-common-java8:2.5.1", @@ -138,8 +129,8 @@ maven.install( repositories = [ "https://maven.google.com", "https://repo1.maven.org/maven2", + "https://androidx.dev/storage/compose-compiler/repository/", ], - # use_starlark_android_rules = True, version_conflict_policy = "pinned", ) diff --git a/app/BUILD.bazel b/app/BUILD.bazel index 7f8cabb..069c920 100644 --- a/app/BUILD.bazel +++ b/app/BUILD.bazel @@ -1,5 +1,6 @@ load("@rules_android//android:rules.bzl", "android_binary") load("@rules_kotlin//kotlin:android.bzl", "kt_android_library") +load("@rules_kotlin//kotlin:lint.bzl", "ktlint_fix", "ktlint_test") kt_android_library( name = "lib", @@ -34,3 +35,15 @@ android_binary( "@maven//:androidx_core_core_splashscreen", ], ) + +ktlint_fix( + name = "lint_fix", + srcs = glob(["**/*.kt"]), + config = "//:ktlint_editorconfig", +) + +ktlint_test( + name = "lint_test", + srcs = glob(["**/*.kt"]), + config = "//:ktlint_editorconfig", +) diff --git a/feature/storydetail/BUILD.bazel b/feature/storydetail/BUILD.bazel index df898b5..d872fa7 100644 --- a/feature/storydetail/BUILD.bazel +++ b/feature/storydetail/BUILD.bazel @@ -49,25 +49,25 @@ kt_android_library( ], ) -#kt_android_local_test( -# name = "test", -# srcs = glob([ -# "src/test/java/**/*.kt", -# ]), -# associates = [":lib_kt"], -# manifest = "src/main/AndroidManifest.xml", -# test_class = "co.adrianblan.storydetail.StoryDetailViewModelTest", -# visibility = ["//visibility:public"], -# deps = [ -# ":lib", -# "//core/common:lib", -# "//core/domain:lib", -# "//core/hackernews:lib", -# "//core/testing:lib", -# "@maven//:app_cash_turbine_turbine_jvm", -# "@maven//:com_google_truth_truth", -# "@maven//:junit_junit", -# "@maven//:org_jetbrains_kotlin_kotlin_test", -# "@rules_robolectric//bazel:android-all", -# ], -#) +kt_android_local_test( + name = "test", + srcs = glob([ + "src/test/java/**/*.kt", + ]), + associates = [":lib_kt"], + manifest = "src/main/AndroidManifest.xml", + test_class = "co.adrianblan.storydetail.StoryDetailViewModelTest", + visibility = ["//visibility:public"], + deps = [ + ":lib", + "//core/common:lib", + "//core/domain:lib", + "//core/hackernews:lib", + "//core/testing:lib", + "@maven//:app_cash_turbine_turbine_jvm", + "@maven//:com_google_truth_truth", + "@maven//:junit_junit", + "@maven//:org_jetbrains_kotlin_kotlin_test", + "@rules_robolectric//bazel:android-all", + ], +) diff --git a/feature/storyfeed/BUILD.bazel b/feature/storyfeed/BUILD.bazel index c2bbef2..722da3e 100644 --- a/feature/storyfeed/BUILD.bazel +++ b/feature/storyfeed/BUILD.bazel @@ -26,20 +26,20 @@ kt_android_library( ], ) -#kt_android_local_test( -# name = "test", -# srcs = glob(["src/test/**/java/**/*.kt"]), -# associates = [":lib_kt"], -# test_class = "co.adrianblan.storydetail.StoryDetailViewModelTest", -# visibility = ["//visibility:public"], -# deps = [ -# ":lib", -# "//core/common:lib", -# "//core/domain:lib", -# "//core/hackernews:lib", -# "//core/testing:lib", -# "@maven//:app_cash_turbine_turbine_jvm", -# "@maven//:org_jetbrains_kotlin_kotlin_test", -# "@rules_robolectric//bazel:android-all", -# ], -#) +kt_android_local_test( + name = "test", + srcs = glob(["src/test/**/java/**/*.kt"]), + associates = [":lib_kt"], + test_class = "co.adrianblan.storyfeed.StoryFeedViewModelTest", + visibility = ["//visibility:public"], + deps = [ + ":lib", + "//core/common:lib", + "//core/domain:lib", + "//core/hackernews:lib", + "//core/testing:lib", + "@maven//:app_cash_turbine_turbine_jvm", + "@maven//:org_jetbrains_kotlin_kotlin_test", + "@rules_robolectric//bazel:android-all", + ], +) From 61434617ac0ebe640059d724da27fb52567e0fcf Mon Sep 17 00:00:00 2001 From: raghulvelusamy Date: Fri, 20 Sep 2024 22:38:14 -0700 Subject: [PATCH 22/23] Fix Lint Fix Lint --- .../main/java/co/adrianblan/cheddar/BuildConfig.kt | 3 +-- .../co/adrianblan/cheddar/CheddarApplication.kt | 3 +-- .../main/java/co/adrianblan/cheddar/MainActivity.kt | 3 +-- .../main/java/co/adrianblan/cheddar/Navigation.kt | 13 +++++-------- 4 files changed, 8 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/co/adrianblan/cheddar/BuildConfig.kt b/app/src/main/java/co/adrianblan/cheddar/BuildConfig.kt index 9da3d72..2e0662f 100644 --- a/app/src/main/java/co/adrianblan/cheddar/BuildConfig.kt +++ b/app/src/main/java/co/adrianblan/cheddar/BuildConfig.kt @@ -1,6 +1,5 @@ package co.adrianblan.cheddar object BuildConfig { - const val DEBUG: Boolean = true -} \ No newline at end of file +} diff --git a/app/src/main/java/co/adrianblan/cheddar/CheddarApplication.kt b/app/src/main/java/co/adrianblan/cheddar/CheddarApplication.kt index 7b6c007..4db1502 100644 --- a/app/src/main/java/co/adrianblan/cheddar/CheddarApplication.kt +++ b/app/src/main/java/co/adrianblan/cheddar/CheddarApplication.kt @@ -8,7 +8,6 @@ import timber.log.Timber @HiltAndroidApp class CheddarApplication : Application() { - override fun onCreate() { super.onCreate() @@ -18,4 +17,4 @@ class CheddarApplication : Application() { Coil.setImageLoader(CoilImageLoaderFactory(this)) } -} \ No newline at end of file +} diff --git a/app/src/main/java/co/adrianblan/cheddar/MainActivity.kt b/app/src/main/java/co/adrianblan/cheddar/MainActivity.kt index 9042456..9284302 100644 --- a/app/src/main/java/co/adrianblan/cheddar/MainActivity.kt +++ b/app/src/main/java/co/adrianblan/cheddar/MainActivity.kt @@ -13,7 +13,6 @@ import javax.inject.Inject @AndroidEntryPoint class MainActivity : ComponentActivity() { - @Inject lateinit var customTabsLauncher: CustomTabsLauncher @@ -30,4 +29,4 @@ class MainActivity : ComponentActivity() { } } } -} \ No newline at end of file +} diff --git a/app/src/main/java/co/adrianblan/cheddar/Navigation.kt b/app/src/main/java/co/adrianblan/cheddar/Navigation.kt index 38ffc7c..02339b1 100644 --- a/app/src/main/java/co/adrianblan/cheddar/Navigation.kt +++ b/app/src/main/java/co/adrianblan/cheddar/Navigation.kt @@ -10,20 +10,17 @@ import co.adrianblan.storyfeed.storyFeedRoute import co.adrianblan.storyfeed.storyFeedScreen @Composable -fun Navigation( - customTabsLauncher: CustomTabsLauncher -) { +fun Navigation(customTabsLauncher: CustomTabsLauncher) { val navController = rememberNavController() NavHost( navController = navController, - startDestination = storyFeedRoute + startDestination = storyFeedRoute, ) { - storyFeedScreen( onStoryClick = navController::navigateToTopic, onStoryContentClick = { storyUrl -> customTabsLauncher.launchUrl(storyUrl.url) - } + }, ) storyDetailScreen( onStoryContentClick = { storyUrl -> @@ -32,7 +29,7 @@ fun Navigation( onCommentUrlClick = { uri -> customTabsLauncher.launchUrl(uri.toString()) }, - onBackPressed = navController::popBackStack + onBackPressed = navController::popBackStack, ) } -} \ No newline at end of file +} From 1260b4d64de9b2e29824da910434a76ea07ee01a Mon Sep 17 00:00:00 2001 From: raghulvelusamy Date: Mon, 23 Sep 2024 08:39:53 -0700 Subject: [PATCH 23/23] Test Test --- .bazelrc | 1 + MODULE.bazel | 2 ++ app/BUILD.bazel | 3 +++ app/build.gradle.kts | 1 + .../main/java/co/adrianblan/cheddar/CheddarApplication.kt | 7 +++++-- app/src/main/java/co/adrianblan/cheddar/MainActivity.kt | 6 ++++-- core/ui/src/main/AndroidManifest.xml | 4 +++- gradle/libs.versions.toml | 2 ++ 8 files changed, 21 insertions(+), 5 deletions(-) diff --git a/.bazelrc b/.bazelrc index 003e740..177ad1e 100644 --- a/.bazelrc +++ b/.bazelrc @@ -9,4 +9,5 @@ common --incompatible_disable_native_android_rules=true mobile-install --mode=skylark --mobile_install_aspect=@rules_android//mobile_install:mi.bzl --mobile_install_supported_rules=android_binary # Required to invoke the Studio deployer jar mobile-install --tool_java_runtime_version=17 +mobile-install –tool_java_tools_version=17 --javacopt="-J-Xms8G -J-Xmx8G" diff --git a/MODULE.bazel b/MODULE.bazel index cab7814..dbb432e 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -125,6 +125,8 @@ maven.install( "com.google.truth:truth:1.1.2", "com.google.auto.value:auto-value:jar:1.11.0", "androidx.compose.ui:ui-tooling-preview:1.7.0", + "androidx.multidex:multidex:2.0.1", + "com.google.dagger:hilt-android-compiler:2.52", ], repositories = [ "https://maven.google.com", diff --git a/app/BUILD.bazel b/app/BUILD.bazel index 069c920..08c3215 100644 --- a/app/BUILD.bazel +++ b/app/BUILD.bazel @@ -18,6 +18,8 @@ kt_android_library( "//feature/storydetail:lib", "//feature/storyfeed:lib", "@maven//:androidx_activity_activity", + "@maven//:androidx_multidex_multidex_2_0_1", + "@maven//:javax_inject_javax_inject", ], ) @@ -25,6 +27,7 @@ android_binary( name = "app", custom_package = "co.adrianblan.cheddar.app", manifest = "src/main/AndroidManifest.xml", + # mulltidex = "native", deps = [ ":lib", ":lib_kt", diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 53a6d43..b5d363d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -61,4 +61,5 @@ dependencies { implementation(libs.timber) implementation(libs.coil) debugImplementation(libs.leakcanary) +// runtimeOnly(libs.androidx.multidex) } \ No newline at end of file diff --git a/app/src/main/java/co/adrianblan/cheddar/CheddarApplication.kt b/app/src/main/java/co/adrianblan/cheddar/CheddarApplication.kt index 4db1502..6ca3add 100644 --- a/app/src/main/java/co/adrianblan/cheddar/CheddarApplication.kt +++ b/app/src/main/java/co/adrianblan/cheddar/CheddarApplication.kt @@ -1,13 +1,16 @@ package co.adrianblan.cheddar -import android.app.Application import co.adrianblan.ui.coil.CoilImageLoaderFactory import coil.Coil import dagger.hilt.android.HiltAndroidApp import timber.log.Timber +//import androidx.multidex.MultiDexApplication +//@HiltAndroidApp(MultiDexApplication::class) +//class CheddarApplication : Hilt_CheddarApplication() { +//class CheddarApplication : Hilt_CheddarApplication() { @HiltAndroidApp -class CheddarApplication : Application() { +class CheddarApplication : Hilt_CheddarApplication() { override fun onCreate() { super.onCreate() diff --git a/app/src/main/java/co/adrianblan/cheddar/MainActivity.kt b/app/src/main/java/co/adrianblan/cheddar/MainActivity.kt index 9284302..c731a0a 100644 --- a/app/src/main/java/co/adrianblan/cheddar/MainActivity.kt +++ b/app/src/main/java/co/adrianblan/cheddar/MainActivity.kt @@ -23,8 +23,10 @@ class MainActivity : ComponentActivity() { setContent { AppTheme { - Box { - Navigation(customTabsLauncher) + if (::customTabsLauncher.isInitialized) { + Box { + Navigation(customTabsLauncher) + } } } } diff --git a/core/ui/src/main/AndroidManifest.xml b/core/ui/src/main/AndroidManifest.xml index 022969b..01a6661 100644 --- a/core/ui/src/main/AndroidManifest.xml +++ b/core/ui/src/main/AndroidManifest.xml @@ -1,5 +1,5 @@ @@ -7,4 +7,6 @@ android:minSdkVersion="24" android:targetSdkVersion="34" /> + + diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4631f93..12b5ccc 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,7 @@ [versions] minSdk = "23" compileSdk = "34" +multidex = "2.0.1" targetSdk = "34" androidGradlePlugin = "8.2.2" @@ -47,6 +48,7 @@ androidx-core = { group = "androidx.core", name = "core-ktx", version.ref = "and androidx-hilt-navigation-compose = { group = "androidx.hilt", name = "hilt-navigation-compose", version.ref = "androidxHiltNavigationCompose" } androidx-lifecycle-viewmodel = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-compose", version.ref = "androidxLifecycle" } androidx-lifecycle-compose = { group = "androidx.lifecycle", name = "lifecycle-runtime-compose", version.ref = "androidxLifecycle" } +androidx-multidex = { module = "androidx.multidex:multidex", version.ref = "multidex" } androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "androidxNavigation" } androidx-navigation-testing = { group = "androidx.navigation", name = "navigation-testing", version.ref = "androidxNavigation" } androidx-splashscreen = { group = "androidx.core", name = "core-splashscreen", version.ref = "androidxSplashscreen" }