[FIR] Completely remove old extensions service
This commit is contained in:
-1
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.analysis.checkersComponent
|
||||
import org.jetbrains.kotlin.fir.analysis.extensions.additionalCheckers
|
||||
import org.jetbrains.kotlin.fir.extensions.extensionService
|
||||
import org.jetbrains.kotlin.fir.extensions.oldExtensionsService
|
||||
|
||||
object FirDiagnosticsCollector {
|
||||
fun create(session: FirSession): AbstractDiagnosticCollector {
|
||||
|
||||
-178
@@ -1,178 +0,0 @@
|
||||
/*
|
||||
* 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 com.google.common.collect.LinkedHashMultimap
|
||||
import com.google.common.collect.Multimap
|
||||
import org.jetbrains.kotlin.fir.FirAnnotationContainer
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.FirSessionComponent
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
||||
import org.jetbrains.kotlin.fir.declarations.FirPluginKey
|
||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
import org.jetbrains.kotlin.fir.resolve.fqName
|
||||
import org.jetbrains.kotlin.fir.utils.ComponentArrayOwner
|
||||
import org.jetbrains.kotlin.fir.utils.TypeRegistry
|
||||
import kotlin.properties.ReadOnlyProperty
|
||||
import kotlin.reflect.KClass
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
class OldFirRegisteredExtension<P : FirExtension>(
|
||||
val extensionsWithAllMode: List<P>,
|
||||
val extensionsWithAnnotatedMode: Multimap<AnnotationFqn, P>,
|
||||
val extensionsWithAllInAnnotatedMode: Multimap<AnnotationFqn, P>,
|
||||
val extensionsByPluginKey: Multimap<FirPluginKey, P>
|
||||
) {
|
||||
fun isEmpty(): Boolean {
|
||||
return extensionsWithAllMode.isEmpty() && extensionsWithAnnotatedMode.isEmpty() && extensionsWithAllInAnnotatedMode.isEmpty()
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("")
|
||||
class FirOldExtensionsService(
|
||||
val session: FirSession
|
||||
) : ComponentArrayOwner<FirExtension, OldFirRegisteredExtension<*>>(), FirSessionComponent {
|
||||
companion object : TypeRegistry<FirExtension, OldFirRegisteredExtension<*>>() {
|
||||
inline fun <reified P : FirExtension, V : OldFirRegisteredExtension<P>> registeredExtensions(): ReadOnlyProperty<FirOldExtensionsService, ExtensionsAccessor<P>> {
|
||||
val accessor = generateAccessor<V, P>(P::class)
|
||||
return object : ReadOnlyProperty<FirOldExtensionsService, ExtensionsAccessor<P>> {
|
||||
override fun getValue(thisRef: FirOldExtensionsService, property: KProperty<*>): ExtensionsAccessor<P> {
|
||||
return ExtensionsAccessor(thisRef.session, accessor.getValue(thisRef, property))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun <K, V> createMultimap(): Multimap<K, V> = LinkedHashMultimap.create()
|
||||
}
|
||||
|
||||
override val typeRegistry: TypeRegistry<FirExtension, OldFirRegisteredExtension<*>>
|
||||
get() = Companion
|
||||
|
||||
fun <P : FirExtension> registerExtensions(extensionClass: KClass<P>, extensionFactories: List<FirExtension.Factory<P>>) {
|
||||
// registeredExtensionsSize += extensionFactories.size
|
||||
// val extensions = extensionFactories.map { it.create(session) }
|
||||
//
|
||||
// val extensionsWithAllMode = mutableListOf<P>()
|
||||
// val extensionsWithAnnotatedMode = createMultimap<AnnotationFqn, P>()
|
||||
// val extensionsWithAllInAnnotatedMode = createMultimap<AnnotationFqn, P>()
|
||||
// val extensionsByPlugin = createMultimap<FirPluginKey, P>()
|
||||
// for (extension in extensions) {
|
||||
// _metaAnnotations += extension.metaAnnotations.keys
|
||||
// for (metaAnnotation in extension.metaAnnotations.keys) {
|
||||
// extensionsWithMetaAnnotations.put(metaAnnotation, extension)
|
||||
// }
|
||||
// _annotations += extension.directlyApplicableAnnotations
|
||||
// _annotations += extension.childrenApplicableAnnotations
|
||||
// when (extension.mode) {
|
||||
// FirExtension.Mode.ANNOTATED_ELEMENT -> {
|
||||
// for (annotation in extension.directlyApplicableAnnotations) {
|
||||
// extensionsWithAnnotatedMode.put(annotation, extension)
|
||||
// }
|
||||
// for (annotation in extension.childrenApplicableAnnotations) {
|
||||
// extensionsWithAllInAnnotatedMode.put(annotation, extension)
|
||||
// }
|
||||
// }
|
||||
// FirExtension.Mode.ALL -> extensionsWithAllMode += extension
|
||||
// }
|
||||
// extensionsByPlugin.put(extension.key, extension)
|
||||
// }
|
||||
// registerComponent(
|
||||
// extensionClass,
|
||||
// FirRegisteredExtension(
|
||||
// extensionsWithAllMode,
|
||||
// extensionsWithAnnotatedMode,
|
||||
// extensionsWithAllInAnnotatedMode,
|
||||
// extensionsByPlugin
|
||||
// )
|
||||
// )
|
||||
}
|
||||
|
||||
@Deprecated("")
|
||||
fun registerUserDefinedAnnotation(metaAnnotation: AnnotationFqn, annotations: Collection<FirRegularClass>) {
|
||||
// for (annotation in annotations) {
|
||||
// require(annotation.classKind == ClassKind.ANNOTATION_CLASS)
|
||||
// val fqName = annotation.symbol.classId.asSingleFqName()
|
||||
// _annotations += fqName
|
||||
// userDefinedAnnotations.put(metaAnnotation, fqName)
|
||||
// val extensions = extensionsWithMetaAnnotations[metaAnnotation]
|
||||
// if (extensions.isEmpty()) return
|
||||
// for (extension in extensions) {
|
||||
// val registeredExtensions = this[extension.extensionType]
|
||||
//
|
||||
// val metaAnnotationMode = extension.metaAnnotations.getValue(metaAnnotation)
|
||||
//
|
||||
// if (metaAnnotationMode.directed) {
|
||||
// @Suppress("UNCHECKED_CAST")
|
||||
// (registeredExtensions.extensionsWithAnnotatedMode as Multimap<AnnotationFqn, FirExtension>).put(fqName, extension)
|
||||
// }
|
||||
//
|
||||
// if (metaAnnotationMode.children) {
|
||||
// @Suppress("UNCHECKED_CAST")
|
||||
// (registeredExtensions.extensionsWithAllInAnnotatedMode as Multimap<AnnotationFqn, FirExtension>).put(fqName, extension)
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
@Deprecated("")
|
||||
val annotations: Set<AnnotationFqn>
|
||||
get() = _annotations
|
||||
private val _annotations: MutableSet<AnnotationFqn> = mutableSetOf()
|
||||
|
||||
@Deprecated("")
|
||||
val metaAnnotations: Set<AnnotationFqn>
|
||||
get() = _metaAnnotations
|
||||
private val _metaAnnotations: MutableSet<AnnotationFqn> = mutableSetOf()
|
||||
|
||||
private val extensionsWithMetaAnnotations: Multimap<AnnotationFqn, FirExtension> = createMultimap()
|
||||
|
||||
// MetaAnnotation -> Annotations
|
||||
@Deprecated("")
|
||||
val userDefinedAnnotations: Multimap<AnnotationFqn, AnnotationFqn> = createMultimap()
|
||||
|
||||
var registeredExtensionsSize: Int = 0
|
||||
private set
|
||||
|
||||
class ExtensionsAccessor<P : FirExtension>(
|
||||
private val session: FirSession,
|
||||
private val extensions: OldFirRegisteredExtension<P>
|
||||
) {
|
||||
fun forDeclaration(declaration: FirAnnotationContainer, owners: Collection<FirAnnotationContainer>): Collection<P> {
|
||||
if (extensions.isEmpty()) return emptySet()
|
||||
if (
|
||||
(declaration.annotations.isEmpty() || extensions.extensionsWithAnnotatedMode.isEmpty) &&
|
||||
extensions.extensionsWithAllInAnnotatedMode.isEmpty
|
||||
) {
|
||||
return extensions.extensionsWithAllMode
|
||||
}
|
||||
|
||||
return LinkedHashSet(extensions.extensionsWithAllMode).apply {
|
||||
collectExtensions(this, declaration, extensions.extensionsWithAnnotatedMode)
|
||||
collectExtensions(this, declaration, extensions.extensionsWithAllInAnnotatedMode)
|
||||
for (owner in owners) {
|
||||
collectExtensions(this, owner, extensions.extensionsWithAllInAnnotatedMode)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun forGeneratedDeclaration(origin: FirDeclarationOrigin.Plugin): Collection<P> {
|
||||
return extensions.extensionsByPluginKey.get(origin.key)
|
||||
}
|
||||
|
||||
private fun collectExtensions(result: MutableSet<P>, declaration: FirAnnotationContainer, extensions: Multimap<AnnotationFqn, P>) {
|
||||
for (annotation in declaration.annotations) {
|
||||
val fqName = annotation.fqName(session) ?: continue
|
||||
result += extensions[fqName]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("")
|
||||
val FirSession.oldExtensionsService: FirOldExtensionsService by FirSession.sessionComponentAccessor()
|
||||
|
||||
val FirOldExtensionsService.hasExtensions: Boolean
|
||||
get() = registeredExtensionsSize > 0
|
||||
+3
-1
@@ -17,7 +17,9 @@ import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
import org.jetbrains.kotlin.fir.dependenciesWithoutSelf
|
||||
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
|
||||
import org.jetbrains.kotlin.fir.extensions.extensionService
|
||||
import org.jetbrains.kotlin.fir.extensions.oldExtensionsService
|
||||
import org.jetbrains.kotlin.fir.extensions.registerExtensions
|
||||
import org.jetbrains.kotlin.fir.java.FirJavaModuleBasedSession
|
||||
import org.jetbrains.kotlin.fir.java.FirLibrarySession
|
||||
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
|
||||
@@ -71,7 +73,7 @@ abstract class AbstractFirMultiModuleResolveTest : AbstractMultiModuleTest() {
|
||||
private fun createSession(module: Module, provider: FirProjectSessionProvider): FirJavaModuleBasedSession {
|
||||
val moduleInfo = module.productionSourceInfo()!!
|
||||
return FirJavaModuleBasedSession(moduleInfo, provider, moduleInfo.contentScope()).also {
|
||||
it.oldExtensionsService.registerExtensions(FirExtensionRegistrar.OldRegisteredExtensions.EMPTY)
|
||||
it.extensionService.registerExtensions(emptyList())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user