From 96b6efd4018c3d1654a3fc43aa1fe305755012ce Mon Sep 17 00:00:00 2001 From: Stanislav Erokhin Date: Thu, 7 Jan 2021 01:23:51 +0100 Subject: [PATCH] Add type parameters to the KtConstructorSymbol Yes, for kotlin classes there are not allowed. But unfortunately they are for java classes --- .../api/symbols/KtFunctionLikeSymbol.kt | 5 ++++- .../api/fir/symbols/KtFirConstructorSymbol.kt | 6 ++++++ .../testData/memberScopeByFqName/Int.txt | 1 + .../memberScopeByFqName/java.lang.String.txt | 17 +++++++++++++++++ .../symbolPointer/classPrimaryConstructor.kt | 1 + .../symbolPointer/classSecondaryConstructors.kt | 3 +++ .../testData/symbolsByPsi/annotations.kt | 1 + 7 files changed, 33 insertions(+), 1 deletion(-) diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtFunctionLikeSymbol.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtFunctionLikeSymbol.kt index f5ebf6e4f90..7c9bea863eb 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtFunctionLikeSymbol.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtFunctionLikeSymbol.kt @@ -42,7 +42,10 @@ abstract class KtFunctionSymbol : KtFunctionLikeSymbol(), abstract override fun createPointer(): KtSymbolPointer } -abstract class KtConstructorSymbol : KtFunctionLikeSymbol(), KtAnnotatedSymbol, KtSymbolWithVisibility { +abstract class KtConstructorSymbol : KtFunctionLikeSymbol(), + KtAnnotatedSymbol, + KtSymbolWithVisibility, + KtSymbolWithTypeParameters { abstract val isPrimary: Boolean abstract val containingClassIdIfNonLocal: ClassId? diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirConstructorSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirConstructorSymbol.kt index db40b54f59c..f223debf711 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirConstructorSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirConstructorSymbol.kt @@ -59,6 +59,12 @@ internal class KtFirConstructorSymbol( override val isPrimary: Boolean get() = firRef.withFir { it.isPrimary } + override val typeParameters by firRef.withFirAndCache { fir -> + fir.typeParameters.map { typeParameter -> + builder.buildTypeParameterSymbol(typeParameter.symbol.fir) + } + } + override fun createPointer(): KtSymbolPointer = withValidityAssertion { KtPsiBasedSymbolPointer.createForSymbolFromSource(this)?.let { return it } if (symbolKind == KtSymbolKind.LOCAL) { diff --git a/idea/idea-frontend-fir/testData/memberScopeByFqName/Int.txt b/idea/idea-frontend-fir/testData/memberScopeByFqName/Int.txt index 0720fac094a..dfe8059190f 100644 --- a/idea/idea-frontend-fir/testData/memberScopeByFqName/Int.txt +++ b/idea/idea-frontend-fir/testData/memberScopeByFqName/Int.txt @@ -1110,6 +1110,7 @@ KtFirConstructorSymbol: isPrimary: true origin: LIBRARY symbolKind: MEMBER + typeParameters: [] valueParameters: [] visibility: PRIVATE diff --git a/idea/idea-frontend-fir/testData/memberScopeByFqName/java.lang.String.txt b/idea/idea-frontend-fir/testData/memberScopeByFqName/java.lang.String.txt index 55247447b51..cea0285cae3 100644 --- a/idea/idea-frontend-fir/testData/memberScopeByFqName/java.lang.String.txt +++ b/idea/idea-frontend-fir/testData/memberScopeByFqName/java.lang.String.txt @@ -1124,6 +1124,7 @@ KtFirConstructorSymbol: isPrimary: false origin: JAVA symbolKind: MEMBER + typeParameters: [] valueParameters: [] visibility: PUBLIC @@ -1134,6 +1135,7 @@ KtFirConstructorSymbol: isPrimary: false origin: JAVA symbolKind: MEMBER + typeParameters: [] valueParameters: [KtFirConstructorValueParameterSymbol(original)] visibility: PUBLIC @@ -1144,6 +1146,7 @@ KtFirConstructorSymbol: isPrimary: false origin: JAVA symbolKind: MEMBER + typeParameters: [] valueParameters: [KtFirConstructorValueParameterSymbol(value)] visibility: PUBLIC @@ -1154,6 +1157,7 @@ KtFirConstructorSymbol: isPrimary: false origin: JAVA symbolKind: MEMBER + typeParameters: [] valueParameters: [KtFirConstructorValueParameterSymbol(value), KtFirConstructorValueParameterSymbol(offset), KtFirConstructorValueParameterSymbol(count)] visibility: PUBLIC @@ -1164,6 +1168,7 @@ KtFirConstructorSymbol: isPrimary: false origin: JAVA symbolKind: MEMBER + typeParameters: [] valueParameters: [KtFirConstructorValueParameterSymbol(codePoints), KtFirConstructorValueParameterSymbol(offset), KtFirConstructorValueParameterSymbol(count)] visibility: PUBLIC @@ -1174,6 +1179,7 @@ KtFirConstructorSymbol: isPrimary: false origin: JAVA symbolKind: MEMBER + typeParameters: [] valueParameters: [KtFirConstructorValueParameterSymbol(ascii), KtFirConstructorValueParameterSymbol(hibyte), KtFirConstructorValueParameterSymbol(offset), KtFirConstructorValueParameterSymbol(count)] visibility: PUBLIC @@ -1184,6 +1190,7 @@ KtFirConstructorSymbol: isPrimary: false origin: JAVA symbolKind: MEMBER + typeParameters: [] valueParameters: [KtFirConstructorValueParameterSymbol(ascii), KtFirConstructorValueParameterSymbol(hibyte)] visibility: PUBLIC @@ -1194,6 +1201,7 @@ KtFirConstructorSymbol: isPrimary: false origin: JAVA symbolKind: MEMBER + typeParameters: [] valueParameters: [KtFirConstructorValueParameterSymbol(bytes), KtFirConstructorValueParameterSymbol(offset), KtFirConstructorValueParameterSymbol(length), KtFirConstructorValueParameterSymbol(charsetName)] visibility: PUBLIC @@ -1204,6 +1212,7 @@ KtFirConstructorSymbol: isPrimary: false origin: JAVA symbolKind: MEMBER + typeParameters: [] valueParameters: [KtFirConstructorValueParameterSymbol(bytes), KtFirConstructorValueParameterSymbol(offset), KtFirConstructorValueParameterSymbol(length), KtFirConstructorValueParameterSymbol(charset)] visibility: PUBLIC @@ -1214,6 +1223,7 @@ KtFirConstructorSymbol: isPrimary: false origin: JAVA symbolKind: MEMBER + typeParameters: [] valueParameters: [KtFirConstructorValueParameterSymbol(bytes), KtFirConstructorValueParameterSymbol(charsetName)] visibility: PUBLIC @@ -1224,6 +1234,7 @@ KtFirConstructorSymbol: isPrimary: false origin: JAVA symbolKind: MEMBER + typeParameters: [] valueParameters: [KtFirConstructorValueParameterSymbol(bytes), KtFirConstructorValueParameterSymbol(charset)] visibility: PUBLIC @@ -1234,6 +1245,7 @@ KtFirConstructorSymbol: isPrimary: false origin: JAVA symbolKind: MEMBER + typeParameters: [] valueParameters: [KtFirConstructorValueParameterSymbol(bytes), KtFirConstructorValueParameterSymbol(offset), KtFirConstructorValueParameterSymbol(length)] visibility: PUBLIC @@ -1244,6 +1256,7 @@ KtFirConstructorSymbol: isPrimary: false origin: JAVA symbolKind: MEMBER + typeParameters: [] valueParameters: [KtFirConstructorValueParameterSymbol(bytes)] visibility: PUBLIC @@ -1254,6 +1267,7 @@ KtFirConstructorSymbol: isPrimary: false origin: JAVA symbolKind: MEMBER + typeParameters: [] valueParameters: [KtFirConstructorValueParameterSymbol(buffer)] visibility: PUBLIC @@ -1264,6 +1278,7 @@ KtFirConstructorSymbol: isPrimary: false origin: JAVA symbolKind: MEMBER + typeParameters: [] valueParameters: [KtFirConstructorValueParameterSymbol(builder)] visibility: PUBLIC @@ -1274,6 +1289,7 @@ KtFirConstructorSymbol: isPrimary: false origin: JAVA symbolKind: MEMBER + typeParameters: [] valueParameters: [KtFirConstructorValueParameterSymbol(value), KtFirConstructorValueParameterSymbol(share)] visibility: UNKNOWN @@ -1284,6 +1300,7 @@ KtFirConstructorSymbol: isPrimary: false origin: JAVA symbolKind: MEMBER + typeParameters: [] valueParameters: [KtFirConstructorValueParameterSymbol(offset), KtFirConstructorValueParameterSymbol(count), KtFirConstructorValueParameterSymbol(value)] visibility: UNKNOWN diff --git a/idea/idea-frontend-fir/testData/symbolPointer/classPrimaryConstructor.kt b/idea/idea-frontend-fir/testData/symbolPointer/classPrimaryConstructor.kt index 3688a00f3c7..aaaac70c913 100644 --- a/idea/idea-frontend-fir/testData/symbolPointer/classPrimaryConstructor.kt +++ b/idea/idea-frontend-fir/testData/symbolPointer/classPrimaryConstructor.kt @@ -9,6 +9,7 @@ KtFirConstructorSymbol: isPrimary: true origin: SOURCE symbolKind: MEMBER + typeParameters: [] valueParameters: [] visibility: PUBLIC diff --git a/idea/idea-frontend-fir/testData/symbolPointer/classSecondaryConstructors.kt b/idea/idea-frontend-fir/testData/symbolPointer/classSecondaryConstructors.kt index f94ee1bc48f..e51abfa0c72 100644 --- a/idea/idea-frontend-fir/testData/symbolPointer/classSecondaryConstructors.kt +++ b/idea/idea-frontend-fir/testData/symbolPointer/classSecondaryConstructors.kt @@ -11,6 +11,7 @@ KtFirConstructorSymbol: isPrimary: true origin: SOURCE symbolKind: MEMBER + typeParameters: [] valueParameters: [] visibility: PUBLIC @@ -30,6 +31,7 @@ KtFirConstructorSymbol: isPrimary: false origin: SOURCE symbolKind: MEMBER + typeParameters: [] valueParameters: Could not render due to java.lang.ClassCastException: org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirFunctionValueParameterSymbol cannot be cast to org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirConstructorValueParameterSymbol visibility: PUBLIC @@ -58,6 +60,7 @@ KtFirConstructorSymbol: isPrimary: false origin: SOURCE symbolKind: MEMBER + typeParameters: [] valueParameters: Could not render due to java.lang.ClassCastException: org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirFunctionValueParameterSymbol cannot be cast to org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirConstructorValueParameterSymbol visibility: PUBLIC diff --git a/idea/idea-frontend-fir/testData/symbolsByPsi/annotations.kt b/idea/idea-frontend-fir/testData/symbolsByPsi/annotations.kt index a49294b62f1..d0797453ad5 100644 --- a/idea/idea-frontend-fir/testData/symbolsByPsi/annotations.kt +++ b/idea/idea-frontend-fir/testData/symbolsByPsi/annotations.kt @@ -36,6 +36,7 @@ KtFirConstructorSymbol: isPrimary: true origin: SOURCE symbolKind: MEMBER + typeParameters: [] valueParameters: Could not render due to java.lang.ClassCastException: org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirFunctionValueParameterSymbol cannot be cast to org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirConstructorValueParameterSymbol visibility: PUBLIC