[AA] Add KtResolveExtensionInfoProvider to AA.
This provider is responsible for answering queries related to resolve extensions. At the moment, this includes retrieving a KtScope with all REx top-level declarations (moved from KtSymbolFromResolveExtensionProvider), and retrieving information necessary to supply a GeneratedSourcesFilter for REx generated code. Future REx-related functions can be added to this interface. ^KT-59329
This commit is contained in:
committed by
Ilya Kirillov
parent
fa0209a322
commit
9f85739599
+11
-7
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.analysis.api.KtAnalysisAllowanceManager
|
||||
import org.jetbrains.kotlin.analysis.api.resolve.extensions.KtResolveExtension
|
||||
import org.jetbrains.kotlin.analysis.api.resolve.extensions.KtResolveExtensionFile
|
||||
import org.jetbrains.kotlin.analysis.api.resolve.extensions.KtResolveExtensionProvider
|
||||
import org.jetbrains.kotlin.analysis.api.resolve.extensions.KtResolveExtensionReferencePsiTargetsProvider
|
||||
import org.jetbrains.kotlin.analysis.api.resolve.extensions.KtResolveExtensionNavigationTargetsProvider
|
||||
import org.jetbrains.kotlin.analysis.providers.impl.declarationProviders.FileBasedKotlinDeclarationProvider
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSession
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||
@@ -271,9 +271,12 @@ class LLFirResolveExtensionToolDeclarationProvider internal constructor(
|
||||
markGenerated = true,
|
||||
eventSystemEnabled = true // so every generated KtFile backed by some VirtualFile
|
||||
)
|
||||
val text = file.buildFileText()
|
||||
val psiTargetsProvider = file.createPsiTargetsProvider()
|
||||
val ktFile = createKtFile(factory, file.getFileName(), text, psiTargetsProvider)
|
||||
val ktFile = createKtFile(
|
||||
factory,
|
||||
file.getFileName(),
|
||||
file.buildFileText(),
|
||||
file.createNavigationTargetsProvider(),
|
||||
)
|
||||
FileBasedKotlinDeclarationProvider(ktFile)
|
||||
}
|
||||
}
|
||||
@@ -284,12 +287,12 @@ class LLFirResolveExtensionToolDeclarationProvider internal constructor(
|
||||
factory: KtPsiFactory,
|
||||
fileName: String,
|
||||
fileText: String,
|
||||
psiTargetsProvider: KtResolveExtensionReferencePsiTargetsProvider
|
||||
navigationTargetsProvider: KtResolveExtensionNavigationTargetsProvider
|
||||
): KtFile {
|
||||
val ktFile = factory.createFile(fileName, fileText)
|
||||
val virtualFile = ktFile.virtualFile
|
||||
virtualFile.analysisExtensionFileContextModule = ktModule
|
||||
virtualFile.psiTargetsProvider = psiTargetsProvider
|
||||
virtualFile.navigationTargetsProvider = navigationTargetsProvider
|
||||
return ktFile
|
||||
}
|
||||
|
||||
@@ -362,7 +365,8 @@ private fun KtResolveExtensionFile.mayHaveTopLevelCallable(name: Name): Boolean
|
||||
}
|
||||
|
||||
@KtModuleStructureInternals
|
||||
public var VirtualFile.psiTargetsProvider: KtResolveExtensionReferencePsiTargetsProvider? by UserDataProperty(Key.create("KT_RESOLVE_EXTENSION_PSI_TARGETS_PROVIDER"))
|
||||
public var VirtualFile.navigationTargetsProvider: KtResolveExtensionNavigationTargetsProvider?
|
||||
by UserDataProperty(Key.create("KT_RESOLVE_EXTENSION_NAVIGATION_TARGETS_PROVIDER"))
|
||||
|
||||
private inline fun <R> forbidAnalysis(action: () -> R): R {
|
||||
return KtAnalysisAllowanceManager.forbidAnalysisInside(KtResolveExtensionProvider::class.java.simpleName, action)
|
||||
|
||||
Reference in New Issue
Block a user