Skip to content

Commit

Permalink
Использование отдельного экзекьютор сервиса для разгрузки асинхронног…
Browse files Browse the repository at this point in the history
…о обработчика запросов
  • Loading branch information
nixel2007 committed Jul 19, 2023
1 parent 2bf85d9 commit 07387ec
Show file tree
Hide file tree
Showing 3 changed files with 106 additions and 38 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@
import java.util.List;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

@Slf4j
@Component
Expand All @@ -85,6 +87,9 @@ public class BSLLanguageServer implements LanguageServer, ProtocolExtension {
private final ClientCapabilitiesHolder clientCapabilitiesHolder;
private final ServerContext context;
private final ServerInfo serverInfo;

private final ExecutorService executorService = Executors.newCachedThreadPool();

private boolean shutdownWasCalled;

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

setConfigurationRoot(params);
CompletableFuture.runAsync(context::populateContext);
CompletableFuture.runAsync(context::populateContext, executorService);

var capabilities = new ServerCapabilities();
capabilities.setTextDocumentSync(getTextDocumentSyncOptions());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,8 @@
import java.util.Collections;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

@Component
@RequiredArgsConstructor
Expand All @@ -123,14 +124,17 @@ public class BSLTextDocumentService implements TextDocumentService, ProtocolExte
private final RenameProvider renameProvider;
private final InlayHintProvider inlayHintProvider;

private final ExecutorService executorService = Executors.newCachedThreadPool();

@Override
public CompletableFuture<Hover> hover(HoverParams params) {
var documentContext = context.getDocument(params.getTextDocument().getUri());
if (documentContext == null) {
return CompletableFuture.completedFuture(null);
}
return CompletableFuture.supplyAsync(() ->
hoverProvider.getHover(documentContext, params).orElse(null)
return CompletableFuture.supplyAsync(
() -> hoverProvider.getHover(documentContext, params).orElse(null),
executorService
);
}

Expand All @@ -143,8 +147,9 @@ public CompletableFuture<Either<List<? extends Location>, List<? extends Locatio
return CompletableFuture.completedFuture(Either.forRight(Collections.emptyList()));
}

return CompletableFuture.supplyAsync(() ->
Either.forRight(definitionProvider.getDefinition(documentContext, params))
return CompletableFuture.supplyAsync(
() -> Either.forRight(definitionProvider.getDefinition(documentContext, params)),
executorService
);
}

Expand All @@ -155,7 +160,10 @@ public CompletableFuture<List<? extends Location>> references(ReferenceParams pa
return CompletableFuture.completedFuture(Collections.emptyList());
}

return CompletableFuture.supplyAsync(() -> referencesProvider.getReferences(documentContext, params));
return CompletableFuture.supplyAsync(
() -> referencesProvider.getReferences(documentContext, params),
executorService
);
}

@Override
Expand All @@ -167,10 +175,11 @@ public CompletableFuture<List<Either<SymbolInformation, DocumentSymbol>>> docume
return CompletableFuture.completedFuture(null);
}

return CompletableFuture.supplyAsync(() ->
documentSymbolProvider.getDocumentSymbols(documentContext).stream()
return CompletableFuture.supplyAsync(
() -> documentSymbolProvider.getDocumentSymbols(documentContext).stream()
.map(Either::<SymbolInformation, DocumentSymbol>forRight)
.collect(Collectors.toList())
.toList(),
executorService
);
}

Expand All @@ -181,7 +190,10 @@ public CompletableFuture<List<Either<Command, CodeAction>>> codeAction(CodeActio
return CompletableFuture.completedFuture(null);
}

return CompletableFuture.supplyAsync(() -> codeActionProvider.getCodeActions(params, documentContext));
return CompletableFuture.supplyAsync(
() -> codeActionProvider.getCodeActions(params, documentContext),
executorService
);
}

@Override
Expand All @@ -191,7 +203,10 @@ public CompletableFuture<List<? extends CodeLens>> codeLens(CodeLensParams param
return CompletableFuture.completedFuture(Collections.emptyList());
}

