diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessEvents.java b/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessEvents.java index 1a96a9cc51f2..185898e6fbec 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessEvents.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessEvents.java @@ -186,7 +186,7 @@ public class DebugProcessEvents extends DebugProcessImpl { // check if there is already one request with policy SUSPEND_ALL for (SuspendContextImpl context : getSuspendManager().getEventContexts()) { if (context.getSuspendPolicy() == EventRequest.SUSPEND_ALL) { - if (Registry.is("debugger.step.resumes.one.thread") && locatableEvent != null) { + if (isResumeOnlyCurrentThread() && locatableEvent != null) { // if step event is present - switch context getSuspendManager().resume(context); //((SuspendManagerImpl)getSuspendManager()).popContext(context); @@ -202,7 +202,7 @@ public class DebugProcessEvents extends DebugProcessImpl { SuspendContextImpl suspendContext = null; - if (Registry.is("debugger.step.resumes.one.thread") && locatableEvent != null) { + if (isResumeOnlyCurrentThread() && locatableEvent != null) { for (SuspendContextImpl context : getSuspendManager().getEventContexts()) { ThreadReferenceProxyImpl threadProxy = getVirtualMachineProxy().getThreadReferenceProxy(locatableEvent.thread()); if (context.getSuspendPolicy() == EventRequest.SUSPEND_ALL && diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java b/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java index 98dcbaf5c76d..f7612d2133e7 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java @@ -921,7 +921,7 @@ public abstract class DebugProcessImpl extends UserDataHolderBase implements Deb } private static int getInvokePolicy(SuspendContext suspendContext) { - if (suspendContext.getSuspendPolicy() == EventRequest.SUSPEND_EVENT_THREAD || Registry.is("debugger.step.resumes.one.thread")) { + if (suspendContext.getSuspendPolicy() == EventRequest.SUSPEND_EVENT_THREAD || isResumeOnlyCurrentThread()) { return ObjectReference.INVOKE_SINGLE_THREADED; } return 0; @@ -1696,11 +1696,11 @@ public abstract class DebugProcessImpl extends UserDataHolderBase implements Deb protected void resumeAction() { SuspendContextImpl context = getSuspendContext(); if (context != null && - (context.getSuspendPolicy() == EventRequest.SUSPEND_EVENT_THREAD || Registry.is("debugger.step.resumes.one.thread"))) { + (context.getSuspendPolicy() == EventRequest.SUSPEND_EVENT_THREAD || isResumeOnlyCurrentThread())) { myThreadBlockedMonitor.startWatching(myContextThread); } if (context != null - && Registry.is("debugger.step.resumes.one.thread") + && isResumeOnlyCurrentThread() && context.getSuspendPolicy() == EventRequest.SUSPEND_ALL && myContextThread != null) { getSuspendManager().resumeThread(context, myContextThread); @@ -2229,4 +2229,8 @@ public abstract class DebugProcessImpl extends UserDataHolderBase implements Deb public DebuggerSession getSession() { return mySession; } + + static boolean isResumeOnlyCurrentThread() { + return DebuggerSettings.getInstance().RESUME_ONLY_CURRENT_THREAD; + } } diff --git a/java/debugger/impl/src/com/intellij/debugger/settings/DebuggerSettings.java b/java/debugger/impl/src/com/intellij/debugger/settings/DebuggerSettings.java index 9edbb0440d71..23c51bf3eb97 100644 --- a/java/debugger/impl/src/com/intellij/debugger/settings/DebuggerSettings.java +++ b/java/debugger/impl/src/com/intellij/debugger/settings/DebuggerSettings.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * Copyright 2000-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -85,6 +85,8 @@ public class DebuggerSettings implements Cloneable, PersistentStateComponent myContentStates = new LinkedHashMap(); @@ -162,6 +164,7 @@ public class DebuggerSettings implements Cloneable, PersistentStateComponent { private JRadioButton myRbEvaluateFinallyAlways; private JRadioButton myRbEvaluateFinallyNever; private JRadioButton myRbEvaluateFinallyAsk; + private JCheckBox myCbResumeOnlyCurrentThread; @Override public void reset(@NotNull DebuggerSettings settings) { @@ -59,6 +60,7 @@ class DebuggerSteppingConfigurable implements ConfigurableUi { else { myRbEvaluateFinallyAsk.setSelected(true); } + myCbResumeOnlyCurrentThread.setSelected(settings.RESUME_ONLY_CURRENT_THREAD); } @Override @@ -84,6 +86,7 @@ class DebuggerSteppingConfigurable implements ConfigurableUi { settings.EVALUATE_FINALLY_ON_POP_FRAME = DebuggerSettings.EVALUATE_FINALLY_ASK; } + settings.RESUME_ONLY_CURRENT_THREAD = myCbResumeOnlyCurrentThread.isSelected(); settings.setSteppingFilters(mySteppingFilterEditor.getFilters()); } @@ -145,6 +148,9 @@ class DebuggerSteppingConfigurable implements ConfigurableUi { evalFinallyPanel.add(new JLabel(DebuggerBundle.message("label.debugger.general.configurable.evaluate.finally.on.pop")), BorderLayout.WEST); panel.add(evalFinallyPanel, new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 1.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(4, cbLeftOffset, 0, 0), 0, 0)); + myCbResumeOnlyCurrentThread = new JCheckBox(DebuggerBundle.message("label.debugger.general.configurable.resume.only.current.thread")); + panel.add(myCbResumeOnlyCurrentThread, new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0),0, 0)); + return panel; } } \ No newline at end of file diff --git a/platform/util/resources/misc/registry.properties b/platform/util/resources/misc/registry.properties index 382b909fbf9d..4dd89a47337c 100644 --- a/platform/util/resources/misc/registry.properties +++ b/platform/util/resources/misc/registry.properties @@ -199,7 +199,6 @@ debugger.batch.evaluation=false debugger.compiling.evaluator=true debugger.watches.in.variables=false debugger.auto.fetch.icons=true -debugger.step.resumes.one.thread=false debugger.close.dialog.on.navigate=true debugger.close.dialog.on.navigate.description=Close evaluate dialog on Jump to (type) source action debugger.async.smart.step.into=true diff --git a/resources-en/src/messages/DebuggerBundle.properties b/resources-en/src/messages/DebuggerBundle.properties index 9793dfd22cb4..9181929a795c 100644 --- a/resources-en/src/messages/DebuggerBundle.properties +++ b/resources-en/src/messages/DebuggerBundle.properties @@ -242,6 +242,7 @@ label.debugger.general.configurable.evaluate.finally.on.pop=Evaluate finally blo label.debugger.general.configurable.evaluate.finally.always=&Always label.debugger.general.configurable.evaluate.finally.never=N&ever label.debugger.general.configurable.evaluate.finally.ask=As&k +label.debugger.general.configurable.resume.only.current.thread=Resume only the current thread label.threads.view.configurable.show.source.file.name=Show source file name label.threads.view.configurable.show.class.name=Show class name label.threads.view.configurable.show.package=Show package name