From 8d906207d44abe5b893eb8976c372c46e9cf8ebd Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Mon, 2 Jul 2018 15:35:39 +0200 Subject: [PATCH] Allow passing additional prefix to CompletionServiceImpl.handleCompletionItemSelected() --- ...CompletionServiceWithAdditionalPrefix.java | 20 +++++++++++++++++++ .../completion/CompletionServiceTest.java | 18 ++++++++++++++--- .../impl/CompletionServiceImpl.java | 4 +++- 3 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/completion/normal/Simple_afterCompletionServiceWithAdditionalPrefix.java diff --git a/java/java-tests/testData/codeInsight/completion/normal/Simple_afterCompletionServiceWithAdditionalPrefix.java b/java/java-tests/testData/codeInsight/completion/normal/Simple_afterCompletionServiceWithAdditionalPrefix.java new file mode 100644 index 000000000000..c6fb2a7eee7c --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/Simple_afterCompletionServiceWithAdditionalPrefix.java @@ -0,0 +1,20 @@ +class A extends Base{ + int _field; + void _method(){} + + void foo(){ + int _local1; + int _local2; + _local1 + int _local3; + } +} + +class Base{ + void _baseMethod(){} + int _baseField; + + private void privateMethod(){} + private int privateField; +} + diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/CompletionServiceTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/CompletionServiceTest.java index 935f847c0b49..65ea33cd0f28 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/CompletionServiceTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/CompletionServiceTest.java @@ -28,6 +28,17 @@ public class CompletionServiceTest extends LightCodeInsightFixtureTestCase { public void testCompletionServiceSimple() { myFixture.configureByFile("Simple.java"); + doCompletionServiceTest("_field", ""); + myFixture.checkResultByFile("Simple_afterCompletionService.java"); + } + + public void testCompletionServiceWithPrefix() { + myFixture.configureByFile("Simple.java"); + doCompletionServiceTest("_local1", "loc"); + myFixture.checkResultByFile("Simple_afterCompletionServiceWithAdditionalPrefix.java"); + } + + public void doCompletionServiceTest(String lookupItemText, String additionalPrefix) { CompletionServiceImpl service = (CompletionServiceImpl)CompletionService.getCompletionService(); Disposable completionDisposable = Disposer.newDisposable(); try { @@ -41,9 +52,10 @@ public class CompletionServiceTest extends LightCodeInsightFixtureTestCase { CompletionLookupArranger arranger = service.createLookupArranger(parameters); service.performCompletion(parameters, result -> arranger.addElement(result)); Pair, Integer> items = arranger.arrangeItems(); - LookupElement element = ContainerUtil.find(items.first, item -> item.getLookupString().equals("_field")); - WriteCommandAction.runWriteCommandAction(getProject(), () -> service.handleCompletionItemSelected(parameters, element, arranger.itemMatcher(element), '\n')); - myFixture.checkResultByFile("Simple_afterCompletionService.java"); + LookupElement element = ContainerUtil.find(items.first, item -> item.getLookupString().equals(lookupItemText)); + myFixture.type(additionalPrefix); + WriteCommandAction.runWriteCommandAction(getProject(), () -> service.handleCompletionItemSelected(parameters, element, arranger.itemMatcher(element), + additionalPrefix, '\n')); } finally { Disposer.dispose(completionDisposable); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/impl/CompletionServiceImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/impl/CompletionServiceImpl.java index 6d2d8da261d9..99829373fd34 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/impl/CompletionServiceImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/impl/CompletionServiceImpl.java @@ -292,12 +292,14 @@ public final class CompletionServiceImpl extends CompletionService { public void handleCompletionItemSelected(CompletionParameters parameters, LookupElement lookupElement, PrefixMatcher prefixMatcher, + String additionalPrefix, char completionChar) { + String itemPattern = prefixMatcher.getPrefix() + additionalPrefix; LookupImpl.insertLookupString(parameters.getPosition().getProject(), parameters.getEditor(), lookupElement, - prefixMatcher, prefixMatcher.getPrefix(), prefixMatcher.getPrefix().length()); + prefixMatcher, itemPattern, itemPattern.length()); CodeCompletionHandlerBase handler = CodeCompletionHandlerBase.createHandler(parameters.getCompletionType(), true, parameters.isAutoPopup(), true); handler.handleCompletionElementSelected(parameters, lookupElement, completionChar);