return CompletableFuture.supplyAsync(() -> codeLensProvider.getCodeLens(documentContext));
return CompletableFuture.supplyAsync(
() -> codeLensProvider.getCodeLens(documentContext),
executorService
);
}

@Override
Expand All @@ -201,7 +216,10 @@ public CompletableFuture<CodeLens> resolveCodeLens(CodeLens unresolved) {
if (documentContext == null) {
return CompletableFuture.completedFuture(unresolved);
}
return CompletableFuture.supplyAsync(() -> codeLensProvider.resolveCodeLens(documentContext, unresolved, data));
return CompletableFuture.supplyAsync(
() -> codeLensProvider.resolveCodeLens(documentContext, unresolved, data),
executorService
);
}

@Override
Expand All @@ -211,8 +229,10 @@ public CompletableFuture<List<? extends TextEdit>> formatting(DocumentFormatting
return CompletableFuture.completedFuture(null);
}

List<TextEdit> edits = formatProvider.getFormatting(params, documentContext);
return CompletableFuture.completedFuture(edits);
return CompletableFuture.supplyAsync(
() -> formatProvider.getFormatting(params, documentContext),
executorService
);
}

@Override
Expand All @@ -222,8 +242,10 @@ public CompletableFuture<List<? extends TextEdit>> rangeFormatting(DocumentRange
return CompletableFuture.completedFuture(null);
}

List<TextEdit> edits = formatProvider.getRangeFormatting(params, documentContext);
return CompletableFuture.completedFuture(edits);
return CompletableFuture.supplyAsync(
() -> formatProvider.getRangeFormatting(params, documentContext),
executorService
);
}

@Override
Expand All @@ -233,7 +255,10 @@ public CompletableFuture<List<FoldingRange>> foldingRange(FoldingRangeRequestPar
return CompletableFuture.completedFuture(null);
}

return CompletableFuture.supplyAsync(() -> foldingRangeProvider.getFoldingRange(documentContext));
return CompletableFuture.supplyAsync(
() -> foldingRangeProvider.getFoldingRange(documentContext),
executorService
);
}

@Override
Expand All @@ -244,13 +269,15 @@ public CompletableFuture<List<CallHierarchyItem>> prepareCallHierarchy(CallHiera
return CompletableFuture.completedFuture(null);
}

return CompletableFuture.supplyAsync(() -> {
List<CallHierarchyItem> callHierarchyItems = callHierarchyProvider.prepareCallHierarchy(documentContext, params);
if (callHierarchyItems.isEmpty()) {
return null;
}
return callHierarchyItems;
});
return CompletableFuture.supplyAsync(
() -> {
List<CallHierarchyItem> callHierarchyItems = callHierarchyProvider.prepareCallHierarchy(documentContext, params);
if (callHierarchyItems.isEmpty()) {
return null;
}
return callHierarchyItems;
},
executorService);
}

@Override
Expand All @@ -262,7 +289,10 @@ public CompletableFuture<List<CallHierarchyIncomingCall>> callHierarchyIncomingC
return CompletableFuture.completedFuture(Collections.emptyList());
}

return CompletableFuture.supplyAsync(() -> callHierarchyProvider.incomingCalls(documentContext, params));
return CompletableFuture.supplyAsync(
() -> callHierarchyProvider.incomingCalls(documentContext, params),
executorService
);
}

@Override
Expand All @@ -274,7 +304,10 @@ public CompletableFuture<List<CallHierarchyOutgoingCall>> callHierarchyOutgoingC
return CompletableFuture.completedFuture(Collections.emptyList());
}

return CompletableFuture.supplyAsync(() -> callHierarchyProvider.outgoingCalls(documentContext, params));
return CompletableFuture.supplyAsync(
() -> callHierarchyProvider.outgoingCalls(documentContext, params),
executorService
);
}

@Override
Expand All @@ -284,7 +317,10 @@ public CompletableFuture<List<SelectionRange>> selectionRange(SelectionRangePara
return CompletableFuture.completedFuture(Collections.emptyList());
}

return CompletableFuture.supplyAsync(() -> selectionRangeProvider.getSelectionRange(documentContext, params));
return CompletableFuture.supplyAsync(
() -> selectionRangeProvider.getSelectionRange(documentContext, params),
executorService
);
}

