From 94ca387405ef341e9ab0ac7f1a2591f43558fca1 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Fri, 29 Oct 2021 01:29:07 +0900 Subject: [PATCH] [FIR IDE] Fix callableIdIfNonLocal for accessors in AAPI/FE10 Before the behavior was rather random and erroneous. Now the callable id is also 'null' for Kotlin property accessors, and accessor method id for synthetic Java properties. --- .../KtFe10DescDefaultPropertyGetterSymbol.kt | 2 +- .../KtFe10DescDefaultPropertySetterSymbol.kt | 2 +- .../KtFe10DescPropertyGetterSymbol.kt | 10 +-------- .../KtFe10DescPropertySetterSymbol.kt | 10 +-------- .../descriptorBased/base/Kt1DescUtils.kt | 21 +++++++++++++++++++ .../psiBased/KtFe10PsiPropertyGetterSymbol.kt | 2 +- .../psiBased/KtFe10PsiPropertySetterSymbol.kt | 2 +- 7 files changed, 27 insertions(+), 22 deletions(-) diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescDefaultPropertyGetterSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescDefaultPropertyGetterSymbol.kt index 6d5de2336f8..77aad79eb90 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescDefaultPropertyGetterSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescDefaultPropertyGetterSymbol.kt @@ -56,7 +56,7 @@ class KtFe10DescDefaultPropertyGetterSymbol( get() = withValidityAssertion { true } override val callableIdIfNonLocal: CallableId? - get() = withValidityAssertion { null } + get() = withValidityAssertion { propertyDescriptor.getterCallableIdIfNotLocal } override val annotatedType: KtTypeAndAnnotations get() = withValidityAssertion { propertyDescriptor.type.toKtTypeAndAnnotations(analysisContext) } diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescDefaultPropertySetterSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescDefaultPropertySetterSymbol.kt index c37cd754105..224a9264b58 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescDefaultPropertySetterSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescDefaultPropertySetterSymbol.kt @@ -53,7 +53,7 @@ class KtFe10DescDefaultPropertySetterSymbol( get() = withValidityAssertion { true } override val callableIdIfNonLocal: CallableId? - get() = withValidityAssertion { null } + get() = withValidityAssertion { propertyDescriptor.setterCallableIdIfNotLocal } override val annotatedType: KtTypeAndAnnotations get() = withValidityAssertion { analysisContext.builtIns.unitType.toKtTypeAndAnnotations(analysisContext) } diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescPropertyGetterSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescPropertyGetterSymbol.kt index 3a7580b7f1f..5ad5657c4ae 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescPropertyGetterSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescPropertyGetterSymbol.kt @@ -16,7 +16,6 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.analysis.api.types.KtType import org.jetbrains.kotlin.analysis.api.withValidityAssertion import org.jetbrains.kotlin.descriptors.PropertyGetterDescriptor -import org.jetbrains.kotlin.descriptors.SyntheticPropertyDescriptor import org.jetbrains.kotlin.descriptors.hasBody import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.resolve.calls.inference.returnTypeOrNothing @@ -44,14 +43,7 @@ internal class KtFe10DescPropertyGetterSymbol( get() = withValidityAssertion { descriptor.ktHasStableParameterNames } override val callableIdIfNonLocal: CallableId? - get() = withValidityAssertion { - val propertyDescriptor = descriptor.correspondingProperty - return if (propertyDescriptor is SyntheticPropertyDescriptor) { - propertyDescriptor.getMethod.callableIdIfNotLocal - } else { - null - } - } + get() = withValidityAssertion { descriptor.correspondingProperty.getterCallableIdIfNotLocal } override val annotatedType: KtTypeAndAnnotations get() = withValidityAssertion { descriptor.returnTypeOrNothing.toKtTypeAndAnnotations(analysisContext) } diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescPropertySetterSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescPropertySetterSymbol.kt index 099a4c4a0d1..7ea650cd8f7 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescPropertySetterSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescPropertySetterSymbol.kt @@ -16,7 +16,6 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.analysis.api.types.KtType import org.jetbrains.kotlin.analysis.api.withValidityAssertion import org.jetbrains.kotlin.descriptors.PropertySetterDescriptor -import org.jetbrains.kotlin.descriptors.SyntheticPropertyDescriptor import org.jetbrains.kotlin.descriptors.hasBody import org.jetbrains.kotlin.name.CallableId @@ -46,14 +45,7 @@ internal class KtFe10DescPropertySetterSymbol( get() = withValidityAssertion { descriptor.ktHasStableParameterNames } override val callableIdIfNonLocal: CallableId? - get() = withValidityAssertion { - val propertyDescriptor = descriptor.correspondingProperty - return if (propertyDescriptor is SyntheticPropertyDescriptor) { - propertyDescriptor.getMethod.callableIdIfNotLocal - } else { - null - } - } + get() = withValidityAssertion { descriptor.correspondingProperty.setterCallableIdIfNotLocal } override val parameter: KtValueParameterSymbol get() = withValidityAssertion { KtFe10DescValueParameterSymbol(descriptor.valueParameters.single(), analysisContext) } diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/base/Kt1DescUtils.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/base/Kt1DescUtils.kt index 708eebbb7d7..c5bd7840527 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/base/Kt1DescUtils.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/base/Kt1DescUtils.kt @@ -304,6 +304,27 @@ internal fun CallableMemberDescriptor.calculateCallableId(allowLocal: Boolean): } } +internal val PropertyDescriptor.getterCallableIdIfNotLocal: CallableId? + get() { + if (this is SyntheticPropertyDescriptor) { + return getMethod.callableIdIfNotLocal + } + + return null + } + +internal val PropertyDescriptor.setterCallableIdIfNotLocal: CallableId? + get() { + if (this is SyntheticPropertyDescriptor) { + val setMethod = this.setMethod + if (setMethod != null) { + return setMethod.callableIdIfNotLocal + } + } + + return null + } + internal fun getSymbolDescriptor(symbol: KtSymbol): DeclarationDescriptor? { return when (symbol) { is KtFe10DescSymbol<*> -> symbol.descriptor diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiPropertyGetterSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiPropertyGetterSymbol.kt index 64db2ac3835..39c69128fcd 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiPropertyGetterSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiPropertyGetterSymbol.kt @@ -64,7 +64,7 @@ internal class KtFe10PsiPropertyGetterSymbol( get() = withValidityAssertion { true } override val callableIdIfNonLocal: CallableId? - get() = withValidityAssertion { psi.property.callableIdIfNonLocal } + get() = withValidityAssertion { null } override val annotatedType: KtTypeAndAnnotations get() = withValidityAssertion { diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiPropertySetterSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiPropertySetterSymbol.kt index 908af092a37..e12665e6ae1 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiPropertySetterSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiPropertySetterSymbol.kt @@ -65,7 +65,7 @@ internal class KtFe10PsiPropertySetterSymbol( get() = withValidityAssertion { true } override val callableIdIfNonLocal: CallableId? - get() = TODO("Not yet implemented") + get() = withValidityAssertion { null } override val annotatedType: KtTypeAndAnnotations get() = withValidityAssertion {