From fe93f49ff715870353d4e6fd98125ce48a4fa9fc Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Thu, 10 Nov 2022 14:25:53 +0100 Subject: [PATCH] [AA] KtPsiBasedSymbolPointer: add class type check ^KT-54311 --- .../KtFe10DescAnonymousFunctionSymbol.kt | 4 +- .../KtFe10DescAnonymousObjectSymbol.kt | 2 +- .../KtFe10DescConstructorSymbol.kt | 2 +- .../KtFe10DescEnumEntrySymbol.kt | 2 +- .../KtFe10DescFunctionSymbol.kt | 2 +- .../KtFe10DescJavaFieldSymbol.kt | 2 +- .../KtFe10DescKotlinPropertySymbol.kt | 2 +- .../KtFe10DescLocalVariableSymbol.kt | 2 +- .../KtFe10DescNamedClassOrObjectSymbol.kt | 2 +- .../KtFe10DescPropertyGetterSymbol.kt | 2 +- .../KtFe10DescPropertySetterSymbol.kt | 2 +- .../KtFe10DescSamConstructorSymbol.kt | 2 +- .../KtFe10DescSyntheticJavaPropertySymbol.kt | 2 +- ...cSyntheticJavaPropertySymbolForOverride.kt | 2 +- .../KtFe10DescTypeAliasSymbol.kt | 2 +- .../KtFe10DescTypeParameterSymbol.kt | 2 +- .../KtFe10DescValueParameterSymbol.kt | 2 +- ...eModuleSymbolByReferenceTestGenerated.java | 6 +++ ...eModuleSymbolByReferenceTestGenerated.java | 6 +++ ...eModuleSymbolByReferenceTestGenerated.java | 6 +++ .../pointers/KtPsiBasedSymbolPointer.kt | 36 +++++++++---- ...orValueParameterAsProperty.descriptors.txt | 53 +++++++++++++++++++ ...maryConstructorValueParameterAsProperty.kt | 7 +++ ...tructorValueParameterAsProperty.pretty.txt | 1 + ...aryConstructorValueParameterAsProperty.txt | 53 +++++++++++++++++++ 25 files changed, 177 insertions(+), 27 deletions(-) create mode 100644 analysis/analysis-api/testData/symbols/symbolByReference/primaryConstructorValueParameterAsProperty.descriptors.txt create mode 100644 analysis/analysis-api/testData/symbols/symbolByReference/primaryConstructorValueParameterAsProperty.kt create mode 100644 analysis/analysis-api/testData/symbols/symbolByReference/primaryConstructorValueParameterAsProperty.pretty.txt create mode 100644 analysis/analysis-api/testData/symbols/symbolByReference/primaryConstructorValueParameterAsProperty.txt diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescAnonymousFunctionSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescAnonymousFunctionSymbol.kt index a854021018f..bbcd2f1d4ad 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescAnonymousFunctionSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescAnonymousFunctionSymbol.kt @@ -47,9 +47,9 @@ internal class KtFe10DescAnonymousFunctionSymbol( get() = withValidityAssertion { descriptor.createContextReceivers(analysisContext) } override fun createPointer(): KtSymbolPointer = withValidityAssertion { - return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() + return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() } override fun equals(other: Any?): Boolean = isEqualTo(other) override fun hashCode(): Int = calculateHashCode() -} \ No newline at end of file +} diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescAnonymousObjectSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescAnonymousObjectSymbol.kt index 9ed6e71348a..bad3b15c5f3 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescAnonymousObjectSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescAnonymousObjectSymbol.kt @@ -26,7 +26,7 @@ internal class KtFe10DescAnonymousObjectSymbol( get() = withValidityAssertion { descriptor.typeConstructor.supertypes.map { it.toKtType(analysisContext) } } override fun createPointer(): KtSymbolPointer = withValidityAssertion { - return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() + return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() } override fun equals(other: Any?): Boolean = isEqualTo(other) diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescConstructorSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescConstructorSymbol.kt index fcefccb6d91..031d258a654 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescConstructorSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescConstructorSymbol.kt @@ -49,7 +49,7 @@ internal class KtFe10DescConstructorSymbol( } override fun createPointer(): KtSymbolPointer = withValidityAssertion { - val pointerByPsi = KtPsiBasedSymbolPointer.createForSymbolFromSource(this) + val pointerByPsi = KtPsiBasedSymbolPointer.createForSymbolFromSource(this) if (pointerByPsi != null) { return pointerByPsi } diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescEnumEntrySymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescEnumEntrySymbol.kt index cd84586d7e0..684e54ac9ab 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescEnumEntrySymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescEnumEntrySymbol.kt @@ -50,7 +50,7 @@ internal class KtFe10DescEnumEntrySymbol( get() = withValidityAssertion { descriptor.name } override fun createPointer(): KtSymbolPointer = withValidityAssertion { - val pointerByPsi = KtPsiBasedSymbolPointer.createForSymbolFromSource(this) + val pointerByPsi = KtPsiBasedSymbolPointer.createForSymbolFromSource(this) if (pointerByPsi != null) { return pointerByPsi } diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescFunctionSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescFunctionSymbol.kt index 8fb3a227f35..4a65ffeeb1b 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescFunctionSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescFunctionSymbol.kt @@ -88,7 +88,7 @@ internal class KtFe10DescFunctionSymbol private constructor( get() = withValidityAssertion { descriptor.typeParameters.map { KtFe10DescTypeParameterSymbol(it, analysisContext) } } override fun createPointer(): KtSymbolPointer = withValidityAssertion { - val pointerByPsi = KtPsiBasedSymbolPointer.createForSymbolFromSource(this) + val pointerByPsi = KtPsiBasedSymbolPointer.createForSymbolFromSource(this) if (pointerByPsi != null) { return pointerByPsi } diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescJavaFieldSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescJavaFieldSymbol.kt index 03999c3240f..59504398883 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescJavaFieldSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescJavaFieldSymbol.kt @@ -42,7 +42,7 @@ internal class KtFe10DescJavaFieldSymbol( get() = withValidityAssertion { descriptor.returnType.toKtType(analysisContext) } override fun createPointer(): KtSymbolPointer = withValidityAssertion { - return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() + return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() } override fun equals(other: Any?): Boolean = isEqualTo(other) diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescKotlinPropertySymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescKotlinPropertySymbol.kt index e639595c89d..e7460584db0 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescKotlinPropertySymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescKotlinPropertySymbol.kt @@ -111,7 +111,7 @@ internal class KtFe10DescKotlinPropertySymbol( get() = withValidityAssertion { descriptor.isDelegated } override fun createPointer(): KtSymbolPointer = withValidityAssertion { - return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() + return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() } override fun equals(other: Any?): Boolean = isEqualTo(other) diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescLocalVariableSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescLocalVariableSymbol.kt index 9b069db14c3..6f698bc2e3e 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescLocalVariableSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescLocalVariableSymbol.kt @@ -37,7 +37,7 @@ internal class KtFe10DescLocalVariableSymbol( get() = withValidityAssertion { KtSymbolKind.LOCAL } override fun createPointer(): KtSymbolPointer = withValidityAssertion { - return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() + return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() } override fun equals(other: Any?): Boolean = isEqualTo(other) diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescNamedClassOrObjectSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescNamedClassOrObjectSymbol.kt index 8b5a02932f3..fc4119071f3 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescNamedClassOrObjectSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescNamedClassOrObjectSymbol.kt @@ -84,7 +84,7 @@ internal class KtFe10DescNamedClassOrObjectSymbol( get() = withValidityAssertion { descriptor.declaredTypeParameters.map { KtFe10DescTypeParameterSymbol(it, analysisContext) } } override fun createPointer(): KtSymbolPointer = withValidityAssertion { - val pointerByPsi = KtPsiBasedSymbolPointer.createForSymbolFromSource(this) + val pointerByPsi = KtPsiBasedSymbolPointer.createForSymbolFromSource(this) if (pointerByPsi != null) { return pointerByPsi } 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 10a0be422a0..4504771bb71 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 @@ -53,7 +53,7 @@ internal class KtFe10DescPropertyGetterSymbol( get() = withValidityAssertion { descriptor.extensionReceiverParameter?.type?.toKtType(analysisContext) } override fun createPointer(): KtSymbolPointer = withValidityAssertion { - return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() + return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() } override fun equals(other: Any?): Boolean = isEqualTo(other) 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 c26b66b863c..17830ae26de 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 @@ -56,7 +56,7 @@ internal class KtFe10DescPropertySetterSymbol( override fun createPointer(): KtSymbolPointer { withValidityAssertion { - return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() + return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() } } diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSamConstructorSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSamConstructorSymbol.kt index 7e15b60cee4..673fc0bbe27 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSamConstructorSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSamConstructorSymbol.kt @@ -65,7 +65,7 @@ internal class KtFe10DescSamConstructorSymbol( override fun createPointer(): KtSymbolPointer = withValidityAssertion { - val pointerByPsi = KtPsiBasedSymbolPointer.createForSymbolFromSource(this) + val pointerByPsi = KtPsiBasedSymbolPointer.createForSymbolFromSource(this) if (pointerByPsi != null) { return pointerByPsi } diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSyntheticJavaPropertySymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSyntheticJavaPropertySymbol.kt index 6f26e18f4f6..b18b0b279b8 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSyntheticJavaPropertySymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSyntheticJavaPropertySymbol.kt @@ -91,7 +91,7 @@ internal class KtFe10DescSyntheticJavaPropertySymbol( get() = withValidityAssertion { descriptor.typeParameters.map { it.toKtTypeParameter(analysisContext) } } override fun createPointer(): KtSymbolPointer = withValidityAssertion { - return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() + return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() } override fun equals(other: Any?): Boolean = isEqualTo(other) diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSyntheticJavaPropertySymbolForOverride.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSyntheticJavaPropertySymbolForOverride.kt index 58c92d4549b..f332033e21b 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSyntheticJavaPropertySymbolForOverride.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSyntheticJavaPropertySymbolForOverride.kt @@ -90,7 +90,7 @@ internal class KtFe10DescSyntheticJavaPropertySymbolForOverride( get() = withValidityAssertion { descriptor.typeParameters.map { it.toKtTypeParameter(analysisContext) } } override fun createPointer(): KtSymbolPointer = withValidityAssertion { - return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() + return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() } override fun equals(other: Any?): Boolean = isEqualTo(other) diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescTypeAliasSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescTypeAliasSymbol.kt index c4bc0b6cc66..405c1476231 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescTypeAliasSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescTypeAliasSymbol.kt @@ -49,7 +49,7 @@ internal class KtFe10DescTypeAliasSymbol( get() = withValidityAssertion { descriptor.classId } override fun createPointer(): KtSymbolPointer = withValidityAssertion { - return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() + return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() } override fun equals(other: Any?): Boolean = isEqualTo(other) diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescTypeParameterSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescTypeParameterSymbol.kt index 96939621e7e..b907b8759a5 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescTypeParameterSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescTypeParameterSymbol.kt @@ -38,7 +38,7 @@ internal class KtFe10DescTypeParameterSymbol( get() = withValidityAssertion { descriptor.isReified } override fun createPointer(): KtSymbolPointer = withValidityAssertion { - return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() + return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() } override fun equals(other: Any?): Boolean = isEqualTo(other) diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescValueParameterSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescValueParameterSymbol.kt index 35ead1e8ef8..e3bfbbcbcdf 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescValueParameterSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescValueParameterSymbol.kt @@ -68,7 +68,7 @@ internal class KtFe10DescValueParameterSymbol( } override fun createPointer(): KtSymbolPointer = withValidityAssertion { - return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() + return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() } override fun equals(other: Any?): Boolean = isEqualTo(other) diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/symbols/Fe10IdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/symbols/Fe10IdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java index 00762f2bdeb..74490f420b8 100644 --- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/symbols/Fe10IdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/symbols/Fe10IdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java @@ -106,6 +106,12 @@ public class Fe10IdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated ext runTest("analysis/analysis-api/testData/symbols/symbolByReference/primaryConstructorValueParameter.kt"); } + @Test + @TestMetadata("primaryConstructorValueParameterAsProperty.kt") + public void testPrimaryConstructorValueParameterAsProperty() throws Exception { + runTest("analysis/analysis-api/testData/symbols/symbolByReference/primaryConstructorValueParameterAsProperty.kt"); + } + @Test @TestMetadata("propertyReceiverParameter.kt") public void testPropertyReceiverParameter() throws Exception { diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java index 4eeec957ea4..ef87a9eb23b 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java @@ -106,6 +106,12 @@ public class FirIdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated exte runTest("analysis/analysis-api/testData/symbols/symbolByReference/primaryConstructorValueParameter.kt"); } + @Test + @TestMetadata("primaryConstructorValueParameterAsProperty.kt") + public void testPrimaryConstructorValueParameterAsProperty() throws Exception { + runTest("analysis/analysis-api/testData/symbols/symbolByReference/primaryConstructorValueParameterAsProperty.kt"); + } + @Test @TestMetadata("propertyReceiverParameter.kt") public void testPropertyReceiverParameter() throws Exception { diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java index 86e928d3a63..4a47267499f 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java @@ -106,6 +106,12 @@ public class FirStandaloneNormalAnalysisSourceModuleSymbolByReferenceTestGenerat runTest("analysis/analysis-api/testData/symbols/symbolByReference/primaryConstructorValueParameter.kt"); } + @Test + @TestMetadata("primaryConstructorValueParameterAsProperty.kt") + public void testPrimaryConstructorValueParameterAsProperty() throws Exception { + runTest("analysis/analysis-api/testData/symbols/symbolByReference/primaryConstructorValueParameterAsProperty.kt"); + } + @Test @TestMetadata("propertyReceiverParameter.kt") public void testPropertyReceiverParameter() throws Exception { diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/pointers/KtPsiBasedSymbolPointer.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/pointers/KtPsiBasedSymbolPointer.kt index 8238eecd358..de8d56e581c 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/pointers/KtPsiBasedSymbolPointer.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/pointers/KtPsiBasedSymbolPointer.kt @@ -15,15 +15,17 @@ import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtObjectLiteralExpression import org.jetbrains.kotlin.psi.psiUtil.createSmartPointer +import kotlin.reflect.KClass -public class KtPsiBasedSymbolPointer private constructor(private val psiPointer: SmartPsiElementPointer) : - KtSymbolPointer() { +public class KtPsiBasedSymbolPointer private constructor( + private val psiPointer: SmartPsiElementPointer, + private val expectedClass: KClass, +) : KtSymbolPointer() { @Deprecated("Consider using org.jetbrains.kotlin.analysis.api.KtAnalysisSession.restoreSymbol") override fun restoreSymbol(analysisSession: KtAnalysisSession): S? { val psi = psiPointer.element ?: return null - @Suppress("UNCHECKED_CAST") - return with(analysisSession) { + val symbol: KtSymbol = with(analysisSession) { when (psi) { is KtDeclaration -> psi.getSymbol() is KtFile -> psi.getFileSymbol() @@ -31,11 +33,22 @@ public class KtPsiBasedSymbolPointer private constructor(private v error("Unexpected declaration to restore: ${psi::class}, text:\n ${psi.text}") } } - } as S? + } + + if (!expectedClass.isInstance(symbol)) return null + + @Suppress("UNCHECKED_CAST") + return symbol as S } + public constructor(psi: KtElement, expectedClass: KClass) : this(psi.createSmartPointer(), expectedClass) + public companion object { - public fun createForSymbolFromSource(symbol: S): KtPsiBasedSymbolPointer? { + public inline fun createForSymbolFromSource(symbol: S): KtPsiBasedSymbolPointer? { + return createForSymbolFromSource(symbol, S::class) + } + + public fun createForSymbolFromSource(symbol: S, expectedClass: KClass): KtPsiBasedSymbolPointer? { ifDisabled { return null } if (symbol.origin != KtSymbolOrigin.SOURCE) return null @@ -47,13 +60,18 @@ public class KtPsiBasedSymbolPointer private constructor(private v else -> return null } - return KtPsiBasedSymbolPointer(psi.createSmartPointer()) + return KtPsiBasedSymbolPointer(psi, expectedClass) } - public fun createForSymbolFromPsi(ktElement: KtElement): KtPsiBasedSymbolPointer? { + + public fun createForSymbolFromPsi(ktElement: KtElement, expectedClass: KClass): KtPsiBasedSymbolPointer? { ifDisabled { return null } - return KtPsiBasedSymbolPointer(ktElement.createSmartPointer()) + return KtPsiBasedSymbolPointer(ktElement, expectedClass) + } + + public inline fun createForSymbolFromPsi(ktElement: KtElement): KtPsiBasedSymbolPointer? { + return createForSymbolFromPsi(ktElement, S::class) } @TestOnly diff --git a/analysis/analysis-api/testData/symbols/symbolByReference/primaryConstructorValueParameterAsProperty.descriptors.txt b/analysis/analysis-api/testData/symbols/symbolByReference/primaryConstructorValueParameterAsProperty.descriptors.txt new file mode 100644 index 00000000000..09d955d851b --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByReference/primaryConstructorValueParameterAsProperty.descriptors.txt @@ -0,0 +1,53 @@ +KtKotlinPropertySymbol: + annotationsList: [] + callableIdIfNonLocal: /A.abc + contextReceivers: [] + getter: KtPropertyGetterSymbol: + annotationsList: [] + callableIdIfNonLocal: null + contextReceivers: [] + hasBody: false + hasStableParameterNames: true + isDefault: true + isExtension: false + isInline: false + isOverride: false + modality: FINAL + origin: SOURCE + receiverType: null + returnType: kotlin/Int + symbolKind: ACCESSOR + typeParameters: [] + valueParameters: [] + visibility: Public + getDispatchReceiver(): A + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + hasBackingField: true + hasGetter: true + hasSetter: false + initializer: null + isConst: false + isDelegatedProperty: false + isExtension: false + isFromPrimaryConstructor: false + isLateInit: false + isOverride: false + isStatic: false + isVal: true + modality: FINAL + name: abc + origin: SOURCE + receiverType: null + returnType: kotlin/Int + setter: null + symbolKind: CLASS_MEMBER + typeParameters: [] + visibility: Public + getDispatchReceiver(): A + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + getterDeprecationStatus: null + javaGetterName: getAbc + javaSetterName: null + setterDeprecationStatus: null \ No newline at end of file diff --git a/analysis/analysis-api/testData/symbols/symbolByReference/primaryConstructorValueParameterAsProperty.kt b/analysis/analysis-api/testData/symbols/symbolByReference/primaryConstructorValueParameterAsProperty.kt new file mode 100644 index 00000000000..ac96c3309be --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByReference/primaryConstructorValueParameterAsProperty.kt @@ -0,0 +1,7 @@ +// DO_NOT_CHECK_SYMBOL_RESTORE + +class A(val abc: Int) { + fun check() { + abc + } +} diff --git a/analysis/analysis-api/testData/symbols/symbolByReference/primaryConstructorValueParameterAsProperty.pretty.txt b/analysis/analysis-api/testData/symbols/symbolByReference/primaryConstructorValueParameterAsProperty.pretty.txt new file mode 100644 index 00000000000..c804acb3772 --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByReference/primaryConstructorValueParameterAsProperty.pretty.txt @@ -0,0 +1 @@ +val abc: kotlin.Int \ No newline at end of file diff --git a/analysis/analysis-api/testData/symbols/symbolByReference/primaryConstructorValueParameterAsProperty.txt b/analysis/analysis-api/testData/symbols/symbolByReference/primaryConstructorValueParameterAsProperty.txt new file mode 100644 index 00000000000..1aaeefd94a3 --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByReference/primaryConstructorValueParameterAsProperty.txt @@ -0,0 +1,53 @@ +KtKotlinPropertySymbol: + annotationsList: [] + callableIdIfNonLocal: /A.abc + contextReceivers: [] + getter: KtPropertyGetterSymbol: + annotationsList: [] + callableIdIfNonLocal: null + contextReceivers: [] + hasBody: false + hasStableParameterNames: true + isDefault: true + isExtension: false + isInline: false + isOverride: false + modality: FINAL + origin: SOURCE + receiverType: null + returnType: kotlin/Int + symbolKind: ACCESSOR + typeParameters: [] + valueParameters: [] + visibility: Public + getDispatchReceiver(): A + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + hasBackingField: true + hasGetter: true + hasSetter: false + initializer: KtNonConstantInitializerValue(val abc: Int) + isConst: false + isDelegatedProperty: false + isExtension: false + isFromPrimaryConstructor: true + isLateInit: false + isOverride: false + isStatic: false + isVal: true + modality: FINAL + name: abc + origin: SOURCE + receiverType: null + returnType: kotlin/Int + setter: null + symbolKind: CLASS_MEMBER + typeParameters: [] + visibility: Public + getDispatchReceiver(): A + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + getterDeprecationStatus: null + javaGetterName: getAbc + javaSetterName: null + setterDeprecationStatus: null \ No newline at end of file