[FIR] Skip annotations resolve phase if no extensions registered
This commit is contained in:
+7
@@ -52,6 +52,7 @@ class FirExtensionPointService(
|
|||||||
get() = Companion
|
get() = Companion
|
||||||
|
|
||||||
fun <P : FirExtensionPoint> registerExtensions(extensionClass: KClass<P>, extensionFactories: List<FirExtensionPoint.Factory<P>>) {
|
fun <P : FirExtensionPoint> registerExtensions(extensionClass: KClass<P>, extensionFactories: List<FirExtensionPoint.Factory<P>>) {
|
||||||
|
registeredExtensionsSize += extensionFactories.size
|
||||||
val extensions = extensionFactories.map { it.create(session) }
|
val extensions = extensionFactories.map { it.create(session) }
|
||||||
|
|
||||||
val extensionsWithAllMode = mutableListOf<P>()
|
val extensionsWithAllMode = mutableListOf<P>()
|
||||||
@@ -116,6 +117,9 @@ class FirExtensionPointService(
|
|||||||
|
|
||||||
private val extensionsWithMetaAnnotations: Multimap<AnnotationFqn, FirExtensionPoint> = createMultimap()
|
private val extensionsWithMetaAnnotations: Multimap<AnnotationFqn, FirExtensionPoint> = createMultimap()
|
||||||
|
|
||||||
|
var registeredExtensionsSize: Int = 0
|
||||||
|
private set
|
||||||
|
|
||||||
class ExtensionsAccessor<P : FirExtensionPoint>(
|
class ExtensionsAccessor<P : FirExtensionPoint>(
|
||||||
private val session: FirSession,
|
private val session: FirSession,
|
||||||
private val extensions: FirRegisteredExtension<P>
|
private val extensions: FirRegisteredExtension<P>
|
||||||
@@ -153,3 +157,6 @@ fun FirAnnotationCall.fqName(session: FirSession): FqName? {
|
|||||||
val symbol = session.firSymbolProvider.getSymbolByTypeRef<FirRegularClassSymbol>(annotationTypeRef) ?: return null
|
val symbol = session.firSymbolProvider.getSymbolByTypeRef<FirRegularClassSymbol>(annotationTypeRef) ?: return null
|
||||||
return symbol.classId.asSingleFqName()
|
return symbol.classId.asSingleFqName()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val FirExtensionPointService.hasExtensions: Boolean
|
||||||
|
get() = registeredExtensionsSize > 0
|
||||||
+3
-1
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.fir.expressions.FirStatement
|
|||||||
import org.jetbrains.kotlin.fir.extensions.AnnotationFqn
|
import org.jetbrains.kotlin.fir.extensions.AnnotationFqn
|
||||||
import org.jetbrains.kotlin.fir.extensions.extensionPointService
|
import org.jetbrains.kotlin.fir.extensions.extensionPointService
|
||||||
import org.jetbrains.kotlin.fir.extensions.fqName
|
import org.jetbrains.kotlin.fir.extensions.fqName
|
||||||
|
import org.jetbrains.kotlin.fir.extensions.hasExtensions
|
||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirImportResolveTransformer
|
import org.jetbrains.kotlin.fir.resolve.transformers.FirImportResolveTransformer
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirSpecificTypeResolverTransformer
|
import org.jetbrains.kotlin.fir.resolve.transformers.FirSpecificTypeResolverTransformer
|
||||||
@@ -28,8 +29,9 @@ class FirPluginAnnotationsResolveTransformer(private val scopeSession: ScopeSess
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult<FirDeclaration> {
|
override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult<FirDeclaration> {
|
||||||
file.replaceResolvePhase(FirResolvePhase.ANNOTATIONS_FOR_PLUGINS)
|
|
||||||
val extensionPointService = file.session.extensionPointService
|
val extensionPointService = file.session.extensionPointService
|
||||||
|
if (!extensionPointService.hasExtensions) return file.compose()
|
||||||
|
file.replaceResolvePhase(FirResolvePhase.ANNOTATIONS_FOR_PLUGINS)
|
||||||
val newAnnotations = file.resolveAnnotations(extensionPointService.annotations, extensionPointService.metaAnnotations)
|
val newAnnotations = file.resolveAnnotations(extensionPointService.annotations, extensionPointService.metaAnnotations)
|
||||||
if (newAnnotations.isNotEmpty()) {
|
if (newAnnotations.isNotEmpty()) {
|
||||||
for (annotationClass in newAnnotations) {
|
for (annotationClass in newAnnotations) {
|
||||||
|
|||||||
Reference in New Issue
Block a user