[FIR IDE] Fix invalid body lazy resolve
This commit is contained in:
committed by
TeamCityServer
parent
cfc0bfd64a
commit
445f13d1bf
+7
-5
@@ -6,13 +6,11 @@
|
||||
package org.jetbrains.kotlin.fir.resolve.transformers
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
|
||||
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
|
||||
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
||||
import org.jetbrains.kotlin.fir.resolve.ResolutionMode
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
import org.jetbrains.kotlin.fir.resolve.lookupSuperTypes
|
||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||
@@ -83,7 +81,7 @@ abstract class FirAbstractTreeTransformerWithSuperTypes(
|
||||
|
||||
// Note that annotations are still visited here
|
||||
// again, although there's no need in it
|
||||
transformElement(firClass, data)
|
||||
transformDeclarationContent(firClass, data) as FirClass<*>
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,6 +90,10 @@ abstract class FirAbstractTreeTransformerWithSuperTypes(
|
||||
scopes.add(FirMemberTypeParameterScope(this))
|
||||
}
|
||||
}
|
||||
|
||||
open fun transformDeclarationContent(declaration: FirDeclaration, data: Any?): FirDeclaration {
|
||||
return transformElement(declaration, data)
|
||||
}
|
||||
}
|
||||
|
||||
fun createSubstitutionForSupertype(superType: ConeLookupTagBasedType, session: FirSession): ConeSubstitutor {
|
||||
|
||||
+2
-1
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
||||
import org.jetbrains.kotlin.fir.resolve.ResolutionMode
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeCyclicTypeBound
|
||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||
@@ -38,7 +39,7 @@ fun <F : FirClassLikeDeclaration<F>> F.runTypeResolvePhaseForLocalClass(
|
||||
}
|
||||
|
||||
open class FirTypeResolveTransformer(
|
||||
override val session: FirSession,
|
||||
final override val session: FirSession,
|
||||
scopeSession: ScopeSession,
|
||||
initialScopes: List<FirScope> = emptyList()
|
||||
) : FirAbstractTreeTransformerWithSuperTypes(
|
||||
|
||||
+7
-3
@@ -52,7 +52,7 @@ open class FirContractResolveTransformer(
|
||||
return annotationCall
|
||||
}
|
||||
|
||||
private class FirDeclarationsContractResolveTransformer(transformer: FirBodyResolveTransformer) : FirDeclarationsResolveTransformer(transformer) {
|
||||
protected open class FirDeclarationsContractResolveTransformer(transformer: FirBodyResolveTransformer) : FirDeclarationsResolveTransformer(transformer) {
|
||||
override fun transformSimpleFunction(
|
||||
simpleFunction: FirSimpleFunction,
|
||||
data: ResolutionMode
|
||||
@@ -224,11 +224,15 @@ open class FirContractResolveTransformer(
|
||||
}
|
||||
}
|
||||
|
||||
open fun transformDeclarationContent(firClass: FirClass<*>, data: ResolutionMode) {
|
||||
firClass.transformDeclarations(this, data)
|
||||
}
|
||||
|
||||
override fun transformRegularClass(regularClass: FirRegularClass, data: ResolutionMode): FirStatement {
|
||||
regularClass.updatePhase()
|
||||
regularClass.transformCompanionObject(this, data)
|
||||
context.withRegularClass(regularClass, components, forContracts = true) {
|
||||
regularClass.transformDeclarations(this, data)
|
||||
transformDeclarationContent(regularClass, data)
|
||||
}
|
||||
return regularClass
|
||||
}
|
||||
@@ -239,7 +243,7 @@ open class FirContractResolveTransformer(
|
||||
): FirStatement {
|
||||
anonymousObject.updatePhase()
|
||||
context.withAnonymousObject(anonymousObject, components) {
|
||||
anonymousObject.transformDeclarations(this, data)
|
||||
transformDeclarationContent(anonymousObject, data)
|
||||
}
|
||||
return anonymousObject
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user