[AA] implement isExpect/isActual for callable symbols

^KT-54846 Fixed
This commit is contained in:
aleksandrina-streltsova
2023-07-18 11:52:28 +03:00
committed by teamcity
parent 52a95cb75f
commit fe4ca30c55
14 changed files with 782 additions and 9 deletions
@@ -41,6 +41,12 @@ internal class KtFe10DescConstructorSymbol(
override val returnType: KtType
get() = withValidityAssertion { descriptor.returnType.toKtType(analysisContext) }
override val isActual: Boolean
get() = withValidityAssertion { descriptor.isActual }
override val isExpect: Boolean
get() = withValidityAssertion { descriptor.isExpect }
override val typeParameters: List<KtTypeParameterSymbol>
get() = withValidityAssertion {
descriptor.typeParameters.mapNotNull {
@@ -75,6 +75,12 @@ internal class KtFe10DescFunctionSymbol private constructor(
override val isBuiltinFunctionInvoke: Boolean
get() = withValidityAssertion { callableIdIfNonLocal in kotlinFunctionInvokeCallableIds }
override val isActual: Boolean
get() = withValidityAssertion { descriptor.isActual }
override val isExpect: Boolean
get() = withValidityAssertion { descriptor.isExpect }
override val valueParameters: List<KtValueParameterSymbol>
get() = withValidityAssertion { descriptor.valueParameters.map { KtFe10DescValueParameterSymbol(it, analysisContext) } }
@@ -60,6 +60,12 @@ internal class KtFe10DescKotlinPropertySymbol(
override val isOverride: Boolean
get() = withValidityAssertion { descriptor.isExplicitOverride }
override val isActual: Boolean
get() = withValidityAssertion { descriptor.isActual }
override val isExpect: Boolean
get() = withValidityAssertion { descriptor.isExpect }
override val hasGetter: Boolean
get() = withValidityAssertion { true }
@@ -30,6 +30,8 @@ import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.psi.KtConstructor
import org.jetbrains.kotlin.psi.KtPrimaryConstructor
import org.jetbrains.kotlin.psi.psiUtil.hasActualModifier
import org.jetbrains.kotlin.psi.psiUtil.hasExpectModifier
import org.jetbrains.kotlin.resolve.BindingContext
internal class KtFe10PsiConstructorSymbol(
@@ -61,6 +63,12 @@ internal class KtFe10PsiConstructorSymbol(
override val visibility: Visibility
get() = withValidityAssertion { psi.ktVisibility ?: descriptor?.ktVisibility ?: Visibilities.Public }
override val isActual: Boolean
get() = withValidityAssertion { descriptor?.isActual ?: psi.hasActualModifier() }
override val isExpect: Boolean
get() = withValidityAssertion { descriptor?.isExpect ?: psi.hasExpectModifier() }
override val typeParameters: List<KtTypeParameterSymbol>
get() = withValidityAssertion { psi.typeParameters.map { KtFe10PsiTypeParameterSymbol(it, analysisContext) } }
@@ -10,13 +10,12 @@ import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
import org.jetbrains.kotlin.analysis.api.contracts.description.KtContractEffectDeclaration
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
import org.jetbrains.kotlin.analysis.api.descriptors.contracts.effectDeclarationToAnalysisApi
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.*
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.isEqualTo
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.*
import org.jetbrains.kotlin.analysis.api.descriptors.utils.ValidityAwareCachedValue
import org.jetbrains.kotlin.analysis.api.descriptors.utils.cached
import org.jetbrains.kotlin.analysis.api.impl.base.util.kotlinFunctionInvokeCallableIds
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
@@ -29,7 +28,6 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointe
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.analysis.api.types.KtType
import org.jetbrains.kotlin.contracts.description.ContractProviderKey
import org.jetbrains.kotlin.contracts.description.EffectDeclaration
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities
@@ -38,9 +36,10 @@ import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtNamedFunction
import org.jetbrains.kotlin.psi.psiUtil.hasActualModifier
import org.jetbrains.kotlin.psi.psiUtil.hasExpectModifier
import org.jetbrains.kotlin.psi.psiUtil.isExtensionDeclaration
import org.jetbrains.kotlin.resolve.BindingContext
import kotlin.reflect.KProperty
internal class KtFe10PsiFunctionSymbol(
override val psi: KtNamedFunction,
@@ -81,6 +80,12 @@ internal class KtFe10PsiFunctionSymbol(
override val isBuiltinFunctionInvoke: Boolean
get() = withValidityAssertion { callableIdIfNonLocal in kotlinFunctionInvokeCallableIds }
override val isActual: Boolean
get() = withValidityAssertion { descriptor?.isActual ?: psi.hasActualModifier() }
override val isExpect: Boolean
get() = withValidityAssertion { descriptor?.isExpect ?: psi.hasExpectModifier() }
override val valueParameters: List<KtValueParameterSymbol>
get() = withValidityAssertion { psi.valueParameters.map { KtFe10PsiValueParameterSymbol(it, analysisContext) } }
@@ -30,6 +30,8 @@ import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtProperty
import org.jetbrains.kotlin.psi.psiUtil.hasActualModifier
import org.jetbrains.kotlin.psi.psiUtil.hasExpectModifier
import org.jetbrains.kotlin.psi.psiUtil.isExtensionDeclaration
import org.jetbrains.kotlin.resolve.BindingContext
@@ -96,6 +98,12 @@ internal class KtFe10PsiKotlinPropertySymbol(
override val isStatic: Boolean
get() = withValidityAssertion { false }
override val isActual: Boolean
get() = withValidityAssertion { descriptor?.isActual ?: psi.hasActualModifier() }
override val isExpect: Boolean
get() = withValidityAssertion { descriptor?.isExpect ?: psi.hasExpectModifier() }
override val initializer: KtInitializerValue?
get() = withValidityAssertion { createKtInitializerValue(psi, descriptor, analysisContext) }