[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
|
||||
|
||||
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 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
|
||||
* 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.toFirRegularClass
|
||||
|
||||
typealias FirDeclarationUntypedDesignation = FirDeclarationDesignation<FirDeclaration>
|
||||
typealias FirDeclarationUntypedDesignationWithFile = FirDeclarationDesignationWithFile<FirDeclaration>
|
||||
|
||||
class FirDeclarationDesignationWithFile<out T : FirDeclaration>(
|
||||
class FirDeclarationDesignationWithFile(
|
||||
path: List<FirDeclaration>,
|
||||
declaration: T,
|
||||
declaration: FirDeclaration,
|
||||
isLocalDesignation: Boolean,
|
||||
val firFile: FirFile
|
||||
) : FirDeclarationDesignation<T>(
|
||||
) : FirDeclarationDesignation(
|
||||
path,
|
||||
declaration,
|
||||
isLocalDesignation
|
||||
@@ -32,9 +29,9 @@ class FirDeclarationDesignationWithFile<out T : FirDeclaration>(
|
||||
}
|
||||
}
|
||||
|
||||
open class FirDeclarationDesignation<out T : FirDeclaration>(
|
||||
open class FirDeclarationDesignation(
|
||||
val path: List<FirDeclaration>,
|
||||
val declaration: T,
|
||||
val declaration: FirDeclaration,
|
||||
val isLocalDesignation: Boolean
|
||||
) {
|
||||
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 {
|
||||
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 {
|
||||
FirDeclarationUntypedDesignation(it.first, this, it.second)
|
||||
FirDeclarationDesignation(it.first, this, it.second)
|
||||
}
|
||||
|
||||
+1
-1
@@ -265,7 +265,7 @@ object LowLevelFirApiFacadeForResolveOnAir {
|
||||
}
|
||||
} ?: newDeclarationWithReplacement
|
||||
|
||||
val onAirDesignation = FirDeclarationUntypedDesignationWithFile(
|
||||
val onAirDesignation = FirDeclarationDesignationWithFile(
|
||||
path = originalDesignation.path,
|
||||
declaration = copiedFirDeclaration,
|
||||
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.resolve.SessionHolder
|
||||
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
|
||||
|
||||
private class ContextCollectingDiagnosticCollectorVisitor private constructor(
|
||||
sessionHolder: SessionHolder,
|
||||
designation: FirDeclarationUntypedDesignationWithFile,
|
||||
designation: FirDeclarationDesignationWithFile,
|
||||
) : AbstractDiagnosticCollectorVisitor(
|
||||
PersistentCheckerContextFactory.createEmptyPersistenceCheckerContext(sessionHolder)
|
||||
) {
|
||||
@@ -40,7 +40,7 @@ private class ContextCollectingDiagnosticCollectorVisitor private constructor(
|
||||
override fun checkElement(element: FirElement) {}
|
||||
|
||||
companion object {
|
||||
fun collect(sessionHolder: SessionHolder, designation: FirDeclarationUntypedDesignationWithFile): PersistentCheckerContext {
|
||||
fun collect(sessionHolder: SessionHolder, designation: FirDeclarationDesignationWithFile): PersistentCheckerContext {
|
||||
val visitor = ContextCollectingDiagnosticCollectorVisitor(sessionHolder, designation)
|
||||
designation.firFile.accept(visitor, null)
|
||||
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.transformSingle
|
||||
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.psi.KtNamedFunction
|
||||
import org.jetbrains.kotlin.psi.KtProperty
|
||||
import org.jetbrains.kotlin.psi.KtSecondaryConstructor
|
||||
|
||||
internal object FirLazyBodiesCalculator {
|
||||
fun calculateLazyBodiesInside(designation: FirDeclarationUntypedDesignation) {
|
||||
fun calculateLazyBodiesInside(designation: FirDeclarationDesignation) {
|
||||
designation.declaration.transform<FirElement, MutableList<FirDeclaration>>(
|
||||
FirLazyBodiesCalculatorTransformer,
|
||||
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) {
|
||||
firFile.transform<FirElement, MutableList<FirDeclaration>>(FirLazyBodiesCalculatorTransformer, mutableListOf())
|
||||
}
|
||||
|
||||
fun calculateLazyBodiesForFunction(designation: FirDeclarationDesignation<FirSimpleFunction>) {
|
||||
val simpleFunction = designation.declaration
|
||||
fun calculateLazyBodiesForFunction(designation: FirDeclarationDesignation) {
|
||||
val simpleFunction = designation.declaration as FirSimpleFunction
|
||||
if (simpleFunction.body !is FirLazyBlock) return
|
||||
val newFunction = RawFirNonLocalDeclarationBuilder.buildWithRebind(
|
||||
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" }
|
||||
val secondaryConstructor = designation.declaration
|
||||
val secondaryConstructor = designation.declaration as FirConstructor
|
||||
require(!secondaryConstructor.isPrimary)
|
||||
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" }
|
||||
val firProperty = designation.declaration
|
||||
val firProperty = designation.declaration as FirProperty
|
||||
if (!needCalculatingLazyBodyForProperty(firProperty)) return
|
||||
|
||||
val newProperty = RawFirNonLocalDeclarationBuilder.buildWithRebind(
|
||||
@@ -117,8 +104,6 @@ internal object FirLazyBodiesCalculator {
|
||||
|| firProperty.setter?.body is FirLazyBlock
|
||||
|| firProperty.initializer is FirLazyExpression
|
||||
|| (firProperty.delegate as? FirWrappedDelegateExpression)?.expression is FirLazyExpression
|
||||
|
||||
private val FIRST_PHASE_WHICH_NEEDS_BODIES = FirResolvePhase.CONTRACTS
|
||||
}
|
||||
|
||||
private object FirLazyBodiesCalculatorTransformer : FirTransformer<MutableList<FirDeclaration>>() {
|
||||
|
||||
+3
-4
@@ -244,7 +244,7 @@ internal class FirLazyDeclarationResolver(
|
||||
}
|
||||
|
||||
private fun runLazyDesignatedResolveWithoutLock(
|
||||
designation: FirDeclarationUntypedDesignationWithFile,
|
||||
designation: FirDeclarationDesignationWithFile,
|
||||
moduleFileCache: ModuleFileCache,
|
||||
scopeSession: ScopeSession,
|
||||
toPhase: FirResolvePhase,
|
||||
@@ -272,7 +272,6 @@ internal class FirLazyDeclarationResolver(
|
||||
currentPhase = currentPhase.next
|
||||
if (currentPhase.pluginPhase) continue
|
||||
if (checkPCE) checkCanceled()
|
||||
FirLazyBodiesCalculator.calculateLazyBodiesInsideIfNeeded(designation, currentPhase)
|
||||
|
||||
currentPhase.createLazyTransformer(
|
||||
designation = designation,
|
||||
@@ -287,7 +286,7 @@ internal class FirLazyDeclarationResolver(
|
||||
}
|
||||
|
||||
internal fun runLazyDesignatedOnAirResolveToBodyWithoutLock(
|
||||
designation: FirDeclarationUntypedDesignationWithFile,
|
||||
designation: FirDeclarationDesignationWithFile,
|
||||
moduleFileCache: ModuleFileCache,
|
||||
checkPCE: Boolean,
|
||||
resolveWithUnchangedFir: Boolean,
|
||||
@@ -322,7 +321,7 @@ internal class FirLazyDeclarationResolver(
|
||||
}
|
||||
|
||||
private fun FirResolvePhase.createLazyTransformer(
|
||||
designation: FirDeclarationUntypedDesignationWithFile,
|
||||
designation: FirDeclarationDesignationWithFile,
|
||||
scopeSession: ScopeSession,
|
||||
declarationPhaseDowngraded: Boolean,
|
||||
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.types.FirResolvedTypeRef
|
||||
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.providers.firIdeProvider
|
||||
import org.jetbrains.kotlin.idea.util.ifTrue
|
||||
@@ -32,7 +32,7 @@ internal class RawFirNonLocalDeclarationBuilder private constructor(
|
||||
fun buildWithReplacement(
|
||||
session: FirSession,
|
||||
scopeProvider: FirScopeProvider,
|
||||
designation: FirDeclarationUntypedDesignation,
|
||||
designation: FirDeclarationDesignation,
|
||||
rootNonLocalDeclaration: KtDeclaration,
|
||||
replacement: RawFirReplacement?
|
||||
): FirDeclaration {
|
||||
@@ -54,7 +54,7 @@ internal class RawFirNonLocalDeclarationBuilder private constructor(
|
||||
fun buildWithRebind(
|
||||
session: FirSession,
|
||||
scopeProvider: FirScopeProvider,
|
||||
designation: FirDeclarationUntypedDesignation,
|
||||
designation: FirDeclarationDesignation,
|
||||
rootNonLocalDeclaration: KtDeclaration,
|
||||
): FirDeclaration {
|
||||
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.body.resolve.*
|
||||
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.transformers.FirLazyTransformerForIDE.Companion.isResolvedForAllDeclarations
|
||||
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
|
||||
*/
|
||||
internal class FirDesignatedBodyResolveTransformerForIDE(
|
||||
private val designation: FirDeclarationUntypedDesignationWithFile,
|
||||
private val designation: FirDeclarationDesignationWithFile,
|
||||
session: FirSession,
|
||||
scopeSession: ScopeSession,
|
||||
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.contracts.FirContractResolveTransformer
|
||||
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.updateResolvedPhaseForDeclarationAndChildren
|
||||
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
|
||||
*/
|
||||
internal class FirDesignatedContractsResolveTransformerForIDE(
|
||||
private val designation: FirDeclarationUntypedDesignationWithFile,
|
||||
private val designation: FirDeclarationDesignationWithFile,
|
||||
session: FirSession,
|
||||
scopeSession: ScopeSession,
|
||||
private val declarationPhaseDowngraded: Boolean,
|
||||
@@ -54,6 +55,7 @@ internal class FirDesignatedContractsResolveTransformerForIDE(
|
||||
if (designation.isTargetCallableDeclarationAndInPhase(FirResolvePhase.CONTRACTS)) return
|
||||
designation.ensureDesignation(FirResolvePhase.STATUS)
|
||||
|
||||
FirLazyBodiesCalculator.calculateLazyBodiesInside(designation)
|
||||
phaseRunner.runPhaseWithCustomResolve(FirResolvePhase.CONTRACTS) {
|
||||
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.types.FirResolvedTypeRef
|
||||
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.transformers.FirLazyTransformerForIDE.Companion.isResolvedForAllDeclarations
|
||||
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
|
||||
*/
|
||||
internal class FirDesignatedImplicitTypesTransformerForIDE(
|
||||
private val designation: FirDeclarationUntypedDesignationWithFile,
|
||||
private val designation: FirDeclarationDesignationWithFile,
|
||||
session: FirSession,
|
||||
scopeSession: ScopeSession,
|
||||
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.StatusComputationSession
|
||||
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.updateResolvedPhaseForDeclarationAndChildren
|
||||
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
|
||||
*/
|
||||
internal class FirDesignatedStatusResolveTransformerForIDE(
|
||||
private val designation: FirDeclarationUntypedDesignationWithFile,
|
||||
private val designation: FirDeclarationDesignationWithFile,
|
||||
private val session: FirSession,
|
||||
private val scopeSession: ScopeSession,
|
||||
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.toSymbol
|
||||
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.FirDeclarationUntypedDesignationWithFile
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation
|
||||
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.file.builder.ModuleFileCache
|
||||
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
|
||||
*/
|
||||
internal class FirDesignatedSupertypeResolverTransformerForIDE(
|
||||
private val designation: FirDeclarationUntypedDesignationWithFile,
|
||||
private val designation: FirDeclarationDesignationWithFile,
|
||||
private val session: FirSession,
|
||||
private val scopeSession: ScopeSession,
|
||||
private val declarationPhaseDowngraded: Boolean,
|
||||
@@ -41,7 +41,7 @@ internal class FirDesignatedSupertypeResolverTransformerForIDE(
|
||||
|
||||
private val supertypeComputationSession = SupertypeComputationSession()
|
||||
|
||||
private inner class DesignatedFirSupertypeResolverVisitor(classDesignation: FirDeclarationUntypedDesignation) :
|
||||
private inner class DesignatedFirSupertypeResolverVisitor(classDesignation: FirDeclarationDesignation) :
|
||||
FirSupertypeResolverVisitor(
|
||||
session = session,
|
||||
supertypeComputationSession = supertypeComputationSession,
|
||||
@@ -60,7 +60,7 @@ internal class FirDesignatedSupertypeResolverTransformerForIDE(
|
||||
}
|
||||
}
|
||||
|
||||
private inner class DesignatedFirApplySupertypesTransformer(classDesignation: FirDeclarationUntypedDesignation) :
|
||||
private inner class DesignatedFirApplySupertypesTransformer(classDesignation: FirDeclarationDesignation) :
|
||||
FirApplySupertypesTransformer(supertypeComputationSession) {
|
||||
|
||||
override fun needReplacePhase(firDeclaration: FirDeclaration): Boolean =
|
||||
@@ -93,9 +93,9 @@ internal class FirDesignatedSupertypeResolverTransformerForIDE(
|
||||
}
|
||||
}
|
||||
|
||||
private fun collect(designation: FirDeclarationUntypedDesignationWithFile): Collection<FirDeclarationUntypedDesignationWithFile> {
|
||||
val visited = mutableMapOf<FirDeclaration, FirDeclarationUntypedDesignationWithFile>()
|
||||
val toVisit = mutableListOf<FirDeclarationUntypedDesignationWithFile>()
|
||||
private fun collect(designation: FirDeclarationDesignationWithFile): Collection<FirDeclarationDesignationWithFile> {
|
||||
val visited = mutableMapOf<FirDeclaration, FirDeclarationDesignationWithFile>()
|
||||
val toVisit = mutableListOf<FirDeclarationDesignationWithFile>()
|
||||
toVisit.add(designation)
|
||||
|
||||
while (toVisit.isNotEmpty()) {
|
||||
@@ -131,8 +131,8 @@ internal class FirDesignatedSupertypeResolverTransformerForIDE(
|
||||
return visited.values
|
||||
}
|
||||
|
||||
private fun apply(visited: Collection<FirDeclarationUntypedDesignationWithFile>) {
|
||||
fun applyToFileSymbols(designations: List<FirDeclarationUntypedDesignationWithFile>) {
|
||||
private fun apply(visited: Collection<FirDeclarationDesignationWithFile>) {
|
||||
fun applyToFileSymbols(designations: List<FirDeclarationDesignationWithFile>) {
|
||||
for (designation in designations) {
|
||||
if (checkPCE) checkCanceled()
|
||||
val applier = DesignatedFirApplySupertypesTransformer(designation)
|
||||
@@ -159,7 +159,7 @@ internal class FirDesignatedSupertypeResolverTransformerForIDE(
|
||||
val resolvableTarget = designation.path.lastOrNull() ?: return
|
||||
check(resolvableTarget is FirClassLikeDeclaration<*>)
|
||||
val targetPath = designation.path.dropLast(1)
|
||||
FirDeclarationUntypedDesignationWithFile(targetPath, resolvableTarget, false, designation.firFile)
|
||||
FirDeclarationDesignationWithFile(targetPath, resolvableTarget, false, designation.firFile)
|
||||
} else designation
|
||||
|
||||
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.FirResolvedTypeRef
|
||||
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.updateResolvedPhaseForDeclarationAndChildren
|
||||
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
|
||||
*/
|
||||
internal class FirDesignatedTypeResolverTransformerForIDE(
|
||||
private val designation: FirDeclarationUntypedDesignationWithFile,
|
||||
private val designation: FirDeclarationDesignationWithFile,
|
||||
session: FirSession,
|
||||
scopeSession: ScopeSession,
|
||||
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.fir.declarations.*
|
||||
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 {
|
||||
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
|
||||
val includeTarget = when (declaration.origin) {
|
||||
is FirDeclarationOrigin.SubstitutionOverride,
|
||||
@@ -63,7 +63,7 @@ internal interface FirLazyTransformerForIDE {
|
||||
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
|
||||
|
||||
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.FirTransformer
|
||||
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 var isInsideTargetDeclaration: 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.resolve.transformers.ensureResolved
|
||||
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) =
|
||||
check(resolvePhase >= firResolvePhase) {
|
||||
"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) }
|
||||
|
||||
internal fun FirDeclarationUntypedDesignation.ensureDesignation(firResolvePhase: FirResolvePhase) {
|
||||
internal fun FirDeclarationDesignation.ensureDesignation(firResolvePhase: FirResolvePhase) {
|
||||
ensurePathPhase(firResolvePhase)
|
||||
declaration.ensurePhase(firResolvePhase)
|
||||
}
|
||||
internal fun FirDeclarationUntypedDesignation.ensurePhaseForClasses(firResolvePhase: FirResolvePhase) {
|
||||
internal fun FirDeclarationDesignation.ensurePhaseForClasses(firResolvePhase: FirResolvePhase) {
|
||||
ensurePathPhase(firResolvePhase)
|
||||
if (declaration is FirClassLikeDeclaration<*>) {
|
||||
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
|
||||
|
||||
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 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 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.visitors.FirVisitorVoid
|
||||
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.providers.firIdeProvider
|
||||
import org.jetbrains.kotlin.parsing.KotlinParserDefinition
|
||||
@@ -62,7 +62,7 @@ abstract class AbstractPartialRawFirBuilderTestCase : KtParsingTestCase(
|
||||
|
||||
private class DesignationBuilder(private val elementToBuild: KtDeclaration) : FirVisitorVoid() {
|
||||
private val path = mutableListOf<FirDeclaration>()
|
||||
var resultDesignation: FirDeclarationUntypedDesignation? = null
|
||||
var resultDesignation: FirDeclarationDesignation? = null
|
||||
private set
|
||||
|
||||
override fun visitElement(element: FirElement) {
|
||||
|
||||
Reference in New Issue
Block a user