4343import java .util .concurrent .atomic .AtomicInteger ;
4444import java .util .function .BiFunction ;
4545import java .util .function .Supplier ;
46+ import java .util .stream .Collectors ;
4647
4748import javax .swing .JLabel ;
4849import javax .swing .JList ;
5253import org .eclipse .lsp4j .CompletionItemKind ;
5354import org .eclipse .lsp4j .CompletionList ;
5455import org .eclipse .lsp4j .CompletionParams ;
56+ import org .eclipse .lsp4j .ParameterInformation ;
5557import org .eclipse .lsp4j .Range ;
5658import org .eclipse .lsp4j .SignatureHelp ;
59+ import org .eclipse .lsp4j .SignatureInformation ;
5760import org .eclipse .lsp4j .TextEdit ;
5861import org .eclipse .lsp4j .jsonrpc .messages .Either ;
5962import org .fife .ui .autocomplete .Completion ;
6063import org .fife .ui .autocomplete .ParameterizedCompletion ;
6164import org .fife .ui .rsyntaxtextarea .RSyntaxTextArea ;
6265import org .junit .Test ;
63- import org .scijava .code .lsp .jvm .Callable ;
6466import org .scijava .code .lsp .Environment ;
65- import org .scijava .code .lsp .Positions ;
6667import org .scijava .code .lsp .jvm .AbstractInProcessLanguageServer ;
68+ import org .scijava .code .lsp .CompletionItems ;
69+ import org .scijava .code .lsp .Positions ;
6770
6871/**
6972 * Tests that {@link SciJavaCompletionProvider} faithfully bridges a language
@@ -140,17 +143,16 @@ public void testCallablesBecomeFunctionCompletionsWithChoices() {
140143
141144 // A callable completion taking one ij.gui.Roi parameter; and, inside its
142145 // argument list, an in-scope variable fitting it (and a method).
143- final Callable addRoi = new Callable ("addRoi" , Collections .singletonList (
144- new Callable .Param ("roi" , "ij.gui.Roi" )), "void" ).kind (
145- CompletionItemKind .Method );
146+ final CompletionItem addRoi = CompletionItems .methodSnippet ("addRoi" ,
147+ Collections .singletonList ("roi" ), "(ij.gui.Roi roi)" );
146148 final FakeServer server = new FakeServer ();
147149 server .complete = (doc , caret ) -> {
148150 if (!doc .lineTo (caret ).endsWith ("(" )) {
149- return FakeServer .items (doc , 0 , caret , addRoi . toItem () );
151+ return FakeServer .items (doc , 0 , caret , addRoi );
150152 }
151153 final CompletionItem myRoi = new CompletionItem ("myRoi" );
152154 myRoi .setKind (CompletionItemKind .Variable );
153- return FakeServer .items (doc , caret , caret , myRoi , addRoi . toItem () );
155+ return FakeServer .items (doc , caret , caret , myRoi , addRoi );
154156 };
155157 final SciJavaCompletionProvider provider = new SciJavaCompletionProvider (
156158 FakeServers .session (server ));
@@ -178,7 +180,7 @@ public void testCallablesRenderWithSignatures() {
178180
179181 final FakeServer server = new FakeServer ();
180182 server .complete = (doc , caret ) -> FakeServer .items (doc , 0 , caret , method (
181- completionText , "long[]" ). toItem () );
183+ completionText , "long[]" ));
182184 final SciJavaCompletionProvider provider = new SciJavaCompletionProvider (
183185 FakeServers .session (server ));
184186
@@ -199,10 +201,10 @@ public void testParameterTooltipListsOtherOverloads() {
199201
200202 final FakeServer server = new FakeServer ();
201203 server .complete = (doc , caret ) -> FakeServer .items (doc , 0 , caret , //
202- method ("img.getAt" , "int[]" ). toItem () , //
203- method ("img.getAt" , "net.imglib2.Localizable" ). toItem () , //
204- method ("img.getAt" , "int[]" ). toItem () , // e.g. a bridge method
205- method ("img.getAtX" , "long[]" ). toItem () );
204+ method ("img.getAt" , "int[]" ), //
205+ method ("img.getAt" , "net.imglib2.Localizable" ), //
206+ method ("img.getAt" , "int[]" ), // e.g. a bridge method
207+ method ("img.getAtX" , "long[]" ));
206208 final SciJavaCompletionProvider provider = new SciJavaCompletionProvider (
207209 FakeServers .session (server ));
208210 final List <Completion > completions = provider .getCompletionsImpl (area );
@@ -232,22 +234,20 @@ public void testParameterTooltipShowsSignatureHelp() {
232234 area .setText ("a" );
233235 area .setCaretPosition (1 );
234236
235- final Callable ints = method ("a" , "int" , "int" );
236- final Callable strings = method ("a" , "java.lang.String" );
237- final Callable floats = method ("a" , "float" , "float" );
238- final Callable longs = method ("a" , "long" , "long" );
239237 final String [] askedText = { null };
240238 final int [] askedCaret = { -1 };
241239 final FakeServer server = new FakeServer ();
242- server .complete = (doc , caret ) -> FakeServer .items (doc , 0 , caret , ints
243- .toItem (), strings .toItem (), floats .toItem (), longs .toItem ());
240+ server .complete = (doc , caret ) -> FakeServer .items (doc , 0 , caret , method (
241+ "a" , "int" , "int" ), method ("a" , "java.lang.String" ), method ("a" , "float" ,
242+ "float" ), method ("a" , "long" , "long" ));
244243 server .help = (doc , caret ) -> {
245244 askedText [0 ] = doc .text ();
246245 askedCaret [0 ] = caret ;
247246 // The server orders the signatures, best fits first: here, as for a
248247 // float typed as the first argument.
249- return new SignatureHelp (Arrays .asList (floats .toSignature (), ints
250- .toSignature (), longs .toSignature (), strings .toSignature ()), 0 , 1 );
248+ return new SignatureHelp (Arrays .asList (signature ("a" , "float" , "float" ),
249+ signature ("a" , "int" , "int" ), signature ("a" , "long" , "long" ), signature (
250+ "a" , "java.lang.String" )), 0 , 1 );
251251 };
252252 final SciJavaCompletionProvider provider = new SciJavaCompletionProvider (
253253 FakeServers .session (server ));
@@ -273,14 +273,12 @@ public void testParameterTooltipIgnoresOtherCalls() {
273273 final RSyntaxTextArea area = new RSyntaxTextArea ();
274274 area .setText ("a" );
275275 area .setCaretPosition (1 );
276- final Callable ints = method ("a" , "int" , "int" );
277- final Callable floats = method ("a" , "float" , "float" );
278276 final FakeServer server = new FakeServer ();
279- server .complete = (doc , caret ) -> FakeServer .items (doc , 0 , caret , ints
280- . toItem ( ), floats . toItem ( ));
277+ server .complete = (doc , caret ) -> FakeServer .items (doc , 0 , caret , method (
278+ "a" , "int" , "int" ), method ( "a" , "float" , "float" ));
281279 // The caret is in a call nested in a's arguments: b's signatures.
282280 server .help = (doc , caret ) -> new SignatureHelp (Collections .singletonList (
283- method ("b" , "double" ). toSignature ( )), 0 , 0 );
281+ signature ("b" , "double" )), 0 , 0 );
284282 final SciJavaCompletionProvider provider = new SciJavaCompletionProvider (
285283 FakeServers .session (server ));
286284 final ParameterizedCompletion intOverload =
@@ -300,9 +298,8 @@ public void testLazyDescriptions() {
300298 final AtomicInteger asked = new AtomicInteger ();
301299 final FakeServer server = new FakeServer ();
302300 server .complete = (doc , caret ) -> FakeServer .items (doc , 3 , caret , //
303- server .described (new Callable ("zeros" , Collections .singletonList (
304- new Callable .Param ("shape" , "int" )), null ).kind (
305- CompletionItemKind .Method ).toItem (), () -> {
301+ server .described (CompletionItems .methodSnippet ("zeros" ,
302+ Collections .singletonList ("shape" ), "(int shape)" ), () -> {
306303 asked .incrementAndGet ();
307304 return "Return a new array of zeros." ;
308305 }), //
@@ -413,15 +410,35 @@ public void testRequestCarriesScriptPath() {
413410
414411 // -- Helper methods --
415412
416- private static Callable method (final String name ,
413+ /** A method's completion, with parameters p0, p1, ... of the types. */
414+ private static CompletionItem method (final String name ,
415+ final String ... paramTypes )
416+ {
417+ final List <String > names = new ArrayList <>();
418+ for (int i = 0 ; i < paramTypes .length ; i ++) names .add ("p" + i );
419+ return CompletionItems .methodSnippet (name , names , "(" + String .join (
420+ ", " , params (paramTypes )) + ")" );
421+ }
422+
423+ /** A method's signature, with parameters p0, p1, ... of the types. */
424+ private static SignatureInformation signature (final String name ,
417425 final String ... paramTypes )
418426 {
419- final List <Callable .Param > params = new ArrayList <>();
427+ final List <String > params = params (paramTypes );
428+ final SignatureInformation s = new SignatureInformation (name + "(" + String
429+ .join (", " , params ) + ") -> java.lang.Object" );
430+ s .setParameters (params .stream ().map (ParameterInformation ::new ).collect (
431+ Collectors .toList ()));
432+ return s ;
433+ }
434+
435+ /** E.g. {@code int p0}, {@code float p1}. */
436+ private static List <String > params (final String ... paramTypes ) {
437+ final List <String > out = new ArrayList <>();
420438 for (int i = 0 ; i < paramTypes .length ; i ++) {
421- params .add (new Callable . Param ( " p" + i , paramTypes [ i ]) );
439+ out .add (paramTypes [ i ] + " p" + i );
422440 }
423- return new Callable (name , params , "java.lang.Object" ).kind (
424- CompletionItemKind .Method );
441+ return out ;
425442 }
426443
427444 /** "zeros", replacing what follows the dot, up to the end of the text. */
0 commit comments