@@ -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