[FIR] Skip annotations resolve phase if no extensions registered
This commit is contained in:
+8
-1
@@ -52,6 +52,7 @@ class FirExtensionPointService(
|
||||
get() = Companion
|
||||
|
||||
fun <P : FirExtensionPoint> registerExtensions(extensionClass: KClass<P>, extensionFactories: List<FirExtensionPoint.Factory<P>>) {
|
||||
registeredExtensionsSize += extensionFactories.size
|
||||
val extensions = extensionFactories.map { it.create(session) }
|
||||
|
||||
val extensionsWithAllMode = mutableListOf<P>()
|
||||
@@ -116,6 +117,9 @@ class FirExtensionPointService(
|
||||
|
||||
private val extensionsWithMetaAnnotations: Multimap<AnnotationFqn, FirExtensionPoint> = createMultimap()
|
||||
|
||||
var registeredExtensionsSize: Int = 0
|
||||
private set
|
||||
|
||||
class ExtensionsAccessor<P : FirExtensionPoint>(
|
||||
private val session: FirSession,
|
||||
private val extensions: FirRegisteredExtension<P>
|
||||
@@ -152,4 +156,7 @@ val FirSession.extensionPointService: FirExtensionPointService by FirSession.ses
|
||||
fun FirAnnotationCall.fqName(session: FirSession): FqName? {
|
||||
val symbol = session.firSymbolProvider.getSymbolByTypeRef<FirRegularClassSymbol>(annotationTypeRef) ?: return null
|
||||
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.extensionPointService
|
||||
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.transformers.FirImportResolveTransformer
|
||||
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> {
|
||||
file.replaceResolvePhase(FirResolvePhase.ANNOTATIONS_FOR_PLUGINS)
|
||||
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)
|
||||
if (newAnnotations.isNotEmpty()) {
|
||||
for (annotationClass in newAnnotations) {
|
||||
|
||||
Reference in New Issue
Block a user