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 f1d95f8b8850..309d9b141bac 100644 --- a/java/java-impl/src/com/intellij/codeInsight/hints/JavaHintUtils.kt +++ b/java/java-impl/src/com/intellij/codeInsight/hints/JavaHintUtils.kt @@ -16,7 +16,7 @@ import com.intellij.util.IncorrectOperationException object JavaInlayHintsProvider { - fun hints(callExpression: PsiCallExpression): Set { + fun hints(callExpression: PsiCall): Set { if (JavaMethodCallElement.isCompletionMode(callExpression)) { val argumentList = callExpression.argumentList?:return emptySet() val text = argumentList.text @@ -101,7 +101,7 @@ object JavaInlayHintsProvider { .toSet() } - private fun methodHints(callExpression: PsiCallExpression, resolveResult: ResolveResult): Set { + private fun methodHints(callExpression: PsiCall, resolveResult: ResolveResult): Set { val element = resolveResult.element val substitutor = (resolveResult as? JavaResolveResult)?.substitutor ?: PsiSubstitutor.EMPTY @@ -175,7 +175,7 @@ object JavaInlayHintsProvider { private fun isShowForParamsWithSameType() = JavaInlayParameterHintsProvider.getInstance().isShowForParamsWithSameType.get() - private fun isMethodToShow(method: PsiMethod, callExpression: PsiCallExpression): Boolean { + private fun isMethodToShow(method: PsiMethod, callExpression: PsiCall): Boolean { val params = method.parameterList.parameters if (params.isEmpty()) return false if (params.size == 1) { @@ -195,7 +195,7 @@ object JavaInlayHintsProvider { } - private fun isBuilderLike(expression: PsiCallExpression, method: PsiMethod): Boolean { + private fun isBuilderLike(expression: PsiCall, method: PsiMethod): Boolean { if (expression is PsiNewExpression) return false val returnType = TypeConversionUtil.erasure(method.returnType) ?: return false @@ -212,7 +212,7 @@ object JavaInlayHintsProvider { return false } - private fun callInfo(callExpression: PsiCallExpression, method: PsiMethod): CallInfo { + private fun callInfo(callExpression: PsiCall, method: PsiMethod): CallInfo { val params = method.parameterList.parameters val hasVarArg = params.lastOrNull()?.isVarArgs ?: false val regularParamsCount = if (hasVarArg) params.size - 1 else params.size 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 62f19e5ba0a8..4d65fcc55e08 100644 --- a/java/java-impl/src/com/intellij/codeInsight/hints/JavaInlayParameterHintsProvider.kt +++ b/java/java-impl/src/com/intellij/codeInsight/hints/JavaInlayParameterHintsProvider.kt @@ -6,9 +6,7 @@ import com.intellij.codeInsight.completion.JavaMethodCallElement import com.intellij.codeInsight.hints.HintInfo.MethodInfo 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 +import com.intellij.psi.* class JavaInlayParameterHintsProvider : InlayParameterHintsProvider { @@ -17,7 +15,7 @@ class JavaInlayParameterHintsProvider : InlayParameterHintsProvider { } override fun getHintInfo(element: PsiElement): MethodInfo? { - if (element is PsiCallExpression) { + if (element is PsiCallExpression && element !is PsiEnumConstant) { val resolvedElement = (if(JavaMethodCallElement.isCompletionMode(element)) CompletionMemory.getChosenMethod(element) else null) ?: element.resolveMethodGenerics().element if (resolvedElement is PsiMethod) { @@ -28,7 +26,9 @@ class JavaInlayParameterHintsProvider : InlayParameterHintsProvider { } override fun getParameterHints(element: PsiElement): List { - if (element is PsiCallExpression) { + if (element is PsiCall) { + if (element is PsiEnumConstant && !isShowHintsForEnumConstants.get()) return emptyList() + if (element is PsiNewExpression && !isShowHintsForNewExpressions.get()) return emptyList() return JavaInlayHintsProvider.hints(element).toList() } return emptyList() @@ -117,13 +117,23 @@ class JavaInlayParameterHintsProvider : InlayParameterHintsProvider { "Show hints even when type of expression is clear", false) + val isShowHintsForEnumConstants: Option = Option("java.enums", + "Show hints for enum constants", + true) + + val isShowHintsForNewExpressions: Option = Option("java.new.expr", + "Show hints for 'new' expressions", + true) + override fun getSupportedOptions(): List