xref: /aosp_15_r20/external/dagger2/Android.bp (revision f585d8a307d0621d6060bd7e80091fdcbf94fe27)
1// Copyright (C) 2015 The Android Open Source Project
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
15package {
16    default_visibility: [":__subpackages__"],
17    default_applicable_licenses: ["external_dagger2_license"],
18}
19
20// Added automatically by a large-scale-change that took the approach of
21// 'apply every license found to every target'. While this makes sure we respect
22// every license restriction, it may not be entirely correct.
23//
24// e.g. GPL in an MIT project might only apply to the contrib/ directory.
25//
26// Please consider splitting the single license below into multiple licenses,
27// taking care not to lose any license_kind information, and overriding the
28// default license using the 'licenses: [...]' property on targets as needed.
29//
30// For unused files, consider creating a 'fileGroup' with "//visibility:private"
31// to attach the license to, and including a comment whether the files may be
32// used in the current project.
33//
34// large-scale-change included anything that looked like it might be a license
35// text as a license_text. e.g. LICENSE, NOTICE, COPYING etc.
36//
37// Please consider removing redundant or irrelevant files from 'license_text:'.
38// See: http://go/android-license-faq
39license {
40    name: "external_dagger2_license",
41    visibility: [":__subpackages__"],
42    license_kinds: [
43        "SPDX-license-identifier-Apache-2.0",
44        "legacy_not_a_contribution",
45    ],
46    license_text: [
47        "LICENSE.txt",
48    ],
49}
50
51java_import_host {
52    name: "dagger2-bootstrap-compiler-jar",
53    jars: ["java/dagger/internal/codegen/bootstrap/bootstrap_compiler_deploy.jar"],
54}
55
56java_plugin {
57    name: "dagger2-bootstrap-compiler",
58    processor_class: "dagger.internal.codegen.ComponentProcessor",
59    generates_api: true,
60    static_libs: ["dagger2-bootstrap-compiler-jar"],
61    jarjar_rules: "jarjar-rules.txt",
62}
63
64java_library {
65    name: "dagger2",
66    visibility: ["//visibility:public"],
67    host_supported: true,
68
69    srcs: [
70        "java/dagger/*.java",
71        "java/dagger/assisted/*.java",
72        "java/dagger/internal/*.java",
73        "java/dagger/multibindings/*.java",
74        "java/dagger/releasablereferences/*.java",
75    ],
76    exclude_srcs: ["java/dagger/android/**/*.java"],
77
78    libs: [
79        "guava",
80        "jsr330",
81    ],
82    apex_available: [
83        "//apex_available:platform",
84        "com.android.adservices",
85        "com.android.extservices",
86        "com.android.devicelock",
87        "com.android.healthfitness",
88        "com.android.mediaprovider",
89        "com.android.ondevicepersonalization",
90    ],
91
92    sdk_version: "core_current",
93
94    errorprone: {
95        javacflags: [
96            "-Xep:FormatStringAnnotation:WARN",
97            "-Xep:NoCanIgnoreReturnValueOnClasses:WARN",
98        ],
99    },
100}
101
102// build dagger2 producers library
103// ============================================================
104
105java_library {
106    name: "dagger2-producers",
107    host_supported: true,
108
109    srcs: ["java/dagger/producers/**/*.java"],
110
111    static_libs: [
112        "error_prone_annotations",
113    ],
114
115    libs: [
116        "dagger2",
117        "dagger2-android-annotation-stubs",
118        "guava",
119        "jsr330",
120    ],
121
122    sdk_version: "core_current",
123}
124
125// build dagger2 compiler plugin
126// ============================================================
127
128java_plugin {
129    name: "dagger2-compiler",
130    visibility: ["//visibility:public"],
131    processor_class: "dagger.internal.codegen.ComponentProcessor",
132    generates_api: true,
133    static_libs: ["dagger2-compiler-lib"],
134    // shade guava to avoid conflicts with guava embedded in Error Prone.
135    jarjar_rules: "jarjar-rules.txt",
136}
137
138// Dagger distributes its own copy of androidx.room.compiler.processing
139// while the API is unstable.  There are shading rules in jarjar-rules.txt
140// to prevent conflicts with official version.  When this is removed
141// in favor of the official version the shading rules should also be
142// removed.
143java_import_host {
144    name: "dagger2-room-compiler-processing",
145    jars: ["java/dagger/internal/codegen/xprocessing/xprocessing.jar"],
146}
147
148java_library_host {
149    name: "dagger2-compiler-lib",
150    use_tools_jar: true,
151    visibility: ["//visibility:public"],
152
153    srcs: [
154        "java/dagger/internal/codegen/**/*.java",
155        "java/dagger/internal/codegen/**/*.proto",
156
157        "java/dagger/model/*.java",
158        "java/dagger/spi/*.java",
159        "java/dagger/spi/model/*.java",
160        "java/dagger/spi/model/*.kt",
161    ],
162
163    exclude_srcs: [
164        "java/dagger/internal/codegen/BindingGraphStatisticsCollector.java",
165        "java/dagger/internal/codegen/kythe/DaggerKythePlugin.java",
166    ],
167
168    static_libs: [
169        "auto_common",
170        "dagger2",
171        "dagger2-producers",
172        "dagger2-room-compiler-processing",
173        "google_java_format",
174        "guava",
175        "javapoet",
176        "jsr330",
177        "kotlin_symbol_processing_api",
178        "kotlin-stdlib",
179        "kotlin-stdlib-jdk8",
180        "kotlinpoet",
181        "kotlinx_metadata_jvm",
182    ],
183
184    libs: [
185        "auto_factory_annotations",
186        "auto_service_annotations",
187        "auto_value_annotations",
188        "auto_value_memoized_extension_annotations",
189        "dagger2-android-annotation-stubs",
190    ],
191
192    plugins: [
193        "auto_factory_plugin",
194        "auto_service_plugin",
195        "auto_value_plugin",
196        "auto_value_memoized_extension_plugin",
197        "auto_annotation_plugin",
198        "dagger2-bootstrap-compiler",
199    ],
200
201    proto: {
202        type: "full",
203        include_dirs: ["external/protobuf/src/"],
204    },
205
206    // From Java 9 onward com.sun.tools.javac is not visible by default
207    javacflags: [
208        "--add-modules=jdk.compiler",
209        "--add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED",
210        "--add-exports jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED",
211        "--add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED",
212        "--add-exports jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED",
213        "--add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED",
214        "--add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED",
215        "--add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED",
216    ],
217
218    errorprone: {
219        javacflags: [
220            "-Xep:FormatStringAnnotation:WARN",
221            "-Xep:NoCanIgnoreReturnValueOnClasses:WARN",
222        ],
223    },
224}
225
226// Compile  dummy implementations of annotations used by dagger2 but not
227// present in the Android tree.
228java_library {
229    name: "dagger2-android-annotation-stubs",
230    host_supported: true,
231    sdk_version: "core_current",
232    srcs: ["android-annotation-stubs/src/**/*.java"],
233}
234
235// build core hilt library
236
237java_library {
238    name: "hilt_core",
239    srcs: [
240        "java/dagger/hilt/*.java",
241        "java/dagger/hilt/codegen/*.java",
242        "java/dagger/hilt/components/*.java",
243        "java/dagger/hilt/internal/*.java",
244        "java/dagger/hilt/internal/aliasof/*.java",
245        "java/dagger/hilt/internal/definecomponent/*.java",
246        "java/dagger/hilt/internal/generatesrootinput/*.java",
247        "java/dagger/hilt/migration/*.java",
248        "java/dagger/hilt/processor/internal/aggregateddeps/AggregatedDeps.java",
249    ],
250    static_libs: [
251        "jsr305",
252        "jsr330",
253        "dagger2",
254    ],
255    sdk_version: "core_current",
256    plugins: [
257        "hilt_define_component_processor",
258        "hilt_generates_root_input_processor",
259    ],
260    apex_available: [
261        "//apex_available:platform",
262        "com.android.healthfitness",
263        "com.android.mediaprovider",
264        "com.android.ondevicepersonalization",
265    ],
266}
267
268// Build the android hilt library.  Depending on this will enable the Hilt annotation processors.
269
270android_library {
271    name: "hilt_android",
272    visibility: ["//visibility:public"],
273
274    srcs: [
275        "java/dagger/hilt/android/*.java",
276        "java/dagger/hilt/android/*.kt",
277        "java/dagger/hilt/android/components/*.java",
278        "java/dagger/hilt/android/flags/*.java",
279        "java/dagger/hilt/android/migration/*.java",
280        "java/dagger/hilt/android/qualifiers/*.java",
281        "java/dagger/hilt/android/scopes/*.java",
282        "java/dagger/hilt/android/internal/*.java",
283        "java/dagger/hilt/android/internal/builders/*.java",
284        "java/dagger/hilt/android/internal/earlyentrypoint/*.java",
285        "java/dagger/hilt/android/internal/legacy/*.java",
286        "java/dagger/hilt/android/internal/lifecycle/*.java",
287        "java/dagger/hilt/android/internal/managers/*.java",
288        "java/dagger/hilt/android/internal/migration/*.java",
289        "java/dagger/hilt/android/internal/modules/*.java",
290        "java/dagger/hilt/android/lifecycle/*.java",
291        "java/dagger/hilt/android/lifecycle/*.kt",
292        "java/dagger/hilt/internal/aggregatedroot/*.java",
293        "java/dagger/hilt/internal/componenttreedeps/*.java",
294        "java/dagger/hilt/internal/processedrootsentinel/*.java",
295    ],
296    manifest: "java/dagger/hilt/android/AndroidManifest.xml",
297    static_libs: [
298        "androidx.activity_activity",
299        "androidx.annotation_annotation",
300        "androidx.fragment_fragment",
301        "androidx.lifecycle_lifecycle-common",
302        "androidx.lifecycle_lifecycle-viewmodel",
303        "androidx.lifecycle_lifecycle-viewmodel-savedstate",
304        "jsr305",
305        "jsr330",
306        "dagger2",
307        "hilt_core",
308    ],
309    sdk_version: "current",
310    min_sdk_version: "21",
311    plugins: [
312        "dagger2-compiler",
313        "hilt_android_entry_point_processor",
314        "hilt_aggregated_deps_processor",
315        "hilt_define_component_processor",
316        "hilt_generates_root_input_processor",
317        "hilt_originating_element_processor",
318        "hilt_root_processor",
319    ],
320    exported_plugins: [
321        "dagger2-compiler",
322
323        "hilt_android_entry_point_processor",
324        "hilt_aggregated_deps_processor",
325        "hilt_alias_of_processor",
326        "hilt_component_tree_deps_processor",
327        "hilt_define_component_processor",
328        "hilt_early_entry_point_processor",
329        "hilt_generates_root_input_processor",
330        "hilt_originating_element_processor",
331        "hilt_root_processor",
332        "hilt_viewmodel_processor",
333    ],
334    apex_available: [
335        "//apex_available:platform",
336        "com.android.healthfitness",
337        "com.android.mediaprovider",
338        "com.android.ondevicepersonalization",
339    ],
340}
341
342android_library {
343    name: "hilt_android_testing",
344    visibility: ["//visibility:public"],
345
346    srcs: [
347        "java/dagger/hilt/android/internal/testing/*.java",
348        "java/dagger/hilt/android/internal/testing/root/*.java",
349        "java/dagger/hilt/android/internal/uninstallmodules/*.java",
350        "java/dagger/hilt/android/testing/*.java",
351        "java/dagger/hilt/testing/*.java",
352    ],
353    manifest: "java/dagger/hilt/android/testing/AndroidManifest.xml",
354    static_libs: [
355        "auto_value_annotations",
356        "androidx.annotation_annotation",
357        "androidx.fragment_fragment",
358        "androidx.annotation_annotation",
359        "androidx.fragment_fragment",
360        "androidx.test.core",
361        "android-support-multidex",
362        "jsr305",
363        "dagger2",
364        "hilt_android",
365        "hilt_core",
366        "junit",
367    ],
368    sdk_version: "current",
369    min_sdk_version: "21",
370    plugins: [
371        "auto_value_plugin",
372        "dagger2-compiler",
373        "hilt_generates_root_input_processor",
374    ],
375    exported_plugins: [
376        "dagger2-compiler",
377
378        "hilt_android_entry_point_processor",
379        "hilt_aggregated_deps_processor",
380        "hilt_alias_of_processor",
381        "hilt_component_tree_deps_processor",
382        "hilt_define_component_processor",
383        "hilt_early_entry_point_processor",
384        "hilt_generates_root_input_processor",
385        "hilt_originating_element_processor",
386        "hilt_root_processor",
387        "hilt_viewmodel_processor",
388
389        "hilt_custom_test_application_processor",
390        "hilt_bindvalue_processor",
391        "hilt_uninstall_modules_processor",
392    ],
393}
394
395// Hilt has many annotation processors.  To reduce compilation and runtime cost, they are all compiled
396// into hilt_android_processors.  A java_plugin can only expose a single processor class, so each has
397// to be defined separately.  Since they are not visible outside this package and will always be
398// exported together, only the first actually contains the annotation processor classes.
399java_plugin {
400    name: "hilt_generates_root_input_processor",
401    generates_api: true,
402    processor_class: "dagger.hilt.processor.internal.generatesrootinput.GeneratesRootInputProcessor",
403    static_libs: ["hilt_android_processors"],
404}
405
406java_plugin {
407    name: "hilt_android_entry_point_processor",
408    generates_api: true,
409    processor_class: "dagger.hilt.android.processor.internal.androidentrypoint.AndroidEntryPointProcessor",
410}
411
412java_plugin {
413    name: "hilt_aggregated_deps_processor",
414    generates_api: true,
415    processor_class: "dagger.hilt.processor.internal.aggregateddeps.AggregatedDepsProcessor",
416}
417
418java_plugin {
419    name: "hilt_alias_of_processor",
420    generates_api: true,
421    processor_class: "dagger.hilt.processor.internal.aliasof.AliasOfProcessor",
422}
423
424java_plugin {
425    name: "hilt_component_tree_deps_processor",
426    generates_api: true,
427    processor_class: "dagger.hilt.processor.internal.root.ComponentTreeDepsProcessor",
428}
429
430java_plugin {
431    name: "hilt_define_component_processor",
432    generates_api: true,
433    processor_class: "dagger.hilt.processor.internal.definecomponent.DefineComponentProcessor",
434}
435
436java_plugin {
437    name: "hilt_early_entry_point_processor",
438    generates_api: true,
439    processor_class: "dagger.hilt.processor.internal.earlyentrypoint.EarlyEntryPointProcessor",
440}
441
442java_plugin {
443    name: "hilt_originating_element_processor",
444    generates_api: true,
445    processor_class: "dagger.hilt.processor.internal.originatingelement.OriginatingElementProcessor",
446}
447
448java_plugin {
449    name: "hilt_root_processor",
450    generates_api: true,
451    processor_class: "dagger.hilt.processor.internal.root.RootProcessor",
452}
453
454java_plugin {
455    name: "hilt_viewmodel_processor",
456    generates_api: true,
457    processor_class: "dagger.hilt.android.processor.internal.viewmodel.ViewModelProcessor",
458}
459
460// Hilt testing processors
461java_plugin {
462    name: "hilt_custom_test_application_processor",
463    generates_api: true,
464    processor_class: "dagger.hilt.android.processor.internal.customtestapplication.CustomTestApplicationProcessor",
465}
466
467java_plugin {
468    name: "hilt_bindvalue_processor",
469    generates_api: true,
470    processor_class: "dagger.hilt.android.processor.internal.bindvalue.BindValueProcessor",
471}
472
473java_plugin {
474    name: "hilt_uninstall_modules_processor",
475    generates_api: true,
476    processor_class: "dagger.hilt.processor.internal.uninstallmodules.UninstallModulesProcessor",
477}
478
479java_library_host {
480    name: "hilt_android_processors",
481    use_tools_jar: true,
482    srcs: [
483        "java/dagger/hilt/android/processor/**/*.java",
484        "java/dagger/hilt/android/processor/**/*.kt",
485        "java/dagger/hilt/codegen/*.java",
486        "java/dagger/hilt/processor/internal/**/*.java",
487        "java/dagger/hilt/processor/internal/**/*.kt",
488    ],
489    exclude_srcs: [
490        // Depends on DefineComponentValidationProcessingStep which is not present in github.
491        "java/dagger/hilt/processor/internal/definecomponent/KspDefineComponentValidationProcessor.java",
492    ],
493    plugins: [
494        "auto_service_plugin",
495        "auto_value_plugin",
496        "auto_value_memoized_extension_plugin",
497        "dagger2-compiler",
498    ],
499    static_libs: [
500        "auto_common",
501        "auto_service_annotations",
502        "auto_value_annotations",
503        "auto_value_memoized_extension_annotations",
504        "guava",
505        "jsr305",
506        "dagger2-compiler-lib",
507        "dagger2",
508        "javapoet",
509        "jsr330",
510        "kotlin-stdlib",
511        "kotlinx_metadata_jvm",
512        "dagger2-android-annotation-stubs",
513    ],
514    // shade guava to avoid conflicts with guava embedded in Error Prone.
515    jarjar_rules: "jarjar-rules.txt",
516}
517