9999import java .util .Collections ;
100100import java .util .List ;
101101import java .util .concurrent .CompletableFuture ;
102- import java .util .stream .Collectors ;
102+ import java .util .concurrent .ExecutorService ;
103+ import java .util .concurrent .Executors ;
103104
104105@ Component
105106@ RequiredArgsConstructor
@@ -123,14 +124,17 @@ public class BSLTextDocumentService implements TextDocumentService, ProtocolExte
123124 private final RenameProvider renameProvider ;
124125 private final InlayHintProvider inlayHintProvider ;
125126
127+ private final ExecutorService executorService = Executors .newCachedThreadPool ();
128+
126129 @ Override
127130 public CompletableFuture <Hover > hover (HoverParams params ) {
128131 var documentContext = context .getDocument (params .getTextDocument ().getUri ());
129132 if (documentContext == null ) {
130133 return CompletableFuture .completedFuture (null );
131134 }
132- return CompletableFuture .supplyAsync (() ->
133- hoverProvider .getHover (documentContext , params ).orElse (null )
135+ return CompletableFuture .supplyAsync (
136+ () -> hoverProvider .getHover (documentContext , params ).orElse (null ),
137+ executorService
134138 );
135139 }
136140
@@ -143,8 +147,9 @@ public CompletableFuture<Either<List<? extends Location>, List<? extends Locatio
143147 return CompletableFuture .completedFuture (Either .forRight (Collections .emptyList ()));
144148 }
145149
146- return CompletableFuture .supplyAsync (() ->
147- Either .forRight (definitionProvider .getDefinition (documentContext , params ))
150+ return CompletableFuture .supplyAsync (
151+ () -> Either .forRight (definitionProvider .getDefinition (documentContext , params )),
152+ executorService
148153 );
149154 }
150155
@@ -155,7 +160,10 @@ public CompletableFuture<List<? extends Location>> references(ReferenceParams pa
155160 return CompletableFuture .completedFuture (Collections .emptyList ());
156161 }
157162
158- return CompletableFuture .supplyAsync (() -> referencesProvider .getReferences (documentContext , params ));
163+ return CompletableFuture .supplyAsync (
164+ () -> referencesProvider .getReferences (documentContext , params ),
165+ executorService
166+ );
159167 }
160168
161169 @ Override
@@ -167,10 +175,11 @@ public CompletableFuture<List<Either<SymbolInformation, DocumentSymbol>>> docume
167175 return CompletableFuture .completedFuture (null );
168176 }
169177
170- return CompletableFuture .supplyAsync (() ->
171- documentSymbolProvider .getDocumentSymbols (documentContext ).stream ()
178+ return CompletableFuture .supplyAsync (
179+ () -> documentSymbolProvider .getDocumentSymbols (documentContext ).stream ()
172180 .map (Either ::<SymbolInformation , DocumentSymbol >forRight )
173- .collect (Collectors .toList ())
181+ .toList (),
182+ executorService
174183 );
175184 }
176185
@@ -181,7 +190,10 @@ public CompletableFuture<List<Either<Command, CodeAction>>> codeAction(CodeActio
181190 return CompletableFuture .completedFuture (null );
182191 }
183192
184- return CompletableFuture .supplyAsync (() -> codeActionProvider .getCodeActions (params , documentContext ));
193+ return CompletableFuture .supplyAsync (
194+ () -> codeActionProvider .getCodeActions (params , documentContext ),
195+ executorService
196+ );
185197 }
186198
187199 @ Override
@@ -191,7 +203,10 @@ public CompletableFuture<List<? extends CodeLens>> codeLens(CodeLensParams param
191203 return CompletableFuture .completedFuture (Collections .emptyList ());
192204 }
193205
194- return CompletableFuture .supplyAsync (() -> codeLensProvider .getCodeLens (documentContext ));
206+ return CompletableFuture .supplyAsync (
207+ () -> codeLensProvider .getCodeLens (documentContext ),
208+ executorService
209+ );
195210 }
196211
197212 @ Override
@@ -201,7 +216,10 @@ public CompletableFuture<CodeLens> resolveCodeLens(CodeLens unresolved) {
201216 if (documentContext == null ) {
202217 return CompletableFuture .completedFuture (unresolved );
203218 }
204- return CompletableFuture .supplyAsync (() -> codeLensProvider .resolveCodeLens (documentContext , unresolved , data ));
219+ return CompletableFuture .supplyAsync (
220+ () -> codeLensProvider .resolveCodeLens (documentContext , unresolved , data ),
221+ executorService
222+ );
205223 }
206224
207225 @ Override
@@ -211,8 +229,10 @@ public CompletableFuture<List<? extends TextEdit>> formatting(DocumentFormatting
211229 return CompletableFuture .completedFuture (null );
212230 }
213231
214- List <TextEdit > edits = formatProvider .getFormatting (params , documentContext );
215- return CompletableFuture .completedFuture (edits );
232+ return CompletableFuture .supplyAsync (
233+ () -> formatProvider .getFormatting (params , documentContext ),
234+ executorService
235+ );
216236 }
217237
218238 @ Override
@@ -222,8 +242,10 @@ public CompletableFuture<List<? extends TextEdit>> rangeFormatting(DocumentRange
222242 return CompletableFuture .completedFuture (null );
223243 }
224244
225- List <TextEdit > edits = formatProvider .getRangeFormatting (params , documentContext );
226- return CompletableFuture .completedFuture (edits );
245+ return CompletableFuture .supplyAsync (
246+ () -> formatProvider .getRangeFormatting (params , documentContext ),
247+ executorService
248+ );
227249 }
228250
229251 @ Override
@@ -233,7 +255,10 @@ public CompletableFuture<List<FoldingRange>> foldingRange(FoldingRangeRequestPar
233255 return CompletableFuture .completedFuture (null );
234256 }
235257
236- return CompletableFuture .supplyAsync (() -> foldingRangeProvider .getFoldingRange (documentContext ));
258+ return CompletableFuture .supplyAsync (
259+ () -> foldingRangeProvider .getFoldingRange (documentContext ),
260+ executorService
261+ );
237262 }
238263
239264 @ Override
@@ -244,13 +269,15 @@ public CompletableFuture<List<CallHierarchyItem>> prepareCallHierarchy(CallHiera
244269 return CompletableFuture .completedFuture (null );
245270 }
246271
247- return CompletableFuture .supplyAsync (() -> {
248- List <CallHierarchyItem > callHierarchyItems = callHierarchyProvider .prepareCallHierarchy (documentContext , params );
249- if (callHierarchyItems .isEmpty ()) {
250- return null ;
251- }
252- return callHierarchyItems ;
253- });
272+ return CompletableFuture .supplyAsync (
273+ () -> {
274+ List <CallHierarchyItem > callHierarchyItems = callHierarchyProvider .prepareCallHierarchy (documentContext , params );
275+ if (callHierarchyItems .isEmpty ()) {
276+ return null ;
277+ }
278+ return callHierarchyItems ;
279+ },
280+ executorService );
254281 }
255282
256283 @ Override
@@ -262,7 +289,10 @@ public CompletableFuture<List<CallHierarchyIncomingCall>> callHierarchyIncomingC
262289 return CompletableFuture .completedFuture (Collections .emptyList ());
263290 }
264291
265- return CompletableFuture .supplyAsync (() -> callHierarchyProvider .incomingCalls (documentContext , params ));
292+ return CompletableFuture .supplyAsync (
293+ () -> callHierarchyProvider .incomingCalls (documentContext , params ),
294+ executorService
295+ );
266296 }
267297
268298 @ Override
@@ -274,7 +304,10 @@ public CompletableFuture<List<CallHierarchyOutgoingCall>> callHierarchyOutgoingC
274304 return CompletableFuture .completedFuture (Collections .emptyList ());
275305 }
276306
277- return CompletableFuture .supplyAsync (() -> callHierarchyProvider .outgoingCalls (documentContext , params ));
307+ return CompletableFuture .supplyAsync (
308+ () -> callHierarchyProvider .outgoingCalls (documentContext , params ),
309+ executorService
310+ );
278311 }
279312
280313 @ Override
@@ -284,7 +317,10 @@ public CompletableFuture<List<SelectionRange>> selectionRange(SelectionRangePara
284317 return CompletableFuture .completedFuture (Collections .emptyList ());
285318 }
286319
287- return CompletableFuture .supplyAsync (() -> selectionRangeProvider .getSelectionRange (documentContext , params ));
320+ return CompletableFuture .supplyAsync (
321+ () -> selectionRangeProvider .getSelectionRange (documentContext , params ),
322+ executorService
323+ );
288324 }
289325
290326 @ Override
@@ -294,7 +330,10 @@ public CompletableFuture<List<ColorInformation>> documentColor(DocumentColorPara
294330 return CompletableFuture .completedFuture (Collections .emptyList ());
295331 }
296332
297- return CompletableFuture .supplyAsync (() -> colorProvider .getDocumentColor (documentContext ));
333+ return CompletableFuture .supplyAsync (
334+ () -> colorProvider .getDocumentColor (documentContext ),
335+ executorService
336+ );
298337 }
299338
300339 @ Override
@@ -304,7 +343,10 @@ public CompletableFuture<List<ColorPresentation>> colorPresentation(ColorPresent
304343 return CompletableFuture .completedFuture (Collections .emptyList ());
305344 }
306345
307- return CompletableFuture .supplyAsync (() -> colorProvider .getColorPresentation (documentContext , params ));
346+ return CompletableFuture .supplyAsync (
347+ () -> colorProvider .getColorPresentation (documentContext , params ),
348+ executorService
349+ );
308350 }
309351
310352 @ Override
@@ -314,7 +356,10 @@ public CompletableFuture<List<InlayHint>> inlayHint(InlayHintParams params) {
314356 return CompletableFuture .completedFuture (Collections .emptyList ());
315357 }
316358
317- return CompletableFuture .supplyAsync (() -> inlayHintProvider .getInlayHint (documentContext , params ));
359+ return CompletableFuture .supplyAsync (
360+ () -> inlayHintProvider .getInlayHint (documentContext , params ),
361+ executorService
362+ );
318363 }
319364
320365 @ Override
@@ -380,7 +425,10 @@ public CompletableFuture<List<DocumentLink>> documentLink(DocumentLinkParams par
380425 return CompletableFuture .completedFuture (null );
381426 }
382427
383- return CompletableFuture .supplyAsync (() -> documentLinkProvider .getDocumentLinks (documentContext ));
428+ return CompletableFuture .supplyAsync (
429+ () -> documentLinkProvider .getDocumentLinks (documentContext ),
430+ executorService
431+ );
384432 }
385433
386434 @ Override
@@ -397,7 +445,7 @@ public CompletableFuture<Diagnostics> diagnostics(DiagnosticParams params) {
397445 if (range != null ) {
398446 diagnostics = diagnostics .stream ()
399447 .filter (diagnostic -> Ranges .containsRange (range , diagnostic .getRange ()))
400- .collect ( Collectors . toList () );
448+ .toList ();
401449 }
402450 return new Diagnostics (diagnostics , documentContext .getVersion ());
403451 });
@@ -410,8 +458,10 @@ public CompletableFuture<Either3<Range, PrepareRenameResult, PrepareRenameDefaul
410458 return CompletableFuture .completedFuture (null );
411459 }
412460
413- return CompletableFuture .supplyAsync (() ->
414- Either3 .forFirst (renameProvider .getPrepareRename (documentContext , params )));
461+ return CompletableFuture .supplyAsync (
462+ () -> Either3 .forFirst (renameProvider .getPrepareRename (documentContext , params )),
463+ executorService
464+ );
415465 }
416466
417467 @ Override
@@ -421,7 +471,10 @@ public CompletableFuture<WorkspaceEdit> rename(RenameParams params) {
421471 return CompletableFuture .completedFuture (null );
422472 }
423473
424- return CompletableFuture .supplyAsync (() -> renameProvider .getRename (documentContext , params ));
474+ return CompletableFuture .supplyAsync (
475+ () -> renameProvider .getRename (documentContext , params ),
476+ executorService
477+ );
425478 }
426479
427480 public void reset () {
0 commit comments