Skip to content

Commit 8713e45

Browse files
committed
Distribute some notifications over all remote servers.
1 parent 7637abe commit 8713e45

4 files changed

Lines changed: 35 additions & 6 deletions

File tree

rascal-lsp/src/main/java/org/rascalmpl/vscode/lsp/LanguageServerRouter.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import java.util.concurrent.ExecutionException;
4949
import java.util.concurrent.ExecutorService;
5050
import java.util.concurrent.atomic.AtomicInteger;
51+
import java.util.stream.Stream;
5152
import org.apache.commons.lang3.tuple.Triple;
5253
import org.apache.logging.log4j.LogManager;
5354
import org.apache.logging.log4j.Logger;
@@ -128,6 +129,11 @@ public CompletableFuture<IBaseLanguageServerExtensions> languageByName(String la
128129
return service;
129130
}
130131

132+
@Override
133+
public Stream<CompletableFuture<IBaseLanguageServerExtensions>> allRoutes() {
134+
return languageServers.values().stream();
135+
}
136+
131137
@Override
132138
public CompletableFuture<IBaseLanguageServerExtensions> route(ISourceLocation file) {
133139
return route(extension(file));

rascal-lsp/src/main/java/org/rascalmpl/vscode/lsp/parametric/routing/RoutingTextDocumentService.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import java.util.concurrent.TimeUnit;
3434
import java.util.concurrent.TimeoutException;
3535
import java.util.stream.Collectors;
36+
import java.util.stream.Stream;
3637
import org.apache.logging.log4j.LogManager;
3738
import org.apache.logging.log4j.Logger;
3839
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
@@ -131,6 +132,13 @@ public void setServer(LanguageServerRouter server) {
131132
this.server = server;
132133
}
133134

135+
@Override
136+
public Stream<CompletableFuture<IBaseTextDocumentService>> allRoutes() {
137+
return availableServer()
138+
.allRoutes()
139+
.map(server -> server.thenApply(IBaseLanguageServerExtensions::getIBaseTextDocumentService));
140+
}
141+
134142
@Override
135143
public CompletableFuture<IBaseTextDocumentService> route(ISourceLocation loc) {
136144
return availableServer()
@@ -242,14 +250,12 @@ public void unregisterLanguage(LanguageParameter lang) {
242250

243251
@Override
244252
public void projectAdded(String name, ISourceLocation projectRoot) {
245-
// TODO Auto-generated method stub
246-
throw new UnsupportedOperationException("Unimplemented method 'projectAdded'");
253+
callAccept(allRoutes(), IBaseTextDocumentService::projectAdded, name, projectRoot);
247254
}
248255

249256
@Override
250257
public void projectRemoved(String name, ISourceLocation projectRoot) {
251-
// TODO Auto-generated method stub
252-
throw new UnsupportedOperationException("Unimplemented method 'projectRemoved'");
258+
callAccept(allRoutes(), IBaseTextDocumentService::projectRemoved, name, projectRoot);
253259
}
254260

255261
@Override
@@ -307,8 +313,8 @@ public void didDeleteFiles(DeleteFilesParams params) {
307313

308314
@Override
309315
public void cancelProgress(String progressId) {
310-
// TODO Auto-generated method stub
311-
throw new UnsupportedOperationException("Unimplemented method 'cancelProgress'");
316+
// Note: floating futures
317+
callAccept(allRoutes(), IBaseTextDocumentService::cancelProgress, progressId);
312318
}
313319

314320
@Override

rascal-lsp/src/main/java/org/rascalmpl/vscode/lsp/util/DocumentRouter.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
*/
2727
package org.rascalmpl.vscode.lsp.util;
2828

29+
import java.util.stream.Stream;
2930
import org.eclipse.lsp4j.TextDocumentIdentifier;
3031
import org.eclipse.lsp4j.TextDocumentItem;
3132
import org.eclipse.lsp4j.VersionedTextDocumentIdentifier;
@@ -58,4 +59,6 @@ default T route(TextDocumentIdentifier id) {
5859
return route(Locations.toLoc(id.getUri()));
5960
}
6061

62+
Stream<T> allRoutes();
63+
6164
}

rascal-lsp/src/main/java/org/rascalmpl/vscode/lsp/util/FutureCaller.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
import java.util.concurrent.CompletableFuture;
3030
import java.util.function.BiConsumer;
3131
import java.util.function.BiFunction;
32+
import java.util.stream.Stream;
33+
import org.apache.commons.lang3.function.TriConsumer;
3234

3335
/**
3436
* A helper interface to support calling functions on values in futures.
@@ -47,4 +49,16 @@ default <A, R> CompletableFuture<R> callApply(CompletableFuture<T> t, BiFunction
4749
default <A> CompletableFuture<Void> callAccept(CompletableFuture<T> t, BiConsumer<T, A> func, A arg) {
4850
return t.thenAccept(actualT -> func.accept(actualT, arg));
4951
}
52+
53+
default <A, B> CompletableFuture<Void> callAccept(CompletableFuture<T> t, TriConsumer<T, A, B> func, A arg1, B arg2) {
54+
return t.thenAccept(actualT -> func.accept(actualT, arg1, arg2));
55+
}
56+
57+
default <A> Stream<CompletableFuture<Void>> callAccept(Stream<CompletableFuture<T>> ts, BiConsumer<T, A> func, A arg) {
58+
return ts.map(t -> callAccept(t, func, arg));
59+
}
60+
61+
default <A, B> Stream<CompletableFuture<Void>> callAccept(Stream<CompletableFuture<T>> ts, TriConsumer<T, A, B> func, A arg1, B arg2) {
62+
return ts.map(t -> callAccept(t, func, arg1, arg2));
63+
}
5064
}

0 commit comments

Comments
 (0)