summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGeorge Fraser <george@fivetran.com>2018-12-23 17:59:38 -0800
committerGeorge Fraser <george@fivetran.com>2018-12-23 17:59:38 -0800
commite4d014e9542b355292487f6dd5ad0ba912c8625f (patch)
treeb7963e64a3318acf94327d5589f6dbcf6df02ef2 /src
parent888fe5075feedaf427c66a06a68089b62672beed (diff)
downloadjava-language-server-e4d014e9542b355292487f6dd5ad0ba912c8625f.zip
Reorganize progress messages
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/javacs/JavaTextDocumentService.java93
1 files changed, 52 insertions, 41 deletions
diff --git a/src/main/java/org/javacs/JavaTextDocumentService.java b/src/main/java/org/javacs/JavaTextDocumentService.java
index 87c2d1b..ef6635a 100644
--- a/src/main/java/org/javacs/JavaTextDocumentService.java
+++ b/src/main/java/org/javacs/JavaTextDocumentService.java
@@ -381,12 +381,14 @@ class JavaTextDocumentService implements TextDocumentService {
return CompletableFuture.completedFuture(List.of(loc.get()));
}
- class ReportProgress implements ReportReferencesProgress {
+ class ReportProgress implements ReportReferencesProgress, AutoCloseable {
private final Function<Integer, String> scanMessage, checkMessage;
- ReportProgress(Function<Integer, String> scanMessage, Function<Integer, String> checkMessage) {
+ ReportProgress(
+ String startMessage, Function<Integer, String> scanMessage, Function<Integer, String> checkMessage) {
this.scanMessage = scanMessage;
this.checkMessage = checkMessage;
+ server.client().javaStartProgress(new JavaStartProgressParams(startMessage));
}
private int percent(int n, int d) {
@@ -414,6 +416,11 @@ class JavaTextDocumentService implements TextDocumentService {
server.client().javaReportProgress(new JavaReportProgressParams(message, increment));
}
}
+
+ @Override
+ public void close() {
+ server.client().javaEndProgress();
+ }
}
@Override
@@ -423,17 +430,18 @@ class JavaTextDocumentService implements TextDocumentService {
var line = position.getPosition().getLine() + 1;
var column = position.getPosition().getCharacter() + 1;
var result = new ArrayList<Location>();
- server.client().javaStartProgress(new JavaStartProgressParams("Find references"));
+ var fileName = Paths.get(uri).getFileName();
+ var startMessage = String.format("%s:%d", fileName, line);
Function<Integer, String> scanMessage =
nFiles -> String.format("Scan %,d files for potential references", nFiles);
Function<Integer, String> checkMessage = nPotential -> String.format("Check %,d files", nPotential);
- var progress = new ReportProgress(scanMessage, checkMessage);
- for (var r : server.compiler.references(uri, content, line, column, progress)) {
- var loc = location(r);
- if (loc.isPresent()) result.add(loc.get());
+ try (var progress = new ReportProgress(startMessage, scanMessage, checkMessage)) {
+ for (var r : server.compiler.references(uri, content, line, column, progress)) {
+ var loc = location(r);
+ if (loc.isPresent()) result.add(loc.get());
+ }
+ return CompletableFuture.completedFuture(result);
}
- server.client().javaEndProgress();
- return CompletableFuture.completedFuture(result);
}
@Override
@@ -490,42 +498,45 @@ class JavaTextDocumentService implements TextDocumentService {
private List<CodeLens> allReferences(URI uri) {
var content = contents(uri).content;
+ var fileName = Paths.get(uri).getFileName();
+ var startMessage = String.format("%s", fileName);
Function<Integer, String> scanMessage = nFiles -> String.format("Scan %,d files for imports", nFiles);
Function<Integer, String> checkMessage = nPotential -> String.format("Index %,d files", nPotential);
- var progress = new ReportProgress(scanMessage, checkMessage);
- // Organize by method
- var refs = server.compiler.referencesFile(uri, content, progress);
- var byId = new HashMap<String, List<Ref>>();
- for (var r : refs) {
- byId.computeIfAbsent(r.toEl, __ -> new ArrayList<>()).add(r);
- }
- // Convert into CodeLens messages
- var result = new ArrayList<CodeLens>();
- for (var kv : byId.entrySet()) {
- // Figure out command
- var id = kv.getKey();
- var rs = kv.getValue();
- // Figure out where to place command
- var r = rs.get(0);
- var pos = server.compiler.position(uri, content, r.toEl);
- if (!pos.isPresent()) {
- LOG.warning(String.format("No position for %s", r.toEl));
- continue;
+ try (var progress = new ReportProgress(startMessage, scanMessage, checkMessage)) {
+ // Organize by method
+ var refs = server.compiler.referencesFile(uri, content, progress);
+ var byId = new HashMap<String, List<Ref>>();
+ for (var r : refs) {
+ byId.computeIfAbsent(r.toEl, __ -> new ArrayList<>()).add(r);
}
- var range = asRange(pos.get());
- String message;
- if (rs.isEmpty()) message = "0 references";
- else if (rs.size() == 1) message = "1 reference";
- else message = String.format("%d references", rs.size());
- var command =
- new Command(
- message,
- "java.command.findReferences",
- List.of(uri, range.getStart().getLine(), range.getStart().getCharacter()));
- var lens = new CodeLens(range, command, null);
- result.add(lens);
+ // Convert into CodeLens messages
+ var result = new ArrayList<CodeLens>();
+ for (var kv : byId.entrySet()) {
+ // Figure out command
+ var id = kv.getKey();
+ var rs = kv.getValue();
+ // Figure out where to place command
+ var r = rs.get(0);
+ var pos = server.compiler.position(uri, content, r.toEl);
+ if (!pos.isPresent()) {
+ LOG.warning(String.format("No position for %s", r.toEl));
+ continue;
+ }
+ var range = asRange(pos.get());
+ String message;
+ if (rs.isEmpty()) message = "0 references";
+ else if (rs.size() == 1) message = "1 reference";
+ else message = String.format("%d references", rs.size());
+ var command =
+ new Command(
+ message,
+ "java.command.findReferences",
+ List.of(uri, range.getStart().getLine(), range.getStart().getCharacter()));
+ var lens = new CodeLens(range, command, null);
+ result.add(lens);
+ }
+ return result;
}
- return result;
}
@Override