From 6cda9922041084671b1d66e8504b8c2aa1ed597f Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Fri, 21 Apr 2017 19:40:24 +0200 Subject: [PATCH] Separate options for showing types of local vars and properties --- .../KotlinInlayParameterHintsProvider.kt | 48 +++++++++++-------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/parameterInfo/KotlinInlayParameterHintsProvider.kt b/idea/src/org/jetbrains/kotlin/idea/parameterInfo/KotlinInlayParameterHintsProvider.kt index 9376c22e8da..481a3e94b00 100644 --- a/idea/src/org/jetbrains/kotlin/idea/parameterInfo/KotlinInlayParameterHintsProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/parameterInfo/KotlinInlayParameterHintsProvider.kt @@ -56,24 +56,25 @@ private enum class HintType(desc: String, enabled: Boolean) { PROPERTY_HINT("Show property type hints", true) { override fun provideHints(elem: PsiElement): List { - (elem as? KtProperty)?.let { - property -> - property.nameIdentifier?.let { - ident -> - return provideTypeHint(property, ident.endOffset) - } - } - return emptyList() + return providePropertyTypeHint(elem) } - override fun isApplicable(elem: PsiElement): Boolean = elem is KtProperty && elem.getReturnTypeReference() == null + override fun isApplicable(elem: PsiElement): Boolean = elem is KtProperty && elem.getReturnTypeReference() == null && !elem.isLocal }, - FUNCTION_HINT("Show function type hints", true) { + + LOCAL_VARIABLE_HINT("Show local variable type hints", true) { override fun provideHints(elem: PsiElement): List { - (elem as? KtNamedFunction)?.let { - namedFunc -> - namedFunc.valueParameterList?.let { - paramList -> + return providePropertyTypeHint(elem) + } + + override fun isApplicable(elem: PsiElement): Boolean = (elem is KtProperty && elem.getReturnTypeReference() == null && elem.isLocal) || + (elem is KtParameter && elem.isLoopParameter) + }, + + FUNCTION_HINT("Show function return type hints", true) { + override fun provideHints(elem: PsiElement): List { + (elem as? KtNamedFunction)?.let { namedFunc -> + namedFunc.valueParameterList?.let { paramList -> return provideTypeHint(namedFunc, paramList.endOffset) } } @@ -84,19 +85,17 @@ private enum class HintType(desc: String, enabled: Boolean) { }, PARAMETER_TYPE_HINT("Show parameter type hints ", false) { override fun provideHints(elem: PsiElement): List { - (elem as? KtParameter)?.let { - param -> - param.nameIdentifier?.let { - ident -> + (elem as? KtParameter)?.let { param -> + param.nameIdentifier?.let { ident -> return provideTypeHint(param, ident.endOffset) } } return emptyList() } - override fun isApplicable(elem: PsiElement): Boolean = elem is KtParameter && elem.typeReference == null + override fun isApplicable(elem: PsiElement): Boolean = elem is KtParameter && elem.typeReference == null && !elem.isLoopParameter }, - PARAMETER_HINT("Show parameter hints", true) { + PARAMETER_HINT("Show argument name hints", true) { override fun provideHints(elem: PsiElement): List { (elem as? KtCallExpression)?.let { return provideParameterInfo(it) @@ -145,6 +144,15 @@ private enum class HintType(desc: String, enabled: Boolean) { else -> false } + private fun providePropertyTypeHint(elem: PsiElement): List { + (elem as? KtCallableDeclaration)?.let { property -> + property.nameIdentifier?.let { ident -> + return HintType.provideTypeHint(property, ident.endOffset) + } + } + return emptyList() + } + private fun provideTypeHint(element: KtCallableDeclaration, offset: Int): List { val type = SpecifyTypeExplicitlyIntention.getTypeForDeclaration(element) return if (!type.isError) {