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