tree 3d0737b27ddf0236bb42e263749a8232b3947ebf
parent dbf50d99ba88db32fcf6794c6ef2d22b640e8c3b
author Eli Hart <konakid@gmail.com> 1621031211 -0700
committer Copybara-Service <copybara-worker@google.com> 1621031292 -0700

[GH] [Room][Compiler Processing] Support getting elements by package name

## Proposed Changes
KSP's recent version added the new API "Resolver.getDeclarationsFromPackage()" which is conceptually similar to javac's "Elements.getPackageElement". The Room compiler processing library can include an abstraction in XProcessingEnv to surface both of these and return XElements contained in a given package.

This PR adds the function `getElementsFromPackage` to XProcessingEnv, and has the implementations for KSP and Javac simply use their appropriate package lookup. This was very straightforward; the main source of code changes was to handle cases where xprocessing does not support certain element types, in which case those elements are skipped. I introduced a new exception to throw in this case, which callers can catch.

I'm personally partial to a "result" type monad to represent success and failure in a safer, clearer way, but Room doesn't seem to use that pattern.

## Testing

Test: Updated XRoundEnvTest.kt to test that elements from packages in both local sources and binaries are queried correctly.

## Issues Fixed

Fixes: https://issuetracker.google.com/issues/185609823

This is an imported pull request from https://github.com/androidx/androidx/pull/163.

Resolves #163
Github-Pr-Head-Sha: c7a7c1d3f156a7816f8547cfe879645756cdd976
GitOrigin-RevId: 0560adf51554b3e61fb8356199fd2e0d60647a32
Change-Id: I13c8fcba04d356323d55ade93d5a941357254037
