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
JdepsGenExtension2
which leveragesFirAdditionalCheckers
plugin extension to collect info from the FIR tree - Since we don't control instantiation of the checkers, we use the
ClassUsageRecorder
object to manage collection of AST info - The deps info in
ClassUsageRecorder
is init in the registrar & dumped to a proto on theClassFileFactoryFinalizerExtension
callback since there is no longer aonAnalysisCompleted
callback in K2 - Deps info is collected through various declaration & expression checkers using 3 main types
FirClassSymbol
,FirTypeRef
, &ConeKotlinType
which is then pushed into theClassUsageRecorder
so that supertypes & type args can also be collected, if necessary - Update the
JdepsGenComponentRegistrar
to 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.