commit | 798f244faab7f98fc1aaa5f5c3c74a1df8359b7c | [log] [tgz] |
---|---|---|
author | Googler <noreply@google.com> | Fri Feb 07 13:01:04 2020 -0800 |
committer | Copybara-Service <copybara-worker@google.com> | Fri Feb 07 13:02:00 2020 -0800 |
tree | 3751d2cc8031f75f0d5619e7694ca741d108485d | |
parent | 194511be31cd7a97c85213cadf0763dee8e4af69 [diff] |
Add Support of Core Library Type Desugaring for Classes with Nest-based Access. #java11 #desugar Rationale: - Context: Nest desugaring takes two passes of input class files. During the first pass, a nest analyzer collects class attributes without core library type renaming (i.e. __desugar__/ prefixing). During the second pass, core library types are renamed (by CoreLibrarySupport-enabled class visitors) before running nest-based desugaring (by NestDesugaring). - This causes breakages that class attributes for core types cannot be found during NestDesugaring visiting. Potential Real issues: 1) Java 11 core library with inter-mate private access cannot be desugared. 2) IllegalStateExceptions/NullPointerExceptions even for prior Java 11, since ClassAttributes in langmode/ is not specific to NestHost/NestMembers, it is expected ClassAttributes is present for every input class during second pass to ensure state integrity. An blind null check would just hide the incorrect state and make wrong assumptions. - Key Changes: - Add support type remapping for the nest summary object (NestDigest), including its recursively dependent data classes. - Rename NestCompanions to NestDigest; Move ClassMemberRecord APIs used by NestDesugaring to NestDigest; Remove the NestDesugaring's direct dependency on ClassMemberRecord, and let NestDesugaring only query with NestDigest for nest attribute info. - Create ClassName class in replacement of String-represented class binary names to get better name anchoring, conversions among different names and centralized checking. - Share and feed the core library renaming logic into NestDigest. - Add javadesugar/ package in par with java/ for easy testing. PiperOrigin-RevId: 293876896
{Fast, Correct} - Choose two
Build and test software of any size, quickly and reliably.
Speed up your builds and tests: Bazel rebuilds only what is necessary. With advanced local and distributed caching, optimized dependency analysis and parallel execution, you get fast and incremental builds.
One tool, multiple languages: Build and test Java, C++, Android, iOS, Go, and a wide variety of other language platforms. Bazel runs on Windows, macOS, and Linux.
Scalable: Bazel helps you scale your organization, codebase, and continuous integration solution. It handles codebases of any size, in multiple repositories or a huge monorepo.
Extensible to your needs: Easily add support for new languages and platforms with Bazel's familiar extension language. Share and re-use language rules written by the growing Bazel community.
Follow our tutorials:
See CONTRIBUTING.md