From 346766bce482b89ba757c69928ab08e36b032c46 Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Thu, 26 Jul 2018 16:44:31 +0300 Subject: [PATCH] fix Tab not working to move to next completion parameter, when current parameter is a field reference --- .../JavaNextParameterHandler.java | 3 +- .../completion/CompletionHintsTest.java | 30 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/editorActions/JavaNextParameterHandler.java b/java/java-impl/src/com/intellij/codeInsight/editorActions/JavaNextParameterHandler.java index c316e7c207fb..56823ff7e502 100644 --- a/java/java-impl/src/com/intellij/codeInsight/editorActions/JavaNextParameterHandler.java +++ b/java/java-impl/src/com/intellij/codeInsight/editorActions/JavaNextParameterHandler.java @@ -43,7 +43,8 @@ public class JavaNextParameterHandler extends EditorActionHandler { int next = CharArrayUtil.shiftForward(text, offset, " \t"); PsiExpressionList list = (PsiExpressionList)exprList; int actualParameterCount = list.getExpressionCount(); - int lastParamStart = actualParameterCount == 0 ? list.getTextOffset() + 1 : list.getExpressions()[actualParameterCount - 1].getTextOffset(); + int lastParamStart = actualParameterCount == 0 ? list.getTextOffset() + 1 + : list.getExpressions()[actualParameterCount - 1].getTextRange().getStartOffset(); if (next >= lastParamStart) { int prev = CharArrayUtil.shiftBackward(text, lastParamStart - 1, " \t"); char prevChar = prev >= 0 && prev < editor.getDocument().getTextLength() ? text diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/CompletionHintsTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/CompletionHintsTest.java index 4064e5274355..f08f86cc3b64 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/CompletionHintsTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/CompletionHintsTest.java @@ -1401,6 +1401,36 @@ public class CompletionHintsTest extends AbstractParameterInfoTestCase { checkResultWithInlays("class C { void m() { System.getProperty(new String(null, )) } }"); } + public void testFieldAccessInsideMethodInvocation() throws Exception { + enableVirtualComma(); + + configureJava("class C {\n" + + " int x;\n" + + " void some(int a, int b) {}\n" + + " void other() { som }\n" + + "}"); + complete(); + checkResultWithInlays("class C {\n" + + " int x;\n" + + " void some(int a, int b) {}\n" + + " void other() { some(); }\n" + + "}"); + type("this."); + complete("x"); + checkResultWithInlays("class C {\n" + + " int x;\n" + + " void some(int a, int b) {}\n" + + " void other() { some(this.x); }\n" + + "}"); + next(); + waitForAllAsyncStuff(); + checkResultWithInlays("class C {\n" + + " int x;\n" + + " void some(int a, int b) {}\n" + + " void other() { some(this.x, ); }\n" + + "}"); + } + private void checkResultWithInlays(String text) { myFixture.checkResultWithInlays(text); }