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