| # Analysis API-based KLIB reader | |
| ## Tasks | |
| **Run Tests** | |
| ``` | |
| ./gradlew :libraries:tools:analysis-api-based-klib-reader:check | |
| ``` | |
| ## Usage: Reading symbols from a given klib module | |
| A set of top level `KlibDeclarationAddress` can be read from `KtLibraryModule` by | |
| ```kotlin | |
| fun example(module: KtLibraryModule) { | |
| val addresses = module.readKlibDeclarationAddresses() | |
| } | |
| ``` | |
| Such addresses can be resolved to `KtSymbol`s by | |
| ```kotlin | |
| addresses.flatMap { address -> address.getSymbols() } | |
| ``` | |
| Note: `getSymbols` returns a sequence as multiple symbols can live under the same address. | |
| ## Usage: Getting all library modules in a Standalone Analysis API session. | |
| Example of creating a session | |
| ```kotin | |
| val session = buildStandaloneAnalysisAPISession { | |
| buildKtModuleProvider { | |
| // ... | |
| addModule(buildKtLibraryModule { | |
| addBinaryRoot(pathToKlib) | |
| // .. | |
| }) | |
| } | |
| } | |
| ``` | |
| Example analyzing libraries within the session | |
| ```kotlin | |
| session.getAllLibraryModules().forEach { module -> | |
| analyze(module) { | |
| module.readKlibDeclarationAddresses() | |
| .flatMap { address -> address.getSymbols() } | |
| } | |
| } | |
| ``` | |
| ## Test Strategy | |
| ### Black Box Test: | |
| We are building a klib from the `testProject`. | |
| This klib will be used to read the addresses. Those addresses will be rendered and compared to | |
| [!testProject.addresses](testData%2F%21testProject.addresses) | |