Skip to content

Commit 36604ca

Browse files
authored
Redefine HCR event. (#133)
1 parent 7f82f37 commit 36604ca

File tree

1 file changed

+35
-3
lines changed

1 file changed

+35
-3
lines changed

com.microsoft.java.debug.plugin/src/main/java/com/microsoft/java/debug/plugin/internal/JavaHotCodeReplaceProvider.java

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -248,15 +248,41 @@ private IResource getSourceFile(IJavaProject project, String qualifiedName, Stri
248248
}
249249
}
250250

251+
/**
252+
* Hot code replace event type.
253+
*/
254+
enum EventType {
255+
ERROR(-1),
256+
257+
WARNING(-2),
258+
259+
STARTING(1),
260+
261+
END(2);
262+
263+
private int value;
264+
265+
private EventType(int value) {
266+
this.value = value;
267+
}
268+
269+
public int getValue() {
270+
return this.value;
271+
}
272+
}
273+
251274
class HotCodeReplaceEvent extends DebugEvent {
252275

276+
public EventType eventType;
277+
253278
public String message;
254279

255280
/**
256281
* Constructor.
257282
*/
258-
public HotCodeReplaceEvent(String message) {
283+
public HotCodeReplaceEvent(EventType eventType, String message) {
259284
super("hotCodeReplace");
285+
this.eventType = eventType;
260286
this.message = message;
261287
}
262288
}
@@ -311,6 +337,9 @@ private void doHotCodeReplace(List<IResource> resourcesToReplace, List<String> q
311337
return;
312338
}
313339

340+
context.getProtocolServer()
341+
.sendEvent(new HotCodeReplaceEvent(EventType.STARTING, "Start hot code replacement procedure..."));
342+
314343
try {
315344
List<ThreadReference> poppedThreads = new ArrayList<>();
316345
boolean framesPopped = false;
@@ -329,7 +358,8 @@ private void doHotCodeReplace(List<IResource> resourcesToReplace, List<String> q
329358
}
330359

331360
if (containsObsoleteMethods()) {
332-
context.getProtocolServer().sendEvent(new HotCodeReplaceEvent("JVM contains obsolete methods"));
361+
context.getProtocolServer()
362+
.sendEvent(new HotCodeReplaceEvent(EventType.ERROR, "JVM contains obsolete methods"));
333363
}
334364

335365
if (currentDebugSession.getVM().canPopFrames() && framesPopped) {
@@ -339,6 +369,8 @@ private void doHotCodeReplace(List<IResource> resourcesToReplace, List<String> q
339369
}
340370
} catch (DebugException e) {
341371
logger.log(Level.SEVERE, "Failed to complete hot code replace: " + e.getMessage(), e);
372+
} finally {
373+
context.getProtocolServer().sendEvent(new HotCodeReplaceEvent(EventType.END, "Completed hot code replace"));
342374
}
343375

344376
threadFrameMap.clear();
@@ -592,7 +624,7 @@ private void redefineTypesJDK(List<IResource> resources, List<String> qualifiedN
592624
currentDebugSession.getVM().redefineClasses(typesToBytes);
593625
} catch (UnsupportedOperationException | NoClassDefFoundError | VerifyError | ClassFormatError
594626
| ClassCircularityError e) {
595-
context.getProtocolServer().sendEvent(new HotCodeReplaceEvent(e.getMessage()));
627+
context.getProtocolServer().sendEvent(new HotCodeReplaceEvent(EventType.ERROR, e.getMessage()));
596628
throw new DebugException("Failed to redefine classes: " + e.getMessage());
597629
}
598630
}

0 commit comments

Comments
 (0)