[LL FIR] add correct isResolved check to expect-actual phase transformer
This commit is contained in:
committed by
Space Team
parent
71386cc117
commit
595279887a
+16
-11
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user