# 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)