From b3a674abee52687fd98e5dfbdbbcf7b5b397794e Mon Sep 17 00:00:00 2001 From: Roman Golyshev Date: Mon, 10 Aug 2020 18:19:16 +0300 Subject: [PATCH] FIR IDE: Add parameter's and type's properties required for completion --- .../idea/frontend/api/symbols/KtVariableLikeSymbol.kt | 4 +++- .../jetbrains/kotlin/idea/frontend/api/types/KtType.kt | 2 ++ .../fir/symbols/KtFirConstructorValueParameterSymbol.kt | 9 ++++++--- .../api/fir/symbols/KtFirFunctionValueParameterSymbol.kt | 4 ++-- .../kotlin/idea/frontend/api/fir/types/FirKtType.kt | 3 +++ 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtVariableLikeSymbol.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtVariableLikeSymbol.kt index 08225f7616d..f4e2c1a5230 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtVariableLikeSymbol.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtVariableLikeSymbol.kt @@ -13,7 +13,9 @@ abstract class KtEnumEntrySymbol : KtVariableLikeSymbol() { final override val symbolKind: KtSymbolKind get() = KtSymbolKind.MEMBER } -abstract class KtParameterSymbol : KtVariableLikeSymbol() +abstract class KtParameterSymbol : KtVariableLikeSymbol() { + abstract val hasDefaultValue: Boolean +} abstract class KtVariableSymbol : KtVariableLikeSymbol() { abstract val isVal: Boolean diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/types/KtType.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/types/KtType.kt index 392f9108aca..8adbee05673 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/types/KtType.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/types/KtType.kt @@ -16,6 +16,8 @@ interface KtType : ValidityTokenOwner { fun isEqualTo(other: KtType): Boolean fun isSubTypeOf(superType: KtType): Boolean + val isBuiltInFunctionalType: Boolean + fun asStringForDebugging(): String } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirConstructorValueParameterSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirConstructorValueParameterSymbol.kt index 0c8e06d1895..59ac94a49ba 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirConstructorValueParameterSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirConstructorValueParameterSymbol.kt @@ -9,12 +9,13 @@ import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl import org.jetbrains.kotlin.idea.fir.findPsi import org.jetbrains.kotlin.idea.frontend.api.ValidityToken -import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner -import org.jetbrains.kotlin.idea.frontend.api.types.KtType import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef -import org.jetbrains.kotlin.idea.frontend.api.symbols.* +import org.jetbrains.kotlin.idea.frontend.api.symbols.KtConstructorParameterSymbol +import org.jetbrains.kotlin.idea.frontend.api.symbols.KtConstructorParameterSymbolKind +import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbolKind +import org.jetbrains.kotlin.idea.frontend.api.types.KtType import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion import org.jetbrains.kotlin.name.Name @@ -43,4 +44,6 @@ internal class KtFirConstructorValueParameterSymbol( else -> KtConstructorParameterSymbolKind.NON_PROPERTY } } + + override val hasDefaultValue: Boolean get() = withValidityAssertion { fir.defaultValue != null } } \ No newline at end of file diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFunctionValueParameterSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFunctionValueParameterSymbol.kt index 280ccee63da..215e026cf96 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFunctionValueParameterSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFunctionValueParameterSymbol.kt @@ -9,13 +9,12 @@ import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl import org.jetbrains.kotlin.idea.fir.findPsi import org.jetbrains.kotlin.idea.frontend.api.ValidityToken -import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner -import org.jetbrains.kotlin.idea.frontend.api.types.KtType import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef import org.jetbrains.kotlin.idea.frontend.api.symbols.KtFunctionParameterSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbolKind +import org.jetbrains.kotlin.idea.frontend.api.types.KtType import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion import org.jetbrains.kotlin.name.Name @@ -31,4 +30,5 @@ internal class KtFirFunctionValueParameterSymbol( override val isVararg: Boolean get() = withValidityAssertion { fir.isVararg } override val type: KtType by cached { builder.buildKtType(fir.returnTypeRef) } override val symbolKind: KtSymbolKind get() = KtSymbolKind.LOCAL + override val hasDefaultValue: Boolean get() = withValidityAssertion { fir.defaultValue != null } } \ No newline at end of file diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/types/FirKtType.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/types/FirKtType.kt index 6fd33f8a99c..2932731e017 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/types/FirKtType.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/types/FirKtType.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.types +import org.jetbrains.kotlin.fir.resolve.inference.isBuiltinFunctionalType import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl import org.jetbrains.kotlin.idea.frontend.api.* @@ -45,6 +46,8 @@ internal interface KtFirType : KtType, ValidityTokenOwner { ) } + override val isBuiltInFunctionalType: Boolean + get() = coneType.isBuiltinFunctionalType(typeCheckerContext.session) } internal class KtFirClassType(