Skip to content

Commit 07387ec

Browse files
committed
Использование отдельного экзекьютор сервиса для разгрузки асинхронного обработчика запросов
1 parent 2bf85d9 commit 07387ec

File tree

3 files changed

+106
-38
lines changed

3 files changed

+106
-38
lines changed

src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@
7272
import java.util.List;
7373
import java.util.Optional;
7474
import java.util.concurrent.CompletableFuture;
75+
import java.util.concurrent.ExecutorService;
76+
import java.util.concurrent.Executors;
7577

7678
@Slf4j
7779
@Component
@@ -85,6 +87,9 @@ public class BSLLanguageServer implements LanguageServer, ProtocolExtension {
8587
private final ClientCapabilitiesHolder clientCapabilitiesHolder;
8688
private final ServerContext context;
8789
private final ServerInfo serverInfo;
90+
91+
private final ExecutorService executorService = Executors.newCachedThreadPool();
92+
8893
private boolean shutdownWasCalled;
8994

9095
@Override
@@ -93,7 +98,7 @@ public CompletableFuture<InitializeResult> initialize(InitializeParams params) {
9398
clientCapabilitiesHolder.setCapabilities(params.getCapabilities());
9499

95100
setConfigurationRoot(params);
96-
CompletableFuture.runAsync(context::populateContext);
101+
CompletableFuture.runAsync(context::populateContext, executorService);
97102

98103
var capabilities = new ServerCapabilities();
99104
capabilities.setTextDocumentSync(getTextDocumentSyncOptions());

src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java

Lines changed: 88 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,8 @@
9999
import java.util.Collections;
100100
import java.util.List;
101101
import 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() {

src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLWorkspaceService.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@
3939
import java.lang.reflect.InvocationTargetException;
4040
import java.util.List;
4141
import java.util.concurrent.CompletableFuture;
42+
import java.util.concurrent.ExecutorService;
43+
import java.util.concurrent.Executors;
4244

4345
@Component
4446
@RequiredArgsConstructor
@@ -48,9 +50,14 @@ public class BSLWorkspaceService implements WorkspaceService {
4850
private final CommandProvider commandProvider;
4951
private final SymbolProvider symbolProvider;
5052

53+
private final ExecutorService executorService = Executors.newCachedThreadPool();
54+
5155
@Override
5256
public CompletableFuture<Either<List<? extends SymbolInformation>,List<? extends WorkspaceSymbol>>> symbol(WorkspaceSymbolParams params) {
53-
return CompletableFuture.supplyAsync(() -> Either.forRight(symbolProvider.getSymbols(params)));
57+
return CompletableFuture.supplyAsync(
58+
() -> Either.forRight(symbolProvider.getSymbols(params)),
59+
executorService
60+
);
5461
}
5562

5663
@Override
@@ -71,6 +78,9 @@ public void didChangeWatchedFiles(DidChangeWatchedFilesParams params) {
7178
public CompletableFuture<Object> executeCommand(ExecuteCommandParams params) {
7279
var arguments = commandProvider.extractArguments(params);
7380

74-
return CompletableFuture.supplyAsync(() -> commandProvider.executeCommand(arguments));
81+
return CompletableFuture.supplyAsync(
82+
() -> commandProvider.executeCommand(arguments),
83+
executorService
84+
);
7585
}
7686
}

0 commit comments

Comments
 (0)