[FIR] Rename FirExtensionPoint to FirExtension

Also rename `FirExtensionPointService` to `FirExtensionsService`
This commit is contained in:
Dmitriy Novozhilov
2020-05-08 11:14:34 +03:00
parent a1e719a127
commit 4eb9eb0537
15 changed files with 53 additions and 57 deletions
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.fir
import org.jetbrains.kotlin.analyzer.ModuleInfo
import org.jetbrains.kotlin.fir.extensions.FirExtensionPointService
import org.jetbrains.kotlin.fir.extensions.FirExtensionsService
import org.jetbrains.kotlin.fir.resolve.*
import org.jetbrains.kotlin.fir.resolve.impl.*
import org.jetbrains.kotlin.fir.scopes.impl.FirDeclaredMemberScopeProvider
@@ -17,7 +17,7 @@ abstract class FirModuleBasedSession(override val moduleInfo: ModuleInfo, sessio
registerComponent(FirQualifierResolver::class, FirQualifierResolverImpl(this))
registerComponent(FirTypeResolver::class, FirTypeResolverImpl(this))
registerComponent(FirDeclaredMemberScopeProvider::class, FirDeclaredMemberScopeProvider())
registerComponent(FirExtensionPointService::class, FirExtensionPointService(this))
registerComponent(FirExtensionsService::class, FirExtensionsService(this))
}
}
@@ -17,7 +17,7 @@ import kotlin.reflect.KClass
* - add registration of new files
* - check that annotations or meta-annotations is not empty
*/
abstract class FirClassGenerationExtension(session: FirSession) : FirExtensionPoint(session) {
abstract class FirClassGenerationExtension(session: FirSession) : FirExtension(session) {
companion object {
val NAME = FirExtensionPointName("StatusTransformer")
}
@@ -27,7 +27,7 @@ abstract class FirClassGenerationExtension(session: FirSession) : FirExtensionPo
final override val mode: Mode = Mode.ANNOTATED_ELEMENT
final override val extensionType: KClass<out FirExtensionPoint> = FirClassGenerationExtension::class
final override val extensionType: KClass<out FirExtension> = FirClassGenerationExtension::class
abstract fun <T> generateClass(
containingFile: FirFile,
@@ -40,7 +40,7 @@ abstract class FirClassGenerationExtension(session: FirSession) : FirExtensionPo
}
}
fun interface Factory : FirExtensionPoint.Factory<FirClassGenerationExtension>
fun interface Factory : FirExtension.Factory<FirClassGenerationExtension>
}
val FirExtensionPointService.classGenerationExtensions: FirExtensionPointService.ExtensionsAccessor<FirClassGenerationExtension> by FirExtensionPointService.registeredExtensions()
val FirExtensionsService.classGenerationExtensions: FirExtensionsService.ExtensionsAccessor<FirClassGenerationExtension> by FirExtensionsService.registeredExtensions()
@@ -13,7 +13,7 @@ import kotlin.reflect.KClass
typealias AnnotationFqn = FqName
abstract class FirExtensionPoint(val session: FirSession) {
abstract class FirExtension(val session: FirSession) {
abstract val name: FirExtensionPointName
abstract val directlyApplicableAnnotations: Set<AnnotationFqn>
@@ -23,9 +23,9 @@ abstract class FirExtensionPoint(val session: FirSession) {
abstract val mode: Mode
abstract val key: FirPluginKey
internal abstract val extensionType: KClass<out FirExtensionPoint>
internal abstract val extensionType: KClass<out FirExtension>
fun interface Factory<P : FirExtensionPoint> {
fun interface Factory<P : FirExtension> {
fun create(session: FirSession): P
}
@@ -49,7 +49,7 @@ abstract class FirExtensionRegistrar {
}
}
fun FirExtensionPointService.registerExtensions(extensions: FirExtensionRegistrar.RegisteredExtensions) {
fun FirExtensionsService.registerExtensions(extensions: FirExtensionRegistrar.RegisteredExtensions) {
registerExtensions(FirStatusTransformerExtension::class, extensions.statusTransformerExtensions)
registerExtensions(FirClassGenerationExtension::class, extensions.classGenerationExtensions)
}
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.FirAnnotationContainer
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSessionComponent
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirPluginKey
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
@@ -25,7 +24,7 @@ import kotlin.properties.ReadOnlyProperty
import kotlin.reflect.KClass
import kotlin.reflect.KProperty
class FirRegisteredExtension<P : FirExtensionPoint>(
class FirRegisteredExtension<P : FirExtension>(
val extensionsWithAllMode: List<P>,
val extensionsWithAnnotatedMode: Multimap<AnnotationFqn, P>,
val extensionsWithAllInAnnotatedMode: Multimap<AnnotationFqn, P>,
@@ -36,14 +35,14 @@ class FirRegisteredExtension<P : FirExtensionPoint>(
}
}
class FirExtensionPointService(
class FirExtensionsService(
val session: FirSession
) : ComponentArrayOwner<FirExtensionPoint, FirRegisteredExtension<*>>(), FirSessionComponent {
companion object : ComponentTypeRegistry<FirExtensionPoint, FirRegisteredExtension<*>>() {
inline fun <reified P : FirExtensionPoint, V : FirRegisteredExtension<P>> registeredExtensions(): ReadOnlyProperty<FirExtensionPointService, ExtensionsAccessor<P>> {
) : ComponentArrayOwner<FirExtension, FirRegisteredExtension<*>>(), FirSessionComponent {
companion object : ComponentTypeRegistry<FirExtension, FirRegisteredExtension<*>>() {
inline fun <reified P : FirExtension, V : FirRegisteredExtension<P>> registeredExtensions(): ReadOnlyProperty<FirExtensionsService, ExtensionsAccessor<P>> {
val accessor = generateAccessor<V, P>(P::class)
return object : ReadOnlyProperty<FirExtensionPointService, ExtensionsAccessor<P>> {
override fun getValue(thisRef: FirExtensionPointService, property: KProperty<*>): ExtensionsAccessor<P> {
return object : ReadOnlyProperty<FirExtensionsService, ExtensionsAccessor<P>> {
override fun getValue(thisRef: FirExtensionsService, property: KProperty<*>): ExtensionsAccessor<P> {
return ExtensionsAccessor(thisRef.session, accessor.getValue(thisRef, property))
}
}
@@ -52,10 +51,10 @@ class FirExtensionPointService(
private fun <K, V> createMultimap(): Multimap<K, V> = LinkedHashMultimap.create()
}
override val typeRegistry: ComponentTypeRegistry<FirExtensionPoint, FirRegisteredExtension<*>>
override val typeRegistry: ComponentTypeRegistry<FirExtension, FirRegisteredExtension<*>>
get() = Companion
fun <P : FirExtensionPoint> registerExtensions(extensionClass: KClass<P>, extensionFactories: List<FirExtensionPoint.Factory<P>>) {
fun <P : FirExtension> registerExtensions(extensionClass: KClass<P>, extensionFactories: List<FirExtension.Factory<P>>) {
registeredExtensionsSize += extensionFactories.size
val extensions = extensionFactories.map { it.create(session) }
@@ -71,7 +70,7 @@ class FirExtensionPointService(
_annotations += extension.directlyApplicableAnnotations
_annotations += extension.childrenApplicableAnnotations
when (extension.mode) {
FirExtensionPoint.Mode.ANNOTATED_ELEMENT -> {
FirExtension.Mode.ANNOTATED_ELEMENT -> {
for (annotation in extension.directlyApplicableAnnotations) {
extensionsWithAnnotatedMode.put(annotation, extension)
}
@@ -79,7 +78,7 @@ class FirExtensionPointService(
extensionsWithAllInAnnotatedMode.put(annotation, extension)
}
}
FirExtensionPoint.Mode.ALL -> extensionsWithAllMode += extension
FirExtension.Mode.ALL -> extensionsWithAllMode += extension
}
extensionsByPlugin.put(extension.key, extension)
}
@@ -108,12 +107,12 @@ class FirExtensionPointService(
if (metaAnnotationMode.directed) {
@Suppress("UNCHECKED_CAST")
(registeredExtensions.extensionsWithAnnotatedMode as Multimap<AnnotationFqn, FirExtensionPoint>).put(fqName, extension)
(registeredExtensions.extensionsWithAnnotatedMode as Multimap<AnnotationFqn, FirExtension>).put(fqName, extension)
}
if (metaAnnotationMode.children) {
@Suppress("UNCHECKED_CAST")
(registeredExtensions.extensionsWithAllInAnnotatedMode as Multimap<AnnotationFqn, FirExtensionPoint>).put(fqName, extension)
(registeredExtensions.extensionsWithAllInAnnotatedMode as Multimap<AnnotationFqn, FirExtension>).put(fqName, extension)
}
}
}
@@ -127,12 +126,12 @@ class FirExtensionPointService(
get() = _metaAnnotations
private val _metaAnnotations: MutableSet<AnnotationFqn> = mutableSetOf()
private val extensionsWithMetaAnnotations: Multimap<AnnotationFqn, FirExtensionPoint> = createMultimap()
private val extensionsWithMetaAnnotations: Multimap<AnnotationFqn, FirExtension> = createMultimap()
var registeredExtensionsSize: Int = 0
private set
class ExtensionsAccessor<P : FirExtensionPoint>(
class ExtensionsAccessor<P : FirExtension>(
private val session: FirSession,
private val extensions: FirRegisteredExtension<P>
) {
@@ -167,12 +166,12 @@ class FirExtensionPointService(
}
}
val FirSession.extensionPointService: FirExtensionPointService by FirSession.sessionComponentAccessor()
val FirSession.extensionsService: FirExtensionsService by FirSession.sessionComponentAccessor()
fun FirAnnotationCall.fqName(session: FirSession): FqName? {
val symbol = session.firSymbolProvider.getSymbolByTypeRef<FirRegularClassSymbol>(annotationTypeRef) ?: return null
return symbol.classId.asSingleFqName()
}
val FirExtensionPointService.hasExtensions: Boolean
val FirExtensionsService.hasExtensions: Boolean
get() = registeredExtensionsSize > 0
@@ -10,12 +10,10 @@ import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirResolvedDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl
import kotlin.reflect.KClass
abstract class FirStatusTransformerExtension(session: FirSession) : FirExtensionPoint(session) {
abstract class FirStatusTransformerExtension(session: FirSession) : FirExtension(session) {
companion object {
val NAME = FirExtensionPointName("StatusTransformer")
}
@@ -23,14 +21,14 @@ abstract class FirStatusTransformerExtension(session: FirSession) : FirExtension
final override val name: FirExtensionPointName
get() = NAME
final override val extensionType: KClass<out FirExtensionPoint> = FirStatusTransformerExtension::class
final override val extensionType: KClass<out FirExtension> = FirStatusTransformerExtension::class
abstract fun transformStatus(declaration: FirDeclaration, status: FirDeclarationStatus): FirDeclarationStatus
fun interface Factory : FirExtensionPoint.Factory<FirStatusTransformerExtension>
fun interface Factory : FirExtension.Factory<FirStatusTransformerExtension>
}
val FirExtensionPointService.statusTransformerExtensions: FirExtensionPointService.ExtensionsAccessor<FirStatusTransformerExtension> by FirExtensionPointService.registeredExtensions()
val FirExtensionsService.statusTransformerExtensions: FirExtensionsService.ExtensionsAccessor<FirStatusTransformerExtension> by FirExtensionsService.registeredExtensions()
inline fun FirDeclarationStatus.transform(
visibility: Visibility = this.visibility,
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.extensions.extensionPointService
import org.jetbrains.kotlin.fir.extensions.extensionsService
import org.jetbrains.kotlin.fir.extensions.statusTransformerExtensions
import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult
import org.jetbrains.kotlin.fir.visitors.FirTransformer
@@ -174,7 +174,7 @@ private class FirStatusResolveTransformer(
private fun <D> prepareStatus(declaration: D, status: FirDeclarationStatus): FirDeclarationStatus where D : FirDeclaration, D : FirAnnotationContainer {
var result = status
session.extensionPointService.statusTransformerExtensions.forDeclaration(declaration, classes).forEach {
session.extensionsService.statusTransformerExtensions.forDeclaration(declaration, classes).forEach {
result = it.transformStatus(declaration, status)
}
return result
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.extensions.FirClassGenerationExtension
import org.jetbrains.kotlin.fir.extensions.classGenerationExtensions
import org.jetbrains.kotlin.fir.extensions.extensionPointService
import org.jetbrains.kotlin.fir.extensions.extensionsService
import org.jetbrains.kotlin.fir.extensions.hasExtensions
import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult
import org.jetbrains.kotlin.fir.visitors.FirDefaultTransformer
@@ -22,7 +22,7 @@ class FirFirstGenerationTransformer : FirDefaultTransformer<Nothing?>() {
private lateinit var session: FirSession
private val generatedDeclarations: MutableList<FirClassGenerationExtension.GeneratedClass> = mutableListOf()
private lateinit var file: FirFile
private val extensionPointService get() = session.extensionPointService
private val extensionPointService get() = session.extensionsService
override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult<FirDeclaration> {
session = file.session
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.extensions.AnnotationFqn
import org.jetbrains.kotlin.fir.extensions.extensionPointService
import org.jetbrains.kotlin.fir.extensions.extensionsService
import org.jetbrains.kotlin.fir.extensions.fqName
import org.jetbrains.kotlin.fir.extensions.hasExtensions
import org.jetbrains.kotlin.fir.resolve.ScopeSession
@@ -31,7 +31,7 @@ class FirPluginAnnotationsResolveTransformer(private val scopeSession: ScopeSess
}
override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult<FirDeclaration> {
val extensionPointService = file.session.extensionPointService
val extensionPointService = file.session.extensionsService
if (!extensionPointService.hasExtensions) return file.compose()
file.replaceResolvePhase(FirResolvePhase.ANNOTATIONS_FOR_PLUGINS)
val newAnnotations = file.resolveAnnotations(extensionPointService.annotations, extensionPointService.metaAnnotations)