| # Copyright (C) 2017 The Dagger Authors. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| # Description: |
| # A JSR-330 compliant dependency injection system for android and java |
| |
| package(default_visibility = ["//:src"]) |
| |
| load("//:build_defs.bzl", "DOCLINT_HTML_AND_SYNTAX", "DOCLINT_REFERENCES") |
| load("//tools:maven.bzl", "POM_VERSION", "pom_file") |
| |
| EXPERIMENTAL_VISUALIZER_SRCS = ["BindingNetworkVisualizer.java"] |
| |
| JAVAC_PLUGIN_MODULE_SRCS = ["JavacPluginModule.java"] |
| |
| KYTHE_SRCS = ["DaggerKythePlugin.java"] |
| |
| STATISTICS_COLLECTOR_SRCS = ["BindingGraphStatisticsCollector.java"] |
| |
| CODEGEN_SRCS = glob( |
| ["*.java"], |
| exclude = EXPERIMENTAL_VISUALIZER_SRCS + KYTHE_SRCS + STATISTICS_COLLECTOR_SRCS + |
| JAVAC_PLUGIN_MODULE_SRCS, |
| ) |
| |
| CODEGEN_PLUGINS = [":bootstrap_compiler_plugin"] |
| |
| CODEGEN_SHARED_DEPS = [ |
| "@google_bazel_common//third_party/java/auto:service", |
| "@google_bazel_common//third_party/java/auto:value", |
| "@google_bazel_common//third_party/java/auto:common", |
| "@google_bazel_common//third_party/java/checker_framework_annotations", |
| "@google_bazel_common//third_party/java/error_prone:annotations", |
| "@google_bazel_common//third_party/java/google_java_format", |
| "@google_bazel_common//third_party/java/javapoet", |
| "@bazel_tools//tools/jdk:langtools-neverlink", |
| "@google_bazel_common//third_party/java/jsr250_annotations", |
| "@google_bazel_common//third_party/java/jsr330_inject", |
| "//java/dagger:core", |
| "//java/dagger/internal/codegen/serialization", |
| "//java/dagger/producers", |
| "//java/dagger/model", |
| "//java/dagger/spi", |
| "//java/dagger/model:internal-proxies", |
| ] |
| |
| CODEGEN_DEPS = CODEGEN_SHARED_DEPS + [ |
| ":jdk-and-guava-extras", |
| "@google_bazel_common//third_party/java/guava", |
| ] |
| |
| # Extra features for the JDK and Guava. This code is merged into both |
| # the dagger-compiler and dagger-spi artifacts that are sent to Maven |
| java_library( |
| name = "jdk-and-guava-extras", |
| srcs = [ |
| "DaggerGraphs.java", |
| "DaggerStreams.java", |
| "Optionals.java", |
| ], |
| plugins = CODEGEN_PLUGINS, |
| tags = ["maven:merged"], |
| deps = [ |
| "@google_bazel_common//third_party/java/guava", |
| ], |
| ) |
| |
| # Common types needed across all of the codegen package |
| java_library( |
| name = "base", |
| srcs = [ |
| "AnnotationProtoConverter.java", |
| "ClearableCache.java", |
| "CompilerOptions.java", |
| "ComponentAnnotation.java", |
| "ContributionType.java", |
| "DaggerStatistics.java", |
| "DaggerStatisticsCollectingProcessingStep.java", |
| "DaggerStatisticsCollector.java", |
| "DaggerStatisticsRecorder.java", |
| "DiagnosticFormatting.java", |
| "ElementFormatter.java", |
| "FeatureStatus.java", |
| "Formatter.java", |
| "ForwardingCompilerOptions.java", |
| "FrameworkTypes.java", |
| "InjectionAnnotations.java", |
| "Keys.java", |
| "MapKeyAccessibility.java", |
| "MapType.java", |
| "ModuleAnnotation.java", |
| "MoreAnnotationMirrors.java", |
| "MoreAnnotationValues.java", |
| "MultibindingAnnotations.java", |
| "OptionalType.java", |
| "ProcessingEnvironmentCompilerOptions.java", |
| "ProcessingOptions.java", |
| "RequestKinds.java", |
| "Scopes.java", |
| "SetType.java", |
| "SimpleAnnotationMirror.java", |
| "SimpleTypeAnnotationValue.java", |
| "SourceFileGenerationException.java", # Used in :writing and :processor |
| "SourceFileGenerator.java", # Needed by InjectBindingRegistry in :binding and also :writing |
| "TypeCheckingProcessingStep.java", |
| "TypeProtoConverter.java", |
| "UniqueNameSet.java", |
| "Util.java", |
| "ValidationType.java", |
| "package-info.java", |
| ], |
| plugins = CODEGEN_PLUGINS, |
| tags = ["maven:merged"], |
| deps = CODEGEN_DEPS + [ |
| "//java/dagger/internal/codegen/javapoet", |
| "//java/dagger/internal/codegen/langmodel", |
| ], |
| ) |
| |
| # Classes that help to build a model of the binding graph |
| java_library( |
| name = "binding", |
| srcs = [ |
| "AnnotationExpression.java", |
| "Binding.java", |
| "BindingDeclaration.java", |
| "BindingDeclarationFormatter.java", |
| "BindingFactory.java", |
| "BindingGraph.java", |
| "BindingGraphConverter.java", |
| "BindingGraphFactory.java", |
| "BindingNode.java", |
| "BindingRequest.java", |
| "BindingType.java", |
| "BindsTypeChecker.java", |
| "ChildFactoryMethodEdgeImpl.java", |
| "ComponentCreatorAnnotation.java", |
| "ComponentCreatorDescriptor.java", |
| "ComponentCreatorKind.java", |
| "ComponentDescriptor.java", |
| "ComponentDescriptorFactory.java", |
| "ComponentKind.java", |
| "ComponentNodeImpl.java", |
| "ComponentRequirement.java", |
| "ComponentTreeTraverser.java", |
| "ConfigurationAnnotations.java", # Uses ModuleDescriptors |
| "ContributionBinding.java", |
| "DelegateDeclaration.java", |
| "DependencyEdgeImpl.java", |
| "DependencyRequestFactory.java", |
| "DependencyRequestFormatter.java", |
| "DependencyVariableNamer.java", # Used by SourceFiles |
| "ErrorMessages.java", # Consider splitting this up as it pulls in too much |
| "FrameworkDependency.java", |
| "FrameworkField.java", # Used by SourceFiles |
| "FrameworkType.java", |
| "FrameworkTypeMapper.java", |
| "InjectBindingRegistry.java", |
| "InjectionSiteFactory.java", |
| "KeyFactory.java", |
| "KeyVariableNamer.java", # needs ConfigurationAnnotations, SourceFiles |
| "MapKeys.java", |
| "MembersInjectionBinding.java", |
| "MethodSignature.java", |
| "MethodSignatureFormatter.java", |
| "ModuleDescriptor.java", |
| "ModuleKind.java", |
| "MultibindingDeclaration.java", |
| "OptionalBindingDeclaration.java", |
| "ProductionBinding.java", |
| "ProvisionBinding.java", |
| "ResolvedBindings.java", |
| "SourceFiles.java", # Consider splitting this up? |
| "SubcomponentCreatorBindingEdgeImpl.java", |
| "SubcomponentDeclaration.java", |
| ], |
| plugins = CODEGEN_PLUGINS, |
| tags = ["maven:merged"], |
| deps = CODEGEN_DEPS + [ |
| ":base", |
| "//java/dagger/internal/codegen/langmodel", |
| "//java/dagger/internal/codegen/javapoet", |
| ], |
| ) |
| |
| # Code related to validating the user-written Dagger code |
| java_library( |
| name = "validation", |
| srcs = [ |
| "AnyBindingMethodValidator.java", |
| "BindingElementValidator.java", |
| "BindingGraphPlugins.java", |
| "BindingGraphValidator.java", |
| "BindingMethodProcessingStep.java", |
| "BindingMethodValidator.java", |
| "BindsInstanceElementValidator.java", |
| "BindsInstanceMethodValidator.java", |
| "BindsInstanceParameterValidator.java", |
| "BindsInstanceProcessingStep.java", |
| "BindsMethodValidator.java", |
| "BindsOptionalOfMethodValidator.java", |
| "ComponentCreatorValidator.java", |
| "ComponentDescriptorValidator.java", |
| "ComponentHierarchyValidator.java", |
| "ComponentValidator.java", |
| "DependencyRequestValidator.java", |
| "DiagnosticReporterFactory.java", |
| "InjectValidator.java", |
| "MapKeyValidator.java", |
| "MembersInjectionValidator.java", |
| "ModuleValidator.java", |
| "MultibindingAnnotationsProcessingStep.java", |
| "MultibindsMethodValidator.java", |
| "ProducesMethodValidator.java", |
| "ProvidesMethodValidator.java", |
| "Validation.java", |
| "ValidationReport.java", |
| ], |
| plugins = CODEGEN_PLUGINS, |
| tags = ["maven:merged"], |
| deps = CODEGEN_DEPS + [ |
| ":base", |
| ":binding", |
| "//java/dagger/internal/codegen/langmodel", |
| ], |
| ) |
| |
| java_library( |
| name = "binding_graph_validation", |
| srcs = [ |
| "DependencyCycleValidator.java", |
| "DependsOnProductionExecutorValidator.java", |
| "DuplicateBindingsValidator.java", |
| "IncompatiblyScopedBindingsValidator.java", |
| "InjectBindingValidator.java", |
| "MapMultibindingValidator.java", |
| "MissingBindingValidator.java", |
| "NullableBindingValidator.java", |
| "ProvisionDependencyOnProducerBindingValidator.java", |
| "SubcomponentFactoryMethodValidator.java", |
| ], |
| plugins = CODEGEN_PLUGINS, |
| tags = ["maven:merged"], |
| deps = CODEGEN_DEPS + [ |
| ":base", |
| ":binding", |
| ":validation", |
| "//java/dagger/internal/codegen/langmodel", |
| ], |
| ) |
| |
| # Classes that assemble the model of the generated code and write to the Filer |
| java_library( |
| name = "writing", |
| srcs = [ |
| "AnnotationCreatorGenerator.java", |
| "AnonymousProviderCreationExpression.java", |
| "BindingExpression.java", |
| "ComponentBindingExpressions.java", |
| "ComponentCreatorImplementation.java", |
| "ComponentImplementation.java", |
| "ComponentInstanceBindingExpression.java", |
| "ComponentMethodBindingExpression.java", |
| "ComponentProvisionBindingExpression.java", |
| "ComponentRequirementBindingExpression.java", |
| "ComponentRequirementExpression.java", |
| "ComponentRequirementExpressions.java", |
| "DeferredModifiableBindingExpression.java", |
| "DelegateBindingExpression.java", |
| "DelegatingFrameworkInstanceCreationExpression.java", |
| "DependencyMethodProducerCreationExpression.java", |
| "DependencyMethodProviderCreationExpression.java", |
| "DerivedFromFrameworkInstanceBindingExpression.java", |
| "FactoryGenerator.java", |
| "FrameworkFieldInitializer.java", |
| "FrameworkInstanceBindingExpression.java", |
| "FrameworkInstanceSupplier.java", |
| "GenerationCompilerOptions.java", |
| "GwtCompatibility.java", |
| "HjarSourceFileGenerator.java", |
| "ImmediateFutureBindingExpression.java", |
| "InaccessibleMapKeyProxyGenerator.java", |
| "InjectionMethod.java", |
| "InjectionMethods.java", |
| "InjectionOrProvisionProviderCreationExpression.java", |
| "InnerSwitchingProviders.java", |
| "InstanceFactoryCreationExpression.java", |
| "MapBindingExpression.java", |
| "MapFactoryCreationExpression.java", |
| "MemberSelect.java", |
| "MembersInjectionBindingExpression.java", |
| "MembersInjectionMethods.java", |
| "MembersInjectorGenerator.java", |
| "MembersInjectorProviderCreationExpression.java", |
| "MethodBindingExpression.java", |
| "MissingBindingExpression.java", |
| "ModifiableAbstractMethodBindingExpression.java", |
| "ModifiableBindingExpressions.java", |
| "ModifiableBindingMethods.java", |
| "ModifiableBindingType.java", |
| "ModifiableConcreteMethodBindingExpression.java", |
| "ModuleConstructorProxyGenerator.java", |
| "ModuleGenerator.java", |
| "ModuleProxies.java", |
| "MonitoringModuleGenerator.java", |
| "MonitoringModuleProcessingStep.java", |
| "MultibindingExpression.java", |
| "MultibindingFactoryCreationExpression.java", |
| "OptionalBindingExpression.java", |
| "OptionalFactories.java", |
| "OptionalFactoryInstanceCreationExpression.java", |
| "ParentComponent.java", |
| "PerComponentImplementation.java", |
| "PerGeneratedFile.java", |
| "PrivateMethodBindingExpression.java", |
| "ProducerCreationExpression.java", |
| "ProducerEntryPointView.java", |
| "ProducerFactoryGenerator.java", |
| "ProducerFromProviderCreationExpression.java", |
| "ProducerNodeInstanceBindingExpression.java", |
| "ProviderInstanceBindingExpression.java", |
| "PrunedConcreteMethodBindingExpression.java", |
| "SetBindingExpression.java", |
| "SetFactoryCreationExpression.java", |
| "SimpleInvocationBindingExpression.java", |
| "SimpleMethodBindingExpression.java", |
| "SubcomponentCreatorBindingExpression.java", |
| "SubcomponentNames.java", |
| "SwitchingProviders.java", |
| "TopLevel.java", |
| "UnwrappedMapKeyGenerator.java", |
| ], |
| plugins = CODEGEN_PLUGINS, |
| tags = ["maven:merged"], |
| deps = CODEGEN_DEPS + [ |
| ":base", |
| ":binding", |
| "//java/dagger/internal/codegen/javapoet", |
| "//java/dagger/internal/codegen/langmodel", |
| ], |
| ) |
| |
| # The processor's "main", if you will |
| java_library( |
| name = "processor", |
| srcs = [ |
| "BindingGraphValidationModule.java", |
| "BindingMethodValidatorsModule.java", |
| "ComponentCreatorImplementationFactory.java", |
| "ComponentGenerator.java", |
| "ComponentHjarProcessingStep.java", |
| "ComponentImplementationBuilder.java", |
| "ComponentImplementationFactory.java", |
| "ComponentProcessingStep.java", |
| "ComponentProcessor.java", |
| "CurrentImplementationSubcomponent.java", |
| "DeserializedComponentImplementationBuilder.java", |
| "GenerationOptionsModule.java", |
| "InjectBindingRegistryImpl.java", |
| "InjectBindingRegistryModule.java", |
| "InjectProcessingStep.java", |
| "MapKeyProcessingStep.java", |
| "ModuleProcessingStep.java", |
| "ProcessingEnvironmentModule.java", |
| "ProcessingRoundCacheModule.java", |
| "SourceFileGeneratorsModule.java", |
| "SpiModule.java", |
| "SystemComponentsModule.java", |
| "TopLevelImplementationComponent.java", |
| ], |
| plugins = CODEGEN_PLUGINS, |
| tags = ["maven_coordinates=com.google.dagger:dagger-compiler:" + POM_VERSION], |
| deps = CODEGEN_DEPS + [ |
| ":base", |
| ":binding", |
| ":binding_graph_validation", |
| ":writing", |
| ":validation", |
| "//java/dagger/internal/codegen/javapoet", |
| "//java/dagger/internal/codegen/langmodel", |
| "@google_bazel_common//third_party/java/incap", |
| ], |
| ) |
| |
| pom_file( |
| name = "pom", |
| artifact_id = "dagger-compiler", |
| artifact_name = "Dagger Compiler", |
| targets = [ |
| ":processor", |
| ":base", |
| ":binding", |
| ":binding_graph_validation", |
| ":writing", |
| ":validation", |
| "//java/dagger/internal/codegen/serialization", |
| "//java/dagger/internal/codegen/javapoet", |
| ], |
| ) |
| |
| java_library( |
| name = "javac-plugin-module", |
| srcs = JAVAC_PLUGIN_MODULE_SRCS, |
| plugins = [":component-codegen"], |
| visibility = ["//visibility:private"], |
| deps = [ |
| ":base", |
| ":binding", |
| ":javac", |
| ":processor", |
| "//java/dagger:core", |
| "//java/dagger/internal/codegen/langmodel", |
| ], |
| ) |
| |
| java_library( |
| name = "kythe", |
| srcs = KYTHE_SRCS, |
| plugins = [":component-codegen"], |
| deps = [ |
| ":base", |
| ":binding", |
| ":javac", |
| ":javac-plugin-module", |
| ":kythe_plugin", |
| ":processor", |
| "//java/dagger:core", |
| "//java/dagger/internal/codegen/langmodel", |
| "//java/dagger/model", |
| "//java/dagger/producers", |
| "@google_bazel_common//third_party/java/auto:common", |
| "@google_bazel_common//third_party/java/auto:service", |
| "@google_bazel_common//third_party/java/guava", |
| ], |
| ) |
| |
| # Replacement for @bazel_tools//third_party/java/jdk/langtools:javac, which seems to have gone away? |
| java_import( |
| name = "javac", |
| jars = ["@bazel_tools//third_party/java/jdk/langtools:javac_jar"], |
| ) |
| |
| # A _deploy.jar consisting of the java_librarys in https://github.com/kythe/kythe needed to build a |
| # Kythe plugin |
| # TODO(ronshapiro): replace this with a http_archive of the next release in |
| # https://github.com/kythe/kythe/releases |
| java_import( |
| name = "kythe_plugin", |
| jars = ["kythe_plugin_deploy.jar"], |
| neverlink = 1, |
| ) |
| |
| java_import( |
| name = "bootstrap_compiler", |
| jars = ["bootstrap_compiler_deploy.jar"], |
| visibility = ["//visibility:private"], |
| ) |
| |
| java_plugin( |
| name = "bootstrap_compiler_plugin", |
| generates_api = 1, |
| processor_class = "dagger.internal.codegen.ComponentProcessor", |
| deps = [":bootstrap_compiler"], |
| ) |
| |
| load("@google_bazel_common//tools/javadoc:javadoc.bzl", "javadoc_library") |
| |
| javadoc_library( |
| name = "codegen-javadoc", |
| srcs = CODEGEN_SRCS, |
| root_packages = ["dagger.internal.codegen"], |
| deps = [":processor"], |
| ) |
| |
| java_library( |
| name = "check-package-javadoc", |
| testonly = 1, |
| srcs = CODEGEN_SRCS, |
| javacopts = DOCLINT_HTML_AND_SYNTAX + DOCLINT_REFERENCES, |
| plugins = CODEGEN_PLUGINS, |
| deps = CODEGEN_DEPS + [ |
| "//java/dagger/internal/codegen/langmodel", |
| "//java/dagger/internal/codegen/javapoet", |
| "@google_bazel_common//third_party/java/incap", |
| ], |
| ) |
| |
| java_plugin( |
| name = "component-codegen", |
| generates_api = 1, |
| output_licenses = ["unencumbered"], |
| processor_class = "dagger.internal.codegen.ComponentProcessor", |
| tags = [ |
| "annotation=dagger.Component;" + |
| "genclass=${package}.Dagger${outerclasses}${classname}", |
| "annotation=dagger.producers.ProductionComponent;" + |
| "genclass=${package}.Dagger${outerclasses}${classname}", |
| ], |
| deps = [":processor"], |
| ) |
| |
| java_library( |
| name = "statistics", |
| srcs = STATISTICS_COLLECTOR_SRCS, |
| plugins = [":component-codegen"], |
| deps = [ |
| ":base", |
| ":binding", |
| ":javac", |
| ":javac-plugin-module", |
| ":processor", |
| "//java/dagger:core", |
| "//java/dagger/model", |
| "@google_bazel_common//third_party/java/error_prone:check_api", |
| ], |
| ) |