[LL FIR] add correct isResolved check to expect-actual phase transformer

This commit is contained in:
Dmitrii Gridin
2023-05-19 12:15:46 +02:00
committed by Space Team
parent 71386cc117
commit 595279887a
2 changed files with 28 additions and 11 deletions
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.transformers
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets.LLFirResolveTarget
import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirLockProvider
import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.LLFirPhaseUpdater
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkExpectForActualIsResolved
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkPhase
import org.jetbrains.kotlin.fir.FirElementWithResolveState
import org.jetbrains.kotlin.fir.FirSession
@@ -35,7 +36,10 @@ internal object LLFirExpectActualMatcherLazyResolver : LLFirLazyResolver(FirReso
override fun checkIsResolved(target: FirElementWithResolveState) {
target.checkPhase(resolverPhase)
// TODO check if expect-actual matching is present
if (target is FirMemberDeclaration && target.canHaveExpectCounterPart()) {
checkExpectForActualIsResolved(target)
}
checkNestedDeclarationsAreResolved(target)
}
}
@@ -68,13 +72,14 @@ private class LLFirExpectActualMatchingTargetResolver(
transformer.transformMemberDeclaration(target)
}
private fun FirMemberDeclaration.canHaveExpectCounterPart(): Boolean = when (this) {
is FirEnumEntry -> true
is FirProperty -> true
is FirConstructor -> true
is FirSimpleFunction -> true
is FirRegularClass -> true
is FirTypeAlias -> true
else -> false
}
}
}
private fun FirMemberDeclaration.canHaveExpectCounterPart(): Boolean = when (this) {
is FirEnumEntry -> true
is FirProperty -> true
is FirConstructor -> true
is FirSimpleFunction -> true
is FirRegularClass -> true
is FirTypeAlias -> true
else -> false
}
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.fir.FirElementWithResolveState
import org.jetbrains.kotlin.fir.contracts.FirResolvedContractDescription
import org.jetbrains.kotlin.fir.contracts.impl.FirEmptyContractDescription
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.utils.isActual
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirResolvable
import org.jetbrains.kotlin.fir.expressions.impl.FirResolvedArgumentList
@@ -52,6 +53,17 @@ internal fun checkBodyIsResolved(function: FirFunction) {
}
}
internal fun checkExpectForActualIsResolved(memberDeclaration: FirMemberDeclaration) {
if (!memberDeclaration.isActual) return
checkWithAttachmentBuilder(
condition = memberDeclaration.expectForActual != null,
message = { "Expect for actual matching is missing" }
) {
withFirEntry("declaration", memberDeclaration)
}
}
internal fun checkDelegatedConstructorIsResolved(constructor: FirConstructor) {
val delegatedConstructorCall = constructor.delegatedConstructor ?: return
val calleeReference = delegatedConstructorCall.calleeReference