mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
InlayHints: add option to show hints even if expression type is clear : IDEA-190611
This commit is contained in:
@@ -258,8 +258,9 @@ fun inlayOffset(callArgument: PsiExpression, atEnd: Boolean): Int {
|
||||
return if (atEnd) callArgument.textRange.endOffset else callArgument.textRange.startOffset
|
||||
}
|
||||
|
||||
private fun isUnclearExpression(callArgument: PsiElement): Boolean {
|
||||
val isShowHint = when (callArgument) {
|
||||
private fun shouldShowHintsForExpression(callArgument: PsiElement): Boolean {
|
||||
if (JavaInlayParameterHintsProvider.getInstance().isShowHintWhenExpressionTypeIsClear.get()) return true
|
||||
return when (callArgument) {
|
||||
is PsiLiteralExpression -> true
|
||||
is PsiThisExpression -> true
|
||||
is PsiBinaryExpression -> true
|
||||
@@ -271,8 +272,6 @@ private fun isUnclearExpression(callArgument: PsiElement): Boolean {
|
||||
}
|
||||
else -> false
|
||||
}
|
||||
|
||||
return isShowHint
|
||||
}
|
||||
|
||||
|
||||
@@ -285,7 +284,7 @@ private class CallInfo(val regularArgs: List<CallArgumentInfo>, val varArg: PsiP
|
||||
for (callInfo in regularArgs) {
|
||||
val inlay = when {
|
||||
isErroneousArg(callInfo) -> null
|
||||
isUnclearExpression(callInfo.argument) -> inlayInfo(callInfo)
|
||||
shouldShowHintsForExpression(callInfo.argument) -> inlayInfo(callInfo)
|
||||
!callInfo.isAssignable(substitutor) -> inlayInfo(callInfo, showOnlyIfExistedBefore = true)
|
||||
else -> null
|
||||
}
|
||||
@@ -320,7 +319,7 @@ private class CallInfo(val regularArgs: List<CallArgumentInfo>, val varArg: PsiP
|
||||
|
||||
var hasUnassignable = false
|
||||
for (expr in varArgExpressions) {
|
||||
if (isUnclearExpression(expr)) {
|
||||
if (shouldShowHintsForExpression(expr)) {
|
||||
return inlayInfo(varArgExpressions.first(), varArg)
|
||||
}
|
||||
hasUnassignable = hasUnassignable || !varArg.isAssignable(expr, substitutor)
|
||||
|
||||
+6
-1
@@ -113,12 +113,17 @@ class JavaInlayParameterHintsProvider : InlayParameterHintsProvider {
|
||||
"Do not show for methods with same-named numbered parameters",
|
||||
true)
|
||||
|
||||
val isShowHintWhenExpressionTypeIsClear: Option = Option("java.clear.expression.type",
|
||||
"Show hints even when type of expression is clear",
|
||||
false)
|
||||
|
||||
override fun getSupportedOptions(): List<Option> {
|
||||
return listOf(
|
||||
isDoNotShowIfMethodNameContainsParameterName,
|
||||
isShowForParamsWithSameType,
|
||||
isDoNotShowForBuilderLikeMethods,
|
||||
ignoreOneCharOneDigitHints
|
||||
ignoreOneCharOneDigitHints,
|
||||
isShowHintWhenExpressionTypeIsClear
|
||||
)
|
||||
}
|
||||
}
|
||||
+29
@@ -1037,6 +1037,35 @@ class Test {
|
||||
""")
|
||||
}
|
||||
|
||||
fun `test unclear expression type setting true`() {
|
||||
JavaInlayParameterHintsProvider.getInstance().isShowHintWhenExpressionTypeIsClear.set(true)
|
||||
check("""
|
||||
class Test {
|
||||
void main() {
|
||||
String data = "asdad";
|
||||
foo(<hint text="info:"/>data);
|
||||
}
|
||||
|
||||
void foo(String info) {}
|
||||
}
|
||||
""")
|
||||
}
|
||||
|
||||
|
||||
fun `test unclear expression type setting false`() {
|
||||
JavaInlayParameterHintsProvider.getInstance().isShowHintWhenExpressionTypeIsClear.set(false)
|
||||
check("""
|
||||
class Test {
|
||||
void main() {
|
||||
String data = "asdad";
|
||||
foo(data);
|
||||
}
|
||||
|
||||
void foo(String info) {}
|
||||
}
|
||||
""")
|
||||
}
|
||||
|
||||
fun getHints(): List<String> {
|
||||
val document = myFixture.getDocument(myFixture.file)
|
||||
val manager = ParameterHintsPresentationManager.getInstance()
|
||||
|
||||
Reference in New Issue
Block a user