Skip to content

Commit 5796c10

Browse files
authored
Merge pull request #3105 from 1c-syntax/feature/async-executor-service
Передача executor service во все сервисы
2 parents ac41ee7 + 1521fdf commit 5796c10

File tree

4 files changed

+110
-39
lines changed

4 files changed

+110
-39
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
@@ -62,6 +62,7 @@
6262
import org.eclipse.lsp4j.services.LanguageServer;
6363
import org.eclipse.lsp4j.services.TextDocumentService;
6464
import org.eclipse.lsp4j.services.WorkspaceService;
65+
import org.springframework.scheduling.concurrent.CustomizableThreadFactory;
6566
import org.springframework.stereotype.Component;
6667

6768
import java.io.File;
@@ -72,6 +73,8 @@
7273
import java.util.List;
7374
import java.util.Optional;
7475
import java.util.concurrent.CompletableFuture;
76+
import java.util.concurrent.ExecutorService;
77+
import java.util.concurrent.Executors;
7578

7679
@Slf4j
7780
@Component
@@ -85,6 +88,7 @@ public class BSLLanguageServer implements LanguageServer, ProtocolExtension {
8588
private final ClientCapabilitiesHolder clientCapabilitiesHolder;
8689
private final ServerContext context;
8790
private final ServerInfo serverInfo;
91+
8892
private boolean shutdownWasCalled;
8993

9094
@Override
@@ -93,7 +97,8 @@ public CompletableFuture<InitializeResult> initialize(InitializeParams params) {
9397
clientCapabilitiesHolder.setCapabilities(params.getCapabilities());
9498

9599
setConfigurationRoot(params);
96-
CompletableFuture.runAsync(context::populateContext);
100+
ExecutorService executorService = Executors.newCachedThreadPool(new CustomizableThreadFactory("populate-context-"));
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: 89 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -93,13 +93,15 @@
9393
import org.eclipse.lsp4j.jsonrpc.messages.Either;
9494
import org.eclipse.lsp4j.jsonrpc.messages.Either3;
9595
import org.eclipse.lsp4j.services.TextDocumentService;
96+
import org.springframework.scheduling.concurrent.CustomizableThreadFactory;
9697
import org.springframework.stereotype.Component;
9798

9899
import java.net.URI;
99100
import java.util.Collections;
100101
import java.util.List;
101102
import java.util.concurrent.CompletableFuture;
102-
import java.util.stream.Collectors;
103+
import java.util.concurrent.ExecutorService;
104+
import java.util.concurrent.Executors;
103105

104106
@Component
105107
@RequiredArgsConstructor
@@ -123,14 +125,17 @@ public class BSLTextDocumentService implements TextDocumentService, ProtocolExte
123125
private final RenameProvider renameProvider;
124126
private final InlayHintProvider inlayHintProvider;
125127

128+
private final ExecutorService executorService = Executors.newCachedThreadPool(new CustomizableThreadFactory("text-document-service-"));
129+
126130
@Override
127131
public CompletableFuture<Hover> hover(HoverParams params) {
128132
var documentContext = context.getDocument(params.getTextDocument().getUri());
129133
if (documentContext == null) {
130134
return CompletableFuture.completedFuture(null);
131135
}
132-
return CompletableFuture.supplyAsync(() ->
133-
hoverProvider.getHover(documentContext, params).orElse(null)
136+
return CompletableFuture.supplyAsync(
137+
() -> hoverProvider.getHover(documentContext, params).orElse(null),
138+
executorService
134139
);
135140
}
136141

@@ -143,8 +148,9 @@ public CompletableFuture<Either<List<? extends Location>, List<? extends Locatio
143148
return CompletableFuture.completedFuture(Either.forRight(Collections.emptyList()));
144149
}
145150

146-
return CompletableFuture.supplyAsync(() ->
147-
Either.forRight(definitionProvider.getDefinition(documentContext, params))
151+
return CompletableFuture.supplyAsync(
152+
() -> Either.forRight(definitionProvider.getDefinition(documentContext, params)),
153+
executorService
148154
);
149155
}
150156

@@ -155,7 +161,10 @@ public CompletableFuture<List<? extends Location>> references(ReferenceParams pa
155161
return CompletableFuture.completedFuture(Collections.emptyList());
156162
}
157163

158-
return CompletableFuture.supplyAsync(() -> referencesProvider.getReferences(documentContext, params));
164+
return CompletableFuture.supplyAsync(
165+
() -> referencesProvider.getReferences(documentContext, params),
166+
executorService
167+
);
159168
}
160169

161170
@Override
@@ -167,10 +176,11 @@ public CompletableFuture<List<Either<SymbolInformation, DocumentSymbol>>> docume
167176
return CompletableFuture.completedFuture(null);
168177
}
169178

