FIR: Add ensureResolved calls for types of sub-expressions
These calls resolve a class that a type of expression is built upon
This commit is contained in:
@@ -9,7 +9,9 @@ import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirAnonymousObject
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.ensureResolved
|
||||
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.FirIntegerLiteralTypeScope
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.FirStandardOverrideChecker
|
||||
@@ -28,6 +30,8 @@ fun ConeKotlinType.scope(useSiteSession: FirSession, scopeSession: ScopeSession)
|
||||
val fullyExpandedType = fullyExpandedType(useSiteSession)
|
||||
val fir = fullyExpandedType.lookupTag.toSymbol(useSiteSession)?.fir as? FirClass<*> ?: return null
|
||||
|
||||
fir.symbol.ensureResolved(FirResolvePhase.STATUS, useSiteSession)
|
||||
|
||||
val substitution = createSubstitution(fir.typeParameters, fullyExpandedType.typeArguments, useSiteSession)
|
||||
|
||||
fir.scope(substitutorByMap(substitution), useSiteSession, scopeSession, skipPrivateMembers = false)
|
||||
|
||||
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.resolve.inference.preprocessCallableReference
|
||||
import org.jetbrains.kotlin.fir.resolve.inference.preprocessLambdaArgument
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.firUnsafe
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.resultType
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.ensureResolvedTypeDeclaration
|
||||
import org.jetbrains.kotlin.fir.returnExpressions
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.FirILTTypeRefPlaceHolder
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.FirIntegerOperator
|
||||
@@ -291,6 +292,8 @@ internal fun Candidate.resolveArgument(
|
||||
sink: CheckerSink
|
||||
) {
|
||||
|
||||
argument.resultType.ensureResolvedTypeDeclaration(sink.components.session)
|
||||
|
||||
val expectedType = prepareExpectedType(sink.components.session, argument, parameter)
|
||||
resolveArgumentExpression(
|
||||
this.system.getBuilder(),
|
||||
|
||||
+1
@@ -138,6 +138,7 @@ class FirCallCompletionResultsWriterTransformer(
|
||||
val subCandidate = calleeReference.candidate
|
||||
|
||||
val resultType = typeRef.substituteTypeRef(subCandidate)
|
||||
resultType.ensureResolvedTypeDeclaration(session)
|
||||
result.replaceTypeRef(resultType)
|
||||
|
||||
if (mode == Mode.DelegatedPropertyCompletion) {
|
||||
|
||||
@@ -10,7 +10,13 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.coneTypeSafe
|
||||
|
||||
fun AbstractFirBasedSymbol<*>.ensureResolved(
|
||||
requiredPhase: FirResolvePhase,
|
||||
@@ -37,3 +43,18 @@ fun AbstractFirBasedSymbol<*>.ensureResolvedForCalls(
|
||||
|
||||
ensureResolved(requiredPhase, useSiteSession)
|
||||
}
|
||||
|
||||
fun ConeKotlinType.ensureResolvedTypeDeclaration(
|
||||
useSiteSession: FirSession,
|
||||
) {
|
||||
if (this !is ConeClassLikeType) return
|
||||
|
||||
lookupTag.toSymbol(useSiteSession)?.ensureResolved(FirResolvePhase.STATUS, useSiteSession)
|
||||
fullyExpandedType(useSiteSession).lookupTag.toSymbol(useSiteSession)?.ensureResolved(FirResolvePhase.STATUS, useSiteSession)
|
||||
}
|
||||
|
||||
fun FirTypeRef.ensureResolvedTypeDeclaration(
|
||||
useSiteSession: FirSession,
|
||||
) {
|
||||
coneTypeSafe<ConeKotlinType>()?.ensureResolvedTypeDeclaration(useSiteSession)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user