From 8508b8b397a94c8c93764e1a85357ba8b399fa0c Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Fri, 21 Apr 2017 19:24:11 +0200 Subject: [PATCH] Show parameter hints only before unclear expressions, as in Java --- .../parameterInfo/KotlinInlayParameterHintsProvider.kt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/parameterInfo/KotlinInlayParameterHintsProvider.kt b/idea/src/org/jetbrains/kotlin/idea/parameterInfo/KotlinInlayParameterHintsProvider.kt index b713c20865f..00c52a06dc0 100644 --- a/idea/src/org/jetbrains/kotlin/idea/parameterInfo/KotlinInlayParameterHintsProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/parameterInfo/KotlinInlayParameterHintsProvider.kt @@ -30,6 +30,7 @@ import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.core.formatter.KotlinCodeStyleSettings import org.jetbrains.kotlin.idea.intentions.SpecifyTypeExplicitlyIntention import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.getReturnTypeReference +import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.endOffset @@ -126,7 +127,7 @@ private enum class HintType(desc: String, enabled: Boolean) { return resolvedCall.valueArguments.mapNotNull { (valueParam: ValueParameterDescriptor, resolvedArg) -> resolvedArg.arguments.firstOrNull()?.let { arg -> arg.getArgumentExpression()?.let { argExp -> - if (!arg.isNamed() && !valueParam.name.isSpecial) { + if (!arg.isNamed() && !valueParam.name.isSpecial && argExp.isUnclearExpression()) { return@mapNotNull InlayInfo(valueParam.name.identifier, argExp.startOffset) } } @@ -138,6 +139,12 @@ private enum class HintType(desc: String, enabled: Boolean) { return emptyList() } + private fun KtExpression.isUnclearExpression() = when(this) { + is KtConstantExpression, is KtThisExpression, is KtBinaryExpression -> true + is KtPrefixExpression -> baseExpression is KtConstantExpression && (operationToken == KtTokens.PLUS || operationToken == KtTokens.MINUS) + else -> false + } + private fun provideTypeHint(element: KtCallableDeclaration, offset: Int): List { val type = SpecifyTypeExplicitlyIntention.getTypeForDeclaration(element) return if (!type.isError) {