528 lines
18 KiB
Python
528 lines
18 KiB
Python
# 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",
|
|
],
|
|
)
|