• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (C) 2017 The Dagger 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# Description:
16#   A JSR-330 compliant dependency injection system for android and java
17
18package(default_visibility = ["//:src"])
19
20load("//:build_defs.bzl", "DOCLINT_HTML_AND_SYNTAX", "DOCLINT_REFERENCES")
21load("//tools:maven.bzl", "POM_VERSION", "pom_file")
22
23EXPERIMENTAL_VISUALIZER_SRCS = ["BindingNetworkVisualizer.java"]
24
25JAVAC_PLUGIN_MODULE_SRCS = ["JavacPluginModule.java"]
26
27KYTHE_SRCS = ["DaggerKythePlugin.java"]
28
29STATISTICS_COLLECTOR_SRCS = ["BindingGraphStatisticsCollector.java"]
30
31CODEGEN_SRCS = glob(
32    ["*.java"],
33    exclude = EXPERIMENTAL_VISUALIZER_SRCS + KYTHE_SRCS + STATISTICS_COLLECTOR_SRCS +
34              JAVAC_PLUGIN_MODULE_SRCS,
35)
36
37CODEGEN_PLUGINS = [":bootstrap_compiler_plugin"]
38
39CODEGEN_SHARED_DEPS = [
40    "@google_bazel_common//third_party/java/auto:service",
41    "@google_bazel_common//third_party/java/auto:value",
42    "@google_bazel_common//third_party/java/auto:common",
43    "@google_bazel_common//third_party/java/checker_framework_annotations",
44    "@google_bazel_common//third_party/java/error_prone:annotations",
45    "@google_bazel_common//third_party/java/google_java_format",
46    "@google_bazel_common//third_party/java/javapoet",
47    "@bazel_tools//tools/jdk:langtools-neverlink",
48    "@google_bazel_common//third_party/java/jsr250_annotations",
49    "@google_bazel_common//third_party/java/jsr330_inject",
50    "//java/dagger:core",
51    "//java/dagger/internal/codegen/serialization",
52    "//java/dagger/producers",
53    "//java/dagger/model",
54    "//java/dagger/spi",
55    "//java/dagger/model:internal-proxies",
56]
57
58CODEGEN_DEPS = CODEGEN_SHARED_DEPS + [
59    ":jdk-and-guava-extras",
60    "@google_bazel_common//third_party/java/guava",
61]
62
63# Extra features for the JDK and Guava. This code is merged into both
64# the dagger-compiler and dagger-spi artifacts that are sent to Maven
65java_library(
66    name = "jdk-and-guava-extras",
67    srcs = [
68        "DaggerGraphs.java",
69        "DaggerStreams.java",
70        "Optionals.java",
71    ],
72    plugins = CODEGEN_PLUGINS,
73    tags = ["maven:merged"],
74    deps = [
75        "@google_bazel_common//third_party/java/guava",
76    ],
77)
78
79# Common types needed across all of the codegen package
80java_library(
81    name = "base",
82    srcs = [
83        "AnnotationProtoConverter.java",
84        "ClearableCache.java",
85        "CompilerOptions.java",
86        "ComponentAnnotation.java",
87        "ContributionType.java",
88        "DaggerStatistics.java",
89        "DaggerStatisticsCollectingProcessingStep.java",
90        "DaggerStatisticsCollector.java",
91        "DaggerStatisticsRecorder.java",
92        "DiagnosticFormatting.java",
93        "ElementFormatter.java",
94        "FeatureStatus.java",
95        "Formatter.java",
96        "ForwardingCompilerOptions.java",
97        "FrameworkTypes.java",
98        "InjectionAnnotations.java",
99        "Keys.java",
100        "MapKeyAccessibility.java",
101        "MapType.java",
102        "ModuleAnnotation.java",
103        "MoreAnnotationMirrors.java",
104        "MoreAnnotationValues.java",
105        "MultibindingAnnotations.java",
106        "OptionalType.java",
107        "ProcessingEnvironmentCompilerOptions.java",
108        "ProcessingOptions.java",
109        "RequestKinds.java",
110        "Scopes.java",
111        "SetType.java",
112        "SimpleAnnotationMirror.java",
113        "SimpleTypeAnnotationValue.java",
114        "SourceFileGenerationException.java",  # Used in :writing and :processor
115        "SourceFileGenerator.java",  # Needed by InjectBindingRegistry in :binding and also :writing
116        "TypeCheckingProcessingStep.java",
117        "TypeProtoConverter.java",
118        "UniqueNameSet.java",
119        "Util.java",
120        "ValidationType.java",
121        "package-info.java",
122    ],
123    plugins = CODEGEN_PLUGINS,
124    tags = ["maven:merged"],
125    deps = CODEGEN_DEPS + [
126        "//java/dagger/internal/codegen/javapoet",
127        "//java/dagger/internal/codegen/langmodel",
128    ],
129)
130
131# Classes that help to build a model of the binding graph
132java_library(
133    name = "binding",
134    srcs = [
135        "AnnotationExpression.java",
136        "Binding.java",
137        "BindingDeclaration.java",
138        "BindingDeclarationFormatter.java",
139        "BindingFactory.java",
140        "BindingGraph.java",
141        "BindingGraphConverter.java",
142        "BindingGraphFactory.java",
143        "BindingNode.java",
144        "BindingRequest.java",
145        "BindingType.java",
146        "BindsTypeChecker.java",
147        "ChildFactoryMethodEdgeImpl.java",
148        "ComponentCreatorAnnotation.java",
149        "ComponentCreatorDescriptor.java",
150        "ComponentCreatorKind.java",
151        "ComponentDescriptor.java",
152        "ComponentDescriptorFactory.java",
153        "ComponentKind.java",
154        "ComponentNodeImpl.java",
155        "ComponentRequirement.java",
156        "ComponentTreeTraverser.java",
157        "ConfigurationAnnotations.java",  # Uses ModuleDescriptors
158        "ContributionBinding.java",
159        "DelegateDeclaration.java",
160        "DependencyEdgeImpl.java",
161        "DependencyRequestFactory.java",
162        "DependencyRequestFormatter.java",
163        "DependencyVariableNamer.java",  # Used by SourceFiles
164        "ErrorMessages.java",  # Consider splitting this up as it pulls in too much
165        "FrameworkDependency.java",
166        "FrameworkField.java",  # Used by SourceFiles
167        "FrameworkType.java",
168        "FrameworkTypeMapper.java",
169        "InjectBindingRegistry.java",
170        "InjectionSiteFactory.java",
171        "KeyFactory.java",
172        "KeyVariableNamer.java",  # needs ConfigurationAnnotations, SourceFiles
173        "MapKeys.java",
174        "MembersInjectionBinding.java",
175        "MethodSignature.java",
176        "MethodSignatureFormatter.java",
177        "ModuleDescriptor.java",
178        "ModuleKind.java",
179        "MultibindingDeclaration.java",
180        "OptionalBindingDeclaration.java",
181        "ProductionBinding.java",
182        "ProvisionBinding.java",
183        "ResolvedBindings.java",
184        "SourceFiles.java",  # Consider splitting this up?
185        "SubcomponentCreatorBindingEdgeImpl.java",
186        "SubcomponentDeclaration.java",
187    ],
188    plugins = CODEGEN_PLUGINS,
189    tags = ["maven:merged"],
190    deps = CODEGEN_DEPS + [
191        ":base",
192        "//java/dagger/internal/codegen/langmodel",
193        "//java/dagger/internal/codegen/javapoet",
194    ],
195)
196
197# Code related to validating the user-written Dagger code
198java_library(
199    name = "validation",
200    srcs = [
201        "AnyBindingMethodValidator.java",
202        "BindingElementValidator.java",
203        "BindingGraphPlugins.java",
204        "BindingGraphValidator.java",
205        "BindingMethodProcessingStep.java",
206        "BindingMethodValidator.java",
207        "BindsInstanceElementValidator.java",
208        "BindsInstanceMethodValidator.java",
209        "BindsInstanceParameterValidator.java",
210        "BindsInstanceProcessingStep.java",
211        "BindsMethodValidator.java",
212        "BindsOptionalOfMethodValidator.java",
213        "ComponentCreatorValidator.java",
214        "ComponentDescriptorValidator.java",
215        "ComponentHierarchyValidator.java",
216        "ComponentValidator.java",
217        "DependencyRequestValidator.java",
218        "DiagnosticReporterFactory.java",
219        "InjectValidator.java",
220        "MapKeyValidator.java",
221        "MembersInjectionValidator.java",
222        "ModuleValidator.java",
223        "MultibindingAnnotationsProcessingStep.java",
224        "MultibindsMethodValidator.java",
225        "ProducesMethodValidator.java",
226        "ProvidesMethodValidator.java",
227        "Validation.java",
228        "ValidationReport.java",
229    ],
230    plugins = CODEGEN_PLUGINS,
231    tags = ["maven:merged"],
232    deps = CODEGEN_DEPS + [
233        ":base",
234        ":binding",
235        "//java/dagger/internal/codegen/langmodel",
236    ],
237)
238
239java_library(
240    name = "binding_graph_validation",
241    srcs = [
242        "DependencyCycleValidator.java",
243        "DependsOnProductionExecutorValidator.java",
244        "DuplicateBindingsValidator.java",
245        "IncompatiblyScopedBindingsValidator.java",
246        "InjectBindingValidator.java",
247        "MapMultibindingValidator.java",
248        "MissingBindingValidator.java",
249        "NullableBindingValidator.java",
250        "ProvisionDependencyOnProducerBindingValidator.java",
251        "SubcomponentFactoryMethodValidator.java",
252    ],
253    plugins = CODEGEN_PLUGINS,
254    tags = ["maven:merged"],
255    deps = CODEGEN_DEPS + [
256        ":base",
257        ":binding",
258        ":validation",
259        "//java/dagger/internal/codegen/langmodel",
260    ],
261)
262
263# Classes that assemble the model of the generated code and write to the Filer
264java_library(
265    name = "writing",
266    srcs = [
267        "AnnotationCreatorGenerator.java",
268        "AnonymousProviderCreationExpression.java",
269        "BindingExpression.java",
270        "ComponentBindingExpressions.java",
271        "ComponentCreatorImplementation.java",
272        "ComponentImplementation.java",
273        "ComponentInstanceBindingExpression.java",
274        "ComponentMethodBindingExpression.java",
275        "ComponentProvisionBindingExpression.java",
276        "ComponentRequirementBindingExpression.java",
277        "ComponentRequirementExpression.java",
278        "ComponentRequirementExpressions.java",
279        "DeferredModifiableBindingExpression.java",
280        "DelegateBindingExpression.java",
281        "DelegatingFrameworkInstanceCreationExpression.java",
282        "DependencyMethodProducerCreationExpression.java",
283        "DependencyMethodProviderCreationExpression.java",
284        "DerivedFromFrameworkInstanceBindingExpression.java",
285        "FactoryGenerator.java",
286        "FrameworkFieldInitializer.java",
287        "FrameworkInstanceBindingExpression.java",
288        "FrameworkInstanceSupplier.java",
289        "GenerationCompilerOptions.java",
290        "GwtCompatibility.java",
291        "HjarSourceFileGenerator.java",
292        "ImmediateFutureBindingExpression.java",
293        "InaccessibleMapKeyProxyGenerator.java",
294        "InjectionMethod.java",
295        "InjectionMethods.java",
296        "InjectionOrProvisionProviderCreationExpression.java",
297        "InnerSwitchingProviders.java",
298        "InstanceFactoryCreationExpression.java",
299        "MapBindingExpression.java",
300        "MapFactoryCreationExpression.java",
301        "MemberSelect.java",
302        "MembersInjectionBindingExpression.java",
303        "MembersInjectionMethods.java",
304        "MembersInjectorGenerator.java",
305        "MembersInjectorProviderCreationExpression.java",
306        "MethodBindingExpression.java",
307        "MissingBindingExpression.java",
308        "ModifiableAbstractMethodBindingExpression.java",
309        "ModifiableBindingExpressions.java",
310        "ModifiableBindingMethods.java",
311        "ModifiableBindingType.java",
312        "ModifiableConcreteMethodBindingExpression.java",
313        "ModuleConstructorProxyGenerator.java",
314        "ModuleGenerator.java",
315        "ModuleProxies.java",
316        "MonitoringModuleGenerator.java",
317        "MonitoringModuleProcessingStep.java",
318        "MultibindingExpression.java",
319        "MultibindingFactoryCreationExpression.java",
320        "OptionalBindingExpression.java",
321        "OptionalFactories.java",
322        "OptionalFactoryInstanceCreationExpression.java",
323        "ParentComponent.java",
324        "PerComponentImplementation.java",
325        "PerGeneratedFile.java",
326        "PrivateMethodBindingExpression.java",
327        "ProducerCreationExpression.java",
328        "ProducerEntryPointView.java",
329        "ProducerFactoryGenerator.java",
330        "ProducerFromProviderCreationExpression.java",
331        "ProducerNodeInstanceBindingExpression.java",
332        "ProviderInstanceBindingExpression.java",
333        "PrunedConcreteMethodBindingExpression.java",
334        "SetBindingExpression.java",
335        "SetFactoryCreationExpression.java",
336        "SimpleInvocationBindingExpression.java",
337        "SimpleMethodBindingExpression.java",
338        "SubcomponentCreatorBindingExpression.java",
339        "SubcomponentNames.java",
340        "SwitchingProviders.java",
341        "TopLevel.java",
342        "UnwrappedMapKeyGenerator.java",
343    ],
344    plugins = CODEGEN_PLUGINS,
345    tags = ["maven:merged"],
346    deps = CODEGEN_DEPS + [
347        ":base",
348        ":binding",
349        "//java/dagger/internal/codegen/javapoet",
350        "//java/dagger/internal/codegen/langmodel",
351    ],
352)
353
354# The processor's "main", if you will
355java_library(
356    name = "processor",
357    srcs = [
358        "BindingGraphValidationModule.java",
359        "BindingMethodValidatorsModule.java",
360        "ComponentCreatorImplementationFactory.java",
361        "ComponentGenerator.java",
362        "ComponentHjarProcessingStep.java",
363        "ComponentImplementationBuilder.java",
364        "ComponentImplementationFactory.java",
365        "ComponentProcessingStep.java",
366        "ComponentProcessor.java",
367        "CurrentImplementationSubcomponent.java",
368        "DeserializedComponentImplementationBuilder.java",
369        "GenerationOptionsModule.java",
370        "InjectBindingRegistryImpl.java",
371        "InjectBindingRegistryModule.java",
372        "InjectProcessingStep.java",
373        "MapKeyProcessingStep.java",
374        "ModuleProcessingStep.java",
375        "ProcessingEnvironmentModule.java",
376        "ProcessingRoundCacheModule.java",
377        "SourceFileGeneratorsModule.java",
378        "SpiModule.java",
379        "SystemComponentsModule.java",
380        "TopLevelImplementationComponent.java",
381    ],
382    plugins = CODEGEN_PLUGINS,
383    tags = ["maven_coordinates=com.google.dagger:dagger-compiler:" + POM_VERSION],
384    deps = CODEGEN_DEPS + [
385        ":base",
386        ":binding",
387        ":binding_graph_validation",
388        ":writing",
389        ":validation",
390        "//java/dagger/internal/codegen/javapoet",
391        "//java/dagger/internal/codegen/langmodel",
392        "@google_bazel_common//third_party/java/incap",
393    ],
394)
395
396pom_file(
397    name = "pom",
398    artifact_id = "dagger-compiler",
399    artifact_name = "Dagger Compiler",
400    targets = [
401        ":processor",
402        ":base",
403        ":binding",
404        ":binding_graph_validation",
405        ":writing",
406        ":validation",
407        "//java/dagger/internal/codegen/serialization",
408        "//java/dagger/internal/codegen/javapoet",
409    ],
410)
411
412java_library(
413    name = "javac-plugin-module",
414    srcs = JAVAC_PLUGIN_MODULE_SRCS,
415    plugins = [":component-codegen"],
416    visibility = ["//visibility:private"],
417    deps = [
418        ":base",
419        ":binding",
420        ":javac",
421        ":processor",
422        "//java/dagger:core",
423        "//java/dagger/internal/codegen/langmodel",
424    ],
425)
426
427java_library(
428    name = "kythe",
429    srcs = KYTHE_SRCS,
430    plugins = [":component-codegen"],
431    deps = [
432        ":base",
433        ":binding",
434        ":javac",
435        ":javac-plugin-module",
436        ":kythe_plugin",
437        ":processor",
438        "//java/dagger:core",
439        "//java/dagger/internal/codegen/langmodel",
440        "//java/dagger/model",
441        "//java/dagger/producers",
442        "@google_bazel_common//third_party/java/auto:common",
443        "@google_bazel_common//third_party/java/auto:service",
444        "@google_bazel_common//third_party/java/guava",
445    ],
446)
447
448# Replacement for @bazel_tools//third_party/java/jdk/langtools:javac, which seems to have gone away?
449java_import(
450    name = "javac",
451    jars = ["@bazel_tools//third_party/java/jdk/langtools:javac_jar"],
452)
453
454# A _deploy.jar consisting of the java_librarys in https://github.com/kythe/kythe needed to build a
455# Kythe plugin
456# TODO(ronshapiro): replace this with a http_archive of the next release in
457# https://github.com/kythe/kythe/releases
458java_import(
459    name = "kythe_plugin",
460    jars = ["kythe_plugin_deploy.jar"],
461    neverlink = 1,
462)
463
464java_import(
465    name = "bootstrap_compiler",
466    jars = ["bootstrap_compiler_deploy.jar"],
467    visibility = ["//visibility:private"],
468)
469
470java_plugin(
471    name = "bootstrap_compiler_plugin",
472    generates_api = 1,
473    processor_class = "dagger.internal.codegen.ComponentProcessor",
474    deps = [":bootstrap_compiler"],
475)
476
477load("@google_bazel_common//tools/javadoc:javadoc.bzl", "javadoc_library")
478
479javadoc_library(
480    name = "codegen-javadoc",
481    srcs = CODEGEN_SRCS,
482    root_packages = ["dagger.internal.codegen"],
483    deps = [":processor"],
484)
485
486java_library(
487    name = "check-package-javadoc",
488    testonly = 1,
489    srcs = CODEGEN_SRCS,
490    javacopts = DOCLINT_HTML_AND_SYNTAX + DOCLINT_REFERENCES,
491    plugins = CODEGEN_PLUGINS,
492    deps = CODEGEN_DEPS + [
493        "//java/dagger/internal/codegen/langmodel",
494        "//java/dagger/internal/codegen/javapoet",
495        "@google_bazel_common//third_party/java/incap",
496    ],
497)
498
499java_plugin(
500    name = "component-codegen",
501    generates_api = 1,
502    output_licenses = ["unencumbered"],
503    processor_class = "dagger.internal.codegen.ComponentProcessor",
504    tags = [
505        "annotation=dagger.Component;" +
506        "genclass=${package}.Dagger${outerclasses}${classname}",
507        "annotation=dagger.producers.ProductionComponent;" +
508        "genclass=${package}.Dagger${outerclasses}${classname}",
509    ],
510    deps = [":processor"],
511)
512
513java_library(
514    name = "statistics",
515    srcs = STATISTICS_COLLECTOR_SRCS,
516    plugins = [":component-codegen"],
517    deps = [
518        ":base",
519        ":binding",
520        ":javac",
521        ":javac-plugin-module",
522        ":processor",
523        "//java/dagger:core",
524        "//java/dagger/model",
525        "@google_bazel_common//third_party/java/error_prone:check_api",
526    ],
527)
528