Skip to content

Commit 9f616f4

Browse files
committed
Add command dependency in DebugAdapter
1 parent 06a3072 commit 9f616f4

File tree

1 file changed

+22
-13
lines changed
  • com.microsoft.java.debug.core/src/main/java/com/microsoft/java/debug/core/adapter

1 file changed

+22
-13
lines changed

com.microsoft.java.debug.core/src/main/java/com/microsoft/java/debug/core/adapter/DebugAdapter.java

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@
1616
import java.util.List;
1717
import java.util.Map;
1818
import java.util.concurrent.CompletableFuture;
19+
import java.util.concurrent.atomic.AtomicInteger;
1920
import java.util.logging.Level;
2021
import java.util.logging.Logger;
22+
import java.util.stream.Collectors;
2123

2224
import com.microsoft.java.debug.core.Configuration;
2325
import com.microsoft.java.debug.core.adapter.handler.AttachRequestHandler;
@@ -67,17 +69,24 @@ public CompletableFuture<Messages.Response> dispatchRequest(Messages.Request req
6769

6870
Command command = Command.parse(request.command);
6971
List<Command> dependencies = getCommandDependencies(command);
72+
CompletableFuture<Object> aggregatedDependencyFuture = new CompletableFuture<>();
73+
if (dependencies.size() == 0) {
74+
aggregatedDependencyFuture.complete(null);
75+
} else {
76+
AtomicInteger unresolvedFutureCount = new AtomicInteger(dependencies.size());
77+
for (CompletableFuture<Messages.Response> result : getFutures(dependencies)) {
78+
result.whenComplete((res, err) -> {
79+
if (unresolvedFutureCount.decrementAndGet() == 0) {
80+
aggregatedDependencyFuture.complete(null);
81+
}
82+
});
83+
}
84+
}
7085

71-
getLastResults(dependencies)
72-
73-
CompletableFuture<Messages.Response> thisResponse = CompletableFuture
74-
.allOf(getLastResults(dependencies))
75-
.thenCompose((Void v) -> {
76-
return processRequest(request, response);
77-
});
86+
CompletableFuture<Messages.Response> thisFuture = aggregatedDependencyFuture.thenCompose(o -> processRequest(request, response));
87+
setFuture(command, thisFuture);
7888

79-
setLastResult(command, thisResponse);
80-
return thisResponse;
89+
return thisFuture;
8190
}
8291

8392
private CompletableFuture<Messages.Response> processRequest(Messages.Request request, Messages.Response response) {
@@ -149,15 +158,15 @@ private List<Command> getCommandDependencies(Command command) {
149158
return commandDependencies.computeIfAbsent(command, key -> new ArrayList());
150159
}
151160

152-
private CompletableFuture<Messages.Response> getLastResult(Command command) {
161+
private CompletableFuture<Messages.Response> getFuture(Command command) {
153162
return lastResponses.computeIfAbsent(command, key -> CompletableFuture.completedFuture(new Messages.Response()));
154163
}
155164

156-
private List<CompletableFuture<Messages.Response>> getLastResults(List<Command> commands) {
157-
return new ArrayList(commands.stream().map(cmd -> getLastResult(cmd)).toArray(CompletableFuture[]::new));
165+
private List<CompletableFuture<Messages.Response>> getFutures(List<Command> commands) {
166+
return commands.stream().map(cmd -> getFuture(cmd)).collect(Collectors.toList());
158167
}
159168

160-
private void setLastResult(Command command, CompletableFuture<Messages.Response> response) {
169+
private void setFuture(Command command, CompletableFuture<Messages.Response> response) {
161170
lastResponses.put(command, response);
162171
}
163172
}

0 commit comments

Comments
 (0)