[Analysis API] Add API for expect/actual declaration detection

This commit is contained in:
aleksandrina-streltsova
2023-05-02 12:05:58 +03:00
committed by teamcity
parent da5f33d762
commit 338c2433ac
3 changed files with 28 additions and 8 deletions
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.analysis.utils.errors.checkWithAttachmentBuilder
import org.jetbrains.kotlin.descriptors.MemberDescriptor
import org.jetbrains.kotlin.psi.KtDeclaration
import org.jetbrains.kotlin.psi.psiUtil.hasActualModifier
import org.jetbrains.kotlin.psi.psiUtil.hasExpectModifier
import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualCompatibility
import org.jetbrains.kotlin.resolve.multiplatform.ExpectedActualResolver
@@ -23,7 +24,7 @@ internal class KtFe10MultiplatformInfoProvider(
override val analysisSession: KtFe10AnalysisSession
) : KtMultiplatformInfoProvider(), Fe10KtAnalysisSessionComponent {
override fun getExpectForActual(actual: KtDeclarationSymbol): KtDeclarationSymbol? {
if (actual.psiSafe<KtDeclaration>()?.hasActualModifier() != true) return null
if (!isActual(actual)) return null
val memberDescriptor = (getSymbolDescriptor(actual) as? MemberDescriptor)?.takeIf { it.isActual } ?: return null
val expectedCompatibilityMap =
@@ -41,4 +42,8 @@ internal class KtFe10MultiplatformInfoProvider(
}
return expectsForActual.singleOrNull()?.toKtSymbol(analysisContext) as? KtDeclarationSymbol
}
override fun isActual(symbol: KtDeclarationSymbol): Boolean = symbol.psiSafe<KtDeclaration>()?.hasActualModifier() == true
override fun isExpect(symbol: KtDeclarationSymbol): Boolean = symbol.psiSafe<KtDeclaration>()?.hasExpectModifier() == true
}