From a74f2db4381b87f927016d30b57ed2b14acb77ac Mon Sep 17 00:00:00 2001 From: Yaroslav Lepenkin Date: Thu, 2 Feb 2017 14:25:53 +0300 Subject: [PATCH] [parameter hints] support for language customizable options --- .../codeInsight/hints/JavaHintUtils.kt | 7 +- .../hints/JavaInlayParameterHintsProvider.kt | 21 ++- .../inlays/JavaParameterNameHintsTest.kt | 11 +- .../hints/InlayParameterHintsProvider.kt | 29 +++- .../settings/ParameterNameHintsSettings.kt | 67 ++++---- .../ParameterNameHintsConfigurable.form | 85 +++------- .../ParameterNameHintsConfigurable.java | 154 +++++++++++------- .../utils/inlays/InlayParameterHintsTest.kt | 2 - 8 files changed, 206 insertions(+), 170 deletions(-) rename platform/{lang-impl => lang-api}/src/com/intellij/codeInsight/hints/settings/ParameterNameHintsSettings.kt (76%) diff --git a/java/java-impl/src/com/intellij/codeInsight/hints/JavaHintUtils.kt b/java/java-impl/src/com/intellij/codeInsight/hints/JavaHintUtils.kt index 389823ead5f4..2ee5bafae803 100644 --- a/java/java-impl/src/com/intellij/codeInsight/hints/JavaHintUtils.kt +++ b/java/java-impl/src/com/intellij/codeInsight/hints/JavaHintUtils.kt @@ -15,7 +15,6 @@ */ package com.intellij.codeInsight.hints -import com.intellij.codeInsight.hints.settings.ParameterNameHintsSettings import com.intellij.psi.* import com.intellij.psi.impl.source.resolve.graphInference.PsiPolyExpressionUtil import com.intellij.psi.impl.source.tree.java.PsiMethodCallExpressionImpl @@ -67,7 +66,8 @@ object JavaInlayHintsProvider { with(resultSet) { getVarArgInlay(info)?.let { add(it) } - if (ParameterNameHintsSettings.getInstance().isShowForParamsWithSameType) { + val hintsProvider = JavaInlayParameterHintsProvider.getInstance() + if (hintsProvider.isShowForParamsWithSameType.get()) { addAll(createSameTypeInlays(args)) } @@ -82,7 +82,8 @@ object JavaInlayHintsProvider { if (params.isEmpty()) return false if (params.size == 1) { if (isBuilderLike(callExpression, method) || isSetterNamed(method)) return false - if (ParameterNameHintsSettings.getInstance().isDoNotShowIfMethodNameContainsParameterName + val hintsProvider = JavaInlayParameterHintsProvider.getInstance() + if (hintsProvider.isDoNotShowIfMethodNameContainsParameterName.get() && isParamNameContainedInMethodName(params[0], method)) return false } return true diff --git a/java/java-impl/src/com/intellij/codeInsight/hints/JavaInlayParameterHintsProvider.kt b/java/java-impl/src/com/intellij/codeInsight/hints/JavaInlayParameterHintsProvider.kt index f4d670ddc0c8..d82c0ccee1ea 100644 --- a/java/java-impl/src/com/intellij/codeInsight/hints/JavaInlayParameterHintsProvider.kt +++ b/java/java-impl/src/com/intellij/codeInsight/hints/JavaInlayParameterHintsProvider.kt @@ -15,13 +15,18 @@ */ package com.intellij.codeInsight.hints +import com.intellij.lang.java.JavaLanguage import com.intellij.openapi.util.text.StringUtil import com.intellij.psi.PsiCallExpression import com.intellij.psi.PsiElement import com.intellij.psi.PsiMethod class JavaInlayParameterHintsProvider : InlayParameterHintsProvider { - + + companion object { + fun getInstance() = InlayParameterHintsExtension.forLanguage(JavaLanguage.INSTANCE) as JavaInlayParameterHintsProvider + } + override fun getMethodInfo(element: PsiElement): MethodInfo? { if (element is PsiCallExpression) { val resolvedElement = element.resolveMethodGenerics().element @@ -82,4 +87,18 @@ class JavaInlayParameterHintsProvider : InlayParameterHintsProvider { "org.slf4j.Logger.*" ) + val isDoNotShowIfMethodNameContainsParameterName = Option("java.method.name.contains.parameter.name", + "Do not show if method name contains parameter name", + true) + + val isShowForParamsWithSameType = Option("java.multiple.params.same.type", + "Show for non-literals in case of multiple params with the same type", + false) + + override fun getSupportedOptions(): List