[FIR IDE] Rename refactoring and speed improvements
This commit is contained in:
committed by
TeamCityServer
parent
966743c704
commit
384b2ad048
+1
-1
@@ -47,7 +47,7 @@ abstract class KtAnalysisSession(final override val token: ValidityToken) : Vali
|
||||
|
||||
override val analysisSession: KtAnalysisSession get() = this
|
||||
|
||||
abstract fun createContextDependentCopy(originalKtFile: KtFile, dependencyKtElement: KtElement): KtAnalysisSession
|
||||
abstract fun createContextDependentCopy(originalKtFile: KtFile, elementToReanalyze: KtElement): KtAnalysisSession
|
||||
|
||||
internal val smartCastProvider: KtSmartCastProvider get() = smartCastProviderImpl
|
||||
protected abstract val smartCastProviderImpl: KtSmartCastProvider
|
||||
|
||||
+4
-4
@@ -38,11 +38,11 @@ abstract class KtAnalysisSessionProvider : Disposable {
|
||||
@InvalidWayOfUsingAnalysisSession
|
||||
inline fun <R> analyseInDependedAnalysisSession(
|
||||
originalFile: KtFile,
|
||||
dependencyExpression: KtElement,
|
||||
elementToReanalyze: KtElement,
|
||||
action: KtAnalysisSession.() -> R
|
||||
): R {
|
||||
val dependedAnalysisSession = getAnalysisSession(originalFile, ReadActionConfinementValidityTokenFactory)
|
||||
.createContextDependentCopy(originalFile, dependencyExpression)
|
||||
.createContextDependentCopy(originalFile, elementToReanalyze)
|
||||
return analyse(dependedAnalysisSession, ReadActionConfinementValidityTokenFactory, action)
|
||||
}
|
||||
|
||||
@@ -95,10 +95,10 @@ inline fun <R> analyseWithCustomToken(
|
||||
@OptIn(InvalidWayOfUsingAnalysisSession::class)
|
||||
inline fun <R> analyseInDependedAnalysisSession(
|
||||
originalFile: KtFile,
|
||||
dependencyExpression: KtElement,
|
||||
elementToReanalyze: KtElement,
|
||||
action: KtAnalysisSession.() -> R
|
||||
): R =
|
||||
originalFile.project.service<KtAnalysisSessionProvider>().analyseInDependedAnalysisSession(originalFile, dependencyExpression, action)
|
||||
originalFile.project.service<KtAnalysisSessionProvider>().analyseInDependedAnalysisSession(originalFile, elementToReanalyze, action)
|
||||
|
||||
/**
|
||||
* Execute given [action] in [KtAnalysisSession] context like [analyse] does but execute it in read action
|
||||
|
||||
-1
@@ -69,7 +69,6 @@ internal class FirModuleResolveStateImpl(
|
||||
override fun collectDiagnosticsForFile(ktFile: KtFile, filter: DiagnosticCheckerFilter): Collection<FirPsiDiagnostic<*>> =
|
||||
diagnosticsCollector.collectDiagnosticsForFile(ktFile, filter)
|
||||
|
||||
@TestOnly
|
||||
internal fun getBuiltFirFileOrNull(ktFile: KtFile): FirFile? {
|
||||
val cache = sessionProvider.getModuleCache(ktFile.getModuleInfo() as ModuleSourceInfo)
|
||||
return firFileBuilder.getBuiltFirFileOrNull(ktFile, cache)
|
||||
|
||||
-2
@@ -36,7 +36,6 @@ internal class FirPhaseRunner {
|
||||
FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE -> implicitTypesResolveLock.withLock {
|
||||
runPhaseWithoutLock(firFile, phase, scopeSession)
|
||||
}
|
||||
//TODO: Make correct sync for TYPES
|
||||
else -> {
|
||||
runPhaseWithoutLock(firFile, phase, scopeSession)
|
||||
}
|
||||
@@ -52,7 +51,6 @@ internal class FirPhaseRunner {
|
||||
FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE -> implicitTypesResolveLock.withLock {
|
||||
runPhaseWithCustomResolveWithoutLock(resolve)
|
||||
}
|
||||
//TODO: Make correct sync for TYPES
|
||||
else -> {
|
||||
runPhaseWithCustomResolveWithoutLock(resolve)
|
||||
}
|
||||
|
||||
+1
-3
@@ -20,12 +20,10 @@ import org.jetbrains.kotlin.psi.*
|
||||
object DeclarationCopyBuilder {
|
||||
fun <T : KtElement> createDeclarationCopy(
|
||||
state: FirModuleResolveState,
|
||||
nonLocalDeclaration: KtDeclaration,
|
||||
replacement: RawFirReplacement<T>
|
||||
): FirDeclaration {
|
||||
|
||||
val nonLocalDeclaration = LowLevelFirApiFacadeForDependentCopy.findEnclosingNonLocalDeclaration(replacement.from)
|
||||
?: error("Cannot find enclosing declaration for ${replacement.from.getElementTextInContext()}")
|
||||
|
||||
return when (nonLocalDeclaration) {
|
||||
is KtNamedFunction -> createFunctionCopy(
|
||||
nonLocalDeclaration,
|
||||
|
||||
+44
-44
@@ -11,26 +11,26 @@ import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.builder.RawFirReplacement
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.realPsi
|
||||
import org.jetbrains.kotlin.fir.resolve.FirTowerDataContext
|
||||
import org.jetbrains.kotlin.fir.resolve.ResolutionMode
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer
|
||||
import org.jetbrains.kotlin.fir.resolve.*
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirTowerDataContextCollector
|
||||
import org.jetbrains.kotlin.fir.scopes.createImportingScopes
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
|
||||
import org.jetbrains.kotlin.idea.caches.project.getModuleInfo
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.FirModuleResolveStateDepended
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.FirModuleResolveStateImpl
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.FirTowerContextProvider
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.FirTowerDataContextAllElementsCollector
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.SingleElementTowerProvider
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.FileTowerProvider
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.file.structure.FirElementsRecorder
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.providers.firIdeProvider
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.trasformers.FirProviderInterceptorForIDE
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.sessions.FirIdeSourcesSession
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirProviderInterceptorForIDE
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.util.originalDeclaration
|
||||
import org.jetbrains.kotlin.idea.util.getElementTextInContext
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
|
||||
|
||||
object LowLevelFirApiFacadeForDependentCopy {
|
||||
object LowLevelFirApiFacadeForResolveOnAir {
|
||||
|
||||
private fun KtDeclaration.canBeEnclosingDeclaration(): Boolean = when (this) {
|
||||
is KtNamedFunction -> isTopLevel || containingClassOrObject?.isLocal == false
|
||||
@@ -40,7 +40,7 @@ object LowLevelFirApiFacadeForDependentCopy {
|
||||
else -> false
|
||||
}
|
||||
|
||||
fun findEnclosingNonLocalDeclaration(position: KtElement): KtNamedDeclaration? =
|
||||
private fun findEnclosingNonLocalDeclaration(position: KtElement): KtNamedDeclaration? =
|
||||
position.parentsOfType<KtNamedDeclaration>().firstOrNull { ktDeclaration ->
|
||||
ktDeclaration.canBeEnclosingDeclaration()
|
||||
}
|
||||
@@ -71,7 +71,7 @@ object LowLevelFirApiFacadeForDependentCopy {
|
||||
require(!elementToResolve.isPhysical)
|
||||
|
||||
val collector = FirTowerDataContextAllElementsCollector()
|
||||
val declaration = runBodyResolve(
|
||||
val declaration = runResolveBodyResolveOnAir(
|
||||
state = state,
|
||||
replacement = RawFirReplacement(place, elementToResolve),
|
||||
collector = null,
|
||||
@@ -102,10 +102,10 @@ object LowLevelFirApiFacadeForDependentCopy {
|
||||
require(place.isPhysical)
|
||||
|
||||
return if (place is KtFile) {
|
||||
onAirGetTowerContextForFile(state, place)
|
||||
FileTowerProvider(place, onAirGetTowerContextForFile(state, place))
|
||||
} else {
|
||||
FirTowerDataContextAllElementsCollector().also {
|
||||
runBodyResolve(state, collector = it, replacement = RawFirReplacement(place, place))
|
||||
runResolveBodyResolveOnAir(state, collector = it, replacement = RawFirReplacement(place, place))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -113,44 +113,38 @@ object LowLevelFirApiFacadeForDependentCopy {
|
||||
private fun onAirGetTowerContextForFile(
|
||||
state: FirModuleResolveState,
|
||||
file: KtFile,
|
||||
): FirTowerContextProvider {
|
||||
): FirTowerDataContext {
|
||||
require(file.isPhysical)
|
||||
val session = state.getSessionFor(file.getModuleInfo()) as FirIdeSourcesSession
|
||||
val firFile = session.firFileBuilder.getFirFileResolvedToPhaseWithCaching(
|
||||
file,
|
||||
session.cache,
|
||||
FirResolvePhase.IMPORTS,
|
||||
ScopeSession(),
|
||||
checkPCE = false
|
||||
)
|
||||
|
||||
val firFile = state.getOrBuildFirFor(file) as FirFile
|
||||
|
||||
val fileTransformer = object : FirBodyResolveTransformer(
|
||||
session = firFile.declarationSiteSession,
|
||||
phase = FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE,
|
||||
implicitTypeOnly = true,
|
||||
scopeSession = ScopeSession()
|
||||
) {
|
||||
var result: FirTowerDataContext? = null
|
||||
private set
|
||||
|
||||
override fun transformDeclarationContent(declaration: FirDeclaration, data: ResolutionMode): FirDeclaration {
|
||||
check(declaration is FirFile)
|
||||
result = context.towerDataContext
|
||||
return declaration
|
||||
}
|
||||
}
|
||||
firFile.transform<FirFile, ResolutionMode>(fileTransformer, ResolutionMode.ContextDependent)
|
||||
|
||||
val fileContext = fileTransformer.result
|
||||
check(fileContext != null) { "File context not found for physical file" }
|
||||
|
||||
return SingleElementTowerProvider(file, fileContext)
|
||||
val importingScopes = createImportingScopes(firFile, firFile.declarationSiteSession, ScopeSession(), useCaching = false)
|
||||
val fileScopeElements = importingScopes.map { it.asTowerDataElement(isLocal = false) }
|
||||
return FirTowerDataContext().addNonLocalTowerDataElements(fileScopeElements)
|
||||
}
|
||||
|
||||
fun getResolveStateForDependedCopy(
|
||||
fun getResolveStateForDependentCopy(
|
||||
originalState: FirModuleResolveState,
|
||||
originalKtFile: KtFile,
|
||||
dependencyKtElement: KtElement
|
||||
elementToAnalyze: KtElement
|
||||
): FirModuleResolveState {
|
||||
require(originalState is FirModuleResolveStateImpl)
|
||||
require(dependencyKtElement !is KtFile) { "KtFile for dependency element not supported" }
|
||||
require(!dependencyKtElement.isPhysical) { "Depended state should be build only for non-physical elements" }
|
||||
require(elementToAnalyze !is KtFile) { "KtFile for dependency element not supported" }
|
||||
require(!elementToAnalyze.isPhysical) { "Depended state should be build only for non-physical elements" }
|
||||
|
||||
val dependencyNonLocalDeclaration = findEnclosingNonLocalDeclaration(elementToAnalyze)
|
||||
?: return FirModuleResolveStateDepended(
|
||||
originalState,
|
||||
FileTowerProvider(elementToAnalyze.containingKtFile, onAirGetTowerContextForFile(originalState, originalKtFile)),
|
||||
emptyMap()
|
||||
)
|
||||
|
||||
val dependencyNonLocalDeclaration = findEnclosingNonLocalDeclaration(dependencyKtElement)
|
||||
?: error("Cannot find enclosing declaration for ${dependencyKtElement.getElementTextInContext()}")
|
||||
|
||||
val sameDeclarationInOriginalFile = locateDeclarationInFileByOffset(dependencyNonLocalDeclaration, originalKtFile)
|
||||
?: error("Cannot find original function matching to ${dependencyNonLocalDeclaration.getElementTextInContext()} in $originalKtFile")
|
||||
@@ -161,7 +155,7 @@ object LowLevelFirApiFacadeForDependentCopy {
|
||||
)
|
||||
|
||||
val collector = FirTowerDataContextAllElementsCollector()
|
||||
val copiedFirDeclaration = runBodyResolve(
|
||||
val copiedFirDeclaration = runResolveBodyResolveOnAir(
|
||||
originalState,
|
||||
collector = collector,
|
||||
replacement = RawFirReplacement(sameDeclarationInOriginalFile, dependencyNonLocalDeclaration),
|
||||
@@ -172,18 +166,24 @@ object LowLevelFirApiFacadeForDependentCopy {
|
||||
return FirModuleResolveStateDepended(originalState, collector, recordedMap)
|
||||
}
|
||||
|
||||
private fun <T : KtElement> runBodyResolve(
|
||||
private fun <T : KtElement> runResolveBodyResolveOnAir(
|
||||
state: FirModuleResolveStateImpl,
|
||||
replacement: RawFirReplacement<T>,
|
||||
collector: FirTowerDataContextCollector? = null,
|
||||
useFirProviderInterceptor: Boolean = false
|
||||
): FirDeclaration {
|
||||
|
||||
val nonLocalDeclaration = findEnclosingNonLocalDeclaration(replacement.from)
|
||||
?: error("Cannot find enclosing declaration for ${replacement.from.getElementTextInContext()}")
|
||||
|
||||
val copiedFirDeclaration = DeclarationCopyBuilder.createDeclarationCopy(
|
||||
state = state,
|
||||
nonLocalDeclaration = nonLocalDeclaration,
|
||||
replacement = replacement,
|
||||
)
|
||||
|
||||
val originalFirFile = state.getOrBuildFirFor(replacement.from.containingKtFile) as FirFile
|
||||
val originalFirFile = state.getBuiltFirFileOrNull(replacement.from.containingKtFile)
|
||||
?: error("Original fir file should be already built")
|
||||
|
||||
val firProviderInterceptor =
|
||||
if (useFirProviderInterceptor) FirProviderInterceptorForIDE.createForFirElement(
|
||||
+3
-3
@@ -19,12 +19,12 @@ interface FirTowerContextProvider {
|
||||
fun getClosestAvailableParentContext(ktElement: KtElement): FirTowerDataContext?
|
||||
}
|
||||
|
||||
internal class SingleElementTowerProvider(
|
||||
private val element: KtElement,
|
||||
internal class FileTowerProvider(
|
||||
private val file: KtFile,
|
||||
private val context: FirTowerDataContext
|
||||
) : FirTowerContextProvider {
|
||||
override fun getClosestAvailableParentContext(ktElement: KtElement): FirTowerDataContext? =
|
||||
if (element == ktElement) context else null
|
||||
if (file == ktElement.containingKtFile) context else null
|
||||
}
|
||||
|
||||
internal class FirTowerDataContextAllElementsCollector : FirTowerDataContextCollector, FirTowerContextProvider {
|
||||
|
||||
+2
-1
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.getNonLocalCo
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.FirFileBuilder
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.ModuleFileCache
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.providers.firIdeProvider
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.trasformers.*
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.*
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.util.*
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
|
||||
@@ -34,6 +34,7 @@ internal class FirLazyDeclarationResolver(
|
||||
moduleFileCache: ModuleFileCache,
|
||||
scopeSession: ScopeSession,
|
||||
) {
|
||||
check(firFile.resolvePhase >= FirResolvePhase.IMPORTS)
|
||||
firFileBuilder.runCustomResolveUnderLock(firFile, moduleFileCache) {
|
||||
val transformer = FirFileAnnotationsResolveTransformer(firFile.moduleData.session, scopeSession)
|
||||
firFile.accept(transformer, ResolutionMode.ContextDependent)
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
* 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.idea.fir.low.level.api.trasformers
|
||||
package org.jetbrains.kotlin.idea.fir.low.level.api.transformers
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
* 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.idea.fir.low.level.api.trasformers
|
||||
package org.jetbrains.kotlin.idea.fir.low.level.api.transformers
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
* 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.idea.fir.low.level.api.trasformers
|
||||
package org.jetbrains.kotlin.idea.fir.low.level.api.transformers
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
+2
-2
@@ -3,7 +3,7 @@
|
||||
* 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.idea.fir.low.level.api.trasformers
|
||||
package org.jetbrains.kotlin.idea.fir.low.level.api.transformers
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.resolve.transformers.FirStatusResolveTransformer
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.StatusComputationSession
|
||||
import org.jetbrains.kotlin.fir.visitors.transformSingle
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.trasformers.FirLazyTransformerForIDE.Companion.ensurePhase
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE.Companion.ensurePhase
|
||||
|
||||
class FirDesignatedStatusResolveTransformerForIDE(
|
||||
private val designation: FirDeclarationDesignation,
|
||||
+2
-2
@@ -3,7 +3,7 @@
|
||||
* 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.idea.fir.low.level.api.trasformers
|
||||
package org.jetbrains.kotlin.idea.fir.low.level.api.transformers
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.resolve.transformers.FirProviderInterceptorForSu
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirSupertypeResolverVisitor
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.SupertypeComputationSession
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.trasformers.FirLazyTransformerForIDE.Companion.ensurePhase
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE.Companion.ensurePhase
|
||||
|
||||
internal class FirDesignatedSupertypeResolverTransformerForIDE(
|
||||
private val designation: FirDeclarationDesignation,
|
||||
+2
-2
@@ -3,7 +3,7 @@
|
||||
* 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.idea.fir.low.level.api.trasformers
|
||||
package org.jetbrains.kotlin.idea.fir.low.level.api.transformers
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.expressions.FirStatement
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirTypeResolveTransformer
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.trasformers.FirLazyTransformerForIDE.Companion.ensurePhase
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE.Companion.ensurePhase
|
||||
|
||||
class FirDesignatedTypeResolverTransformerForIDE(
|
||||
private val originalFile: FirFile,
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
* 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.idea.fir.low.level.api.trasformers
|
||||
package org.jetbrains.kotlin.idea.fir.low.level.api.transformers
|
||||
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package org.jetbrains.kotlin.idea.fir.low.level.api.trasformers
|
||||
package org.jetbrains.kotlin.idea.fir.low.level.api.transformers
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
* 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.idea.fir.low.level.api.trasformers
|
||||
package org.jetbrains.kotlin.idea.fir.low.level.api.transformers
|
||||
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
* 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.idea.fir.low.level.api.trasformers
|
||||
package org.jetbrains.kotlin.idea.fir.low.level.api.transformers
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
* 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.idea.fir.low.level.api.trasformers
|
||||
package org.jetbrains.kotlin.idea.fir.low.level.api.transformers
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
+4
-4
@@ -73,16 +73,16 @@ private constructor(
|
||||
|
||||
override val subtypingComponentImpl = KtFirSubtypingComponent(this, token)
|
||||
|
||||
override fun createContextDependentCopy(originalKtFile: KtFile, dependencyKtElement: KtElement): KtAnalysisSession {
|
||||
override fun createContextDependentCopy(originalKtFile: KtFile, elementToReanalyze: KtElement): KtAnalysisSession {
|
||||
check(mode == AnalysisSessionMode.REGULAR) {
|
||||
"Cannot create context-dependent copy of KtAnalysis session from a context dependent one"
|
||||
}
|
||||
require(!dependencyKtElement.isPhysical) { "Depended context should be build only for non-physical elements" }
|
||||
require(!elementToReanalyze.isPhysical) { "Depended context should be build only for non-physical elements" }
|
||||
|
||||
val contextResolveState = LowLevelFirApiFacadeForDependentCopy.getResolveStateForDependedCopy(
|
||||
val contextResolveState = LowLevelFirApiFacadeForResolveOnAir.getResolveStateForDependentCopy(
|
||||
originalState = firResolveState,
|
||||
originalKtFile = originalKtFile,
|
||||
dependencyKtElement = dependencyKtElement
|
||||
elementToAnalyze = elementToReanalyze
|
||||
)
|
||||
|
||||
return KtFirAnalysisSession(
|
||||
|
||||
+2
-1
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.idea.frontend.api.InvalidWayOfUsingAnalysisSession
|
||||
import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession
|
||||
import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSessionProvider
|
||||
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirSymbol
|
||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.EntityWasGarbageCollectedException
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol
|
||||
|
||||
@OptIn(InvalidWayOfUsingAnalysisSession::class)
|
||||
@@ -23,6 +24,6 @@ internal inline fun <R> analyzeWithSymbolAsContext(
|
||||
val analysisSessionProvider = resolveState.project.service<KtAnalysisSessionProvider>()
|
||||
check(analysisSessionProvider is KtFirAnalysisSessionProvider)
|
||||
val analysisSession = analysisSessionProvider.getCachedAnalysisSession(resolveState, token)
|
||||
?: error("KtAnalysisSession assotiated with symbol was invalidated")
|
||||
?: throw EntityWasGarbageCollectedException("KtAnalysisSession")
|
||||
return action(analysisSession)
|
||||
}
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.components
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.resolve.calls.ImplicitReceiverValue
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.LowLevelFirApiFacadeForDependentCopy.getTowerContextProvider
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.LowLevelFirApiFacadeForResolveOnAir.getTowerContextProvider
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.getFirFile
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.getOrBuildFirOfType
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.resolver.ResolutionParameters
|
||||
|
||||
+2
-3
@@ -45,8 +45,7 @@ import org.jetbrains.kotlin.fir.types.classId
|
||||
import org.jetbrains.kotlin.fir.types.lowerBoundIfFlexible
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.LowLevelFirApiFacadeForDependentCopy
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.LowLevelFirApiFacadeForDependentCopy.getTowerContextProvider
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.LowLevelFirApiFacadeForResolveOnAir
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.getOrBuildFir
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.FirTowerContextProvider
|
||||
import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityToken
|
||||
@@ -76,7 +75,7 @@ internal class KtFirReferenceShortener(
|
||||
val firDeclaration = declarationToVisit.getOrBuildFir(firResolveState)
|
||||
|
||||
val towerContext =
|
||||
LowLevelFirApiFacadeForDependentCopy.onAirGetTowerContextProvider(firResolveState, declarationToVisit)
|
||||
LowLevelFirApiFacadeForResolveOnAir.onAirGetTowerContextProvider(firResolveState, declarationToVisit)
|
||||
|
||||
val collector = ElementsToShortenCollector(context, towerContext)
|
||||
firDeclaration.accept(collector)
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.resolve.scope
|
||||
import org.jetbrains.kotlin.fir.scopes.*
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.*
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.LowLevelFirApiFacadeForDependentCopy.getTowerContextProvider
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.LowLevelFirApiFacadeForResolveOnAir.getTowerContextProvider
|
||||
import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityToken
|
||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner
|
||||
import org.jetbrains.kotlin.idea.frontend.api.components.KtImplicitReceiver
|
||||
|
||||
Reference in New Issue
Block a user