Allow passing additional prefix to CompletionServiceImpl.handleCompletionItemSelected()

This commit is contained in:
Dmitry Jemerov
2018-07-02 19:19:56 +02:00
parent 22e2ffbf87
commit 8d906207d4
3 changed files with 38 additions and 4 deletions
@@ -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;
}
@@ -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<List<LookupElement>, 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);
@@ -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);