From 5a338f999513813d0de83d1d41bd9b84ce66819e Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 13 May 2019 19:29:04 +0200 Subject: [PATCH] make Complete Statement guess more often with unclosed overloaded method calls (IDEA-210617) GitOrigin-RevId: 19121349fed3324788594beb54021ad2fb332e48 --- .../smartEnter/MethodCallFixer.java | 18 ++++++------------ .../normal/SmartEnterGuessArgumentCount.java | 1 + .../SmartEnterGuessArgumentCount_after.java | 1 + 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/editorActions/smartEnter/MethodCallFixer.java b/java/java-impl/src/com/intellij/codeInsight/editorActions/smartEnter/MethodCallFixer.java index 6adb395a752a..06a9832ffd6e 100644 --- a/java/java-impl/src/com/intellij/codeInsight/editorActions/smartEnter/MethodCallFixer.java +++ b/java/java-impl/src/com/intellij/codeInsight/editorActions/smartEnter/MethodCallFixer.java @@ -68,7 +68,7 @@ public class MethodCallFixer implements Fixer { } if (!DumbService.isDumb(args.getProject())) { - Integer argCount = getUnambiguousParameterCount(innermostCall); + Integer argCount = getMinimalParameterCount(innermostCall); if (argCount != null && argCount > 0 && argCount < params.length) { endOffset = Math.min(endOffset, params[argCount - 1].getTextRange().getEndOffset()); } @@ -85,21 +85,15 @@ public class MethodCallFixer implements Fixer { } @Nullable - private static Integer getUnambiguousParameterCount(PsiCallExpression call) { - int argCount = -1; + private static Integer getMinimalParameterCount(PsiCallExpression call) { + int paramCount = Integer.MAX_VALUE; for (CandidateInfo candidate : PsiResolveHelper.SERVICE.getInstance(call.getProject()).getReferencedMethodCandidates(call, false)) { PsiElement element = candidate.getElement(); - if (!(element instanceof PsiMethod)) return null; - if (((PsiMethod)element).isVarArgs()) return null; - - int count = ((PsiMethod)element).getParameterList().getParametersCount(); - if (argCount == -1) { - argCount = count; - } else if (argCount != count) { - return null; + if (element instanceof PsiMethod) { + paramCount = Math.min(paramCount, ((PsiMethod)element).getParameterList().getParametersCount()); } } - return argCount; + return paramCount == Integer.MAX_VALUE ? null : paramCount; } private static int startLine(Editor editor, PsiElement psiElement) { diff --git a/java/java-tests/testData/codeInsight/completion/normal/SmartEnterGuessArgumentCount.java b/java/java-tests/testData/codeInsight/completion/normal/SmartEnterGuessArgumentCount.java index 26b80731b3d6..3c49c32eb988 100644 --- a/java/java-tests/testData/codeInsight/completion/normal/SmartEnterGuessArgumentCount.java +++ b/java/java-tests/testData/codeInsight/completion/normal/SmartEnterGuessArgumentCount.java @@ -5,5 +5,6 @@ class Main { } private String getFileName(Path path) { return path.toString(); } + private String getFileName(Path path, boolean something) { return path.toString(); } private void foo(String text, int count) {} } diff --git a/java/java-tests/testData/codeInsight/completion/normal/SmartEnterGuessArgumentCount_after.java b/java/java-tests/testData/codeInsight/completion/normal/SmartEnterGuessArgumentCount_after.java index 71444a134014..da7ea24f345e 100644 --- a/java/java-tests/testData/codeInsight/completion/normal/SmartEnterGuessArgumentCount_after.java +++ b/java/java-tests/testData/codeInsight/completion/normal/SmartEnterGuessArgumentCount_after.java @@ -5,5 +5,6 @@ class Main { } private String getFileName(Path path) { return path.toString(); } + private String getFileName(Path path, boolean something) { return path.toString(); } private void foo(String text, int count) {} }