Skip to content

Commit

Permalink
Merge pull request #3105 from 1c-syntax/feature/async-executor-service
Browse files Browse the repository at this point in the history
Передача executor service во все сервисы
  • Loading branch information
nixel2007 authored Jul 21, 2023
2 parents ac41ee7 + 1521fdf commit 5796c10
Show file tree
Hide file tree
Showing 4 changed files with 110 additions and 39 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@
import org.eclipse.lsp4j.services.LanguageServer;
import org.eclipse.lsp4j.services.TextDocumentService;
import org.eclipse.lsp4j.services.WorkspaceService;
import org.springframework.scheduling.concurrent.CustomizableThreadFactory;
import org.springframework.stereotype.Component;

import java.io.File;
Expand All @@ -72,6 +73,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 +88,7 @@ public class BSLLanguageServer implements LanguageServer, ProtocolExtension {
private final ClientCapabilitiesHolder clientCapabilitiesHolder;
private final ServerContext context;
private final ServerInfo serverInfo;

private boolean shutdownWasCalled;

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

setConfigurationRoot(params);
CompletableFuture.runAsync(context::populateContext);
ExecutorService executorService = Executors.newCachedThreadPool(new CustomizableThreadFactory("populate-context-"));
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 @@ -93,13 +93,15 @@
import org.eclipse.lsp4j.jsonrpc.messages.Either;
import org.eclipse.lsp4j.jsonrpc.messages.Either3;
import org.eclipse.lsp4j.services.TextDocumentService;
import org.springframework.scheduling.concurrent.CustomizableThreadFactory;
import org.springframework.stereotype.Component;

import java.net.URI;
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 +125,17 @@ public class BSLTextDocumentService implements TextDocumentService, ProtocolExte
private final RenameProvider renameProvider;
private final InlayHintProvider inlayHintProvider;

private final ExecutorService executorService = Executors.newCachedThreadPool(new CustomizableThreadFactory("text-document-service-"));

@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 +148,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 +161,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 +176,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 +191,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 +204,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 +217,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 +230,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 +243,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 +256,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 +270,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 +290,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 +305,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 +318,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 +331,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 +344,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 +357,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 +426,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 +446,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 +459,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 +472,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 @@ -34,11 +34,14 @@
import org.eclipse.lsp4j.WorkspaceSymbolParams;
import org.eclipse.lsp4j.jsonrpc.messages.Either;
import org.eclipse.lsp4j.services.WorkspaceService;
import org.springframework.scheduling.concurrent.CustomizableThreadFactory;
import org.springframework.stereotype.Component;

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 +51,14 @@ public class BSLWorkspaceService implements WorkspaceService {
private final CommandProvider commandProvider;
private final SymbolProvider symbolProvider;

private final ExecutorService executorService = Executors.newCachedThreadPool(new CustomizableThreadFactory("workspace-service-"));

@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 +79,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
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import lombok.NoArgsConstructor;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.scheduling.concurrent.CustomizableThreadFactory;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
Expand All @@ -43,7 +44,7 @@ public class SentryAspect {

@PostConstruct
private void init() {
executorService = Executors.newCachedThreadPool();
executorService = Executors.newCachedThreadPool(new CustomizableThreadFactory("sentry-"));
}

@PreDestroy
Expand Down

0 comments on commit 5796c10

Please sign in to comment.