170-
return CompletableFuture.supplyAsync(() ->
171-
documentSymbolProvider.getDocumentSymbols(documentContext).stream()
179+
return CompletableFuture.supplyAsync(
180+
() -> documentSymbolProvider.getDocumentSymbols(documentContext).stream()
172181
.map(Either::<SymbolInformation, DocumentSymbol>forRight)
173-
.collect(Collectors.toList())
182+
.toList(),
183+
executorService
174184
);
175185
}
176186

@@ -181,7 +191,10 @@ public CompletableFuture<List<Either<Command, CodeAction>>> codeAction(CodeActio
181191
return CompletableFuture.completedFuture(null);
182192
}
183193

184-
return CompletableFuture.supplyAsync(() -> codeActionProvider.getCodeActions(params, documentContext));
194+
return CompletableFuture.supplyAsync(
195+
() -> codeActionProvider.getCodeActions(params, documentContext),
196+
executorService
197+
);
185198
}
186199

187200
@Override
@@ -191,7 +204,10 @@ public CompletableFuture<List<? extends CodeLens>> codeLens(CodeLensParams param
191204
return CompletableFuture.completedFuture(Collections.emptyList());
192205
}
193206

194-
return CompletableFuture.supplyAsync(() -> codeLensProvider.getCodeLens(documentContext));
207+
return CompletableFuture.supplyAsync(
208+
() -> codeLensProvider.getCodeLens(documentContext),
209+
executorService
210+
);
195211
}
196212

197213
@Override
@@ -201,7 +217,10 @@ public CompletableFuture<CodeLens> resolveCodeLens(CodeLens unresolved) {
201217
if (documentContext == null) {
202218
return CompletableFuture.completedFuture(unresolved);
203219
}
204-
return CompletableFuture.supplyAsync(() -> codeLensProvider.resolveCodeLens(documentContext, unresolved, data));
220+
return CompletableFuture.supplyAsync(
221+
() -> codeLensProvider.resolveCodeLens(documentContext, unresolved, data),
222+
executorService
223+
);
205224
}
206225

207226
@Override
@@ -211,8 +230,10 @@ public CompletableFuture<List<? extends TextEdit>> formatting(DocumentFormatting
211230
return CompletableFuture.completedFuture(null);
212231
}
213232

214-
List<TextEdit> edits = formatProvider.getFormatting(params, documentContext);
215-
return CompletableFuture.completedFuture(edits);
233+
return CompletableFuture.supplyAsync(
234+
() -> formatProvider.getFormatting(params, documentContext),
235+
executorService
236+
);
216237
}
217238

218239
@Override
@@ -222,8 +243,10 @@ public CompletableFuture<List<? extends TextEdit>> rangeFormatting(DocumentRange
222243
return CompletableFuture.completedFuture(null);
223244
}
224245

225-
List<TextEdit> edits = formatProvider.getRangeFormatting(params, documentContext);
226-
return CompletableFuture.completedFuture(edits);
246+
return CompletableFuture.supplyAsync(
247+
() -> formatProvider.getRangeFormatting(params, documentContext),
248+
executorService
249+
);
227250
}
228251

229252
@Override
@@ -233,7 +256,10 @@ public CompletableFuture<List<FoldingRange>> foldingRange(FoldingRangeRequestPar
233256
return CompletableFuture.completedFuture(null);
234257
}
235258

236-
return CompletableFuture.supplyAsync(() -> foldingRangeProvider.getFoldingRange(documentContext));
259+
return CompletableFuture.supplyAsync(
260+
() -> foldingRangeProvider.getFoldingRange(documentContext),
261+
executorService
262+
);
237263
}
238264

239265
@Override
@@ -244,13 +270,15 @@ public CompletableFuture<List<CallHierarchyItem>> prepareCallHierarchy(CallHiera
244270
return CompletableFuture.completedFuture(null);
245271
}
246272

