1# Copyright (C) 2020 The Google Bazel Common Authors. 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14 15"""A macro to configure Dagger deps within a workspace""" 16 17load("//:build_defs.bzl", "POM_VERSION") 18 19# For tagged releases, the POM_VERSION will be set to the version of the release. 20# However, for CI testing the POM_VERSION will not be set, so we use the 21# HEAD-SNAPSHOT artifacts instead. 22# TODO(bcorso): Ideally, we would use the LOCAL-SNAPSHOT artifacts for CI testing; 23# however, maven_install doesn't work with local maven repositories 24# (See issue: https://github.com/bazelbuild/rules_jvm_external/issues/305). 25_VERSION = POM_VERSION if POM_VERSION != "${project.version}" else "HEAD-SNAPSHOT" 26 27DAGGER_ARTIFACTS = [ 28 "com.google.dagger:dagger:" + _VERSION, 29 "com.google.dagger:dagger-compiler:" + _VERSION, 30 "com.google.dagger:dagger-producers:" + _VERSION, 31 "com.google.dagger:dagger-spi:" + _VERSION, 32] 33 34DAGGER_ANDROID_ARTIFACTS = [ 35 "com.google.dagger:dagger-android-processor:" + _VERSION, 36 "com.google.dagger:dagger-android-support:" + _VERSION, 37 "com.google.dagger:dagger-android:" + _VERSION, 38] 39 40HILT_ANDROID_ARTIFACTS = [ 41 "androidx.test:core:1.1.0", # Export for ApplicationProvider 42 "javax.annotation:javax.annotation-api:1.3.2", # Export for @Generated 43 "androidx.annotation:annotation:1.1.0", # Export for @CallSuper/@Nullable 44 "com.google.dagger:dagger:" + _VERSION, 45 "com.google.dagger:dagger-compiler:" + _VERSION, 46 "com.google.dagger:hilt-android:" + _VERSION, 47 "com.google.dagger:hilt-android-testing:" + _VERSION, 48 "com.google.dagger:hilt-android-compiler:" + _VERSION, 49 "com.google.dagger:hilt-core:" + _VERSION, 50] 51 52DAGGER_REPOSITORIES = [ 53 "https://maven.google.com", 54 "https://repo1.maven.org/maven2", 55 "https://oss.sonatype.org/content/repositories/snapshots", 56] 57 58DAGGER_ANDROID_REPOSITORIES = DAGGER_REPOSITORIES 59 60HILT_ANDROID_REPOSITORIES = DAGGER_REPOSITORIES 61 62# https://github.com/bazelbuild/buildtools/blob/master/WARNINGS.md#unnamed-macro 63# buildifier: disable=unnamed-macro 64def dagger_rules(repo_name = "@maven"): 65 """Defines the Dagger targets with proper exported dependencies and plugins. 66 67 The targets will be of the form ":<artifact-id>". 68 69 Args: 70 repo_name: The name of the dependency repository (default is "@maven"). 71 """ 72 native.java_library( 73 name = "dagger", 74 exported_plugins = [":dagger-compiler"], 75 visibility = ["//visibility:public"], 76 exports = [ 77 "%s//:com_google_dagger_dagger" % repo_name, 78 "%s//:javax_inject_javax_inject" % repo_name, 79 ], 80 ) 81 82 native.java_plugin( 83 name = "dagger-compiler", 84 generates_api = 1, 85 processor_class = "dagger.internal.codegen.ComponentProcessor", 86 deps = [ 87 "%s//:com_google_dagger_dagger_compiler" % repo_name, 88 ], 89 ) 90 91 native.java_library( 92 name = "dagger-producers", 93 visibility = ["//visibility:public"], 94 exports = [ 95 ":dagger", 96 "%s//:com_google_dagger_dagger_producers" % repo_name, 97 ], 98 ) 99 100 native.java_library( 101 name = "dagger-spi", 102 visibility = ["//visibility:public"], 103 exports = [ 104 "%s//:com_google_dagger_dagger_spi" % repo_name, 105 ], 106 ) 107 108# https://github.com/bazelbuild/buildtools/blob/master/WARNINGS.md#unnamed-macro 109# buildifier: disable=unnamed-macro 110def dagger_android_rules(repo_name = "@maven"): 111 """Defines the Dagger Android targets with proper exported dependencies and plugins. 112 113 The targets will be of the form ":<artifact-id>". 114 115 Args: 116 repo_name: The name of the dependency repository (default is "@maven"). 117 """ 118 119 # https://github.com/bazelbuild/buildtools/blob/master/WARNINGS.md#native-android 120 # buildifier: disable=native-android 121 native.android_library( 122 name = "dagger-android", 123 exported_plugins = [":dagger-android-processor"], 124 visibility = ["//visibility:public"], 125 exports = [ 126 "%s//:com_google_dagger_dagger_android" % repo_name, 127 ], 128 ) 129 130 # https://github.com/bazelbuild/buildtools/blob/master/WARNINGS.md#native-android 131 # buildifier: disable=native-android 132 native.android_library( 133 name = "dagger-android-support", 134 exported_plugins = [":dagger-android-processor"], 135 visibility = ["//visibility:public"], 136 exports = [ 137 ":dagger-android", 138 "%s//:com_google_dagger_dagger_android_support" % repo_name, 139 ], 140 ) 141 142 native.java_plugin( 143 name = "dagger-android-processor", 144 generates_api = 1, 145 processor_class = "dagger.android.processor.AndroidProcessor", 146 deps = [ 147 "%s//:com_google_dagger_dagger_android_processor" % repo_name, 148 ], 149 ) 150 151# https://github.com/bazelbuild/buildtools/blob/master/WARNINGS.md#unnamed-macro 152# buildifier: disable=unnamed-macro 153def hilt_android_rules(repo_name = "@maven"): 154 """Defines the Hilt Android targets with proper exported dependencies and plugins. 155 156 The targets will be of the form ":<artifact-id>". 157 158 Args: 159 repo_name: The name of the dependency repository (default is "@maven"). 160 """ 161 162 # https://github.com/bazelbuild/buildtools/blob/master/WARNINGS.md#native-android 163 # buildifier: disable=native-android 164 native.android_library( 165 name = "hilt-android", 166 exported_plugins = [ 167 ":hilt_dagger_compiler", 168 ":hilt_android_entry_point_processor", 169 ":hilt_aggregated_deps_processor", 170 ":hilt_alias_of_processor", 171 ":hilt_define_component_processor", 172 ":hilt_early_entry_points_processor", 173 ":hilt_generates_root_input_processor", 174 ":hilt_originating_element_processor", 175 ":hilt_root_processor", 176 ":hilt_component_tree_deps_processor", 177 ":hilt_view_model_processor", 178 ], 179 visibility = ["//visibility:public"], 180 exports = [ 181 "%s//:com_google_dagger_dagger" % repo_name, # For Dagger APIs 182 "%s//:javax_inject_javax_inject" % repo_name, # For @Inject 183 "%s//:androidx_annotation_annotation" % repo_name, # For @CallSuper 184 "%s//:com_google_dagger_hilt_android" % repo_name, 185 "%s//:com_google_dagger_hilt_core" % repo_name, 186 "%s//:javax_annotation_javax_annotation_api" % repo_name, # For @Generated 187 ], 188 ) 189 190 # This target is same as dagger-compiler, but we're redefining it here 191 # so that users don't have to call dagger_rules() first. 192 native.java_plugin( 193 name = "hilt_dagger_compiler", 194 generates_api = 1, 195 processor_class = "dagger.internal.codegen.ComponentProcessor", 196 deps = [ 197 "%s//:com_google_dagger_dagger_compiler" % repo_name, 198 ], 199 ) 200 201 native.java_plugin( 202 name = "hilt_android_entry_point_processor", 203 generates_api = 1, 204 processor_class = "dagger.hilt.android.processor.internal.androidentrypoint.AndroidEntryPointProcessor", 205 deps = ["%s//:com_google_dagger_hilt_android_compiler" % repo_name], 206 ) 207 208 native.java_plugin( 209 name = "hilt_aggregated_deps_processor", 210 generates_api = 1, 211 processor_class = "dagger.hilt.processor.internal.aggregateddeps.AggregatedDepsProcessor", 212 deps = ["%s//:com_google_dagger_hilt_android_compiler" % repo_name], 213 ) 214 215 native.java_plugin( 216 name = "hilt_alias_of_processor", 217 generates_api = 1, 218 processor_class = "dagger.hilt.processor.internal.aliasof.AliasOfProcessor", 219 deps = ["%s//:com_google_dagger_hilt_android_compiler" % repo_name], 220 ) 221 222 native.java_plugin( 223 name = "hilt_define_component_processor", 224 generates_api = 1, 225 processor_class = "dagger.hilt.processor.internal.definecomponent.DefineComponentProcessor", 226 deps = ["%s//:com_google_dagger_hilt_android_compiler" % repo_name], 227 ) 228 229 native.java_plugin( 230 name = "hilt_early_entry_points_processor", 231 generates_api = 1, 232 processor_class = "dagger.hilt.processor.internal.earlyentrypoint.EarlyEntryPointProcessor", 233 deps = ["%s//:com_google_dagger_hilt_android_compiler" % repo_name], 234 ) 235 236 native.java_plugin( 237 name = "hilt_generates_root_input_processor", 238 generates_api = 1, 239 processor_class = "dagger.hilt.processor.internal.generatesrootinput.GeneratesRootInputProcessor", 240 deps = ["%s//:com_google_dagger_hilt_android_compiler" % repo_name], 241 ) 242 243 native.java_plugin( 244 name = "hilt_originating_element_processor", 245 generates_api = 1, 246 processor_class = "dagger.hilt.processor.internal.originatingelement.OriginatingElementProcessor", 247 deps = ["%s//:com_google_dagger_hilt_android_compiler" % repo_name], 248 ) 249 250 native.java_plugin( 251 name = "hilt_root_processor", 252 generates_api = 1, 253 processor_class = "dagger.hilt.processor.internal.root.RootProcessor", 254 deps = ["%s//:com_google_dagger_hilt_android_compiler" % repo_name], 255 ) 256 257 native.java_plugin( 258 name = "hilt_component_tree_deps_processor", 259 generates_api = 1, 260 processor_class = "dagger.hilt.processor.internal.root.ComponentTreeDepsProcessor", 261 deps = ["%s//:com_google_dagger_hilt_android_compiler" % repo_name], 262 ) 263 264 native.java_plugin( 265 name = "hilt_view_model_processor", 266 generates_api = 1, 267 processor_class = "dagger.hilt.android.processor.internal.viewmodel.ViewModelProcessor", 268 deps = ["%s//:com_google_dagger_hilt_android_compiler" % repo_name], 269 ) 270 271 # https://github.com/bazelbuild/buildtools/blob/master/WARNINGS.md#native-android 272 # buildifier: disable=native-android 273 native.android_library( 274 name = "hilt-android-testing", 275 testonly = 1, 276 exported_plugins = [ 277 ":hilt_bind_value_processor", 278 ":hilt_custom_test_application_processor", 279 ":hilt_uninstall_modules_processor", 280 ], 281 visibility = ["//visibility:public"], 282 exports = [ 283 ":hilt-android", 284 "%s//:androidx_test_core" % repo_name, # For ApplicationProvider 285 "%s//:com_google_dagger_hilt_android_testing" % repo_name, 286 ], 287 ) 288 289 native.java_plugin( 290 name = "hilt_bind_value_processor", 291 generates_api = 1, 292 processor_class = "dagger.hilt.android.processor.internal.bindvalue.BindValueProcessor", 293 deps = ["%s//:com_google_dagger_hilt_android_compiler" % repo_name], 294 ) 295 296 native.java_plugin( 297 name = "hilt_custom_test_application_processor", 298 generates_api = 1, 299 processor_class = "dagger.hilt.android.processor.internal.customtestapplication.CustomTestApplicationProcessor", 300 deps = ["%s//:com_google_dagger_hilt_android_compiler" % repo_name], 301 ) 302 303 native.java_plugin( 304 name = "hilt_uninstall_modules_processor", 305 generates_api = 1, 306 processor_class = "dagger.hilt.processor.internal.uninstallmodules.UninstallModulesProcessor", 307 deps = ["%s//:com_google_dagger_hilt_android_compiler" % repo_name], 308 ) 309