summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Fraser <george@fivetran.com>2019-01-04 23:53:59 -0800
committerGeorge Fraser <george@fivetran.com>2019-01-04 23:54:24 -0800
commit1465f556a064e5b8e1fc4154c2b4587ee04f0654 (patch)
tree0861ff2416e43695cce3592e91a808e253a2fce2
parenta60cfe8bd27bfea6128779e17457faac7e59e36b (diff)
downloadjava-language-server-1465f556a064e5b8e1fc4154c2b4587ee04f0654.zip
Send error responses
-rw-r--r--src/main/java/org/javacs/lsp/LSP.java26
-rw-r--r--src/main/java/org/javacs/lsp/ResponseError.java8
2 files changed, 24 insertions, 10 deletions
diff --git a/src/main/java/org/javacs/lsp/LSP.java b/src/main/java/org/javacs/lsp/LSP.java
index 4663e0c..a63b581 100644
--- a/src/main/java/org/javacs/lsp/LSP.java
+++ b/src/main/java/org/javacs/lsp/LSP.java
@@ -209,17 +209,23 @@ public class LSP {
LOG.info("Reading messages from queue...");
processMessages:
while (true) {
+ Message r;
try {
// Take a break every 1s to check if receive has been closed
- var r = pending.poll(1, TimeUnit.SECONDS);
- // If receive has been closed, exit
- if (r == endOfStream) {
- LOG.warning("Stream from client has been closed, exiting...");
- break processMessages;
- }
- // If poll(_) failed, loop again
- if (r == null) continue;
- // Otherwise, process the new message
+ r = pending.poll(1, TimeUnit.SECONDS);
+ } catch (Exception e) {
+ LOG.log(Level.SEVERE, e.getMessage(), e);
+ continue;
+ }
+ // If receive has been closed, exit
+ if (r == endOfStream) {
+ LOG.warning("Stream from client has been closed, exiting...");
+ break processMessages;
+ }
+ // If poll(_) failed, loop again
+ if (r == null) continue;
+ // Otherwise, process the new message
+ try {
switch (r.method) {
case "initialize":
{
@@ -415,7 +421,7 @@ public class LSP {
}
} catch (Exception e) {
LOG.log(Level.SEVERE, e.getMessage(), e);
- // TODO send failure response if r was a request
+ respond(send, r.id, new ResponseError(ErrorCodes.InternalError, e.getMessage(), null));
}
}
}
diff --git a/src/main/java/org/javacs/lsp/ResponseError.java b/src/main/java/org/javacs/lsp/ResponseError.java
index d6a19c8..2c30850 100644
--- a/src/main/java/org/javacs/lsp/ResponseError.java
+++ b/src/main/java/org/javacs/lsp/ResponseError.java
@@ -6,4 +6,12 @@ public class ResponseError {
public int code;
public String message;
public JsonElement data;
+
+ public ResponseError() {}
+
+ public ResponseError(int code, String message, JsonElement data) {
+ this.code = code;
+ this.message = message;
+ this.data = data;
+ }
}