diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/HotSwapManager.java b/java/debugger/impl/src/com/intellij/debugger/impl/HotSwapManager.java index b7cd3f9ef9a1..bf0569b4755b 100644 --- a/java/debugger/impl/src/com/intellij/debugger/impl/HotSwapManager.java +++ b/java/debugger/impl/src/com/intellij/debugger/impl/HotSwapManager.java @@ -155,6 +155,10 @@ public class HotSwapManager extends AbstractProjectComponent { } private void reloadClasses(DebuggerSession session, Map classesToReload, HotSwapProgress progress) { + if (progress.isCancelled()) { + session.setModifiedClassesScanRequired(true); + return; + } final long newSwapTime = System.currentTimeMillis(); new ReloadClassesWorker(session, progress).reloadClasses(classesToReload); setTimeStamp(session, newSwapTime); @@ -220,7 +224,13 @@ public class HotSwapManager extends AbstractProjectComponent { swapProgress.setTitle(DebuggerBundle.message("progress.hotswap.scanning.classes")); scanClassesCommand.run(); - return swapProgress.isCancelled() ? new HashMap>() : modifiedClasses; + if (swapProgress.isCancelled()) { + for (DebuggerSession session : sessions) { + session.setModifiedClassesScanRequired(true); + } + return new HashMap>(); + } + return modifiedClasses; } public static void reloadModifiedClasses(final Map> modifiedClasses, final HotSwapProgress reloadClassesProgress) { @@ -240,6 +250,10 @@ public class HotSwapManager extends AbstractProjectComponent { debuggerSession, modifiedClasses.get(debuggerSession), reloadClassesProgress ); } + + protected void commandCancelled() { + debuggerSession.setModifiedClassesScanRequired(true); + } }); } diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/MultiProcessCommand.java b/java/debugger/impl/src/com/intellij/debugger/impl/MultiProcessCommand.java index db146c9aabf6..9fe6b8c390ff 100644 --- a/java/debugger/impl/src/com/intellij/debugger/impl/MultiProcessCommand.java +++ b/java/debugger/impl/src/com/intellij/debugger/impl/MultiProcessCommand.java @@ -19,11 +19,11 @@ import com.intellij.debugger.engine.DebugProcessImpl; import com.intellij.debugger.engine.events.DebuggerCommandImpl; import com.intellij.openapi.util.Pair; -import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; public class MultiProcessCommand implements Runnable{ - private final List> myCommands = new ArrayList>(); + private final List> myCommands = new LinkedList>(); public void run() { while(true) { @@ -40,7 +40,10 @@ public class MultiProcessCommand implements Runnable{ public void cancel() { synchronized(myCommands) { - myCommands.clear(); + while (!myCommands.isEmpty()) { + Pair pair = myCommands.remove(0); + pair.getSecond().notifyCancelled(); + } } }