From 1122b7ac150481f1398043018779f22a1b16c085 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 27 Apr 2022 11:05:07 +0200 Subject: [PATCH] [java] less highlighting range (IDEA-292997) GitOrigin-RevId: 3fb8256094eff2e93758e2ea285e51c179b4569c --- .../impl/analysis/HighlightMethodUtil.java | 22 +++++++++---------- .../TooltipNotEnoughArguments.java | 8 +++++++ .../lambda/GenericsHighlighting8Test.java | 20 +++++++++++++++++ 3 files changed, 39 insertions(+), 11 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting8/TooltipNotEnoughArguments.java diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java index 3091beba6c7e..52750a97396d 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java @@ -499,11 +499,17 @@ public final class HighlightMethodUtil { PsiExpression[] expressions = list.getExpressions(); PsiParameter[] parameters = resolvedMethod.getParameterList().getParameters(); mismatchedExpressions = mismatchedArgs(expressions, substitutor, parameters, candidateInfo.isVarargs()); - if (mismatchedExpressions.size() == 1) { + if (mismatchedExpressions.size() == 1 && parameters.length > 0) { toolTip = createOneArgMismatchTooltip(candidateInfo, mismatchedExpressions, expressions, parameters); } if (toolTip == null) { - toolTip = mismatchedExpressions.isEmpty() ? description : createMismatchedArgumentsHtmlTooltip(candidateInfo, list); + if ((parameters.length == 0 || !parameters[parameters.length - 1].isVarArgs()) && + parameters.length != expressions.length) { + toolTip = createMismatchedArgumentCountTooltip(parameters, expressions); + } + else { + toolTip = mismatchedExpressions.isEmpty() ? description : createMismatchedArgumentsHtmlTooltip(candidateInfo, list); + } } } else { @@ -542,11 +548,8 @@ public final class HighlightMethodUtil { PsiExpression[] expressions, PsiParameter[] parameters) { PsiExpression wrongArg = mismatchedExpressions.get(0); - PsiType argType = wrongArg.getType(); + PsiType argType = wrongArg != null ? wrongArg.getType() : null; if (argType != null) { - if ((parameters.length == 0 || !parameters[parameters.length - 1].isVarArgs()) && parameters.length != expressions.length) { - return createMismatchedArgumentCountTooltip(parameters, expressions); - } int idx = ArrayUtil.find(expressions, wrongArg); PsiType paramType = candidateInfo.getSubstitutor().substitute(PsiTypesUtil.getParameterType(parameters, idx, candidateInfo.isVarargs())); String errorMessage = candidateInfo.getInferenceErrorMessage(); @@ -718,13 +721,10 @@ public final class HighlightMethodUtil { PsiSubstitutor substitutor, PsiParameter @NotNull [] parameters, boolean varargs) { - if ((parameters.length == 0 || !parameters[parameters.length - 1].isVarArgs()) && parameters.length > expressions.length) { - return Collections.emptyList(); - } - List result = new ArrayList<>(); for (int i = 0; i < Math.max(parameters.length, expressions.length); i++) { - if (parameters.length == 0 || !assignmentCompatible(i, parameters, expressions, substitutor, varargs)) { + if (parameters.length == 0 || + !assignmentCompatible(i, parameters, expressions, substitutor, varargs)) { result.add(i < expressions.length ? expressions[i] : null); } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting8/TooltipNotEnoughArguments.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting8/TooltipNotEnoughArguments.java new file mode 100644 index 000000000000..751cb9e33ade --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting8/TooltipNotEnoughArguments.java @@ -0,0 +1,8 @@ +class MyTest { + MyTest(int a, int b, int c) { + } + + { + new MyTest(1, ""); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/lambda/GenericsHighlighting8Test.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/lambda/GenericsHighlighting8Test.java index b55fda187738..e61fdd0d113c 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/lambda/GenericsHighlighting8Test.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/lambda/GenericsHighlighting8Test.java @@ -1054,6 +1054,26 @@ public class GenericsHighlighting8Test extends LightDaemonAnalyzerTestCase { .forEach(info -> Assert.assertEquals(expected, info.getToolTip())); } + public void testTooltipNotEnoughArguments() { + doTest(); + String toolTipForeground = ColorUtil.toHtmlColor(UIUtil.getToolTipForeground()); + String greyed = ColorUtil.toHtmlColor(UIUtil.getContextHelpForeground()); + String red = ColorUtil.toHtmlColor(UIUtil.getErrorForeground()); + String expected = "" + + "" + + "" + + "" + + "" + + "" + + "
Required type:int
Provided:String
" + + ""; + + doHighlighting() + .stream() + .filter(info -> info.type == HighlightInfoType.ERROR) + .forEach(info -> Assert.assertEquals(expected, info.getToolTip())); + } + public void testVarargsTooltip() { doTest(); String toolTipForeground = ColorUtil.toHtmlColor(UIUtil.getToolTipForeground());