[FIR] Refactor session components initialization

From now all customization of session should perform via DSL which
  declared in FirSessionFactory. Registration or mutation session
  services from other places is prohibited
This commit is contained in:
Dmitriy Novozhilov
2020-08-28 17:35:23 +03:00
parent 2819bd3aaf
commit 6db8c28291
24 changed files with 158 additions and 149 deletions
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.fir.extensions
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.SessionConfiguration
import kotlin.reflect.KClass
abstract class FirExtensionRegistrar {
@@ -76,8 +77,14 @@ class BunchOfRegisteredExtensions @PluginServicesInitialization constructor(
return BunchOfRegisteredExtensions(extensions)
}
}
@OptIn(PluginServicesInitialization::class)
operator fun plus(other: BunchOfRegisteredExtensions): BunchOfRegisteredExtensions {
return BunchOfRegisteredExtensions(extensions + other.extensions)
}
}
@SessionConfiguration
@OptIn(PluginServicesInitialization::class)
fun FirExtensionService.registerExtensions(registeredExtensions: BunchOfRegisteredExtensions) {
registeredExtensions.extensions.forEach { registerExtensions(it.kClass, it.extensionFactories) }