rules_kotlin
rules_kotlin copied to clipboard
Implement Jdeps using K2 APIs
This PR adds support for running Jdeps when compiling with K2 (#843).
High level list of changes:
- Enable K2 tests in paramaterized test class
- Compile rules_kotlin with Kotlin 2.0 since we require fixes that were made that aren't in K2 preview of v1.9.23
- Comment out providing the JS standard lib since as of Kotlin 2.0, only a KLIB is shipped & there is no support (#808)
- Add
JdepsGenExtension2which leveragesFirAdditionalCheckersplugin extension to collect info from the FIR tree - Since we don't control instantiation of the checkers, we use the
ClassUsageRecorderobject to manage collection of AST info - The deps info in
ClassUsageRecorderis init in the registrar & dumped to a proto on theClassFileFactoryFinalizerExtensioncallback since there is no longer aonAnalysisCompletedcallback in K2 - Deps info is collected through various declaration & expression checkers using 3 main types
FirClassSymbol,FirTypeRef, &ConeKotlinTypewhich is then pushed into theClassUsageRecorderso that supertypes & type args can also be collected, if necessary - Update the
JdepsGenComponentRegistrarto invoke K1 or K2 impl based on language version set in the kotlinc configuration
Note to reviewers: Tests on CI will likely fail until the Kotlin JS std lib for 2.0 issue is properly sorted out
This generally looks fine, but I would prefer to wait until the dependencies are out of RC.
Additionally, we have some concerns about backwards compatibility -- I am looking to setup several older version test for our CI.
@jbarr21 Kotlin 2.0 is officially out, are you able to push this PR forward using the official release?
@jbarr21 Kotlin 2.0 is officially out, are you able to push this PR forward using the official release?
I am able to, but won't until y'all decide what you're going to do about this
@Bencodes now that #1185 has been merged, I've rebased my PR onto the latest master, updated the example apps for K2, & have everything passing except for ktlint on files that I didn't modify
I was able to get an app building within our Android repo using this PR and the K2 Jdps implementation, so we should be good to merge this now.