Skip to content

Commit 4bcc564

Browse files
author
Aleksandr Andrienko
authored
CHE-5156: Fix ability start new debug session after disconnect from previous session. (eclipse-che#5167)
Signed-off-by: Aleksandr Andrienko <aandrienko@codenvy.com>
1 parent b97c4e2 commit 4bcc564

6 files changed

Lines changed: 78 additions & 50 deletions

File tree

  • plugins
    • plugin-debugger/che-plugin-debugger-ide/src
    • plugin-gdb/che-plugin-gdb-ide/src/main/java/org/eclipse/che/plugin/gdb/ide
    • plugin-java-debugger/che-plugin-java-debugger-ide/src/main/java/org/eclipse/che/plugin/jdb/ide/debug
    • plugin-nodejs-debugger/che-plugin-nodejs-debugger-ide/src/main/java/org/eclipse/che/plugin/nodejsdbg/ide
    • plugin-zend-debugger/che-plugin-zend-debugger-ide/src/main/java/org/eclipse/che/plugin/zdb/ide

plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/plugin/debugger/ide/debug/AbstractDebugger.java

Lines changed: 53 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import com.google.gwt.user.client.rpc.AsyncCallback;
1515
import com.google.web.bindery.event.shared.EventBus;
1616

17+
import org.eclipse.che.api.core.jsonrpc.commons.RequestHandlerManager;
1718
import org.eclipse.che.api.core.jsonrpc.commons.RequestTransmitter;
1819
import org.eclipse.che.api.core.jsonrpc.commons.RequestHandlerConfigurator;
1920
import org.eclipse.che.api.debug.shared.dto.BreakpointDto;
@@ -106,6 +107,7 @@ public abstract class AbstractDebugger implements Debugger, DebuggerObservable {
106107
private final DebuggerManager debuggerManager;
107108
private final BreakpointManager breakpointManager;
108109
private final String debuggerType;
110+
private final RequestHandlerManager requestHandlerManager;
109111

110112
private DebugSessionDto debugSessionDto;
111113
private Location currentLocation;
@@ -121,7 +123,8 @@ public AbstractDebugger(DebuggerServiceClient service,
121123
DebuggerManager debuggerManager,
122124
NotificationManager notificationManager,
123125
BreakpointManager breakpointManager,
124-
String type) {
126+
String type,
127+
RequestHandlerManager requestHandlerManager) {
125128
this.service = service;
126129
this.transmitter = transmitter;
127130
this.configurator = configurator;
@@ -134,6 +137,7 @@ public AbstractDebugger(DebuggerServiceClient service,
134137
this.breakpointManager = breakpointManager;
135138
this.observers = new ArrayList<>();
136139
this.debuggerType = type;
140+
this.requestHandlerManager = requestHandlerManager;
137141

138142
restoreDebuggerState();
139143
addHandlers();
@@ -144,11 +148,7 @@ private void addHandlers() {
144148
eventBus.addHandler(WsAgentStateEvent.TYPE, new WsAgentStateHandler() {
145149
@Override
146150
public void onWsAgentStarted(WsAgentStateEvent event) {
147-
transmitter.newRequest()
148-
.endpointId(WS_AGENT_ENDPOINT)
149-
.methodName(EVENT_DEBUGGER_SUBSCRIBE)
150-
.noParams()
151-
.sendAndSkipResult();
151+
subscribeToDebuggerEvents();
152152

153153
if (!isConnected()) {
154154
return;
@@ -252,35 +252,49 @@ private void onBreakpointActivated(LocationDto locationDto) {
252252
}
253253

254254
private void startCheckingEvents() {
255-
configurator.newConfiguration()
256-
.methodName(EVENT_DEBUGGER_MESSAGE_SUSPEND)
257-
.paramsAsDto(SuspendEventDto.class)
258-
.noResult()
259-
.withBiConsumer((endpointId, event) -> {
260-
Log.debug(getClass(), "Received suspend message from endpoint: " + endpointId);
261-
onEventListReceived(event);
262-
});
263-
264-
configurator.newConfiguration()
265-
.methodName(EVENT_DEBUGGER_MESSAGE_DISCONNECT)
266-
.paramsAsDto(DisconnectEventDto.class)
267-
.noResult()
268-
.withBiConsumer((endpointId, event) -> {
269-
Log.debug(getClass(), "Received disconnect message from endpoint: " + endpointId);
270-
onEventListReceived(event);
271-
});
272-
273-
configurator.newConfiguration()
274-
.methodName(EVENT_DEBUGGER_MESSAGE_BREAKPOINT)
275-
.paramsAsDto(BreakpointActivatedEventDto.class)
276-
.noResult()
277-
.withBiConsumer((endpointId, event) -> {
278-
Log.debug(getClass(), "Received breakpoint activated message from endpoint: " + endpointId);
279-
onEventListReceived(event);
280-
});
281-
}
282-
283-
private void stopCheckingDebugEvents() {
255+
if (!requestHandlerManager.isRegistered(EVENT_DEBUGGER_MESSAGE_SUSPEND)) {
256+
configurator.newConfiguration()
257+
.methodName(EVENT_DEBUGGER_MESSAGE_SUSPEND)
258+
.paramsAsDto(SuspendEventDto.class)
259+
.noResult()
260+
.withBiConsumer((endpointId, event) -> {
261+
Log.debug(getClass(), "Received suspend message from endpoint: " + endpointId);
262+
onEventListReceived(event);
263+
});
264+
}
265+
266+
if (!requestHandlerManager.isRegistered(EVENT_DEBUGGER_MESSAGE_DISCONNECT)) {
267+
configurator.newConfiguration()
268+
.methodName(EVENT_DEBUGGER_MESSAGE_DISCONNECT)
269+
.paramsAsDto(DisconnectEventDto.class)
270+
.noResult()
271+
.withBiConsumer((endpointId, event) -> {
272+
Log.debug(getClass(), "Received disconnect message from endpoint: " + endpointId);
273+
onEventListReceived(event);
274+
});
275+
}
276+
277+
if (!requestHandlerManager.isRegistered(EVENT_DEBUGGER_MESSAGE_BREAKPOINT)) {
278+
configurator.newConfiguration()
279+
.methodName(EVENT_DEBUGGER_MESSAGE_BREAKPOINT)
280+
.paramsAsDto(BreakpointActivatedEventDto.class)
281+
.noResult()
282+
.withBiConsumer((endpointId, event) -> {
283+
Log.debug(getClass(), "Received breakpoint activated message from endpoint: " + endpointId);
284+
onEventListReceived(event);
285+
});
286+
}
287+
}
288+
289+
private void subscribeToDebuggerEvents() {
290+
transmitter.newRequest()
291+
.endpointId(WS_AGENT_ENDPOINT)
292+
.methodName(EVENT_DEBUGGER_SUBSCRIBE)
293+
.noParams()
294+
.sendAndSkipResult();
295+
}
296+
297+
private void unsubscribeFromDebuggerEvents() {
284298
transmitter.newRequest()
285299
.endpointId(WS_AGENT_ENDPOINT)
286300
.methodName(EVENT_DEBUGGER_UN_SUBSCRIBE)
@@ -399,7 +413,10 @@ public Promise<Void> connect(Map<String, String> connectionProperties) {
399413

400414
setDebugSession(debugSession);
401415
preserveDebuggerState();
416+
417+
subscribeToDebuggerEvents();
402418
startCheckingEvents();
419+
403420
startDebugger(debugSession);
404421

405422
return null;
@@ -444,7 +461,7 @@ protected void startDebugger(final DebugSessionDto debugSessionDto) {
444461

445462
@Override
446463
public void disconnect() {
447-
stopCheckingDebugEvents();
464+
unsubscribeFromDebuggerEvents();
448465

449466
Promise<Void> disconnect;
450467
if (isConnected()) {

plugins/plugin-debugger/che-plugin-debugger-ide/src/test/java/org/eclipse/che/plugin/debugger/ide/debug/DebuggerTest.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,10 @@
1515
import com.google.web.bindery.event.shared.EventBus;
1616

1717
import org.eclipse.che.api.core.jsonrpc.commons.RequestHandlerConfigurator;
18+
import org.eclipse.che.api.core.jsonrpc.commons.RequestHandlerManager;
1819
import org.eclipse.che.api.core.jsonrpc.commons.RequestTransmitter;
1920
import org.eclipse.che.api.core.jsonrpc.commons.reception.ConsumerConfiguratorOneToNone;
2021
import org.eclipse.che.api.core.jsonrpc.commons.reception.ResultConfiguratorFromOne;
21-
import org.eclipse.che.api.core.jsonrpc.commons.transmission.EndpointIdConfigurator;
22-
import org.eclipse.che.api.core.jsonrpc.commons.transmission.MethodNameConfigurator;
23-
import org.eclipse.che.api.core.jsonrpc.commons.transmission.ParamsConfigurator;
24-
import org.eclipse.che.api.core.jsonrpc.commons.transmission.SendConfiguratorFromNone;
25-
import org.eclipse.che.api.core.jsonrpc.commons.transmission.SendConfiguratorFromOne;
2622
import org.eclipse.che.api.debug.shared.dto.BreakpointDto;
2723
import org.eclipse.che.api.debug.shared.dto.DebugSessionDto;
2824
import org.eclipse.che.api.debug.shared.dto.LocationDto;
@@ -132,6 +128,8 @@ public class DebuggerTest extends BaseTest {
132128
private RequestTransmitter transmitter;
133129
@Mock
134130
private RequestHandlerConfigurator configurator;
131+
@Mock
132+
private RequestHandlerManager requestHandlerManager;
135133

136134
@Mock
137135
private Promise<Void> promiseVoid;
@@ -620,7 +618,8 @@ public TestDebugger(DebuggerServiceClient service,
620618
debuggerManager,
621619
notificationManager,
622620
breakpointManager,
623-
id);
621+
id,
622+
requestHandlerManager);
624623
}
625624

626625
@Override

plugins/plugin-gdb/che-plugin-gdb-ide/src/main/java/org/eclipse/che/plugin/gdb/ide/GdbDebugger.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import com.google.web.bindery.event.shared.EventBus;
1616

1717
import org.eclipse.che.api.core.jsonrpc.commons.RequestHandlerConfigurator;
18+
import org.eclipse.che.api.core.jsonrpc.commons.RequestHandlerManager;
1819
import org.eclipse.che.api.core.jsonrpc.commons.RequestTransmitter;
1920
import org.eclipse.che.api.debug.shared.model.Location;
2021
import org.eclipse.che.commons.annotation.Nullable;
@@ -64,7 +65,8 @@ public GdbDebugger(DebuggerServiceClient service,
6465
DebuggerManager debuggerManager,
6566
NotificationManager notificationManager,
6667
BreakpointManager breakpointManager,
67-
AppContext appContext) {
68+
AppContext appContext,
69+
RequestHandlerManager requestHandlerManager) {
6870

6971
super(service,
7072
transmitter,
@@ -76,7 +78,8 @@ public GdbDebugger(DebuggerServiceClient service,
7678
debuggerManager,
7779
notificationManager,
7880
breakpointManager,
79-
ID);
81+
ID,
82+
requestHandlerManager);
8083
this.locale = locale;
8184
this.appContext = appContext;
8285
}

plugins/plugin-java-debugger/che-plugin-java-debugger-ide/src/main/java/org/eclipse/che/plugin/jdb/ide/debug/JavaDebugger.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import com.google.web.bindery.event.shared.EventBus;
1515

1616
import org.eclipse.che.api.core.jsonrpc.commons.RequestHandlerConfigurator;
17+
import org.eclipse.che.api.core.jsonrpc.commons.RequestHandlerManager;
1718
import org.eclipse.che.api.core.jsonrpc.commons.RequestTransmitter;
1819
import org.eclipse.che.api.debug.shared.model.Location;
1920
import org.eclipse.che.ide.api.debug.BreakpointManager;
@@ -60,7 +61,8 @@ public JavaDebugger(DebuggerServiceClient service,
6061
DebuggerManager debuggerManager,
6162
NotificationManager notificationManager,
6263
FileTypeRegistry fileTypeRegistry,
63-
BreakpointManager breakpointManager) {
64+
BreakpointManager breakpointManager,
65+
RequestHandlerManager requestHandlerManager) {
6466
super(service,
6567
transmitter,
6668
configurator,
@@ -71,7 +73,8 @@ public JavaDebugger(DebuggerServiceClient service,
7173
debuggerManager,
7274
notificationManager,
7375
breakpointManager,
74-
ID);
76+
ID,
77+
requestHandlerManager);
7578
this.fqnResolverFactory = fqnResolverFactory;
7679
this.fileTypeRegistry = fileTypeRegistry;
7780
}

plugins/plugin-nodejs-debugger/che-plugin-nodejs-debugger-ide/src/main/java/org/eclipse/che/plugin/nodejsdbg/ide/NodeJsDebugger.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import com.google.web.bindery.event.shared.EventBus;
1515

1616
import org.eclipse.che.api.core.jsonrpc.commons.RequestHandlerConfigurator;
17+
import org.eclipse.che.api.core.jsonrpc.commons.RequestHandlerManager;
1718
import org.eclipse.che.api.core.jsonrpc.commons.RequestTransmitter;
1819
import org.eclipse.che.api.debug.shared.model.Location;
1920
import org.eclipse.che.ide.api.debug.BreakpointManager;
@@ -49,7 +50,8 @@ public NodeJsDebugger(DebuggerServiceClient service,
4950
BasicActiveFileHandler activeFileHandler,
5051
DebuggerManager debuggerManager,
5152
NotificationManager notificationManager,
52-
BreakpointManager breakpointManager) {
53+
BreakpointManager breakpointManager,
54+
RequestHandlerManager requestHandlerManager) {
5355

5456
super(service,
5557
transmitter,
@@ -61,7 +63,8 @@ public NodeJsDebugger(DebuggerServiceClient service,
6163
debuggerManager,
6264
notificationManager,
6365
breakpointManager,
64-
ID);
66+
ID,
67+
requestHandlerManager);
6568
}
6669

6770
@Override

plugins/plugin-zend-debugger/che-plugin-zend-debugger-ide/src/main/java/org/eclipse/che/plugin/zdb/ide/ZendDebugger.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import com.google.web.bindery.event.shared.EventBus;
1515

1616
import org.eclipse.che.api.core.jsonrpc.commons.RequestHandlerConfigurator;
17+
import org.eclipse.che.api.core.jsonrpc.commons.RequestHandlerManager;
1718
import org.eclipse.che.api.core.jsonrpc.commons.RequestTransmitter;
1819
import org.eclipse.che.api.debug.shared.model.Location;
1920
import org.eclipse.che.ide.api.debug.BreakpointManager;
@@ -50,7 +51,8 @@ public ZendDebugger(DebuggerServiceClient service,
5051
BasicActiveFileHandler activeFileHandler,
5152
NotificationManager notificationManager,
5253
DebuggerManager debuggerManager,
53-
BreakpointManager breakpointManager) {
54+
BreakpointManager breakpointManager,
55+
RequestHandlerManager requestHandlerManager) {
5456
super(service,
5557
transmitter,
5658
configurator,
@@ -61,7 +63,8 @@ public ZendDebugger(DebuggerServiceClient service,
6163
debuggerManager,
6264
notificationManager,
6365
breakpointManager,
64-
ID);
66+
ID,
67+
requestHandlerManager);
6568
}
6669

6770
@Override

0 commit comments

Comments
 (0)