@Override
Expand All @@ -294,7 +330,10 @@ public CompletableFuture<List<ColorInformation>> documentColor(DocumentColorPara
return CompletableFuture.completedFuture(Collections.emptyList());
}

return CompletableFuture.supplyAsync(() -> colorProvider.getDocumentColor(documentContext));
return CompletableFuture.supplyAsync(
() -> colorProvider.getDocumentColor(documentContext),
executorService
);
}

@Override
Expand All @@ -304,7 +343,10 @@ public CompletableFuture<List<ColorPresentation>> colorPresentation(ColorPresent
return CompletableFuture.completedFuture(Collections.emptyList());
}

return CompletableFuture.supplyAsync(() -> colorProvider.getColorPresentation(documentContext, params));
return CompletableFuture.supplyAsync(
() -> colorProvider.getColorPresentation(documentContext, params),
executorService
);
}

@Override
Expand All @@ -314,7 +356,10 @@ public CompletableFuture<List<InlayHint>> inlayHint(InlayHintParams params) {
return CompletableFuture.completedFuture(Collections.emptyList());
}

return CompletableFuture.supplyAsync(() -> inlayHintProvider.getInlayHint(documentContext, params));
return CompletableFuture.supplyAsync(
() -> inlayHintProvider.getInlayHint(documentContext, params),
executorService
);
}

@Override
Expand Down Expand Up @@ -380,7 +425,10 @@ public CompletableFuture<List<DocumentLink>> documentLink(DocumentLinkParams par
return CompletableFuture.completedFuture(null);
}

return CompletableFuture.supplyAsync(() -> documentLinkProvider.getDocumentLinks(documentContext));
return CompletableFuture.supplyAsync(
() -> documentLinkProvider.getDocumentLinks(documentContext),
executorService
);
}

@Override
Expand All @@ -397,7 +445,7 @@ public CompletableFuture<Diagnostics> diagnostics(DiagnosticParams params) {
if (range != null) {
diagnostics = diagnostics.stream()
.filter(diagnostic -> Ranges.containsRange(range, diagnostic.getRange()))
.collect(Collectors.toList());
.toList();
}
return new Diagnostics(diagnostics, documentContext.getVersion());
});
Expand All @@ -410,8 +458,10 @@ public CompletableFuture<Either3<Range, PrepareRenameResult, PrepareRenameDefaul
return CompletableFuture.completedFuture(null);
}

return CompletableFuture.supplyAsync(() ->
Either3.forFirst(renameProvider.getPrepareRename(documentContext, params)));
return CompletableFuture.supplyAsync(
() -> Either3.forFirst(renameProvider.getPrepareRename(documentContext, params)),
executorService
);
}

@Override
Expand All @@ -421,7 +471,10 @@ public CompletableFuture<WorkspaceEdit> rename(RenameParams params) {
return CompletableFuture.completedFuture(null);
}

return CompletableFuture.supplyAsync(() -> renameProvider.getRename(documentContext, params));
return CompletableFuture.supplyAsync(
() -> renameProvider.getRename(documentContext, params),
executorService
);
}

public void reset() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

@Component
@RequiredArgsConstructor
Expand All @@ -48,9 +50,14 @@ public class BSLWorkspaceService implements WorkspaceService {
private final CommandProvider commandProvider;
private final SymbolProvider symbolProvider;

private final ExecutorService executorService = Executors.newCachedThreadPool();

@Override
public CompletableFuture<Either<List<? extends SymbolInformation>,List<? extends WorkspaceSymbol>>> symbol(WorkspaceSymbolParams params) {
return CompletableFuture.supplyAsync(() -> Either.forRight(symbolProvider.getSymbols(params)));
return CompletableFuture.supplyAsync(
() -> Either.forRight(symbolProvider.getSymbols(params)),
executorService
);
}

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

return CompletableFuture.supplyAsync(() -> commandProvider.executeCommand(arguments));
return CompletableFuture.supplyAsync(
() -> commandProvider.executeCommand(arguments),
executorService
);
}
}

0 comments on commit 07387ec

Please sign in to comment.