FIR: implements multi-module resolve, add tests #KT-24093 Fixed

This commit introduces FIR session provider, dependency provider,
library session + other infrastructure necessary for multi-module resolve
This commit is contained in:
Mikhail Glukhikh
2018-04-05 19:27:00 +03:00
parent bc82f2f940
commit 6e369e156d
27 changed files with 366 additions and 49 deletions
@@ -11,11 +11,17 @@ import kotlin.reflect.KClass
interface FirSession {
val moduleInfo: ModuleInfo?
val sessionProvider: FirSessionProvider? get() = null
val components: Map<KClass<*>, Any>
fun <T : Any> getService(kclass: KClass<T>): T =
components[kclass] as T
}
interface FirSessionProvider {
fun getSession(moduleInfo: ModuleInfo): FirSession?
}
inline fun <reified T : Any> FirSession.service(): T =
getService(T::class)
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.fir
import org.jetbrains.kotlin.analyzer.ModuleInfo
import org.jetbrains.kotlin.fir.visitors.FirTransformer
fun <T : FirElement, D> MutableList<T>.transformInplace(transformer: FirTransformer<D>, data: D) {
@@ -31,4 +32,6 @@ fun <T : FirElement, D> MutableList<T>.transformInplace(transformer: FirTransfor
fun <T : FirElement, D> T.transformSingle(transformer: FirTransformer<D>, data: D): T {
return this.transform<T, D>(transformer, data).single
}
}
fun ModuleInfo.dependenciesWithoutSelf(): Sequence<ModuleInfo> = dependencies().asSequence().filter { it != this }