247-
return CompletableFuture.supplyAsync(() -> {
248-
List<CallHierarchyItem> callHierarchyItems = callHierarchyProvider.prepareCallHierarchy(documentContext, params);
249-
if (callHierarchyItems.isEmpty()) {
250-
return null;
251-
}
252-
return callHierarchyItems;
253-
});
273+
return CompletableFuture.supplyAsync(
274+
() -> {
275+
List<CallHierarchyItem> callHierarchyItems = callHierarchyProvider.prepareCallHierarchy(documentContext, params);
276+
if (callHierarchyItems.isEmpty()) {
277+
return null;
278+
}
279+
return callHierarchyItems;
280+
},
281+
executorService);
254282
}
255283

256284
@Override
@@ -262,7 +290,10 @@ public CompletableFuture<List<CallHierarchyIncomingCall>> callHierarchyIncomingC
262290
return CompletableFuture.completedFuture(Collections.emptyList());
263291
}
264292

265-
return CompletableFuture.supplyAsync(() -> callHierarchyProvider.incomingCalls(documentContext, params));
293+
return CompletableFuture.supplyAsync(
294+
() -> callHierarchyProvider.incomingCalls(documentContext, params),
295+
executorService
296+
);
266297
}
267298

268299
@Override
@@ -274,7 +305,10 @@ public CompletableFuture<List<CallHierarchyOutgoingCall>> callHierarchyOutgoingC
274305
return CompletableFuture.completedFuture(Collections.emptyList());
275306
}
276307

277-
return CompletableFuture.supplyAsync(() -> callHierarchyProvider.outgoingCalls(documentContext, params));
308+
return CompletableFuture.supplyAsync(
309+
() -> callHierarchyProvider.outgoingCalls(documentContext, params),
310+
executorService
311+
);
278312
}
279313

280314
@Override
@@ -284,7 +318,10 @@ public CompletableFuture<List<SelectionRange>> selectionRange(SelectionRangePara
284318
return CompletableFuture.completedFuture(Collections.emptyList());
285319
}
286320

287-
return CompletableFuture.supplyAsync(() -> selectionRangeProvider.getSelectionRange(documentContext, params));
321+
return CompletableFuture.supplyAsync(
322+
() -> selectionRangeProvider.getSelectionRange(documentContext, params),
323+
executorService
324+
);
288325
}
289326

290327
@Override
@@ -294,7 +331,10 @@ public CompletableFuture<List<ColorInformation>> documentColor(DocumentColorPara
294331
return CompletableFuture.completedFuture(Collections.emptyList());
295332
}
296333

297-
return CompletableFuture.supplyAsync(() -> colorProvider.getDocumentColor(documentContext));
334+
return CompletableFuture.supplyAsync(
335+
() -> colorProvider.getDocumentColor(documentContext),
336+
executorService
337+
);
298338
}
299339

300340
@Override
@@ -304,7 +344,10 @@ public CompletableFuture<List<ColorPresentation>> colorPresentation(ColorPresent
304344
return CompletableFuture.completedFuture(Collections.emptyList());
305345
}
306346

307-
return CompletableFuture.supplyAsync(() -> colorProvider.getColorPresentation(documentContext, params));
347+
return CompletableFuture.supplyAsync(
348+
() -> colorProvider.getColorPresentation(documentContext, params),
349+
executorService
350+
);
308351
}
309352

310353
@Override
@@ -314,7 +357,10 @@ public CompletableFuture<List<InlayHint>> inlayHint(InlayHintParams params) {
314357
return CompletableFuture.completedFuture(Collections.emptyList());
315358
}
316359

317-
return CompletableFuture.supplyAsync(() -> inlayHintProvider.getInlayHint(documentContext, params));
360+
return CompletableFuture.supplyAsync(
361+
() -> inlayHintProvider.getInlayHint(documentContext, params),
362+
executorService
363+
);
318364
}
319365

320366
@Override
@@ -380,7 +426,10 @@ public CompletableFuture<List<DocumentLink>> documentLink(DocumentLinkParams par
380426
return CompletableFuture.completedFuture(null);
381427
}
382428

383-
return CompletableFuture.supplyAsync(() -> documentLinkProvider.getDocumentLinks(documentContext));
429+
return CompletableFuture.supplyAsync(
430+
() -> documentLinkProvider.getDocumentLinks(documentContext),
431+
executorService
432+
);
384433
}
385434

