[FIR] Add extension with additional checkers

This commit is contained in:
Dmitriy Novozhilov
2020-05-08 14:09:28 +03:00
parent 04a1027b39
commit f764baad82
6 changed files with 96 additions and 4 deletions
@@ -0,0 +1,16 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.extensions
import org.jetbrains.kotlin.fir.FirSession
import kotlin.reflect.KClass
abstract class AbstractFirAdditionalCheckersExtension(session: FirSession) : FirExtension(session) {
fun interface Factory : FirExtension.Factory<AbstractFirAdditionalCheckersExtension>
final override val extensionType: KClass<out FirExtension>
get() = AbstractFirAdditionalCheckersExtension::class
}
@@ -25,7 +25,7 @@ abstract class FirExtension(val session: FirSession) {
internal abstract val extensionType: KClass<out FirExtension>
fun interface Factory<P : FirExtension> {
fun interface Factory<out P : FirExtension> {
fun create(session: FirSession): P
}
@@ -24,6 +24,11 @@ abstract class FirExtensionRegistrar {
operator fun ((FirSession) -> FirClassGenerationExtension).unaryPlus() {
classGenerationExtensions += FirClassGenerationExtension.Factory { this.invoke(it) }
}
@JvmName("plusAdditionalCheckersExtension")
operator fun ((FirSession) -> AbstractFirAdditionalCheckersExtension).unaryPlus() {
additionalCheckersExtensions += AbstractFirAdditionalCheckersExtension.Factory { this.invoke(it) }
}
}
protected abstract fun ExtensionRegistrarContext.configurePlugin()
@@ -32,19 +37,22 @@ abstract class FirExtensionRegistrar {
ExtensionRegistrarContext().configurePlugin()
return RegisteredExtensions(
statusTransformerExtensions,
classGenerationExtensions
classGenerationExtensions,
additionalCheckersExtensions,
)
}
private val statusTransformerExtensions: MutableList<FirStatusTransformerExtension.Factory> = mutableListOf()
private val classGenerationExtensions: MutableList<FirClassGenerationExtension.Factory> = mutableListOf()
private val additionalCheckersExtensions: MutableList<AbstractFirAdditionalCheckersExtension.Factory> = mutableListOf()
class RegisteredExtensions(
val statusTransformerExtensions: List<FirStatusTransformerExtension.Factory>,
val classGenerationExtensions: List<FirClassGenerationExtension.Factory>
val classGenerationExtensions: List<FirClassGenerationExtension.Factory>,
val additionalCheckersExtensions: List<AbstractFirAdditionalCheckersExtension.Factory>,
) {
companion object {
val EMPTY = RegisteredExtensions(emptyList(), emptyList())
val EMPTY = RegisteredExtensions(emptyList(), emptyList(), emptyList())
}
}
}
@@ -52,4 +60,5 @@ abstract class FirExtensionRegistrar {
fun FirExtensionsService.registerExtensions(extensions: FirExtensionRegistrar.RegisteredExtensions) {
registerExtensions(FirStatusTransformerExtension::class, extensions.statusTransformerExtensions)
registerExtensions(FirClassGenerationExtension::class, extensions.classGenerationExtensions)
registerExtensions(AbstractFirAdditionalCheckersExtension::class, extensions.additionalCheckersExtensions)
}