Skip to content

Commit 0b07da4

Browse files
Fix closing bug
1 parent 5486d6f commit 0b07da4

File tree

4 files changed

+26
-13
lines changed

4 files changed

+26
-13
lines changed

org.eclipse.lsp4j.jsonrpc/src/main/java/org/eclipse/lsp4j/jsonrpc/MessageProducer.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111
******************************************************************************/
1212
package org.eclipse.lsp4j.jsonrpc;
1313

14-
public interface MessageProducer {
14+
import java.io.Closeable;
15+
16+
public interface MessageProducer extends Closeable {
1517

1618
/**
1719
* Listen to a message source and forward all messages to the given consumer. Typically this method

org.eclipse.lsp4j.jsonrpc/src/main/java/org/eclipse/lsp4j/jsonrpc/json/ConcurrentMessageProcessor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public boolean isDone() {
5252
public boolean cancel(boolean mayInterruptIfRunning) {
5353
if (mayInterruptIfRunning && messageProducer instanceof Closeable) {
5454
try {
55-
((Closeable) messageProducer).close();
55+
messageProducer.close();
5656
} catch (IOException e) {
5757
throw new RuntimeException(e);
5858
}

org.eclipse.lsp4j.jsonrpc/src/main/java/org/eclipse/lsp4j/jsonrpc/json/StreamMessageProducer.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
/**
3232
* A message producer that reads from an input stream and parses messages from JSON.
3333
*/
34-
public class StreamMessageProducer implements MessageProducer, Closeable, MessageConstants {
34+
public class StreamMessageProducer implements MessageProducer, MessageConstants {
3535

3636
private static final Logger LOG = Logger.getLogger(StreamMessageProducer.class.getName());
3737

@@ -204,8 +204,9 @@ protected boolean handleMessage(InputStream input, Headers headers) {
204204
}
205205

206206
@Override
207-
public void close() {
207+
public void close() throws IOException {
208208
keepRunning = false;
209+
input.close();
209210
}
210211

211212
}

org.eclipse.lsp4j.jsonrpc/src/test/java/org/eclipse/lsp4j/jsonrpc/test/json/MessageProducerTest.java

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,9 @@ public int read() throws IOException {
6969
MessageJsonHandler jsonHandler = new MessageJsonHandler(Collections.emptyMap());
7070
try (StreamMessageProducer messageProducer = new StreamMessageProducer(input, jsonHandler)) {
7171
messageProducer.listen(message -> {});
72-
}
72+
}catch (IOException e) {
73+
throw new IllegalStateException(e);
74+
}
7375
}).get(TIMEOUT, TimeUnit.MILLISECONDS);
7476
}
7577

@@ -85,7 +87,9 @@ public int read() throws IOException {
8587
MessageJsonHandler jsonHandler = new MessageJsonHandler(Collections.emptyMap());
8688
try (StreamMessageProducer messageProducer = new StreamMessageProducer(input, jsonHandler)) {
8789
messageProducer.listen(message -> {});
88-
}
90+
}catch (IOException e) {
91+
throw new IllegalStateException(e);
92+
}
8993
}).get(TIMEOUT, TimeUnit.MILLISECONDS);
9094
}
9195

@@ -101,7 +105,9 @@ public int read() throws IOException {
101105
MessageJsonHandler jsonHandler = new MessageJsonHandler(Collections.emptyMap());
102106
try (StreamMessageProducer messageProducer = new StreamMessageProducer(input, jsonHandler)) {
103107
messageProducer.listen(message -> {});
104-
}
108+
}catch (IOException e) {
109+
throw new IllegalStateException(e);
110+
}
105111
}).get(TIMEOUT, TimeUnit.MILLISECONDS);
106112
}
107113

@@ -118,7 +124,9 @@ public int read() throws IOException {
118124
MessageJsonHandler jsonHandler = new MessageJsonHandler(Collections.emptyMap());
119125
try (StreamMessageProducer messageProducer = new StreamMessageProducer(input, jsonHandler)) {
120126
messageProducer.listen(message -> {});
121-
}
127+
}catch (IOException e) {
128+
throw new IllegalStateException(e);
129+
}
122130
}).get(TIMEOUT, TimeUnit.MILLISECONDS);
123131
} catch (ExecutionException e) {
124132
throw e.getCause();
@@ -149,11 +157,13 @@ protected void fireError(Throwable error) {
149157
}
150158

151159
var jsonHandler = new MessageJsonHandler(Collections.emptyMap());
152-
try (var producer = new TestProducer( new ByteArrayInputStream(inputStr.getBytes()), jsonHandler)) {
153-
var received = new ArrayList<>();
154-
producer.listen(received::add);
155-
assertEquals("Both messages should be delivered", 2, received.size());
156-
}
160+
try (var producer = new TestProducer(new ByteArrayInputStream(inputStr.getBytes()), jsonHandler)) {
161+
var received = new ArrayList<>();
162+
producer.listen(received::add);
163+
assertEquals("Both messages should be delivered", 2, received.size());
164+
} catch (IOException e) {
165+
throw new IllegalStateException(e);
166+
}
157167
}).get(TIMEOUT, TimeUnit.MILLISECONDS);
158168
}
159169

0 commit comments

Comments
 (0)