/** * Complete constructor with minimal type information. * * <p>This is important when we're autocompleting new ? with a class that we haven't yet * imported. We don't yet have detailed type information or javadocs, and it's expensive to * retrieve them. So we autocomplete a minimal constructor, and let signature-help fill in the * details. */ private CompletionItem completeConstructor( String packageName, String className, boolean hasTypeParameters) { CompletionItem item = new CompletionItem(); String qualifiedName = packageName.isEmpty() ? className : packageName + "." + className; String key = String.format("%s#<init>", className); String insertText = className; if (hasTypeParameters) insertText += "<>"; insertText += "($0)"; item.setKind(CompletionItemKind.Constructor); item.setLabel(className); item.setDetail(packageName); item.setInsertText(insertText); item.setInsertTextFormat(InsertTextFormat.Snippet); item.setCommand(TRIGGER_SIGNATURE_HELP); item.setFilterText(className); item.setAdditionalTextEdits(addImport(qualifiedName)); item.setSortText("3/" + className); item.setData(key); return item; }
public synchronized void getCompletions(final SSymbol name, final Set<CompletionItem> results) { for (Variable v : variables) { matchAndAdd(name, v.name, results, CompletionItemKind.Variable); } for (SInvokable m : methods) { matchAndAdd(name, m.getSignature(), results, CompletionItemKind.Method); } for (SlotDefinition s : slots) { matchAndAdd(name, s.getName(), results, CompletionItemKind.Field); } for (MixinDefinition c : classes) { matchAndAdd(name, c.getName(), results, CompletionItemKind.Class); matchAndAdd(name, c.getPrimaryFactorySelector(), results, CompletionItemKind.Constructor); } }
@Test public void testCompletion_import_package() throws JavaModelException{ ICompilationUnit unit = getWorkingCopy( "src/java/Foo.java", "import java.sq \n" + "public class Foo {\n"+ " void foo() {\n"+ " }\n"+ "}\n"); int[] loc = findCompletionLocation(unit, "java.sq"); CompletionList list = server.completion(JsonMessageHelper.getParams(createCompletionRequest(unit, loc[0], loc[1]))).join().getRight(); assertNotNull(list); assertEquals(1, list.getItems().size()); CompletionItem item = list.getItems().get(0); // Check completion item assertNull(item.getInsertText()); assertEquals("java.sql",item.getLabel()); assertEquals(CompletionItemKind.Module, item.getKind() ); assertEquals("999999215", item.getSortText()); assertNull(item.getTextEdit()); CompletionItem resolvedItem = server.resolveCompletionItem(item).join(); assertNotNull(resolvedItem); TextEdit te = item.getTextEdit(); assertNotNull(te); assertEquals("java.sql.*;",te.getNewText()); assertNotNull(te.getRange()); Range range = te.getRange(); assertEquals(0, range.getStart().getLine()); assertEquals(7, range.getStart().getCharacter()); assertEquals(0, range.getEnd().getLine()); //Not checking the range end character }
@Test public void testRequest() throws Exception { TextDocumentPositionParams p = new TextDocumentPositionParams(); p.setPosition(new Position(1,1)); p.setTextDocument(new TextDocumentIdentifier("test/foo.txt")); CompletionList result = new CompletionList(); result.setIsIncomplete(true); result.setItems(new ArrayList<>()); CompletionItem item = new CompletionItem(); item.setDetail("test"); item.setDocumentation("doc"); item.setFilterText("filter"); item.setInsertText("insert"); item.setKind(CompletionItemKind.Field); result.getItems().add(item); server.expectedRequests.put("textDocument/completion", new Pair<>(p, result)); CompletableFuture<Either<List<CompletionItem>, CompletionList>> future = clientLauncher.getRemoteProxy().getTextDocumentService().completion(p); Assert.assertEquals(Either.forRight(result).toString(), future.get(TIMEOUT, TimeUnit.MILLISECONDS).toString()); client.joinOnEmpty(); }
@Inject public CompletionImageProvider(LanguageServerResources resources) { this.resources = resources; // TODO add missed icons // no icon for keyword kind imageMap.put(CompletionItemKind.Text, resources.textItem()); imageMap.put(CompletionItemKind.Method, resources.methodItem()); // imageMap.put(CompletionItemKind.KIND_FUNCTION, ); // imageMap.put(CompletionItemKind.KIND_CONSTRUCTOR, ); imageMap.put(CompletionItemKind.Field, resources.fieldItem()); imageMap.put(CompletionItemKind.Variable, resources.variableItem()); imageMap.put(CompletionItemKind.Class, resources.classItem()); imageMap.put(CompletionItemKind.Interface, resources.interfaceItem()); imageMap.put(CompletionItemKind.Module, resources.moduleItem()); imageMap.put(CompletionItemKind.Property, resources.propertyItem()); // imageMap.put(CompletionItemKind.KIND_UNIT, ); imageMap.put(CompletionItemKind.Value, resources.valueItem()); imageMap.put(CompletionItemKind.Enum, resources.enumItem()); imageMap.put(CompletionItemKind.Snippet, resources.snippetItem()); // imageMap.put(CompletionItemKind.KIND_COLOR, ); imageMap.put(CompletionItemKind.File, resources.fileItem()); // imageMap.put(CompletionItemKind.KIND_REFERENCE, ); }
public Icon getIcon(CompletionItemKind completionKind) { return new Icon("", imageMap.get(completionKind)); }
private CompletionItemKind classKind(ElementKind kind) { switch (kind) { case CLASS: return CompletionItemKind.Class; case ANNOTATION_TYPE: case INTERFACE: return CompletionItemKind.Interface; case ENUM: return CompletionItemKind.Enum; default: throw new RuntimeException("Expected CLASS, INTERFACE or ENUM but found " + kind); } }
private void matchAndAdd(final SSymbol query, final SSymbol symbol, final Set<CompletionItem> results, final CompletionItemKind kind) { if (fuzzyMatches(symbol, query)) { CompletionItem item = new CompletionItem(); item.setKind(kind); item.setLabel(symbol.getString()); results.add(item); } }
@Test public void testCompletion_method_withLSPV2() throws JavaModelException{ mockLSP2Client(); ICompilationUnit unit = getWorkingCopy( "src/java/Foo.java", "public class Foo {\n"+ " void foo() {\n"+ "System.out.print(\"Hello\");\n" + "System.out.println(\" World!\");\n"+ "HashMap<String, String> map = new HashMap<>();\n"+ "map.pu\n" + " }\n"+ "}\n"); int[] loc = findCompletionLocation(unit, "map.pu"); CompletionList list = server.completion(JsonMessageHelper.getParams(createCompletionRequest(unit, loc[0], loc[1]))).join().getRight(); assertNotNull(list); CompletionItem ci = list.getItems().stream() .filter( item-> item.getLabel().matches("put\\(String \\w+, String \\w+\\) : String")) .findFirst().orElse(null); assertNotNull(ci); assertEquals("put", ci.getInsertText()); assertEquals(CompletionItemKind.Function, ci.getKind()); assertEquals("999999019", ci.getSortText()); assertNull(ci.getTextEdit()); CompletionItem resolvedItem = server.resolveCompletionItem(ci).join(); assertNotNull(resolvedItem.getTextEdit()); assertTextEdit(5, 4, 6, "put", resolvedItem.getTextEdit()); assertNotNull(resolvedItem.getAdditionalTextEdits()); List<TextEdit> edits = resolvedItem.getAdditionalTextEdits(); assertEquals(3, edits.size()); }
@Test public void testCompletion_method_withLSPV3() throws JavaModelException{ ICompilationUnit unit = getWorkingCopy( "src/java/Foo.java", "public class Foo {\n"+ " void foo() {\n"+ "System.out.print(\"Hello\");\n" + "System.out.println(\" World!\");\n"+ "HashMap<String, String> map = new HashMap<>();\n"+ "map.pu\n" + " }\n"+ "}\n"); int[] loc = findCompletionLocation(unit, "map.pu"); CompletionList list = server.completion(JsonMessageHelper.getParams(createCompletionRequest(unit, loc[0], loc[1]))).join().getRight(); assertNotNull(list); CompletionItem ci = list.getItems().stream() .filter( item-> item.getLabel().matches("put\\(String \\w+, String \\w+\\) : String")) .findFirst().orElse(null); assertNotNull(ci); assertEquals("put", ci.getInsertText()); assertEquals(CompletionItemKind.Function, ci.getKind()); assertEquals("999999019", ci.getSortText()); assertNull(ci.getTextEdit()); CompletionItem resolvedItem = server.resolveCompletionItem(ci).join(); assertNotNull(resolvedItem.getTextEdit()); try { assertTextEdit(5, 4, 6, "put(${1:key}, ${2:value})", resolvedItem.getTextEdit()); } catch (ComparisonFailure e) { //In case the JDK has no sources assertTextEdit(5, 4, 6, "put(${1:arg0}, ${2:arg1})", resolvedItem.getTextEdit()); } assertNotNull(resolvedItem.getAdditionalTextEdits()); List<TextEdit> edits = resolvedItem.getAdditionalTextEdits(); assertEquals(3, edits.size()); }
@Test public void testCompletion_field() throws JavaModelException{ ICompilationUnit unit = getWorkingCopy( "src/java/Foo.java", "import java.sq \n" + "public class Foo {\n"+ "private String myTestString;\n"+ " void foo() {\n"+ " this.myTestS\n"+ " }\n"+ "}\n"); int[] loc = findCompletionLocation(unit, "this.myTestS"); CompletionList list = server.completion(JsonMessageHelper.getParams(createCompletionRequest(unit, loc[0], loc[1]))).join().getRight(); assertNotNull(list); assertEquals(1, list.getItems().size()); CompletionItem item = list.getItems().get(0); assertEquals(CompletionItemKind.Field, item.getKind()); assertEquals("myTestString", item.getInsertText()); assertNull(item.getAdditionalTextEdits()); assertNull(item.getTextEdit()); CompletionItem resolvedItem = server.resolveCompletionItem(item).join(); assertNotNull(resolvedItem.getTextEdit()); assertTextEdit(4,8,15,"myTestString",resolvedItem.getTextEdit()); //Not checking the range end character }
@Test public void testCompletion_import_type() throws JavaModelException{ ICompilationUnit unit = getWorkingCopy( "src/java/Foo.java", "import java.sq \n" + "public class Foo {\n"+ " void foo() {\n"+ " java.util.Ma\n"+ " }\n"+ "}\n"); int[] loc = findCompletionLocation(unit, "java.util.Ma"); CompletionList list = server.completion(JsonMessageHelper.getParams(createCompletionRequest(unit, loc[0], loc[1]))).join().getRight(); assertNotNull(list); assertEquals(1, list.getItems().size()); CompletionItem item = list.getItems().get(0); assertEquals(CompletionItemKind.Class, item.getKind()); assertEquals("Map", item.getInsertText()); assertNull(item.getAdditionalTextEdits()); assertNull(item.getTextEdit()); CompletionItem resolvedItem = server.resolveCompletionItem(item).join(); assertNotNull(resolvedItem.getTextEdit()); assertTextEdit(3,3,15,"java.util.Map",resolvedItem.getTextEdit()); //Not checking the range end character }
@Test public void testCompletion_getter() throws Exception { ICompilationUnit unit = getWorkingCopy( "src/java/Foo.java", "public class Foo {\n"+ " private String strField;\n" + " get" + "}\n"); int[] loc = findCompletionLocation(unit, "get"); CompletionList list = server.completion(JsonMessageHelper.getParams(createCompletionRequest(unit, loc[0], loc[1]))).join().getRight(); assertNotNull(list); CompletionItem ci = list.getItems().stream() .filter(item -> item.getLabel().startsWith("getStrField() : String")) .findFirst().orElse(null); assertNotNull(ci); assertEquals("getStrField", ci.getInsertText()); assertEquals(CompletionItemKind.Function, ci.getKind()); assertEquals("999999979", ci.getSortText()); assertNull(ci.getTextEdit()); CompletionItem resolvedItem = server.resolveCompletionItem(ci).join(); assertNotNull(resolvedItem.getTextEdit()); assertTextEdit(2, 4, 7, "/**\n" + " * @return the strField\n" + " */\n" + "public String getStrField() {\n" + " return strField;\n" + "}", resolvedItem.getTextEdit()); }
@Test public void testCompletion_booleangetter() throws Exception { ICompilationUnit unit = getWorkingCopy( "src/java/Foo.java", "public class Foo {\n"+ " private boolean boolField;\n" + " is\n" + "}\n"); int[] loc = findCompletionLocation(unit, "is"); CompletionList list = server.completion(JsonMessageHelper.getParams(createCompletionRequest(unit, loc[0], loc[1]))).join().getRight(); assertNotNull(list); CompletionItem ci = list.getItems().stream() .filter(item -> item.getLabel().startsWith("isBoolField() : boolean")) .findFirst().orElse(null); assertNotNull(ci); assertEquals("isBoolField", ci.getInsertText()); assertEquals(CompletionItemKind.Function, ci.getKind()); assertEquals("999999979", ci.getSortText()); assertNull(ci.getTextEdit()); CompletionItem resolvedItem = server.resolveCompletionItem(ci).join(); assertNotNull(resolvedItem.getTextEdit()); assertTextEdit(2, 4, 6, "/**\n" + " * @return the boolField\n" + " */\n" + "public boolean isBoolField() {\n" + " return boolField;\n" + "}", resolvedItem.getTextEdit()); }
@Test public void testCompletion_setter() throws Exception { ICompilationUnit unit = getWorkingCopy( "src/java/Foo.java", "public class Foo {\n"+ " private String strField;\n" + " set" + "}\n"); int[] loc = findCompletionLocation(unit, "set"); CompletionList list = server.completion(JsonMessageHelper.getParams(createCompletionRequest(unit, loc[0], loc[1]))).join().getRight(); assertNotNull(list); CompletionItem ci = list.getItems().stream() .filter(item -> item.getLabel().startsWith("setStrField(String strField) : void")) .findFirst().orElse(null); assertNotNull(ci); assertEquals("setStrField", ci.getInsertText()); assertEquals(CompletionItemKind.Function, ci.getKind()); assertEquals("999999979", ci.getSortText()); assertNull(ci.getTextEdit()); CompletionItem resolvedItem = server.resolveCompletionItem(ci).join(); assertNotNull(resolvedItem.getTextEdit()); assertTextEdit(2, 4, 7, "/**\n" + " * @param strField the strField to set\n" + " */\n" + "public void setStrField(String strField) {\n" + " this.strField = strField;\n" + "}", resolvedItem.getTextEdit()); }
@Test public void testCompletion_AnonymousType() throws Exception { ICompilationUnit unit = getWorkingCopy( "src/java/Foo.java", "public class Foo {\n"+ " public static void main(String[] args) {\n" + " IFoo foo = new \n" + " } \n" + " interface IFoo {\n"+ " String getName();\n"+ " }\n"+ "}\n"); waitForBackgroundJobs(); int[] loc = findCompletionLocation(unit, "new "); CompletionList list = server.completion(JsonMessageHelper.getParams(createCompletionRequest(unit, loc[0], loc[1]))).join().getRight(); assertNotNull(list); CompletionItem ci = list.getItems().stream() .filter(item -> item.getLabel().startsWith("Foo.IFoo() Anonymous Inner Type")) .findFirst().orElse(null); assertNotNull(ci); assertEquals("Foo.IFoo", ci.getInsertText()); assertEquals(CompletionItemKind.Constructor, ci.getKind()); assertEquals("999998684", ci.getSortText()); assertNull(ci.getTextEdit()); CompletionItem resolvedItem = server.resolveCompletionItem(ci).join(); assertNotNull(resolvedItem.getTextEdit()); assertTextEdit(2, 23, 23, "IFoo(){\n" + "\n" + " @Override\n" + " public String getName() {\n" + " ${0:return null;}\n" + " }\n" + "};", resolvedItem.getTextEdit()); }
@Test public void testCompletion_AnonymousTypeMoreMethods() throws Exception { ICompilationUnit unit = getWorkingCopy( "src/java/Foo.java", "public class Foo {\n"+ " public static void main(String[] args) {\n" + " IFoo foo = new \n" + " } \n" + " interface IFoo {\n"+ " String getName();\n"+ " void setName(String name);\n"+ " }\n"+ "}\n"); waitForBackgroundJobs(); int[] loc = findCompletionLocation(unit, "new "); CompletionList list = server.completion(JsonMessageHelper.getParams(createCompletionRequest(unit, loc[0], loc[1]))).join().getRight(); assertNotNull(list); CompletionItem ci = list.getItems().stream() .filter(item -> item.getLabel().startsWith("Foo.IFoo() Anonymous Inner Type")) .findFirst().orElse(null); assertNotNull(ci); assertEquals("Foo.IFoo", ci.getInsertText()); assertEquals(CompletionItemKind.Constructor, ci.getKind()); assertEquals("999998684", ci.getSortText()); assertNull(ci.getTextEdit()); CompletionItem resolvedItem = server.resolveCompletionItem(ci).join(); assertNotNull(resolvedItem.getTextEdit()); assertTextEdit(2, 23, 23, "IFoo(){\n" + "\n @Override\n" + " public void setName(String name) {\n" + " ${0}\n" + " }\n" + "\n @Override\n" + " public String getName() {\n" + " return null;\n" + " }\n" + "};", resolvedItem.getTextEdit()); }
@Test public void testCompletion_AnonymousDeclarationType() throws Exception { ICompilationUnit unit = getWorkingCopy( "src/java/Foo.java", "public class Foo {\n"+ " public static void main(String[] args) {\n" + " new Runnable()\n" + " }\n" + "}\n"); waitForBackgroundJobs(); int[] loc = findCompletionLocation(unit, "Runnable("); CompletionList list = server.completion(JsonMessageHelper.getParams(createCompletionRequest(unit, loc[0], loc[1]))).join().getRight(); assertNotNull(list); CompletionItem ci = list.getItems().stream() .filter(item -> item.getLabel().startsWith("Runnable() Anonymous Inner Type")) .findFirst().orElse(null); assertNotNull(ci); assertEquals("Runnable", ci.getInsertText()); assertEquals(CompletionItemKind.Class, ci.getKind()); assertEquals("999999372", ci.getSortText()); assertNull(ci.getTextEdit()); CompletionItem resolvedItem = server.resolveCompletionItem(ci).join(); assertNotNull(resolvedItem.getTextEdit()); assertTextEdit(2, 20, 22, "(){\n" + "\n" + " @Override\n" + " public void run() {\n" + " ${0}\n" + " }\n" + "}", resolvedItem.getTextEdit()); }
@Test public void testCompletion_AnonymousDeclarationType2() throws Exception { ICompilationUnit unit = getWorkingCopy( "src/java/Foo.java", "public class Foo {\n"+ " public static void main(String[] args) {\n" + " new Runnable( )\n" + " }\n" + "}\n"); waitForBackgroundJobs(); int[] loc = findCompletionLocation(unit, "Runnable( "); CompletionList list = server.completion(JsonMessageHelper.getParams(createCompletionRequest(unit, loc[0], loc[1]))).join().getRight(); assertNotNull(list); CompletionItem ci = list.getItems().stream() .filter(item -> item.getLabel().startsWith("Runnable() Anonymous Inner Type")) .findFirst().orElse(null); assertNotNull(ci); assertEquals("Runnable", ci.getInsertText()); assertEquals(CompletionItemKind.Class, ci.getKind()); assertEquals("999999372", ci.getSortText()); assertNull(ci.getTextEdit()); CompletionItem resolvedItem = server.resolveCompletionItem(ci).join(); assertNotNull(resolvedItem.getTextEdit()); assertTextEdit(2, 20, 24, "(){\n" + "\n" + " @Override\n" + " public void run() {\n" + " ${0}\n" + " }\n" + "}", resolvedItem.getTextEdit()); }
@Test public void testCompletion_AnonymousDeclarationType3() throws Exception { ICompilationUnit unit = getWorkingCopy( "src/java/Foo.java", "public class Foo {\n"+ " public static void main(String[] args) {\n" + " run(\"name\", new Runnable(, 1);\n" + " }\n" + " void run(String name, Runnable runnable, int i) {\n" + " }\n" + "}\n"); waitForBackgroundJobs(); int[] loc = findCompletionLocation(unit, "Runnable("); CompletionList list = server.completion(JsonMessageHelper.getParams(createCompletionRequest(unit, loc[0], loc[1]))).join().getRight(); assertNotNull(list); CompletionItem ci = list.getItems().stream() .filter(item -> item.getLabel().startsWith("Runnable() Anonymous Inner Type")) .findFirst().orElse(null); assertNotNull(ci); assertEquals("Runnable", ci.getInsertText()); assertEquals(CompletionItemKind.Class, ci.getKind()); assertEquals("999999372", ci.getSortText()); assertNull(ci.getTextEdit()); CompletionItem resolvedItem = server.resolveCompletionItem(ci).join(); assertNotNull(resolvedItem.getTextEdit()); assertTextEdit(2, 32, 33, "(){\n" + "\n" + " @Override\n" + " public void run() {\n" + " ${0}\n" + " }\n" + "}", resolvedItem.getTextEdit()); }
@Test public void testCompletion_AnonymousDeclarationType4() throws Exception { ICompilationUnit unit = getWorkingCopy( "src/java/Foo.java", "public class Foo {\n"+ " public static void main(String[] args) {\n" + " run(\"name\", new Runnable(\n" + " , 1);\n" + " }\n" + " void run(String name, Runnable runnable, int i) {\n" + " }\n" + "}\n"); waitForBackgroundJobs(); int[] loc = findCompletionLocation(unit, "Runnable("); CompletionList list = server.completion(JsonMessageHelper.getParams(createCompletionRequest(unit, loc[0], loc[1]))).join().getRight(); assertNotNull(list); CompletionItem ci = list.getItems().stream() .filter(item -> item.getLabel().startsWith("Runnable() Anonymous Inner Type")) .findFirst().orElse(null); assertNotNull(ci); assertEquals("Runnable", ci.getInsertText()); assertEquals(CompletionItemKind.Class, ci.getKind()); assertEquals("999999372", ci.getSortText()); assertNull(ci.getTextEdit()); CompletionItem resolvedItem = server.resolveCompletionItem(ci).join(); assertNotNull(resolvedItem.getTextEdit()); assertTextEdit(2, 32, 33, "(){\n" + "\n" + " @Override\n" + " public void run() {\n" + " ${0}\n" + " }\n" + "}", resolvedItem.getTextEdit()); }
@Test public void testCompletion_AnonymousDeclarationType5() throws Exception { ICompilationUnit unit = getWorkingCopy( "src/java/Foo.java", "public class Foo {\n"+ " public static void main(String[] args) {\n" + " run(\"name\", new Runnable("); waitForBackgroundJobs(); int[] loc = findCompletionLocation(unit, "Runnable("); CompletionList list = server.completion(JsonMessageHelper.getParams(createCompletionRequest(unit, loc[0], loc[1]))).join().getRight(); assertNotNull(list); CompletionItem ci = list.getItems().stream() .filter(item -> item.getLabel().startsWith("Runnable() Anonymous Inner Type")) .findFirst().orElse(null); assertNotNull(ci); assertEquals("Runnable", ci.getInsertText()); assertEquals(CompletionItemKind.Class, ci.getKind()); assertEquals("999999372", ci.getSortText()); assertNull(ci.getTextEdit()); CompletionItem resolvedItem = server.resolveCompletionItem(ci).join(); assertNotNull(resolvedItem.getTextEdit()); assertTextEdit(2, 33, 33, "(){\n" + "\n" + " @Override\n" + " public void run() {\n" + " ${0}\n" + " }\n" + "}", resolvedItem.getTextEdit()); }
@Test public void testCompletion_class_name_contains_$() throws Exception { ICompilationUnit unit = getWorkingCopy( "src/org/sample/Foo$Bar.java", "public class Foo$Bar {\n"+ " public static void main(String[] args) {\n" + " new Foo\n" + " }\n" + "}\n"); waitForBackgroundJobs(); int[] loc = findCompletionLocation(unit, "new Foo"); CompletionList list = server.completion(JsonMessageHelper.getParams(createCompletionRequest(unit, loc[0], loc[1]))).join().getRight(); assertNotNull(list); CompletionItem ci = list.getItems().stream() .filter(item -> item.getLabel().startsWith("Foo$Bar")) .findFirst().orElse(null); assertNotNull(ci); assertEquals("Foo$Bar", ci.getInsertText()); assertEquals(CompletionItemKind.Constructor, ci.getKind()); assertEquals("999999115", ci.getSortText()); assertNull(ci.getTextEdit()); CompletionItem resolvedItem = server.resolveCompletionItem(ci).join(); assertNotNull(resolvedItem.getTextEdit()); assertTextEdit(2, 12, 15, "Foo\\$Bar()", resolvedItem.getTextEdit()); }
@Test public void testCompletion_class_name_contains_$withoutSnippetSupport() throws Exception { mockLSPClient(false, true); ICompilationUnit unit = getWorkingCopy( "src/org/sample/Foo$Bar.java", "public class Foo$Bar {\n"+ " public static void main(String[] args) {\n" + " new Foo\n" + " }\n" + "}\n"); waitForBackgroundJobs(); int[] loc = findCompletionLocation(unit, "new Foo"); CompletionList list = server.completion(JsonMessageHelper.getParams(createCompletionRequest(unit, loc[0], loc[1]))).join().getRight(); assertNotNull(list); CompletionItem ci = list.getItems().stream() .filter(item -> item.getLabel().startsWith("Foo$Bar")) .findFirst().orElse(null); assertNotNull(ci); assertEquals("Foo$Bar", ci.getInsertText()); assertEquals(CompletionItemKind.Constructor, ci.getKind()); assertEquals("999999115", ci.getSortText()); assertNull(ci.getTextEdit()); CompletionItem resolvedItem = server.resolveCompletionItem(ci).join(); assertNotNull(resolvedItem.getTextEdit()); assertTextEdit(2, 12, 15, "Foo$Bar", resolvedItem.getTextEdit()); }
/** * The kind of this completion item. Based of the kind an icon is chosen by the editor. */ @Pure public CompletionItemKind getKind() { return this.kind; }
/** * The kind of this completion item. Based of the kind an icon is chosen by the editor. */ public void setKind(final CompletionItemKind kind) { this.kind = kind; }
private CompletionItemKind mapKind(final int kind) { switch (kind) { case CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION: case CompletionProposal.CONSTRUCTOR_INVOCATION: return CompletionItemKind.Constructor; case CompletionProposal.ANONYMOUS_CLASS_DECLARATION: case CompletionProposal.TYPE_REF: return CompletionItemKind.Class; case CompletionProposal.FIELD_IMPORT: case CompletionProposal.METHOD_IMPORT: case CompletionProposal.METHOD_NAME_REFERENCE: case CompletionProposal.PACKAGE_REF: case CompletionProposal.TYPE_IMPORT: return CompletionItemKind.Module; case CompletionProposal.FIELD_REF: case CompletionProposal.FIELD_REF_WITH_CASTED_RECEIVER: return CompletionItemKind.Field; case CompletionProposal.KEYWORD: return CompletionItemKind.Keyword; case CompletionProposal.LABEL_REF: return CompletionItemKind.Reference; case CompletionProposal.LOCAL_VARIABLE_REF: case CompletionProposal.VARIABLE_DECLARATION: return CompletionItemKind.Variable; case CompletionProposal.METHOD_DECLARATION: case CompletionProposal.METHOD_REF: case CompletionProposal.METHOD_REF_WITH_CASTED_RECEIVER: case CompletionProposal.POTENTIAL_METHOD_DECLARATION: return CompletionItemKind.Function; //text case CompletionProposal.ANNOTATION_ATTRIBUTE_REF: case CompletionProposal.JAVADOC_BLOCK_TAG: case CompletionProposal.JAVADOC_FIELD_REF: case CompletionProposal.JAVADOC_INLINE_TAG: case CompletionProposal.JAVADOC_METHOD_REF: case CompletionProposal.JAVADOC_PARAM_REF: case CompletionProposal.JAVADOC_TYPE_REF: case CompletionProposal.JAVADOC_VALUE_REF: default: return CompletionItemKind.Text; } }
@Test public void testCompletion_import_static() throws JavaModelException{ ICompilationUnit unit = getWorkingCopy( "src/java/Foo.java", "import static java.util.concurrent.TimeUnit. \n" + "public class Foo {\n"+ " void foo() {\n"+ " }\n"+ "}\n"); int[] loc = findCompletionLocation(unit, "java.util.concurrent.TimeUnit."); CompletionList list = server.completion(JsonMessageHelper.getParams(createCompletionRequest(unit, loc[0], loc[1]))).join().getRight(); assertNotNull(list); assertEquals(9, list.getItems().size()); //// .SECONDS - enum value CompletionItem secondsFieldItem = list.getItems().get(0); // Check completion item assertEquals("SECONDS", secondsFieldItem.getInsertText()); assertEquals("SECONDS : TimeUnit", secondsFieldItem.getLabel()); assertEquals(CompletionItemKind.Field, secondsFieldItem.getKind()); assertEquals("999999210", secondsFieldItem.getSortText()); assertNull(secondsFieldItem.getTextEdit()); assertNotNull(server.resolveCompletionItem(secondsFieldItem).join()); TextEdit teSeconds = secondsFieldItem.getTextEdit(); assertNotNull(teSeconds); assertEquals("SECONDS;", teSeconds.getNewText()); assertNotNull(teSeconds.getRange()); Range secondsRange = teSeconds.getRange(); assertEquals(0, secondsRange.getStart().getLine()); assertEquals(44, secondsRange.getStart().getCharacter()); assertEquals(0, secondsRange.getEnd().getLine()); //// .values() - static method CompletionItem valuesMethodItem = list.getItems().get(7); // Check completion item assertEquals("values", valuesMethodItem.getInsertText()); assertEquals("values() : TimeUnit[]", valuesMethodItem.getLabel()); assertEquals(CompletionItemKind.Module, valuesMethodItem.getKind()); assertEquals("999999211", valuesMethodItem.getSortText()); assertNull(valuesMethodItem.getTextEdit()); assertNotNull(server.resolveCompletionItem(valuesMethodItem).join()); TextEdit teValues = valuesMethodItem.getTextEdit(); assertNotNull(teValues); assertEquals("values;", teValues.getNewText()); assertNotNull(teValues.getRange()); Range valuesRange = teValues.getRange(); assertEquals(0, valuesRange.getStart().getLine()); assertEquals(44, valuesRange.getStart().getCharacter()); assertEquals(0, valuesRange.getEnd().getLine()); }
protected CompletionItemKind translateKind(final ContentAssistEntry entry) { CompletionItemKind _switchResult = null; String _kind = entry.getKind(); if (_kind != null) { switch (_kind) { case ContentAssistEntry.KIND_CLASS: _switchResult = CompletionItemKind.Class; break; case ContentAssistEntry.KIND_COLOR: _switchResult = CompletionItemKind.Color; break; case ContentAssistEntry.KIND_CONSTRUCTOR: _switchResult = CompletionItemKind.Constructor; break; case ContentAssistEntry.KIND_ENUM: _switchResult = CompletionItemKind.Enum; break; case ContentAssistEntry.KIND_FIELD: _switchResult = CompletionItemKind.Field; break; case ContentAssistEntry.KIND_FILE: _switchResult = CompletionItemKind.File; break; case ContentAssistEntry.KIND_FUNCTION: _switchResult = CompletionItemKind.Function; break; case ContentAssistEntry.KIND_INTERFACE: _switchResult = CompletionItemKind.Interface; break; case ContentAssistEntry.KIND_KEYWORD: _switchResult = CompletionItemKind.Keyword; break; case ContentAssistEntry.KIND_METHOD: _switchResult = CompletionItemKind.Method; break; case ContentAssistEntry.KIND_MODULE: _switchResult = CompletionItemKind.Module; break; case ContentAssistEntry.KIND_PROPERTY: _switchResult = CompletionItemKind.Property; break; case ContentAssistEntry.KIND_REFERENCE: _switchResult = CompletionItemKind.Reference; break; case ContentAssistEntry.KIND_SNIPPET: _switchResult = CompletionItemKind.Snippet; break; case ContentAssistEntry.KIND_TEXT: _switchResult = CompletionItemKind.Text; break; case ContentAssistEntry.KIND_UNIT: _switchResult = CompletionItemKind.Unit; break; case ContentAssistEntry.KIND_VALUE: _switchResult = CompletionItemKind.Value; break; case ContentAssistEntry.KIND_VARIABLE: _switchResult = CompletionItemKind.Variable; break; default: _switchResult = CompletionItemKind.Value; break; } } else { _switchResult = CompletionItemKind.Value; } return _switchResult; }