blob: ee06dafcb86f49a378a1fcd53b7224c192d86574 [file] [log] [blame] [view] [edit]
# Native Analysis Api based Klib reader
## Tasks
**Run Tests**
```
./gradlew :native:analysis-api-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)