make Complete Statement guess more often with unclosed overloaded method calls (IDEA...
authorpeter <peter@jetbrains.com>
Mon, 13 May 2019 17:29:04 +0000 (19:29 +0200)
committerintellij-monorepo-bot <intellij-monorepo-bot-no-reply@jetbrains.com>
Mon, 13 May 2019 18:03:55 +0000 (21:03 +0300)
GitOrigin-RevId: 19121349fed3324788594beb54021ad2fb332e48

java/java-impl/src/com/intellij/codeInsight/editorActions/smartEnter/MethodCallFixer.java
java/java-tests/testData/codeInsight/completion/normal/SmartEnterGuessArgumentCount.java
java/java-tests/testData/codeInsight/completion/normal/SmartEnterGuessArgumentCount_after.java

index 6adb395a752ada615263bfc4bd1b97021e5de04f..06a9832ffd6eaa9855fdac7390169f334582ce44 100644 (file)
@@ -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) {
index 26b80731b3d6f9e383bd49ab4cbd83d7e1bb425c..3c49c32eb9883a9c5184f012cce0b09ed0db94ec 100644 (file)
@@ -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) {}
 }
index 71444a134014e698a2ca38f10eee6dcb97461fb4..da7ea24f345ef245cf87505a69100a7049f9d65e 100644 (file)
@@ -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) {}
 }