386435
@Override
@@ -397,7 +446,7 @@ public CompletableFuture<Diagnostics> diagnostics(DiagnosticParams params) {
397446
if (range != null) {
398447
diagnostics = diagnostics.stream()
399448
.filter(diagnostic -> Ranges.containsRange(range, diagnostic.getRange()))
400-
.collect(Collectors.toList());
449+
.toList();
401450
}
402451
return new Diagnostics(diagnostics, documentContext.getVersion());
403452
});
@@ -410,8 +459,10 @@ public CompletableFuture<Either3<Range, PrepareRenameResult, PrepareRenameDefaul
410459
return CompletableFuture.completedFuture(null);
411460
}
412461

413-
return CompletableFuture.supplyAsync(() ->
414-
Either3.forFirst(renameProvider.getPrepareRename(documentContext, params)));
462+
return CompletableFuture.supplyAsync(
463+
() -> Either3.forFirst(renameProvider.getPrepareRename(documentContext, params)),
464+
executorService
465+
);
415466
}
416467

417468
@Override
@@ -421,7 +472,10 @@ public CompletableFuture<WorkspaceEdit> rename(RenameParams params) {
421472
return CompletableFuture.completedFuture(null);
422473
}
423474

424-
return CompletableFuture.supplyAsync(() -> renameProvider.getRename(documentContext, params));
475+
return CompletableFuture.supplyAsync(
476+
() -> renameProvider.getRename(documentContext, params),
477+
executorService
478+
);
425479
}
426480

427481
public void reset() {

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

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,14 @@
3434
import org.eclipse.lsp4j.WorkspaceSymbolParams;
3535
import org.eclipse.lsp4j.jsonrpc.messages.Either;
3636
import org.eclipse.lsp4j.services.WorkspaceService;
37+
import org.springframework.scheduling.concurrent.CustomizableThreadFactory;
3738
import org.springframework.stereotype.Component;
3839

3940
import java.lang.reflect.InvocationTargetException;
4041
import java.util.List;
4142
import java.util.concurrent.CompletableFuture;
43+
import java.util.concurrent.ExecutorService;
44+
import java.util.concurrent.Executors;
4245

4346
@Component
4447
@RequiredArgsConstructor
@@ -48,9 +51,14 @@ public class BSLWorkspaceService implements WorkspaceService {
4851
private final CommandProvider commandProvider;
4952
private final SymbolProvider symbolProvider;
5053

54+
private final ExecutorService executorService = Executors.newCachedThreadPool(new CustomizableThreadFactory("workspace-service-"));
55+
5156
@Override
5257
public CompletableFuture<Either<List<? extends SymbolInformation>,List<? extends WorkspaceSymbol>>> symbol(WorkspaceSymbolParams params) {
53-
return CompletableFuture.supplyAsync(() -> Either.forRight(symbolProvider.getSymbols(params)));
58+
return CompletableFuture.supplyAsync(
59+
() -> Either.forRight(symbolProvider.getSymbols(params)),
60+
executorService
61+
);
5462
}
5563

5664
@Override
@@ -71,6 +79,9 @@ public void didChangeWatchedFiles(DidChangeWatchedFilesParams params) {
7179
public CompletableFuture<Object> executeCommand(ExecuteCommandParams params) {
7280
var arguments = commandProvider.extractArguments(params);
7381

74-
return CompletableFuture.supplyAsync(() -> commandProvider.executeCommand(arguments));
82+
return CompletableFuture.supplyAsync(
83+
() -> commandProvider.executeCommand(arguments),
84+
executorService
85+
);
7586
}
7687
}

src/main/java/com/github/_1c_syntax/bsl/languageserver/aop/SentryAspect.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import lombok.NoArgsConstructor;
2828
import org.aspectj.lang.annotation.AfterThrowing;
2929
import org.aspectj.lang.annotation.Aspect;
30+
import org.springframework.scheduling.concurrent.CustomizableThreadFactory;
3031

3132
import java.util.concurrent.CompletableFuture;
3233
import java.util.concurrent.ExecutorService;
@@ -43,7 +44,7 @@ public class SentryAspect {
4344

4445
@PostConstruct
4546
private void init() {
46-
executorService = Executors.newCachedThreadPool();
47+
executorService = Executors.newCachedThreadPool(new CustomizableThreadFactory("sentry-"));
4748
}
4849

4950
@PreDestroy

0 commit comments

Comments
 (0)