Add import tracker

This tracker reports import directives to IJ's JPS to track changes and detectwehen it is needed to adjust compilation scope.

#KT-44835 Fixed
This commit is contained in:
Aleksei.Cherepanov
2023-08-11 15:17:50 +02:00
committed by Space Team
parent b27aef2c61
commit 68af705664
25 changed files with 175 additions and 45 deletions
@@ -53,6 +53,7 @@ import org.jetbrains.kotlin.fir.serialization.FirProvidedDeclarationsForMetadata
import org.jetbrains.kotlin.fir.symbols.FirLazyDeclarationResolver
import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.incremental.components.EnumWhenTracker
import org.jetbrains.kotlin.incremental.components.ImportTracker
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.resolve.jvm.JvmTypeSpecificityComparator
import org.jetbrains.kotlin.resolve.jvm.modules.JavaModuleResolver
@@ -123,7 +124,7 @@ fun FirSession.registerCommonJavaComponents(javaModuleResolver: JavaModuleResolv
* Resolve components which are same on all platforms
*/
@OptIn(SessionConfiguration::class)
fun FirSession.registerResolveComponents(lookupTracker: LookupTracker? = null, enumWhenTracker: EnumWhenTracker? = null) {
fun FirSession.registerResolveComponents(lookupTracker: LookupTracker? = null, enumWhenTracker: EnumWhenTracker? = null, importTracker: ImportTracker? = null) {
register(FirQualifierResolver::class, FirQualifierResolverImpl(this))
register(FirTypeResolver::class, FirTypeResolverImpl(this))
register(CheckersComponent::class, CheckersComponent())
@@ -145,6 +146,12 @@ fun FirSession.registerResolveComponents(lookupTracker: LookupTracker? = null, e
IncrementalPassThroughEnumWhenTrackerComponent(enumWhenTracker)
)
}
if (importTracker != null) {
register(
FirImportTrackerComponent::class,
IncrementalPassThroughImportTrackerComponent(importTracker)
)
}
register(FirExpectActualMatchingContextFactory::class, FirExpectActualMatchingContextImpl.Factory)
}
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.fir.resolve.providers.impl.FirProviderImpl
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider
import org.jetbrains.kotlin.incremental.components.EnumWhenTracker
import org.jetbrains.kotlin.incremental.components.ImportTracker
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.name.Name
@@ -83,6 +84,7 @@ abstract class FirAbstractSessionFactory {
languageVersionSettings: LanguageVersionSettings,
lookupTracker: LookupTracker?,
enumWhenTracker: EnumWhenTracker?,
importTracker: ImportTracker?,
init: FirSessionConfigurator.() -> Unit,
registerExtraComponents: ((FirSession) -> Unit),
registerExtraCheckers: ((FirSessionConfigurator) -> Unit)?,
@@ -99,7 +101,7 @@ abstract class FirAbstractSessionFactory {
registerModuleData(moduleData)
registerCliCompilerOnlyComponents()
registerCommonComponents(languageVersionSettings)
registerResolveComponents(lookupTracker, enumWhenTracker)
registerResolveComponents(lookupTracker, enumWhenTracker, importTracker)
registerExtraComponents(this)
val kotlinScopeProvider = createKotlinScopeProvider.invoke()
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.fir.scopes.FirPlatformClassMapper
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope
import org.jetbrains.kotlin.incremental.components.EnumWhenTracker
import org.jetbrains.kotlin.incremental.components.ImportTracker
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.library.metadata.resolver.KotlinResolvedLibrary
import org.jetbrains.kotlin.load.kotlin.PackageAndMetadataPartProvider
@@ -91,6 +92,7 @@ object FirCommonSessionFactory : FirAbstractSessionFactory() {
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
lookupTracker: LookupTracker? = null,
enumWhenTracker: EnumWhenTracker? = null,
importTracker: ImportTracker? = null,
registerExtraComponents: ((FirSession) -> Unit) = {},
init: FirSessionConfigurator.() -> Unit = {}
): FirSession {
@@ -101,6 +103,7 @@ object FirCommonSessionFactory : FirAbstractSessionFactory() {
languageVersionSettings,
lookupTracker,
enumWhenTracker,
importTracker,
init,
registerExtraComponents = {
it.register(FirVisibilityChecker::class, FirVisibilityChecker.Default)
@@ -52,6 +52,7 @@ object FirJsSessionFactory : FirAbstractSessionFactory() {
compilerConfiguration.languageVersionSettings,
lookupTracker,
null,
null,
init,
registerExtraComponents = { session ->
session.registerJsSpecificComponents(compilerConfiguration)
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope
import org.jetbrains.kotlin.incremental.components.EnumWhenTracker
import org.jetbrains.kotlin.incremental.components.ImportTracker
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
import org.jetbrains.kotlin.name.Name
@@ -89,6 +90,7 @@ object FirJvmSessionFactory : FirAbstractSessionFactory() {
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
lookupTracker: LookupTracker? = null,
enumWhenTracker: EnumWhenTracker? = null,
importTracker: ImportTracker? = null,
needRegisterJavaElementFinder: Boolean,
registerExtraComponents: ((FirSession) -> Unit) = {},
init: FirSessionConfigurator.() -> Unit = {}
@@ -100,6 +102,7 @@ object FirJvmSessionFactory : FirAbstractSessionFactory() {
languageVersionSettings,
lookupTracker,
enumWhenTracker,
importTracker,
init,
registerExtraComponents = {
it.registerCommonJavaComponents(projectEnvironment.getJavaModuleResolver())
@@ -75,6 +75,7 @@ object FirNativeSessionFactory : FirAbstractSessionFactory() {
languageVersionSettings,
null,
null,
null,
init,
registerExtraComponents = {
it.register(FirVisibilityChecker::class, FirVisibilityChecker.Default)
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope
import org.jetbrains.kotlin.incremental.components.EnumWhenTracker
import org.jetbrains.kotlin.incremental.components.ImportTracker
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.TargetPlatform
@@ -33,6 +34,7 @@ object FirSessionFactoryHelper {
librariesScope: AbstractProjectFileSearchScope,
lookupTracker: LookupTracker?,
enumWhenTracker: EnumWhenTracker?,
importTracker: ImportTracker?,
incrementalCompilationContext: IncrementalCompilationContext?,
extensionRegistrars: List<FirExtensionRegistrar>,
needRegisterJavaElementFinder: Boolean,
@@ -73,6 +75,7 @@ object FirSessionFactoryHelper {
languageVersionSettings,
lookupTracker,
enumWhenTracker,
importTracker,
needRegisterJavaElementFinder,
registerExtraComponents = {},
sessionConfigurator,
@@ -44,6 +44,7 @@ object FirWasmSessionFactory : FirAbstractSessionFactory() {
languageVersionSettings,
lookupTracker,
null,
null,
init,
registerExtraComponents = { session ->
session.registerWasmSpecificComponents()
@@ -0,0 +1,16 @@
/*
* Copyright 2010-2021 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.session
import org.jetbrains.kotlin.fir.FirImportTrackerComponent
import org.jetbrains.kotlin.incremental.components.ImportTracker
class IncrementalPassThroughImportTrackerComponent(private val importTracker: ImportTracker) : FirImportTrackerComponent() {
override fun report(filePath: String, importedFqName: String) {
importTracker.report(filePath, importedFqName)
}
}