Record dependencies for exempt annotation processors

Certain annotation processors that generate references to transitive
dependencies are exempt from Strict Java Deps.

Dagger ensures that all references to transitive types are reachable via a
chain of direct dependencies specified in @Component interfaces. We don't
record dependencies inside dagger-generated code, since Dagger is already
enforcing strict dependencies. By not recording the deps we allow dependency
management tools to remove depednencies that are only needed transitively by
dagger.

This approach doesn't work in general, since processors may generate references
to transitive types that are not reachable via a chain of direct deps, and
which may be subject to pruning by the reduced classpath optimization.

This change causes strict deps to record dependencies (but not emit strict deps
errors) inside code generated by exempt annotation processors other than
Dagger.

--
MOS_MIGRATED_REVID=117882599
1 file changed
tree: 83ecdb9905f1071bafaf96c0262b1994985a1993
  1. examples/
  2. scripts/
  3. site/
  4. src/
  5. third_party/
  6. tools/
  7. .gitattributes
  8. .gitignore
  9. AUTHORS
  10. BUILD
  11. CHANGELOG.md
  12. compile.sh
  13. CONTRIBUTING.md
  14. CONTRIBUTORS
  15. LICENSE.txt
  16. README.md
  17. WORKSPACE
README.md

Bazel (Beta)

{Fast, Correct} - Choose two

Bazel is a build tool that builds code quickly and reliably. It is used to build the majority of Google‘s software, and thus it has been designed to handle build problems present in Google’s development environment, including:

  • A massive, shared code repository, in which all software is built from source. Bazel has been built for speed, using both caching and parallelism to achieve this. Bazel is critical to Google's ability to continue to scale its software development practices as the company grows.

  • An emphasis on automated testing and releases. Bazel has been built for correctness and reproducibility, meaning that a build performed on a continuous build machine or in a release pipeline will generate bitwise-identical outputs to those generated on a developer's machine.

  • Language and platform diversity. Bazel's architecture is general enough to support many different programming languages within Google, and can be used to build both client and server software targeting multiple architectures from the same underlying codebase.

Find more background about Bazel in our FAQ.

Getting Started

About the Bazel project: