[FIR IDE] Remove typed fir designation
This commit is contained in:
+3
-3
@@ -6,9 +6,9 @@
|
|||||||
package org.jetbrains.kotlin.idea.fir.low.level.api
|
package org.jetbrains.kotlin.idea.fir.low.level.api
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationUntypedDesignation
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation
|
||||||
|
|
||||||
abstract class ContextByDesignationCollector<C : Any>(private val designation: FirDeclarationUntypedDesignation) {
|
abstract class ContextByDesignationCollector<C : Any>(private val designation: FirDeclarationDesignation) {
|
||||||
private var context: C? = null
|
private var context: C? = null
|
||||||
private val designationState = FirDesignationState(designation)
|
private val designationState = FirDesignationState(designation)
|
||||||
|
|
||||||
@@ -36,7 +36,7 @@ abstract class ContextByDesignationCollector<C : Any>(private val designation: F
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class FirDesignationState(val designation: FirDeclarationUntypedDesignation) {
|
private class FirDesignationState(val designation: FirDeclarationDesignation) {
|
||||||
/**
|
/**
|
||||||
* Holds current declaration index
|
* Holds current declaration index
|
||||||
* if `currentIndex in [0, designation.path.lastIndex]` then current declaration is in path
|
* if `currentIndex in [0, designation.path.lastIndex]` then current declaration is in path
|
||||||
|
|||||||
+9
-12
@@ -12,15 +12,12 @@ import org.jetbrains.kotlin.fir.renderWithType
|
|||||||
import org.jetbrains.kotlin.fir.resolve.firProvider
|
import org.jetbrains.kotlin.fir.resolve.firProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.toFirRegularClass
|
import org.jetbrains.kotlin.fir.resolve.toFirRegularClass
|
||||||
|
|
||||||
typealias FirDeclarationUntypedDesignation = FirDeclarationDesignation<FirDeclaration>
|
class FirDeclarationDesignationWithFile(
|
||||||
typealias FirDeclarationUntypedDesignationWithFile = FirDeclarationDesignationWithFile<FirDeclaration>
|
|
||||||
|
|
||||||
class FirDeclarationDesignationWithFile<out T : FirDeclaration>(
|
|
||||||
path: List<FirDeclaration>,
|
path: List<FirDeclaration>,
|
||||||
declaration: T,
|
declaration: FirDeclaration,
|
||||||
isLocalDesignation: Boolean,
|
isLocalDesignation: Boolean,
|
||||||
val firFile: FirFile
|
val firFile: FirFile
|
||||||
) : FirDeclarationDesignation<T>(
|
) : FirDeclarationDesignation(
|
||||||
path,
|
path,
|
||||||
declaration,
|
declaration,
|
||||||
isLocalDesignation
|
isLocalDesignation
|
||||||
@@ -32,9 +29,9 @@ class FirDeclarationDesignationWithFile<out T : FirDeclaration>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
open class FirDeclarationDesignation<out T : FirDeclaration>(
|
open class FirDeclarationDesignation(
|
||||||
val path: List<FirDeclaration>,
|
val path: List<FirDeclaration>,
|
||||||
val declaration: T,
|
val declaration: FirDeclaration,
|
||||||
val isLocalDesignation: Boolean
|
val isLocalDesignation: Boolean
|
||||||
) {
|
) {
|
||||||
fun toSequence(includeTarget: Boolean): Sequence<FirDeclaration> = sequence {
|
fun toSequence(includeTarget: Boolean): Sequence<FirDeclaration> = sequence {
|
||||||
@@ -92,12 +89,12 @@ private fun FirRegularClass.collectForLocal(): List<FirClassLikeDeclaration<*>>
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fun FirDeclaration.collectDesignation(firFile: FirFile): FirDeclarationUntypedDesignationWithFile =
|
fun FirDeclaration.collectDesignation(firFile: FirFile): FirDeclarationDesignationWithFile =
|
||||||
collectDesignationAndIsLocal(this).let {
|
collectDesignationAndIsLocal(this).let {
|
||||||
FirDeclarationUntypedDesignationWithFile(it.first, this, it.second, firFile)
|
FirDeclarationDesignationWithFile(it.first, this, it.second, firFile)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FirDeclaration.collectDesignation(): FirDeclarationUntypedDesignation =
|
fun FirDeclaration.collectDesignation(): FirDeclarationDesignation =
|
||||||
collectDesignationAndIsLocal(this).let {
|
collectDesignationAndIsLocal(this).let {
|
||||||
FirDeclarationUntypedDesignation(it.first, this, it.second)
|
FirDeclarationDesignation(it.first, this, it.second)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -265,7 +265,7 @@ object LowLevelFirApiFacadeForResolveOnAir {
|
|||||||
}
|
}
|
||||||
} ?: newDeclarationWithReplacement
|
} ?: newDeclarationWithReplacement
|
||||||
|
|
||||||
val onAirDesignation = FirDeclarationUntypedDesignationWithFile(
|
val onAirDesignation = FirDeclarationDesignationWithFile(
|
||||||
path = originalDesignation.path,
|
path = originalDesignation.path,
|
||||||
declaration = copiedFirDeclaration,
|
declaration = copiedFirDeclaration,
|
||||||
isLocalDesignation = false,
|
isLocalDesignation = false,
|
||||||
|
|||||||
+3
-3
@@ -12,12 +12,12 @@ import org.jetbrains.kotlin.fir.declarations.*
|
|||||||
import org.jetbrains.kotlin.fir.renderWithType
|
import org.jetbrains.kotlin.fir.renderWithType
|
||||||
import org.jetbrains.kotlin.fir.resolve.SessionHolder
|
import org.jetbrains.kotlin.fir.resolve.SessionHolder
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.ContextByDesignationCollector
|
import org.jetbrains.kotlin.idea.fir.low.level.api.ContextByDesignationCollector
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationUntypedDesignationWithFile
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignationWithFile
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.collectDesignation
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.collectDesignation
|
||||||
|
|
||||||
private class ContextCollectingDiagnosticCollectorVisitor private constructor(
|
private class ContextCollectingDiagnosticCollectorVisitor private constructor(
|
||||||
sessionHolder: SessionHolder,
|
sessionHolder: SessionHolder,
|
||||||
designation: FirDeclarationUntypedDesignationWithFile,
|
designation: FirDeclarationDesignationWithFile,
|
||||||
) : AbstractDiagnosticCollectorVisitor(
|
) : AbstractDiagnosticCollectorVisitor(
|
||||||
PersistentCheckerContextFactory.createEmptyPersistenceCheckerContext(sessionHolder)
|
PersistentCheckerContextFactory.createEmptyPersistenceCheckerContext(sessionHolder)
|
||||||
) {
|
) {
|
||||||
@@ -40,7 +40,7 @@ private class ContextCollectingDiagnosticCollectorVisitor private constructor(
|
|||||||
override fun checkElement(element: FirElement) {}
|
override fun checkElement(element: FirElement) {}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun collect(sessionHolder: SessionHolder, designation: FirDeclarationUntypedDesignationWithFile): PersistentCheckerContext {
|
fun collect(sessionHolder: SessionHolder, designation: FirDeclarationDesignationWithFile): PersistentCheckerContext {
|
||||||
val visitor = ContextCollectingDiagnosticCollectorVisitor(sessionHolder, designation)
|
val visitor = ContextCollectingDiagnosticCollectorVisitor(sessionHolder, designation)
|
||||||
designation.firFile.accept(visitor, null)
|
designation.firFile.accept(visitor, null)
|
||||||
return visitor.contextCollector.getCollectedContext()
|
return visitor.contextCollector.getCollectedContext()
|
||||||
|
|||||||
+7
-22
@@ -14,38 +14,25 @@ import org.jetbrains.kotlin.fir.psi
|
|||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
import org.jetbrains.kotlin.fir.visitors.transformSingle
|
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.api.FirDeclarationDesignation
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationUntypedDesignation
|
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.providers.firIdeProvider
|
import org.jetbrains.kotlin.idea.fir.low.level.api.providers.firIdeProvider
|
||||||
import org.jetbrains.kotlin.psi.KtNamedFunction
|
import org.jetbrains.kotlin.psi.KtNamedFunction
|
||||||
import org.jetbrains.kotlin.psi.KtProperty
|
import org.jetbrains.kotlin.psi.KtProperty
|
||||||
import org.jetbrains.kotlin.psi.KtSecondaryConstructor
|
import org.jetbrains.kotlin.psi.KtSecondaryConstructor
|
||||||
|
|
||||||
internal object FirLazyBodiesCalculator {
|
internal object FirLazyBodiesCalculator {
|
||||||
fun calculateLazyBodiesInside(designation: FirDeclarationUntypedDesignation) {
|
fun calculateLazyBodiesInside(designation: FirDeclarationDesignation) {
|
||||||
designation.declaration.transform<FirElement, MutableList<FirDeclaration>>(
|
designation.declaration.transform<FirElement, MutableList<FirDeclaration>>(
|
||||||
FirLazyBodiesCalculatorTransformer,
|
FirLazyBodiesCalculatorTransformer,
|
||||||
designation.toSequence(includeTarget = true).toMutableList()
|
designation.toSequence(includeTarget = true).toMutableList()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun calculateLazyBodiesInsideIfNeeded(designation: FirDeclarationUntypedDesignation, phase: FirResolvePhase) {
|
|
||||||
if (phase == FIRST_PHASE_WHICH_NEEDS_BODIES) {
|
|
||||||
calculateLazyBodiesInside(designation)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun calculateLazyBodiesIfPhaseRequires(firFile: FirFile, phase: FirResolvePhase) {
|
|
||||||
if (phase == FIRST_PHASE_WHICH_NEEDS_BODIES) {
|
|
||||||
firFile.transform<FirElement, MutableList<FirDeclaration>>(FirLazyBodiesCalculatorTransformer, mutableListOf())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun calculateLazyBodies(firFile: FirFile) {
|
fun calculateLazyBodies(firFile: FirFile) {
|
||||||
firFile.transform<FirElement, MutableList<FirDeclaration>>(FirLazyBodiesCalculatorTransformer, mutableListOf())
|
firFile.transform<FirElement, MutableList<FirDeclaration>>(FirLazyBodiesCalculatorTransformer, mutableListOf())
|
||||||
}
|
}
|
||||||
|
|
||||||
fun calculateLazyBodiesForFunction(designation: FirDeclarationDesignation<FirSimpleFunction>) {
|
fun calculateLazyBodiesForFunction(designation: FirDeclarationDesignation) {
|
||||||
val simpleFunction = designation.declaration
|
val simpleFunction = designation.declaration as FirSimpleFunction
|
||||||
if (simpleFunction.body !is FirLazyBlock) return
|
if (simpleFunction.body !is FirLazyBlock) return
|
||||||
val newFunction = RawFirNonLocalDeclarationBuilder.buildWithRebind(
|
val newFunction = RawFirNonLocalDeclarationBuilder.buildWithRebind(
|
||||||
session = simpleFunction.moduleData.session,
|
session = simpleFunction.moduleData.session,
|
||||||
@@ -59,9 +46,9 @@ internal object FirLazyBodiesCalculator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun calculateLazyBodyForSecondaryConstructor(designation: FirDeclarationDesignation<FirConstructor>) {
|
fun calculateLazyBodyForSecondaryConstructor(designation: FirDeclarationDesignation) {
|
||||||
require(!designation.isLocalDesignation) { "Not supported for local designations" }
|
require(!designation.isLocalDesignation) { "Not supported for local designations" }
|
||||||
val secondaryConstructor = designation.declaration
|
val secondaryConstructor = designation.declaration as FirConstructor
|
||||||
require(!secondaryConstructor.isPrimary)
|
require(!secondaryConstructor.isPrimary)
|
||||||
if (secondaryConstructor.body !is FirLazyBlock) return
|
if (secondaryConstructor.body !is FirLazyBlock) return
|
||||||
|
|
||||||
@@ -77,9 +64,9 @@ internal object FirLazyBodiesCalculator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun calculateLazyBodyForProperty(designation: FirDeclarationDesignation<FirProperty>) {
|
fun calculateLazyBodyForProperty(designation: FirDeclarationDesignation) {
|
||||||
require(!designation.isLocalDesignation) { "Not supported for local designations" }
|
require(!designation.isLocalDesignation) { "Not supported for local designations" }
|
||||||
val firProperty = designation.declaration
|
val firProperty = designation.declaration as FirProperty
|
||||||
if (!needCalculatingLazyBodyForProperty(firProperty)) return
|
if (!needCalculatingLazyBodyForProperty(firProperty)) return
|
||||||
|
|
||||||
val newProperty = RawFirNonLocalDeclarationBuilder.buildWithRebind(
|
val newProperty = RawFirNonLocalDeclarationBuilder.buildWithRebind(
|
||||||
@@ -117,8 +104,6 @@ internal object FirLazyBodiesCalculator {
|
|||||||
|| firProperty.setter?.body is FirLazyBlock
|
|| firProperty.setter?.body is FirLazyBlock
|
||||||
|| firProperty.initializer is FirLazyExpression
|
|| firProperty.initializer is FirLazyExpression
|
||||||
|| (firProperty.delegate as? FirWrappedDelegateExpression)?.expression is FirLazyExpression
|
|| (firProperty.delegate as? FirWrappedDelegateExpression)?.expression is FirLazyExpression
|
||||||
|
|
||||||
private val FIRST_PHASE_WHICH_NEEDS_BODIES = FirResolvePhase.CONTRACTS
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private object FirLazyBodiesCalculatorTransformer : FirTransformer<MutableList<FirDeclaration>>() {
|
private object FirLazyBodiesCalculatorTransformer : FirTransformer<MutableList<FirDeclaration>>() {
|
||||||
|
|||||||
+3
-4
@@ -244,7 +244,7 @@ internal class FirLazyDeclarationResolver(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun runLazyDesignatedResolveWithoutLock(
|
private fun runLazyDesignatedResolveWithoutLock(
|
||||||
designation: FirDeclarationUntypedDesignationWithFile,
|
designation: FirDeclarationDesignationWithFile,
|
||||||
moduleFileCache: ModuleFileCache,
|
moduleFileCache: ModuleFileCache,
|
||||||
scopeSession: ScopeSession,
|
scopeSession: ScopeSession,
|
||||||
toPhase: FirResolvePhase,
|
toPhase: FirResolvePhase,
|
||||||
@@ -272,7 +272,6 @@ internal class FirLazyDeclarationResolver(
|
|||||||
currentPhase = currentPhase.next
|
currentPhase = currentPhase.next
|
||||||
if (currentPhase.pluginPhase) continue
|
if (currentPhase.pluginPhase) continue
|
||||||
if (checkPCE) checkCanceled()
|
if (checkPCE) checkCanceled()
|
||||||
FirLazyBodiesCalculator.calculateLazyBodiesInsideIfNeeded(designation, currentPhase)
|
|
||||||
|
|
||||||
currentPhase.createLazyTransformer(
|
currentPhase.createLazyTransformer(
|
||||||
designation = designation,
|
designation = designation,
|
||||||
@@ -287,7 +286,7 @@ internal class FirLazyDeclarationResolver(
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal fun runLazyDesignatedOnAirResolveToBodyWithoutLock(
|
internal fun runLazyDesignatedOnAirResolveToBodyWithoutLock(
|
||||||
designation: FirDeclarationUntypedDesignationWithFile,
|
designation: FirDeclarationDesignationWithFile,
|
||||||
moduleFileCache: ModuleFileCache,
|
moduleFileCache: ModuleFileCache,
|
||||||
checkPCE: Boolean,
|
checkPCE: Boolean,
|
||||||
resolveWithUnchangedFir: Boolean,
|
resolveWithUnchangedFir: Boolean,
|
||||||
@@ -322,7 +321,7 @@ internal class FirLazyDeclarationResolver(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun FirResolvePhase.createLazyTransformer(
|
private fun FirResolvePhase.createLazyTransformer(
|
||||||
designation: FirDeclarationUntypedDesignationWithFile,
|
designation: FirDeclarationDesignationWithFile,
|
||||||
scopeSession: ScopeSession,
|
scopeSession: ScopeSession,
|
||||||
declarationPhaseDowngraded: Boolean,
|
declarationPhaseDowngraded: Boolean,
|
||||||
moduleFileCache: ModuleFileCache,
|
moduleFileCache: ModuleFileCache,
|
||||||
|
|||||||
+3
-3
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
|
|||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationUntypedDesignation
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.collectDesignation
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.collectDesignation
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.providers.firIdeProvider
|
import org.jetbrains.kotlin.idea.fir.low.level.api.providers.firIdeProvider
|
||||||
import org.jetbrains.kotlin.idea.util.ifTrue
|
import org.jetbrains.kotlin.idea.util.ifTrue
|
||||||
@@ -32,7 +32,7 @@ internal class RawFirNonLocalDeclarationBuilder private constructor(
|
|||||||
fun buildWithReplacement(
|
fun buildWithReplacement(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
scopeProvider: FirScopeProvider,
|
scopeProvider: FirScopeProvider,
|
||||||
designation: FirDeclarationUntypedDesignation,
|
designation: FirDeclarationDesignation,
|
||||||
rootNonLocalDeclaration: KtDeclaration,
|
rootNonLocalDeclaration: KtDeclaration,
|
||||||
replacement: RawFirReplacement?
|
replacement: RawFirReplacement?
|
||||||
): FirDeclaration {
|
): FirDeclaration {
|
||||||
@@ -54,7 +54,7 @@ internal class RawFirNonLocalDeclarationBuilder private constructor(
|
|||||||
fun buildWithRebind(
|
fun buildWithRebind(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
scopeProvider: FirScopeProvider,
|
scopeProvider: FirScopeProvider,
|
||||||
designation: FirDeclarationUntypedDesignation,
|
designation: FirDeclarationDesignation,
|
||||||
rootNonLocalDeclaration: KtDeclaration,
|
rootNonLocalDeclaration: KtDeclaration,
|
||||||
): FirDeclaration {
|
): FirDeclaration {
|
||||||
require(!designation.isLocalDesignation) { "Local declaration is not allowed here" }
|
require(!designation.isLocalDesignation) { "Local declaration is not allowed here" }
|
||||||
|
|||||||
+2
-2
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
|||||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirProviderInterceptor
|
import org.jetbrains.kotlin.fir.resolve.transformers.FirProviderInterceptor
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.*
|
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.*
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.FirPhaseRunner
|
import org.jetbrains.kotlin.idea.fir.low.level.api.FirPhaseRunner
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationUntypedDesignationWithFile
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignationWithFile
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.FirIdeDesignatedBodyResolveTransformerForReturnTypeCalculator
|
import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.FirIdeDesignatedBodyResolveTransformerForReturnTypeCalculator
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE.Companion.isResolvedForAllDeclarations
|
import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE.Companion.isResolvedForAllDeclarations
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE.Companion.updateResolvedPhaseForDeclarationAndChildren
|
import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE.Companion.updateResolvedPhaseForDeclarationAndChildren
|
||||||
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.util.isTargetCallableDeclarat
|
|||||||
* Transform designation into BODY_RESOLVE declaration. Affects only for target declaration and it's children
|
* Transform designation into BODY_RESOLVE declaration. Affects only for target declaration and it's children
|
||||||
*/
|
*/
|
||||||
internal class FirDesignatedBodyResolveTransformerForIDE(
|
internal class FirDesignatedBodyResolveTransformerForIDE(
|
||||||
private val designation: FirDeclarationUntypedDesignationWithFile,
|
private val designation: FirDeclarationDesignationWithFile,
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
scopeSession: ScopeSession,
|
scopeSession: ScopeSession,
|
||||||
private val declarationPhaseDowngraded: Boolean,
|
private val declarationPhaseDowngraded: Boolean,
|
||||||
|
|||||||
+4
-2
@@ -12,7 +12,8 @@ import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
|||||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDeclarationsResolveTransformer
|
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDeclarationsResolveTransformer
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.contracts.FirContractResolveTransformer
|
import org.jetbrains.kotlin.fir.resolve.transformers.contracts.FirContractResolveTransformer
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.FirPhaseRunner
|
import org.jetbrains.kotlin.idea.fir.low.level.api.FirPhaseRunner
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationUntypedDesignationWithFile
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignationWithFile
|
||||||
|
import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.FirLazyBodiesCalculator
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE.Companion.isResolvedForAllDeclarations
|
import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE.Companion.isResolvedForAllDeclarations
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE.Companion.updateResolvedPhaseForDeclarationAndChildren
|
import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE.Companion.updateResolvedPhaseForDeclarationAndChildren
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.util.*
|
import org.jetbrains.kotlin.idea.fir.low.level.api.util.*
|
||||||
@@ -22,7 +23,7 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.util.ensurePhase
|
|||||||
* Transform designation into CONTRACTS declaration. Affects only for target declaration and it's children
|
* Transform designation into CONTRACTS declaration. Affects only for target declaration and it's children
|
||||||
*/
|
*/
|
||||||
internal class FirDesignatedContractsResolveTransformerForIDE(
|
internal class FirDesignatedContractsResolveTransformerForIDE(
|
||||||
private val designation: FirDeclarationUntypedDesignationWithFile,
|
private val designation: FirDeclarationDesignationWithFile,
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
scopeSession: ScopeSession,
|
scopeSession: ScopeSession,
|
||||||
private val declarationPhaseDowngraded: Boolean,
|
private val declarationPhaseDowngraded: Boolean,
|
||||||
@@ -54,6 +55,7 @@ internal class FirDesignatedContractsResolveTransformerForIDE(
|
|||||||
if (designation.isTargetCallableDeclarationAndInPhase(FirResolvePhase.CONTRACTS)) return
|
if (designation.isTargetCallableDeclarationAndInPhase(FirResolvePhase.CONTRACTS)) return
|
||||||
designation.ensureDesignation(FirResolvePhase.STATUS)
|
designation.ensureDesignation(FirResolvePhase.STATUS)
|
||||||
|
|
||||||
|
FirLazyBodiesCalculator.calculateLazyBodiesInside(designation)
|
||||||
phaseRunner.runPhaseWithCustomResolve(FirResolvePhase.CONTRACTS) {
|
phaseRunner.runPhaseWithCustomResolve(FirResolvePhase.CONTRACTS) {
|
||||||
designation.firFile.transform<FirFile, ResolutionMode>(this, ResolutionMode.ContextIndependent)
|
designation.firFile.transform<FirFile, ResolutionMode>(this, ResolutionMode.ContextIndependent)
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.ImplicitBodyRe
|
|||||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.createReturnTypeCalculatorForIDE
|
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.createReturnTypeCalculatorForIDE
|
||||||
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.FirPhaseRunner
|
import org.jetbrains.kotlin.idea.fir.low.level.api.FirPhaseRunner
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationUntypedDesignationWithFile
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignationWithFile
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.FirIdeDesignatedBodyResolveTransformerForReturnTypeCalculator
|
import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.FirIdeDesignatedBodyResolveTransformerForReturnTypeCalculator
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE.Companion.isResolvedForAllDeclarations
|
import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE.Companion.isResolvedForAllDeclarations
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE.Companion.updateResolvedPhaseForDeclarationAndChildren
|
import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE.Companion.updateResolvedPhaseForDeclarationAndChildren
|
||||||
@@ -27,7 +27,7 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.util.isTargetCallableDeclarat
|
|||||||
* Transform designation into IMPLICIT_TYPES_BODY_RESOLVE declaration. Affects only for target declaration, it's children and dependents
|
* Transform designation into IMPLICIT_TYPES_BODY_RESOLVE declaration. Affects only for target declaration, it's children and dependents
|
||||||
*/
|
*/
|
||||||
internal class FirDesignatedImplicitTypesTransformerForIDE(
|
internal class FirDesignatedImplicitTypesTransformerForIDE(
|
||||||
private val designation: FirDeclarationUntypedDesignationWithFile,
|
private val designation: FirDeclarationDesignationWithFile,
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
scopeSession: ScopeSession,
|
scopeSession: ScopeSession,
|
||||||
private val declarationPhaseDowngraded: Boolean,
|
private val declarationPhaseDowngraded: Boolean,
|
||||||
|
|||||||
+2
-2
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
|||||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirStatusResolveTransformer
|
import org.jetbrains.kotlin.fir.resolve.transformers.FirStatusResolveTransformer
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.StatusComputationSession
|
import org.jetbrains.kotlin.fir.resolve.transformers.StatusComputationSession
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.FirPhaseRunner
|
import org.jetbrains.kotlin.idea.fir.low.level.api.FirPhaseRunner
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationUntypedDesignationWithFile
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignationWithFile
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE.Companion.isResolvedForAllDeclarations
|
import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE.Companion.isResolvedForAllDeclarations
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE.Companion.updateResolvedPhaseForDeclarationAndChildren
|
import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE.Companion.updateResolvedPhaseForDeclarationAndChildren
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.util.ensureDesignation
|
import org.jetbrains.kotlin.idea.fir.low.level.api.util.ensureDesignation
|
||||||
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.util.ensurePhase
|
|||||||
* Transform designation into STATUS phase. Affects only for designation, target declaration, it's children and dependents
|
* Transform designation into STATUS phase. Affects only for designation, target declaration, it's children and dependents
|
||||||
*/
|
*/
|
||||||
internal class FirDesignatedStatusResolveTransformerForIDE(
|
internal class FirDesignatedStatusResolveTransformerForIDE(
|
||||||
private val designation: FirDeclarationUntypedDesignationWithFile,
|
private val designation: FirDeclarationDesignationWithFile,
|
||||||
private val session: FirSession,
|
private val session: FirSession,
|
||||||
private val scopeSession: ScopeSession,
|
private val scopeSession: ScopeSession,
|
||||||
private val declarationPhaseDowngraded: Boolean,
|
private val declarationPhaseDowngraded: Boolean,
|
||||||
|
|||||||
+11
-11
@@ -14,8 +14,8 @@ import org.jetbrains.kotlin.fir.resolve.transformers.*
|
|||||||
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.toSymbol
|
import org.jetbrains.kotlin.fir.types.toSymbol
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.FirPhaseRunner
|
import org.jetbrains.kotlin.idea.fir.low.level.api.FirPhaseRunner
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationUntypedDesignation
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationUntypedDesignationWithFile
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignationWithFile
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.collectDesignation
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.collectDesignation
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.ModuleFileCache
|
import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.ModuleFileCache
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.FirLazyDeclarationResolver
|
import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.FirLazyDeclarationResolver
|
||||||
@@ -29,7 +29,7 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.util.ensurePhase
|
|||||||
* Transform designation into SUPER_TYPES phase. Affects only for designation, target declaration, it's children and dependents
|
* Transform designation into SUPER_TYPES phase. Affects only for designation, target declaration, it's children and dependents
|
||||||
*/
|
*/
|
||||||
internal class FirDesignatedSupertypeResolverTransformerForIDE(
|
internal class FirDesignatedSupertypeResolverTransformerForIDE(
|
||||||
private val designation: FirDeclarationUntypedDesignationWithFile,
|
private val designation: FirDeclarationDesignationWithFile,
|
||||||
private val session: FirSession,
|
private val session: FirSession,
|
||||||
private val scopeSession: ScopeSession,
|
private val scopeSession: ScopeSession,
|
||||||
private val declarationPhaseDowngraded: Boolean,
|
private val declarationPhaseDowngraded: Boolean,
|
||||||
@@ -41,7 +41,7 @@ internal class FirDesignatedSupertypeResolverTransformerForIDE(
|
|||||||
|
|
||||||
private val supertypeComputationSession = SupertypeComputationSession()
|
private val supertypeComputationSession = SupertypeComputationSession()
|
||||||
|
|
||||||
private inner class DesignatedFirSupertypeResolverVisitor(classDesignation: FirDeclarationUntypedDesignation) :
|
private inner class DesignatedFirSupertypeResolverVisitor(classDesignation: FirDeclarationDesignation) :
|
||||||
FirSupertypeResolverVisitor(
|
FirSupertypeResolverVisitor(
|
||||||
session = session,
|
session = session,
|
||||||
supertypeComputationSession = supertypeComputationSession,
|
supertypeComputationSession = supertypeComputationSession,
|
||||||
@@ -60,7 +60,7 @@ internal class FirDesignatedSupertypeResolverTransformerForIDE(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private inner class DesignatedFirApplySupertypesTransformer(classDesignation: FirDeclarationUntypedDesignation) :
|
private inner class DesignatedFirApplySupertypesTransformer(classDesignation: FirDeclarationDesignation) :
|
||||||
FirApplySupertypesTransformer(supertypeComputationSession) {
|
FirApplySupertypesTransformer(supertypeComputationSession) {
|
||||||
|
|
||||||
override fun needReplacePhase(firDeclaration: FirDeclaration): Boolean =
|
override fun needReplacePhase(firDeclaration: FirDeclaration): Boolean =
|
||||||
@@ -93,9 +93,9 @@ internal class FirDesignatedSupertypeResolverTransformerForIDE(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun collect(designation: FirDeclarationUntypedDesignationWithFile): Collection<FirDeclarationUntypedDesignationWithFile> {
|
private fun collect(designation: FirDeclarationDesignationWithFile): Collection<FirDeclarationDesignationWithFile> {
|
||||||
val visited = mutableMapOf<FirDeclaration, FirDeclarationUntypedDesignationWithFile>()
|
val visited = mutableMapOf<FirDeclaration, FirDeclarationDesignationWithFile>()
|
||||||
val toVisit = mutableListOf<FirDeclarationUntypedDesignationWithFile>()
|
val toVisit = mutableListOf<FirDeclarationDesignationWithFile>()
|
||||||
toVisit.add(designation)
|
toVisit.add(designation)
|
||||||
|
|
||||||
while (toVisit.isNotEmpty()) {
|
while (toVisit.isNotEmpty()) {
|
||||||
@@ -131,8 +131,8 @@ internal class FirDesignatedSupertypeResolverTransformerForIDE(
|
|||||||
return visited.values
|
return visited.values
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun apply(visited: Collection<FirDeclarationUntypedDesignationWithFile>) {
|
private fun apply(visited: Collection<FirDeclarationDesignationWithFile>) {
|
||||||
fun applyToFileSymbols(designations: List<FirDeclarationUntypedDesignationWithFile>) {
|
fun applyToFileSymbols(designations: List<FirDeclarationDesignationWithFile>) {
|
||||||
for (designation in designations) {
|
for (designation in designations) {
|
||||||
if (checkPCE) checkCanceled()
|
if (checkPCE) checkCanceled()
|
||||||
val applier = DesignatedFirApplySupertypesTransformer(designation)
|
val applier = DesignatedFirApplySupertypesTransformer(designation)
|
||||||
@@ -159,7 +159,7 @@ internal class FirDesignatedSupertypeResolverTransformerForIDE(
|
|||||||
val resolvableTarget = designation.path.lastOrNull() ?: return
|
val resolvableTarget = designation.path.lastOrNull() ?: return
|
||||||
check(resolvableTarget is FirClassLikeDeclaration<*>)
|
check(resolvableTarget is FirClassLikeDeclaration<*>)
|
||||||
val targetPath = designation.path.dropLast(1)
|
val targetPath = designation.path.dropLast(1)
|
||||||
FirDeclarationUntypedDesignationWithFile(targetPath, resolvableTarget, false, designation.firFile)
|
FirDeclarationDesignationWithFile(targetPath, resolvableTarget, false, designation.firFile)
|
||||||
} else designation
|
} else designation
|
||||||
|
|
||||||
if (targetDesignation.isResolvedForAllDeclarations(FirResolvePhase.SUPER_TYPES, declarationPhaseDowngraded)) return
|
if (targetDesignation.isResolvedForAllDeclarations(FirResolvePhase.SUPER_TYPES, declarationPhaseDowngraded)) return
|
||||||
|
|||||||
+2
-2
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.fir.resolve.transformers.FirTypeResolveTransformer
|
|||||||
import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef
|
import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.FirPhaseRunner
|
import org.jetbrains.kotlin.idea.fir.low.level.api.FirPhaseRunner
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationUntypedDesignationWithFile
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignationWithFile
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE.Companion.isResolvedForAllDeclarations
|
import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE.Companion.isResolvedForAllDeclarations
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE.Companion.updateResolvedPhaseForDeclarationAndChildren
|
import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE.Companion.updateResolvedPhaseForDeclarationAndChildren
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.util.*
|
import org.jetbrains.kotlin.idea.fir.low.level.api.util.*
|
||||||
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.util.ensurePhaseForClasses
|
|||||||
* Transform designation into TYPES phase. Affects only for designation, target declaration and it's children
|
* Transform designation into TYPES phase. Affects only for designation, target declaration and it's children
|
||||||
*/
|
*/
|
||||||
internal class FirDesignatedTypeResolverTransformerForIDE(
|
internal class FirDesignatedTypeResolverTransformerForIDE(
|
||||||
private val designation: FirDeclarationUntypedDesignationWithFile,
|
private val designation: FirDeclarationDesignationWithFile,
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
scopeSession: ScopeSession,
|
scopeSession: ScopeSession,
|
||||||
private val declarationPhaseDowngraded: Boolean,
|
private val declarationPhaseDowngraded: Boolean,
|
||||||
|
|||||||
+3
-3
@@ -9,7 +9,7 @@ import org.jetbrains.annotations.TestOnly
|
|||||||
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.FirPhaseRunner
|
import org.jetbrains.kotlin.idea.fir.low.level.api.FirPhaseRunner
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationUntypedDesignation
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation
|
||||||
|
|
||||||
internal interface FirLazyTransformerForIDE {
|
internal interface FirLazyTransformerForIDE {
|
||||||
fun transformDeclaration(phaseRunner: FirPhaseRunner)
|
fun transformDeclaration(phaseRunner: FirPhaseRunner)
|
||||||
@@ -47,7 +47,7 @@ internal interface FirLazyTransformerForIDE {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FirDeclarationUntypedDesignation.resolvePhaseForAllDeclarations(includeDeclarationPhase: Boolean): FirResolvePhase {
|
fun FirDeclarationDesignation.resolvePhaseForAllDeclarations(includeDeclarationPhase: Boolean): FirResolvePhase {
|
||||||
//resolvePhaseWithForAllDeclarations for these origins are derived from original declaration
|
//resolvePhaseWithForAllDeclarations for these origins are derived from original declaration
|
||||||
val includeTarget = when (declaration.origin) {
|
val includeTarget = when (declaration.origin) {
|
||||||
is FirDeclarationOrigin.SubstitutionOverride,
|
is FirDeclarationOrigin.SubstitutionOverride,
|
||||||
@@ -63,7 +63,7 @@ internal interface FirLazyTransformerForIDE {
|
|||||||
return if (includeDeclarationPhase) minOf(declaration.resolvePhase, allContaining) else allContaining
|
return if (includeDeclarationPhase) minOf(declaration.resolvePhase, allContaining) else allContaining
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FirDeclarationUntypedDesignation.isResolvedForAllDeclarations(phase: FirResolvePhase, includeDeclarationPhase: Boolean) =
|
fun FirDeclarationDesignation.isResolvedForAllDeclarations(phase: FirResolvePhase, includeDeclarationPhase: Boolean) =
|
||||||
resolvePhaseForAllDeclarations(includeDeclarationPhase) >= phase
|
resolvePhaseForAllDeclarations(includeDeclarationPhase) >= phase
|
||||||
|
|
||||||
val DUMMY = object : FirLazyTransformerForIDE {
|
val DUMMY = object : FirLazyTransformerForIDE {
|
||||||
|
|||||||
+2
-2
@@ -12,9 +12,9 @@ import org.jetbrains.kotlin.fir.resolve.transformers.FirAbstractPhaseTransformer
|
|||||||
import org.jetbrains.kotlin.fir.visitors.FirDefaultTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirDefaultTransformer
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationUntypedDesignation
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation
|
||||||
|
|
||||||
internal class IDEDeclarationTransformer(private val designation: FirDeclarationUntypedDesignation) {
|
internal class IDEDeclarationTransformer(private val designation: FirDeclarationDesignation) {
|
||||||
private val designationWithoutTargetIterator = designation.toSequence(includeTarget = false).iterator()
|
private val designationWithoutTargetIterator = designation.toSequence(includeTarget = false).iterator()
|
||||||
private var isInsideTargetDeclaration: Boolean = false
|
private var isInsideTargetDeclaration: Boolean = false
|
||||||
private var designationPassed: Boolean = false
|
private var designationPassed: Boolean = false
|
||||||
|
|||||||
+6
-6
@@ -8,21 +8,21 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.util
|
|||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.ensureResolved
|
import org.jetbrains.kotlin.fir.resolve.transformers.ensureResolved
|
||||||
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationUntypedDesignation
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation
|
||||||
|
|
||||||
internal fun FirDeclaration.ensurePhase(firResolvePhase: FirResolvePhase) =
|
internal fun FirDeclaration.ensurePhase(firResolvePhase: FirResolvePhase) =
|
||||||
check(resolvePhase >= firResolvePhase) {
|
check(resolvePhase >= firResolvePhase) {
|
||||||
"Element phase required to be $firResolvePhase but element resolved to $resolvePhase"
|
"Element phase required to be $firResolvePhase but element resolved to $resolvePhase"
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun FirDeclarationUntypedDesignation.ensurePathPhase(firResolvePhase: FirResolvePhase) =
|
internal fun FirDeclarationDesignation.ensurePathPhase(firResolvePhase: FirResolvePhase) =
|
||||||
path.forEach { it.ensurePhase(firResolvePhase) }
|
path.forEach { it.ensurePhase(firResolvePhase) }
|
||||||
|
|
||||||
internal fun FirDeclarationUntypedDesignation.ensureDesignation(firResolvePhase: FirResolvePhase) {
|
internal fun FirDeclarationDesignation.ensureDesignation(firResolvePhase: FirResolvePhase) {
|
||||||
ensurePathPhase(firResolvePhase)
|
ensurePathPhase(firResolvePhase)
|
||||||
declaration.ensurePhase(firResolvePhase)
|
declaration.ensurePhase(firResolvePhase)
|
||||||
}
|
}
|
||||||
internal fun FirDeclarationUntypedDesignation.ensurePhaseForClasses(firResolvePhase: FirResolvePhase) {
|
internal fun FirDeclarationDesignation.ensurePhaseForClasses(firResolvePhase: FirResolvePhase) {
|
||||||
ensurePathPhase(firResolvePhase)
|
ensurePathPhase(firResolvePhase)
|
||||||
if (declaration is FirClassLikeDeclaration<*>) {
|
if (declaration is FirClassLikeDeclaration<*>) {
|
||||||
check(declaration.resolvePhase >= firResolvePhase) {
|
check(declaration.resolvePhase >= firResolvePhase) {
|
||||||
@@ -31,7 +31,7 @@ internal fun FirDeclarationUntypedDesignation.ensurePhaseForClasses(firResolvePh
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun FirDeclarationUntypedDesignation.isTargetCallableDeclarationAndInPhase(firResolvePhase: FirResolvePhase): Boolean =
|
internal fun FirDeclarationDesignation.isTargetCallableDeclarationAndInPhase(firResolvePhase: FirResolvePhase): Boolean =
|
||||||
(declaration as? FirCallableDeclaration<*>)?.let { it.resolvePhase >= firResolvePhase } ?: false
|
(declaration as? FirCallableDeclaration<*>)?.let { it.resolvePhase >= firResolvePhase } ?: false
|
||||||
|
|
||||||
internal fun FirDeclarationUntypedDesignation.targetContainingDeclaration(): FirDeclaration? = path.lastOrNull()
|
internal fun FirDeclarationDesignation.targetContainingDeclaration(): FirDeclaration? = path.lastOrNull()
|
||||||
+1
-1
@@ -28,7 +28,7 @@ abstract class AbstractFirLazyBodiesCalculatorTest : KotlinLightCodeInsightFixtu
|
|||||||
val provider = session.firIdeProvider.kotlinScopeProvider
|
val provider = session.firIdeProvider.kotlinScopeProvider
|
||||||
|
|
||||||
val laziedFirFile = RawFirBuilder(session, provider, RawFirBuilderMode.LAZY_BODIES).buildFirFile(file)
|
val laziedFirFile = RawFirBuilder(session, provider, RawFirBuilderMode.LAZY_BODIES).buildFirFile(file)
|
||||||
FirLazyBodiesCalculator.calculateLazyBodiesIfPhaseRequires(laziedFirFile, FirResolvePhase.CONTRACTS)
|
FirLazyBodiesCalculator.calculateLazyBodies(laziedFirFile)
|
||||||
val fullFirFile = RawFirBuilder(session, provider, RawFirBuilderMode.NORMAL).buildFirFile(file)
|
val fullFirFile = RawFirBuilder(session, provider, RawFirBuilderMode.NORMAL).buildFirFile(file)
|
||||||
|
|
||||||
val laziedFirFileDump = StringBuilder().also { FirRenderer(it).visitFile(laziedFirFile) }.toString()
|
val laziedFirFileDump = StringBuilder().also { FirRenderer(it).visitFile(laziedFirFile) }.toString()
|
||||||
|
|||||||
+2
-2
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
|||||||
import org.jetbrains.kotlin.fir.session.FirSessionFactory
|
import org.jetbrains.kotlin.fir.session.FirSessionFactory
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
|
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationUntypedDesignation
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.RawFirNonLocalDeclarationBuilder
|
import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.RawFirNonLocalDeclarationBuilder
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.providers.firIdeProvider
|
import org.jetbrains.kotlin.idea.fir.low.level.api.providers.firIdeProvider
|
||||||
import org.jetbrains.kotlin.parsing.KotlinParserDefinition
|
import org.jetbrains.kotlin.parsing.KotlinParserDefinition
|
||||||
@@ -62,7 +62,7 @@ abstract class AbstractPartialRawFirBuilderTestCase : KtParsingTestCase(
|
|||||||
|
|
||||||
private class DesignationBuilder(private val elementToBuild: KtDeclaration) : FirVisitorVoid() {
|
private class DesignationBuilder(private val elementToBuild: KtDeclaration) : FirVisitorVoid() {
|
||||||
private val path = mutableListOf<FirDeclaration>()
|
private val path = mutableListOf<FirDeclaration>()
|
||||||
var resultDesignation: FirDeclarationUntypedDesignation? = null
|
var resultDesignation: FirDeclarationDesignation? = null
|
||||||
private set
|
private set
|
||||||
|
|
||||||
override fun visitElement(element: FirElement) {
|
override fun visitElement(element: FirElement) {
|
||||||
|
|||||||
Reference in New Issue
Block a user