Skip to content

Commit 94f8ce5

Browse files
authored
Disable unnecessary request handlers for noDebug mode. (#204)
* Disable unnecessary request handlers for noDebug mode. * Better naming. * Repleace boolean with a 2-element enum LaunchMode * Update LaunchMode.java
1 parent 4e6e62b commit 94f8ce5

File tree

6 files changed

+58
-7
lines changed

6 files changed

+58
-7
lines changed

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

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,16 @@ public class DebugAdapter implements IDebugAdapter {
4848
private static final Logger logger = Logger.getLogger(Configuration.LOGGER_NAME);
4949

5050
private IDebugAdapterContext debugContext = null;
51-
private Map<Command, List<IDebugRequestHandler>> requestHandlers = null;
51+
private Map<Command, List<IDebugRequestHandler>> requestHandlersForDebug = null;
52+
private Map<Command, List<IDebugRequestHandler>> requestHandlersForNoDebug = null;
5253

5354
/**
5455
* Constructor.
5556
*/
5657
public DebugAdapter(IProtocolServer server, IProviderContext providerContext) {
5758
this.debugContext = new DebugAdapterContext(server, providerContext);
58-
requestHandlers = new HashMap<>();
59+
requestHandlersForDebug = new HashMap<>();
60+
requestHandlersForNoDebug = new HashMap<>();
5961
initialize();
6062
}
6163

@@ -73,7 +75,8 @@ public CompletableFuture<Messages.Response> dispatchRequest(Messages.Request req
7375
// the operation is meaningless
7476
return CompletableFuture.completedFuture(response);
7577
}
76-
List<IDebugRequestHandler> handlers = requestHandlers.get(command);
78+
List<IDebugRequestHandler> handlers = this.debugContext.getLaunchMode() == LaunchMode.DEBUG
79+
? requestHandlersForDebug.get(command) : requestHandlersForNoDebug.get(command);
7780
if (handlers != null && !handlers.isEmpty()) {
7881
CompletableFuture<Messages.Response> future = CompletableFuture.completedFuture(response);
7982
for (IDebugRequestHandler handler : handlers) {
@@ -92,11 +95,11 @@ public CompletableFuture<Messages.Response> dispatchRequest(Messages.Request req
9295
private void initialize() {
9396
// Register request handlers.
9497
// When there are multiple handlers registered for the same request, follow the rule "first register, first execute".
95-
registerHandler(new InitializeRequestHandler());
96-
registerHandler(new LaunchRequestHandler());
98+
registerHandler(new InitializeRequestHandler(), true, true);
99+
registerHandler(new LaunchRequestHandler(), true, true);
97100
registerHandler(new AttachRequestHandler());
98-
registerHandler(new ConfigurationDoneRequestHandler());
99-
registerHandler(new DisconnectRequestHandler());
101+
registerHandler(new ConfigurationDoneRequestHandler(), true, true);
102+
registerHandler(new DisconnectRequestHandler(), true, true);
100103
registerHandler(new SetBreakpointsRequestHandler());
101104
registerHandler(new SetExceptionBreakpointsRequestHandler());
102105
registerHandler(new SourceRequestHandler());
@@ -113,6 +116,19 @@ private void initialize() {
113116
}
114117

115118
private void registerHandler(IDebugRequestHandler handler) {
119+
registerHandler(handler, true, false);
120+
}
121+
122+
private void registerHandler(IDebugRequestHandler handler, boolean forDebug, boolean forNoDebug) {
123+
if (forDebug) {
124+
registerHandler(requestHandlersForDebug, handler);
125+
}
126+
if (forNoDebug) {
127+
registerHandler(requestHandlersForNoDebug, handler);
128+
}
129+
}
130+
131+
private void registerHandler(Map<Command, List<IDebugRequestHandler>> requestHandlers, IDebugRequestHandler handler) {
116132
for (Command command : handler.getTargetCommands()) {
117133
List<IDebugRequestHandler> handlerList = requestHandlers.get(command);
118134
if (handlerList == null) {

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public class DebugAdapterContext implements IDebugAdapterContext {
3838
private Charset debuggeeEncoding;
3939
private transient boolean vmTerminated;
4040
private boolean isVmStopOnEntry = false;
41+
private LaunchMode launchMode = LaunchMode.DEBUG;
4142
private String mainClass;
4243
private StepFilters stepFilters;
4344

@@ -231,4 +232,14 @@ public StepFilters getStepFilters() {
231232
public IStackFrameManager getStackFrameManager() {
232233
return stackFrameManager;
233234
}
235+
236+
@Override
237+
public LaunchMode getLaunchMode() {
238+
return launchMode;
239+
}
240+
241+
@Override
242+
public void setLaunchMode(LaunchMode launchMode) {
243+
this.launchMode = launchMode;
244+
}
234245
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,4 +101,8 @@ public interface IDebugAdapterContext {
101101
StepFilters getStepFilters();
102102

103103
IStackFrameManager getStackFrameManager();
104+
105+
LaunchMode getLaunchMode();
106+
107+
void setLaunchMode(LaunchMode launchMode);
104108
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2018 Microsoft Corporation and others.
3+
* All rights reserved. This program and the accompanying materials
4+
* are made available under the terms of the Eclipse Public License v1.0
5+
* which accompanies this distribution, and is available at
6+
* http://www.eclipse.org/legal/epl-v10.html
7+
*
8+
* Contributors:
9+
* Microsoft Corporation - initial API and implementation
10+
*******************************************************************************/
11+
12+
package com.microsoft.java.debug.core.adapter;
13+
14+
public enum LaunchMode {
15+
DEBUG,
16+
NO_DEBUG
17+
}

com.microsoft.java.debug.core/src/main/java/com/microsoft/java/debug/core/adapter/handler/LaunchRequestHandler.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import com.microsoft.java.debug.core.adapter.IHotCodeReplaceProvider;
4747
import com.microsoft.java.debug.core.adapter.ISourceLookUpProvider;
4848
import com.microsoft.java.debug.core.adapter.IVirtualMachineManagerProvider;
49+
import com.microsoft.java.debug.core.adapter.LaunchMode;
4950
import com.microsoft.java.debug.core.adapter.ProcessConsole;
5051
import com.microsoft.java.debug.core.protocol.Events;
5152
import com.microsoft.java.debug.core.protocol.JsonUtils;
@@ -86,6 +87,7 @@ public CompletableFuture<Response> handle(Command command, Arguments arguments,
8687
context.setAttached(false);
8788
context.setSourcePaths(launchArguments.sourcePaths);
8889
context.setVmStopOnEntry(launchArguments.stopOnEntry);
90+
context.setLaunchMode(launchArguments.noDebug ? LaunchMode.NO_DEBUG : LaunchMode.DEBUG);
8991
context.setMainClass(parseMainClassWithoutModuleName(launchArguments.mainClass));
9092
context.setStepFilters(launchArguments.stepFilters);
9193

com.microsoft.java.debug.core/src/main/java/com/microsoft/java/debug/core/protocol/Requests.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ public static class LaunchArguments extends LaunchBaseArguments {
7070
public String cwd;
7171
public Map<String, String> env;
7272
public boolean stopOnEntry;
73+
public boolean noDebug = false;
7374
public CONSOLE console = CONSOLE.internalConsole;
7475
}
7576

0 commit comments

Comments
 (0)