summaryrefslogtreecommitdiff
path: root/java/debugger/impl
diff options
context:
space:
mode:
Diffstat (limited to 'java/debugger/impl')
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/actions/CustomizeContextViewAction.java28
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessEvents.java30
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/engine/JavaBreakpointHandler.java19
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/engine/JavaExecutionStack.java7
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/engine/JavaStackFrame.java23
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/engine/JavaValueMarker.java3
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/engine/SuspendManagerImpl.java16
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/engine/evaluation/expression/MethodEvaluator.java21
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/impl/DebuggerManagerImpl.java4
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/impl/JavaEditorTextProviderImpl.java4
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/settings/CompoundRendererConfigurable.java139
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/settings/DebuggerLaunchingConfigurable.java39
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/settings/DebuggerSteppingConfigurable.java59
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/settings/JavaDebuggerSettings.java59
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/settings/JavaHotSwapConfigurableUi.java (renamed from java/debugger/impl/src/com/intellij/debugger/settings/DebuggerHotswapConfigurable.java)45
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/settings/UserRenderersConfigurable.java130
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/ui/DebuggerPanelsManager.java2
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/ui/JavaDebuggerSupport.java38
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/ui/XBreakpointGroupingByPackageRule.java2
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/AnyExceptionBreakpoint.java2
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/Breakpoint.java17
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointWithHighlighter.java10
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/ExceptionBreakpoint.java2
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaBreakpointTypeBase.java2
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/RunToCursorBreakpoint.java5
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/WildcardMethodBreakpoint.java2
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/ValueDescriptorImpl.java8
27 files changed, 324 insertions, 392 deletions
diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/CustomizeContextViewAction.java b/java/debugger/impl/src/com/intellij/debugger/actions/CustomizeContextViewAction.java
index 01d6fcc6e7e8..6214a9e44d7f 100644
--- a/java/debugger/impl/src/com/intellij/debugger/actions/CustomizeContextViewAction.java
+++ b/java/debugger/impl/src/com/intellij/debugger/actions/CustomizeContextViewAction.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -17,14 +17,12 @@ package com.intellij.debugger.actions;
import com.intellij.debugger.DebuggerBundle;
import com.intellij.debugger.engine.JavaDebugProcess;
-import com.intellij.debugger.settings.DebuggerDataViewsConfigurable;
+import com.intellij.debugger.settings.JavaDebuggerSettings;
import com.intellij.debugger.settings.NodeRendererSettings;
-import com.intellij.debugger.settings.UserRenderersConfigurable;
import com.intellij.idea.ActionsBundle;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CommonDataKeys;
-import com.intellij.openapi.options.CompositeConfigurable;
import com.intellij.openapi.options.Configurable;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.options.TabbedConfigurable;
@@ -40,16 +38,9 @@ import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
-import java.util.ArrayList;
import java.util.List;
-/**
- * User: lex
- * Date: Sep 26, 2003
- * Time: 4:39:53 PM
- */
public class CustomizeContextViewAction extends XDebuggerTreeActionBase {
-
@Override
public void actionPerformed(AnActionEvent e) {
perform(null, "", e);
@@ -58,15 +49,11 @@ public class CustomizeContextViewAction extends XDebuggerTreeActionBase {
@Override
protected void perform(XValueNodeImpl node, @NotNull String nodeName, AnActionEvent e) {
final Project project = CommonDataKeys.PROJECT.getData(e.getDataContext());
-
Disposable disposable = Disposer.newDisposable();
- final CompositeConfigurable configurable = new TabbedConfigurable(disposable) {
+ SingleConfigurableEditor editor = new SingleConfigurableEditor(project, new TabbedConfigurable(disposable) {
@Override
protected List<Configurable> createConfigurables() {
- ArrayList<Configurable> array = new ArrayList<Configurable>();
- array.add(new DebuggerDataViewsConfigurable(project));
- array.add(new UserRenderersConfigurable(project));
- return array;
+ return JavaDebuggerSettings.createDataViewsConfigurable();
}
@Override
@@ -89,13 +76,12 @@ public class CustomizeContextViewAction extends XDebuggerTreeActionBase {
protected void createConfigurableTabs() {
for (Configurable configurable : getConfigurables()) {
JComponent component = configurable.createComponent();
- component.setBorder(new EmptyBorder(8,8,8,8));
+ assert component != null;
+ component.setBorder(new EmptyBorder(8, 8, 8, 8));
myTabbedPane.addTab(configurable.getDisplayName(), component);
}
}
- };
-
- SingleConfigurableEditor editor = new SingleConfigurableEditor(project, configurable);
+ });
Disposer.register(editor.getDisposable(), disposable);
editor.show();
}
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 1db0ed60774e..4714ca49bd06 100644
--- a/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessEvents.java
+++ b/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessEvents.java
@@ -322,10 +322,15 @@ public class DebugProcessEvents extends DebugProcessImpl {
myDebugProcessDispatcher.getMulticaster().processAttached(this);
// breakpoints should be initialized after all processAttached listeners work
- XDebugSession session = getSession().getXDebugSession();
- if (session != null) {
- session.initBreakpoints();
- }
+ ApplicationManager.getApplication().runReadAction(new Runnable() {
+ @Override
+ public void run() {
+ XDebugSession session = getSession().getXDebugSession();
+ if (session != null) {
+ session.initBreakpoints();
+ }
+ }
+ });
final String addressDisplayName = DebuggerBundle.getAddressDisplayName(getConnection());
final String transportName = DebuggerBundle.getTransportName(getConnection());
@@ -459,13 +464,18 @@ public class DebugProcessEvents extends DebugProcessImpl {
if (requestHit && requestor instanceof Breakpoint) {
// if requestor is a breakpoint and this breakpoint was hit, no matter its suspend policy
- XDebugSession session = getSession().getXDebugSession();
- if (session != null) {
- XBreakpoint breakpoint = ((Breakpoint)requestor).getXBreakpoint();
- if (breakpoint != null) {
- ((XDebugSessionImpl)session).processDependencies(breakpoint);
+ ApplicationManager.getApplication().runReadAction(new Runnable() {
+ @Override
+ public void run() {
+ XDebugSession session = getSession().getXDebugSession();
+ if (session != null) {
+ XBreakpoint breakpoint = ((Breakpoint)requestor).getXBreakpoint();
+ if (breakpoint != null) {
+ ((XDebugSessionImpl)session).processDependencies(breakpoint);
+ }
+ }
}
- }
+ });
}
if(!requestHit || resumePreferred) {
diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/JavaBreakpointHandler.java b/java/debugger/impl/src/com/intellij/debugger/engine/JavaBreakpointHandler.java
index ad2c881d1336..75897417bd2e 100644
--- a/java/debugger/impl/src/com/intellij/debugger/engine/JavaBreakpointHandler.java
+++ b/java/debugger/impl/src/com/intellij/debugger/engine/JavaBreakpointHandler.java
@@ -49,13 +49,17 @@ public class JavaBreakpointHandler extends XBreakpointHandler {
if (javaBreakpoint != null) {
final Breakpoint bpt = javaBreakpoint;
BreakpointManager.addBreakpoint(bpt);
- // must use invoke to stay in the current request,
- // otherwise dependent breakpoints do not get enabled on not-suspending parents hit
- myProcess.getManagerThread().invoke(new DebuggerCommandImpl() {
+ // use schedule not to block initBreakpoints
+ myProcess.getManagerThread().schedule(new DebuggerCommandImpl() {
@Override
protected void action() throws Exception {
bpt.createRequest(myProcess);
}
+
+ @Override
+ public Priority getPriority() {
+ return Priority.HIGH;
+ }
});
}
}
@@ -64,12 +68,17 @@ public class JavaBreakpointHandler extends XBreakpointHandler {
public void unregisterBreakpoint(@NotNull final XBreakpoint breakpoint, boolean temporary) {
final Breakpoint javaBreakpoint = BreakpointManager.getJavaBreakpoint(breakpoint);
if (javaBreakpoint != null) {
- // must use invoke to stay in the current request, see comment in registerBreakpoint
- myProcess.getManagerThread().invoke(new DebuggerCommandImpl() {
+ // use schedule not to block initBreakpoints
+ myProcess.getManagerThread().schedule(new DebuggerCommandImpl() {
@Override
protected void action() throws Exception {
javaBreakpoint.delete();
}
+
+ @Override
+ public Priority getPriority() {
+ return Priority.HIGH;
+ }
});
}
}
diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/JavaExecutionStack.java b/java/debugger/impl/src/com/intellij/debugger/engine/JavaExecutionStack.java
index 793438ebbe05..f2cb40008ad5 100644
--- a/java/debugger/impl/src/com/intellij/debugger/engine/JavaExecutionStack.java
+++ b/java/debugger/impl/src/com/intellij/debugger/engine/JavaExecutionStack.java
@@ -26,6 +26,7 @@ import com.intellij.debugger.jdi.ThreadGroupReferenceProxyImpl;
import com.intellij.debugger.jdi.ThreadReferenceProxyImpl;
import com.intellij.debugger.settings.DebuggerSettings;
import com.intellij.debugger.ui.impl.watch.MethodsTracker;
+import com.intellij.debugger.ui.impl.watch.NodeManagerImpl;
import com.intellij.icons.AllIcons;
import com.intellij.xdebugger.frame.XExecutionStack;
import com.sun.jdi.ThreadReference;
@@ -43,6 +44,7 @@ import java.util.Iterator;
public class JavaExecutionStack extends XExecutionStack {
private final ThreadReferenceProxyImpl myThreadProxy;
private final DebugProcessImpl myDebugProcess;
+ private final NodeManagerImpl myNodeManager;
private volatile JavaStackFrame myTopFrame;
private boolean myTopFrameReady = false;
private final MethodsTracker myTracker = new MethodsTracker();
@@ -51,6 +53,7 @@ public class JavaExecutionStack extends XExecutionStack {
super(calcRepresentation(threadProxy), calcIcon(threadProxy, current));
myThreadProxy = threadProxy;
myDebugProcess = debugProcess;
+ myNodeManager = myDebugProcess.getXdebugProcess().getNodeManager();
if (current) {
myTopFrame = calcTopFrame();
}
@@ -81,7 +84,7 @@ public class JavaExecutionStack extends XExecutionStack {
try {
StackFrameProxyImpl frame = myThreadProxy.frame(0);
if (frame != null) {
- return new JavaStackFrame(frame, myDebugProcess, myTracker);
+ return new JavaStackFrame(frame, myDebugProcess, myTracker, myNodeManager);
}
}
catch (EvaluateException e) {
@@ -180,7 +183,7 @@ public class JavaExecutionStack extends XExecutionStack {
@Override
public void contextAction() throws Exception {
if (myStackFramesIterator.hasNext()) {
- JavaStackFrame frame = new JavaStackFrame(myStackFramesIterator.next(), myDebugProcess, myTracker);
+ JavaStackFrame frame = new JavaStackFrame(myStackFramesIterator.next(), myDebugProcess, myTracker, myNodeManager);
if (DebuggerSettings.getInstance().SHOW_LIBRARY_STACKFRAMES || (!frame.getDescriptor().isSynthetic() && !frame.getDescriptor().isInLibraryContent())) {
if (++myAdded > mySkip) {
myContainer.addStackFrames(Arrays.asList(frame), false);
diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/JavaStackFrame.java b/java/debugger/impl/src/com/intellij/debugger/engine/JavaStackFrame.java
index bcd8257736c2..db28c4bf34a7 100644
--- a/java/debugger/impl/src/com/intellij/debugger/engine/JavaStackFrame.java
+++ b/java/debugger/impl/src/com/intellij/debugger/engine/JavaStackFrame.java
@@ -71,9 +71,12 @@ public class JavaStackFrame extends XStackFrame {
private static final JavaFramesListRenderer FRAME_RENDERER = new JavaFramesListRenderer();
private JavaDebuggerEvaluator myEvaluator = null;
- public JavaStackFrame(@NotNull StackFrameProxyImpl stackFrameProxy, @NotNull DebugProcessImpl debugProcess, MethodsTracker tracker) {
+ public JavaStackFrame(@NotNull StackFrameProxyImpl stackFrameProxy,
+ @NotNull DebugProcessImpl debugProcess,
+ @NotNull MethodsTracker tracker,
+ @NotNull NodeManagerImpl nodeManager) {
myDebugProcess = debugProcess;
- myNodeManager = debugProcess.getXdebugProcess().getNodeManager();
+ myNodeManager = nodeManager;
myDescriptor = new StackFrameDescriptorImpl(stackFrameProxy, tracker);
myDescriptor.setContext(null);
myDescriptor.updateRepresentation(null, DescriptorLabelListener.DUMMY_LISTENER);
@@ -311,8 +314,7 @@ public class JavaStackFrame extends XStackFrame {
final Collection<Value> argValues = frame.getArgumentValues();
int index = 0;
for (Value argValue : argValues) {
- final ArgumentValueDescriptorImpl descriptor = myNodeManager.getArgumentValueDescriptor(null, index++, argValue, null);
- children.add(JavaValue.create(descriptor, evaluationContext, myNodeManager));
+ children.add(createArgumentValue(index++, argValue, null, evaluationContext));
}
node.setMessage(MessageDescriptor.LOCAL_VARIABLES_INFO_UNAVAILABLE.getLabel(), XDebuggerUIConstants.INFORMATION_MESSAGE_ICON, SimpleTextAttributes.REGULAR_ATTRIBUTES, null);
//myChildren.add(myNodeManager.createMessageNode(MessageDescriptor.LOCAL_VARIABLES_INFO_UNAVAILABLE));
@@ -323,9 +325,7 @@ public class JavaStackFrame extends XStackFrame {
try {
final Map<DecompiledLocalVariable, Value> values = LocalVariablesUtil.fetchValues(frame.getStackFrame(), decompiled);
for (DecompiledLocalVariable var : decompiled) {
- final Value value = values.get(var);
- final ArgumentValueDescriptorImpl descriptor = myNodeManager.getArgumentValueDescriptor(null, var.getSlot(), value, var.getName());
- children.add(JavaValue.create(descriptor, evaluationContext, myNodeManager));
+ children.add(createArgumentValue(var.getSlot(), values.get(var), var.getName(), evaluationContext));
}
}
catch (Exception ex) {
@@ -339,6 +339,13 @@ public class JavaStackFrame extends XStackFrame {
}
}
+ private JavaValue createArgumentValue(int index, Value value, String name, EvaluationContextImpl evaluationContext) {
+ ArgumentValueDescriptorImpl descriptor = myNodeManager.getArgumentValueDescriptor(null, index, value, name);
+ // setContext is required to calculate correct name
+ descriptor.setContext(evaluationContext);
+ return JavaValue.create(descriptor, evaluationContext, myNodeManager);
+ }
+
protected void superBuildVariables(final EvaluationContextImpl evaluationContext, XValueChildrenList children) throws EvaluateException {
final StackFrameProxyImpl frame = getStackFrameProxy();
for (final LocalVariableProxyImpl local : frame.visibleVariables()) {
@@ -354,6 +361,6 @@ public class JavaStackFrame extends XStackFrame {
@Nullable
@Override
public Object getEqualityObject() {
- return getStackFrameProxy().hashCode();
+ return myDescriptor.getMethod();
}
}
diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/JavaValueMarker.java b/java/debugger/impl/src/com/intellij/debugger/engine/JavaValueMarker.java
index be1b8fae60b9..6a555a87063a 100644
--- a/java/debugger/impl/src/com/intellij/debugger/engine/JavaValueMarker.java
+++ b/java/debugger/impl/src/com/intellij/debugger/engine/JavaValueMarker.java
@@ -30,8 +30,7 @@ public class JavaValueMarker extends XValueMarkerProvider<JavaValue, ObjectRefer
@Override
public boolean canMark(@NotNull JavaValue value) {
- Value obj = value.getDescriptor().getValue();
- return obj instanceof ObjectReference;
+ return value.getDescriptor().canMark();
}
@Override
diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/SuspendManagerImpl.java b/java/debugger/impl/src/com/intellij/debugger/engine/SuspendManagerImpl.java
index 576f781dc368..c1f1f87db1a9 100644
--- a/java/debugger/impl/src/com/intellij/debugger/engine/SuspendManagerImpl.java
+++ b/java/debugger/impl/src/com/intellij/debugger/engine/SuspendManagerImpl.java
@@ -15,6 +15,7 @@
*/
package com.intellij.debugger.engine;
+import com.intellij.debugger.engine.events.DebuggerCommandImpl;
import com.intellij.debugger.jdi.ThreadReferenceProxyImpl;
import com.intellij.openapi.diagnostic.Logger;
import com.sun.jdi.InternalException;
@@ -296,7 +297,7 @@ public class SuspendManagerImpl implements SuspendManager {
}
}
- private void processVote(SuspendContextImpl suspendContext) {
+ private void processVote(final SuspendContextImpl suspendContext) {
LOG.assertTrue(suspendContext.myVotesToVote > 0);
suspendContext.myVotesToVote--;
@@ -305,7 +306,18 @@ public class SuspendManagerImpl implements SuspendManager {
}
if(suspendContext.myVotesToVote == 0) {
if(suspendContext.myIsVotedForResume) {
- resume(suspendContext);
+ // resume in a separate request to allow other requests be processed (e.g. dependent bpts enable)
+ myDebugProcess.getManagerThread().schedule(new DebuggerCommandImpl() {
+ @Override
+ protected void action() throws Exception {
+ resume(suspendContext);
+ }
+
+ @Override
+ public Priority getPriority() {
+ return Priority.HIGH;
+ }
+ });
}
else {
if (LOG.isDebugEnabled()) {
diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/expression/MethodEvaluator.java b/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/expression/MethodEvaluator.java
index 69cbb140be86..2569559d2d11 100644
--- a/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/expression/MethodEvaluator.java
+++ b/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/expression/MethodEvaluator.java
@@ -30,7 +30,10 @@ import com.intellij.debugger.engine.evaluation.EvaluateRuntimeException;
import com.intellij.debugger.engine.evaluation.EvaluationContextImpl;
import com.intellij.debugger.impl.DebuggerUtilsEx;
import com.intellij.openapi.diagnostic.Logger;
-import com.sun.jdi.*;
+import com.sun.jdi.ClassType;
+import com.sun.jdi.Method;
+import com.sun.jdi.ObjectReference;
+import com.sun.jdi.ReferenceType;
import java.util.ArrayList;
import java.util.List;
@@ -127,14 +130,16 @@ public class MethodEvaluator implements Evaluator {
_refType = ((ClassType)referenceType).superclass();
}
Method jdiMethod = DebuggerUtils.findMethod(_refType, myMethodName, signature);
- if (jdiMethod == null || jdiMethod.argumentTypes().size() != args.size()) {
+ if (signature == null) {
+ // we know nothing about expected method's signature, so trying to match my method name and parameter count
// dummy matching, may be improved with types matching later
- List<Method> methods = _refType.methodsByName(myMethodName);
- for (Method method : methods) {
- List<Type> types = method.argumentTypes();
- if (types.size() == args.size()) {
- jdiMethod = method;
- break;
+ // IMPORTANT! using argumentTypeNames() instead of argumentTypes() to avoid type resolution inside JDI, which may be time-consuming
+ if (jdiMethod == null || jdiMethod.argumentTypeNames().size() != args.size()) {
+ for (Method method : _refType.methodsByName(myMethodName)) {
+ if (method.argumentTypeNames().size() == args.size()) {
+ jdiMethod = method;
+ break;
+ }
}
}
}
diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerManagerImpl.java b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerManagerImpl.java
index f5404cd65023..79c1db31db3c 100644
--- a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerManagerImpl.java
+++ b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerManagerImpl.java
@@ -28,6 +28,7 @@ import com.intellij.execution.configurations.JavaParameters;
import com.intellij.execution.configurations.ModuleRunProfile;
import com.intellij.execution.configurations.RemoteConnection;
import com.intellij.execution.configurations.RunProfileState;
+import com.intellij.execution.process.KillableColoredProcessHandler;
import com.intellij.execution.process.ProcessAdapter;
import com.intellij.execution.process.ProcessEvent;
import com.intellij.execution.process.ProcessHandler;
@@ -286,7 +287,8 @@ public class DebuggerManagerImpl extends DebuggerManagerEx implements Persistent
final DebugProcessImpl debugProcess = getDebugProcess(event.getProcessHandler());
if (debugProcess != null) {
// if current thread is a "debugger manager thread", stop will execute synchronously
- debugProcess.stop(willBeDestroyed);
+ // it is KillableColoredProcessHandler responsibility to terminate VM
+ debugProcess.stop(willBeDestroyed && !(event.getProcessHandler() instanceof KillableColoredProcessHandler));
// wait at most 10 seconds: the problem is that debugProcess.stop() can hang if there are troubles in the debuggee
// if processWillTerminate() is called from AWT thread debugProcess.waitFor() will block it and the whole app will hang
diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/JavaEditorTextProviderImpl.java b/java/debugger/impl/src/com/intellij/debugger/impl/JavaEditorTextProviderImpl.java
index 7b76b9738843..02f4ee44fd53 100644
--- a/java/debugger/impl/src/com/intellij/debugger/impl/JavaEditorTextProviderImpl.java
+++ b/java/debugger/impl/src/com/intellij/debugger/impl/JavaEditorTextProviderImpl.java
@@ -110,7 +110,9 @@ public class JavaEditorTextProviderImpl implements EditorTextProvider {
else if (parent instanceof PsiInstanceOfExpression
|| parent instanceof PsiBinaryExpression
|| parent instanceof PsiPolyadicExpression
- || parent instanceof PsiPrefixExpression) {
+ || parent instanceof PsiPrefixExpression
+ || parent instanceof PsiConditionalExpression
+ ) {
if (allowMethodCalls || !DebuggerUtils.hasSideEffects(parent)) {
expression = parent;
}
diff --git a/java/debugger/impl/src/com/intellij/debugger/settings/CompoundRendererConfigurable.java b/java/debugger/impl/src/com/intellij/debugger/settings/CompoundRendererConfigurable.java
index e570b642b2bd..a4484cccc1fe 100644
--- a/java/debugger/impl/src/com/intellij/debugger/settings/CompoundRendererConfigurable.java
+++ b/java/debugger/impl/src/com/intellij/debugger/settings/CompoundRendererConfigurable.java
@@ -25,14 +25,10 @@ import com.intellij.debugger.impl.DebuggerUtilsEx;
import com.intellij.debugger.ui.DebuggerExpressionTextField;
import com.intellij.debugger.ui.JavaDebuggerSupport;
import com.intellij.debugger.ui.tree.render.*;
-import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.editor.Document;
-import com.intellij.openapi.options.ConfigurationException;
-import com.intellij.openapi.options.UnnamedConfigurable;
import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.Pair;
import com.intellij.psi.*;
import com.intellij.psi.search.GlobalSearchScope;
@@ -41,7 +37,7 @@ import com.intellij.ui.table.JBTable;
import com.intellij.util.Function;
import com.intellij.util.ui.AbstractTableCellEditor;
import org.jetbrains.annotations.NonNls;
-import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import javax.swing.table.AbstractTableModel;
@@ -52,57 +48,33 @@ import java.awt.event.*;
import java.util.ArrayList;
import java.util.List;
-/**
- * @author Eugene Zhuravlev
- * Date: Feb 24, 2005
- */
-public class CompoundRendererConfigurable implements UnnamedConfigurable {
+class CompoundRendererConfigurable extends JPanel {
private CompoundReferenceRenderer myRenderer;
private CompoundReferenceRenderer myOriginalRenderer;
private Project myProject;
- private ClassNameEditorWithBrowseButton myClassNameField;
- private JRadioButton myRbDefaultLabel;
- private JRadioButton myRbExpressionLabel;
- private JRadioButton myRbDefaultChildrenRenderer;
- private JRadioButton myRbExpressionChildrenRenderer;
- private JRadioButton myRbListChildrenRenderer;
- private DebuggerExpressionTextField myLabelEditor;
- private DebuggerExpressionTextField myChildrenEditor;
- private DebuggerExpressionTextField myChildrenExpandedEditor;
+ private final ClassNameEditorWithBrowseButton myClassNameField;
+ private final JRadioButton myRbDefaultLabel;
+ private final JRadioButton myRbExpressionLabel;
+ private final JRadioButton myRbDefaultChildrenRenderer;
+ private final JRadioButton myRbExpressionChildrenRenderer;
+ private final JRadioButton myRbListChildrenRenderer;
+ private final DebuggerExpressionTextField myLabelEditor;
+ private final DebuggerExpressionTextField myChildrenEditor;
+ private final DebuggerExpressionTextField myChildrenExpandedEditor;
private DebuggerExpressionTextField myListChildrenEditor;
- private JComponent myChildrenListEditor;
- private JLabel myExpandedLabel;
- private JPanel myMainPanel;
+ private final JLabel myExpandedLabel;
private JBTable myTable;
@NonNls private static final String EMPTY_PANEL_ID = "EMPTY";
@NonNls private static final String DATA_PANEL_ID = "DATA";
private static final int NAME_TABLE_COLUMN = 0;
private static final int EXPRESSION_TABLE_COLUMN = 1;
- public CompoundRendererConfigurable(@Nullable Project project) {
- myProject = project;
- }
-
- public void setRenderer(NodeRenderer renderer) {
- if (renderer instanceof CompoundReferenceRenderer) {
- myRenderer = (CompoundReferenceRenderer)renderer;
- myOriginalRenderer = (CompoundReferenceRenderer)renderer.clone();
- }
- else {
- myRenderer = myOriginalRenderer = null;
- }
- reset();
- }
-
- public CompoundReferenceRenderer getRenderer() {
- return myRenderer;
- }
+ public CompoundRendererConfigurable() {
+ super(new CardLayout());
- public JComponent createComponent() {
if (myProject == null) {
myProject = JavaDebuggerSupport.getContextProjectForEditorFieldsInDebuggerConfigurables();
}
- final JPanel panel = new JPanel(new GridBagLayout());
myRbDefaultLabel = new JRadioButton(DebuggerBundle.message("label.compound.renderer.configurable.use.default.renderer"));
myRbExpressionLabel = new JRadioButton(DebuggerBundle.message("label.compound.renderer.configurable.use.expression"));
@@ -121,10 +93,11 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
myLabelEditor = new DebuggerExpressionTextField(myProject, null, "ClassLabelExpression");
myChildrenEditor = new DebuggerExpressionTextField(myProject, null, "ClassChildrenExpression");
myChildrenExpandedEditor = new DebuggerExpressionTextField(myProject, null, "ClassChildrenExpression");
- myChildrenListEditor = createChildrenListEditor();
+ JComponent myChildrenListEditor = createChildrenListEditor();
final ItemListener updateListener = new ItemListener() {
- public void itemStateChanged(ItemEvent e) {
+ @Override
+ public void itemStateChanged(@NotNull ItemEvent e) {
updateEnabledState();
}
};
@@ -133,7 +106,8 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
myRbExpressionChildrenRenderer.addItemListener(updateListener);
myClassNameField = new ClassNameEditorWithBrowseButton(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
+ @Override
+ public void actionPerformed(@NotNull ActionEvent e) {
PsiClass psiClass = DebuggerUtils.getInstance()
.chooseClassDialog(DebuggerBundle.message("title.compound.renderer.configurable.choose.renderer.reference.type"), myProject);
if (psiClass != null) {
@@ -143,20 +117,14 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
}
}
}, myProject);
- final EditorTextField textField = myClassNameField.getEditorTextField();
- final FocusAdapter updateContextListener = new FocusAdapter() {
- public void focusLost(FocusEvent e) {
- updateContext(myClassNameField.getText());
- }
- };
- textField.addFocusListener(updateContextListener);
- Disposer.register(myClassNameField, new Disposable() {
+ myClassNameField.getEditorTextField().addFocusListener(new FocusAdapter() {
@Override
- public void dispose() {
- textField.removeFocusListener(updateContextListener);
+ public void focusLost(@NotNull FocusEvent e) {
+ updateContext(myClassNameField.getText());
}
});
+ JPanel panel = new JPanel(new GridBagLayout());
panel.add(new JLabel(DebuggerBundle.message("label.compound.renderer.configurable.apply.to")),
new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 1.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
@@ -197,15 +165,28 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
panel.add(myChildrenListEditor,
new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 1.0, 1.0, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH,
new Insets(4, 30, 0, 0), 0, 0));
+ add(new JPanel(), EMPTY_PANEL_ID);
+ add(panel, DATA_PANEL_ID);
+ }
- myMainPanel = new JPanel(new CardLayout());
- myMainPanel.add(new JPanel(), EMPTY_PANEL_ID);
- myMainPanel.add(panel, DATA_PANEL_ID);
- return myMainPanel;
+ public void setRenderer(NodeRenderer renderer) {
+ if (renderer instanceof CompoundReferenceRenderer) {
+ myRenderer = (CompoundReferenceRenderer)renderer;
+ myOriginalRenderer = (CompoundReferenceRenderer)renderer.clone();
+ }
+ else {
+ myRenderer = myOriginalRenderer = null;
+ }
+ reset();
+ }
+
+ public CompoundReferenceRenderer getRenderer() {
+ return myRenderer;
}
private void updateContext(final String qName) {
ApplicationManager.getApplication().runReadAction(new Runnable() {
+ @Override
public void run() {
final Project project = myProject;
final PsiClass psiClass = project != null ? DebuggerUtils.findClass(qName, project, GlobalSearchScope.allScope(project)) : null;
@@ -214,6 +195,7 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
myChildrenExpandedEditor.setContext(psiClass);
myListChildrenEditor.setContext(psiClass);
+ assert project != null;
PsiType type = DebuggerUtils.getType(qName, project);
myLabelEditor.setThisType(type);
myChildrenEditor.setThisType(type);
@@ -251,17 +233,21 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
final TableColumn exprColumn = myTable.getColumnModel().getColumn(EXPRESSION_TABLE_COLUMN);
exprColumn.setCellEditor(new AbstractTableCellEditor() {
+ @Override
public Object getCellEditorValue() {
return myListChildrenEditor.getText();
}
+ @Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
myListChildrenEditor.setText((TextWithImports)value);
return myListChildrenEditor;
}
});
exprColumn.setCellRenderer(new DefaultTableCellRenderer() {
- public Component getTableCellRendererComponent(JTable table,
+ @NotNull
+ @Override
+ public Component getTableCellRendererComponent(@NotNull JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
@@ -309,7 +295,7 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
return !DebuggerUtilsEx.externalizableEqual(cloned, myOriginalRenderer);
}
- public void apply() throws ConfigurationException {
+ public void apply() {
if (myRenderer == null) {
return;
}
@@ -342,7 +328,7 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
public void reset() {
final TextWithImports emptyExpressionFragment = new TextWithImportsImpl(CodeFragmentKind.EXPRESSION, "");
- ((CardLayout)myMainPanel.getLayout()).show(myMainPanel, myRenderer == null ? EMPTY_PANEL_ID : DATA_PANEL_ID);
+ ((CardLayout)getLayout()).show(this, myRenderer == null ? EMPTY_PANEL_ID : DATA_PANEL_ID);
if (myRenderer == null) {
return;
}
@@ -390,27 +376,11 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
updateContext(className);
}
- public void disposeUIResources() {
- myRenderer = null;
- myOriginalRenderer = null;
- myLabelEditor.dispose();
- myChildrenEditor.dispose();
- myChildrenExpandedEditor.dispose();
- myListChildrenEditor.dispose();
- Disposer.dispose(myClassNameField);
- myLabelEditor = null;
- myChildrenEditor = null;
- myChildrenExpandedEditor = null;
- myListChildrenEditor = null;
- myClassNameField = null;
- myProject = null;
- }
-
private MyTableModel getTableModel() {
return (MyTableModel)myTable.getModel();
}
- private final class MyTableModel extends AbstractTableModel {
+ private static final class MyTableModel extends AbstractTableModel {
private final List<Row> myData = new ArrayList<Row>();
public MyTableModel() {
@@ -423,18 +393,23 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
}
}
+ @Override
public int getColumnCount() {
return 2;
}
+ @Override
public int getRowCount() {
return myData.size();
}
+ @Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return true;
}
+ @NotNull
+ @Override
public Class getColumnClass(int columnIndex) {
switch (columnIndex) {
case NAME_TABLE_COLUMN:
@@ -446,6 +421,7 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
}
}
+ @Override
public Object getValueAt(int rowIndex, int columnIndex) {
if (rowIndex >= getRowCount()) {
return null;
@@ -461,6 +437,7 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
}
}
+ @Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
if (rowIndex >= getRowCount()) {
return;
@@ -476,6 +453,8 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
}
}
+ @NotNull
+ @Override
public String getColumnName(int columnIndex) {
switch (columnIndex) {
case NAME_TABLE_COLUMN:
@@ -513,7 +492,7 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
return pairs;
}
- private final class Row {
+ private static final class Row {
public String name;
public TextWithImports value;
diff --git a/java/debugger/impl/src/com/intellij/debugger/settings/DebuggerLaunchingConfigurable.java b/java/debugger/impl/src/com/intellij/debugger/settings/DebuggerLaunchingConfigurable.java
index 490f99bb5461..b0748cfd336d 100644
--- a/java/debugger/impl/src/com/intellij/debugger/settings/DebuggerLaunchingConfigurable.java
+++ b/java/debugger/impl/src/com/intellij/debugger/settings/DebuggerLaunchingConfigurable.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -16,24 +16,23 @@
package com.intellij.debugger.settings;
import com.intellij.debugger.DebuggerBundle;
-import com.intellij.openapi.options.Configurable;
-import com.intellij.openapi.options.OptionsBundle;
+import com.intellij.openapi.options.ConfigurableUi;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.ui.StateRestoringCheckBox;
import com.intellij.ui.components.panels.VerticalBox;
+import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.awt.*;
-public class DebuggerLaunchingConfigurable implements Configurable {
+class DebuggerLaunchingConfigurable implements ConfigurableUi<DebuggerSettings> {
private JRadioButton myRbSocket;
private JRadioButton myRbShmem;
private StateRestoringCheckBox myCbForceClassicVM;
private JCheckBox myCbDisableJIT;
@Override
- public void reset() {
- final DebuggerSettings settings = DebuggerSettings.getInstance();
+ public void reset(@NotNull DebuggerSettings settings) {
if (!SystemInfo.isWindows) {
myRbSocket.setSelected(true);
myRbShmem.setEnabled(false);
@@ -52,8 +51,8 @@ public class DebuggerLaunchingConfigurable implements Configurable {
}
@Override
- public void apply() {
- getSettingsTo(DebuggerSettings.getInstance());
+ public void apply(@NotNull DebuggerSettings settings) {
+ getSettingsTo(settings);
}
private void getSettingsTo(DebuggerSettings settings) {
@@ -68,25 +67,15 @@ public class DebuggerLaunchingConfigurable implements Configurable {
}
@Override
- public boolean isModified() {
- final DebuggerSettings currentSettings = DebuggerSettings.getInstance();
- final DebuggerSettings debuggerSettings = currentSettings.clone();
+ public boolean isModified(@NotNull DebuggerSettings currentSettings) {
+ DebuggerSettings debuggerSettings = currentSettings.clone();
getSettingsTo(debuggerSettings);
return !debuggerSettings.equals(currentSettings);
}
+ @NotNull
@Override
- public String getDisplayName() {
- return OptionsBundle.message("options.java.display.name");
- }
-
- @Override
- public String getHelpTopic() {
- return "reference.idesettings.debugger.launching";
- }
-
- @Override
- public JComponent createComponent() {
+ public JComponent getComponent() {
myCbForceClassicVM = new StateRestoringCheckBox(DebuggerBundle.message("label.debugger.launching.configurable.force.classic.vm"));
myCbDisableJIT = new JCheckBox(DebuggerBundle.message("label.debugger.launching.configurable.disable.jit"));
myRbSocket = new JRadioButton(DebuggerBundle.message("label.debugger.launching.configurable.socket"));
@@ -110,12 +99,6 @@ public class DebuggerLaunchingConfigurable implements Configurable {
JPanel result = new JPanel(new BorderLayout());
result.add(panel, BorderLayout.NORTH);
-
return result;
}
-
-
- @Override
- public void disposeUIResources() {
- }
} \ No newline at end of file
diff --git a/java/debugger/impl/src/com/intellij/debugger/settings/DebuggerSteppingConfigurable.java b/java/debugger/impl/src/com/intellij/debugger/settings/DebuggerSteppingConfigurable.java
index cec458ccbb70..cf7e367f1ce8 100644
--- a/java/debugger/impl/src/com/intellij/debugger/settings/DebuggerSteppingConfigurable.java
+++ b/java/debugger/impl/src/com/intellij/debugger/settings/DebuggerSteppingConfigurable.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -17,10 +17,7 @@ package com.intellij.debugger.settings;
import com.intellij.debugger.DebuggerBundle;
import com.intellij.debugger.ui.JavaDebuggerSupport;
-import com.intellij.openapi.options.Configurable;
-import com.intellij.openapi.options.OptionsBundle;
-import com.intellij.openapi.options.SearchableConfigurable;
-import com.intellij.openapi.project.Project;
+import com.intellij.openapi.options.ConfigurableUi;
import com.intellij.ui.classFilter.ClassFilterEditor;
import org.jetbrains.annotations.NotNull;
@@ -29,18 +26,16 @@ import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
-public class DebuggerSteppingConfigurable implements SearchableConfigurable, Configurable.NoScroll {
+class DebuggerSteppingConfigurable implements ConfigurableUi<DebuggerSettings> {
private JCheckBox myCbStepInfoFiltersEnabled;
private JCheckBox myCbSkipSyntheticMethods;
private JCheckBox myCbSkipConstructors;
private JCheckBox myCbSkipClassLoaders;
private ClassFilterEditor mySteppingFilterEditor;
private JCheckBox myCbSkipSimpleGetters;
- private Project myProject;
@Override
- public void reset() {
- final DebuggerSettings settings = DebuggerSettings.getInstance();
+ public void reset(@NotNull DebuggerSettings settings) {
myCbSkipSimpleGetters.setSelected(settings.SKIP_GETTERS);
myCbSkipSyntheticMethods.setSelected(settings.SKIP_SYNTHETIC_METHODS);
myCbSkipConstructors.setSelected(settings.SKIP_CONSTRUCTORS);
@@ -50,13 +45,11 @@ public class DebuggerSteppingConfigurable implements SearchableConfigurable, Con
mySteppingFilterEditor.setFilters(settings.getSteppingFilters());
mySteppingFilterEditor.setEnabled(settings.TRACING_FILTERS_ENABLED);
-
-
}
@Override
- public void apply() {
- getSettingsTo(DebuggerSettings.getInstance());
+ public void apply(@NotNull DebuggerSettings settings) {
+ getSettingsTo(settings);
}
private void getSettingsTo(DebuggerSettings settings) {
@@ -71,39 +64,16 @@ public class DebuggerSteppingConfigurable implements SearchableConfigurable, Con
}
@Override
- public boolean isModified() {
- final DebuggerSettings currentSettings = DebuggerSettings.getInstance();
- final DebuggerSettings debuggerSettings = currentSettings.clone();
+ public boolean isModified(@NotNull DebuggerSettings currentSettings) {
+ DebuggerSettings debuggerSettings = currentSettings.clone();
getSettingsTo(debuggerSettings);
return !debuggerSettings.equals(currentSettings);
}
@Override
- public String getDisplayName() {
- return OptionsBundle.message("options.java.display.name");
- }
-
- @Override
@NotNull
- public String getHelpTopic() {
- return "reference.idesettings.debugger.stepping";
- }
-
- @Override
- @NotNull
- public String getId() {
- return getHelpTopic();
- }
-
- @Override
- public Runnable enableSearch(String option) {
- return null;
- }
-
- @Override
- public JComponent createComponent() {
+ public JComponent getComponent() {
final JPanel panel = new JPanel(new GridBagLayout());
- myProject = JavaDebuggerSupport.getContextProjectForEditorFieldsInDebuggerConfigurables();
myCbSkipSyntheticMethods = new JCheckBox(DebuggerBundle.message("label.debugger.general.configurable.skip.synthetic.methods"));
myCbSkipConstructors = new JCheckBox(DebuggerBundle.message("label.debugger.general.configurable.skip.constructors"));
myCbSkipClassLoaders = new JCheckBox(DebuggerBundle.message("label.debugger.general.configurable.skip.classLoaders"));
@@ -115,7 +85,7 @@ public class DebuggerSteppingConfigurable implements SearchableConfigurable, Con
panel.add(myCbSkipSimpleGetters, new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0),0, 0));
panel.add(myCbStepInfoFiltersEnabled, new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(8, 0, 0, 0),0, 0));
- mySteppingFilterEditor = new ClassFilterEditor(myProject, null, "reference.viewBreakpoints.classFilters.newPattern");
+ mySteppingFilterEditor = new ClassFilterEditor(JavaDebuggerSupport.getContextProjectForEditorFieldsInDebuggerConfigurables(), null, "reference.viewBreakpoints.classFilters.newPattern");
panel.add(mySteppingFilterEditor, new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 5, 0, 0),0, 0));
myCbStepInfoFiltersEnabled.addActionListener(new ActionListener() {
@@ -126,11 +96,4 @@ public class DebuggerSteppingConfigurable implements SearchableConfigurable, Con
});
return panel;
}
-
- @Override
- public void disposeUIResources() {
- mySteppingFilterEditor = null;
- myProject = null;
- }
-
-}
+} \ No newline at end of file
diff --git a/java/debugger/impl/src/com/intellij/debugger/settings/JavaDebuggerSettings.java b/java/debugger/impl/src/com/intellij/debugger/settings/JavaDebuggerSettings.java
index 7151cb9f650e..e6f271b3981a 100644
--- a/java/debugger/impl/src/com/intellij/debugger/settings/JavaDebuggerSettings.java
+++ b/java/debugger/impl/src/com/intellij/debugger/settings/JavaDebuggerSettings.java
@@ -15,41 +15,78 @@
*/
package com.intellij.debugger.settings;
+import com.intellij.debugger.DebuggerBundle;
import com.intellij.openapi.options.Configurable;
+import com.intellij.openapi.options.OptionsBundle;
+import com.intellij.openapi.options.SimpleConfigurable;
+import com.intellij.openapi.util.Getter;
+import com.intellij.xdebugger.settings.DebuggerSettingsCategory;
import com.intellij.xdebugger.settings.XDebuggerSettings;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import static java.util.Collections.singletonList;
+
/**
* We cannot now transform DebuggerSettings to XDebuggerSettings: getState/loadState is not called for EP,
* but we cannot use standard implementation to save our state, due to backward compatibility we must use own state spec.
- *
+ * <p/>
* But we must implement createConfigurable as part of XDebuggerSettings otherwise java general settings will be before xdebugger general setting,
* because JavaDebuggerSettingsPanelProvider has higher priority than XDebuggerSettingsPanelProviderImpl.
*/
-class JavaDebuggerSettings extends XDebuggerSettings<Element> {
+public class JavaDebuggerSettings extends XDebuggerSettings<Element> {
protected JavaDebuggerSettings() {
super("java");
}
- @Nullable
+ @NotNull
@Override
- public Configurable createConfigurable(@NotNull Category category) {
+ public Collection<? extends Configurable> createConfigurables(@NotNull DebuggerSettingsCategory category) {
+ Getter<DebuggerSettings> settingsGetter = new Getter<DebuggerSettings>() {
+ @Override
+ public DebuggerSettings get() {
+ return DebuggerSettings.getInstance();
+ }
+ };
+
switch (category) {
- case ROOT:
- return new DebuggerLaunchingConfigurable();
+ case GENERAL:
+ return singletonList(SimpleConfigurable.create("reference.idesettings.debugger.launching", OptionsBundle.message("options.java.display.name"),
+ DebuggerLaunchingConfigurable.class, settingsGetter));
case DATA_VIEWS:
- return new DebuggerDataViewsConfigurable(null);
+ return createDataViewsConfigurable();
case STEPPING:
- return new DebuggerSteppingConfigurable();
+ return singletonList(SimpleConfigurable.create("reference.idesettings.debugger.stepping", OptionsBundle.message("options.java.display.name"),
+ DebuggerSteppingConfigurable.class, settingsGetter));
+ case HOTSWAP:
+ return singletonList(SimpleConfigurable.create("reference.idesettings.debugger.hotswap", OptionsBundle.message("options.java.display.name"),
+ JavaHotSwapConfigurableUi.class, settingsGetter));
}
- return null;
+ return Collections.emptyList();
+ }
+
+ @SuppressWarnings("SpellCheckingInspection")
+ @NotNull
+ public static List<Configurable> createDataViewsConfigurable() {
+ return Arrays.<Configurable>asList(new DebuggerDataViewsConfigurable(null),
+ SimpleConfigurable.create("reference.idesettings.debugger.typerenderers", DebuggerBundle.message("user.renderers.configurable.display.name"),
+ UserRenderersConfigurable.class, new Getter<NodeRendererSettings>() {
+ @Override
+ public NodeRendererSettings get() {
+ return NodeRendererSettings.getInstance();
+ }
+ }));
}
@Override
- public void generalApplied(@NotNull XDebuggerSettings.Category category) {
- if (category == XDebuggerSettings.Category.DATA_VIEWS) {
+ public void generalApplied(@NotNull DebuggerSettingsCategory category) {
+ if (category == DebuggerSettingsCategory.DATA_VIEWS) {
NodeRendererSettings.getInstance().fireRenderersChanged();
}
}
diff --git a/java/debugger/impl/src/com/intellij/debugger/settings/DebuggerHotswapConfigurable.java b/java/debugger/impl/src/com/intellij/debugger/settings/JavaHotSwapConfigurableUi.java
index a70be30556e2..82a33a895fcb 100644
--- a/java/debugger/impl/src/com/intellij/debugger/settings/DebuggerHotswapConfigurable.java
+++ b/java/debugger/impl/src/com/intellij/debugger/settings/JavaHotSwapConfigurableUi.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -16,14 +16,14 @@
package com.intellij.debugger.settings;
import com.intellij.debugger.DebuggerBundle;
-import com.intellij.openapi.options.SearchableConfigurable;
+import com.intellij.openapi.options.ConfigurableUi;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
-public class DebuggerHotswapConfigurable implements SearchableConfigurable {
+class JavaHotSwapConfigurableUi implements ConfigurableUi<DebuggerSettings> {
private JCheckBox myHotswapInBackground;
private JCheckBox myCbCompileBeforeHotswap;
private JCheckBox myCbHangWarningEnabled;
@@ -31,8 +31,8 @@ public class DebuggerHotswapConfigurable implements SearchableConfigurable {
private JRadioButton myRbNever;
private JRadioButton myRbAsk;
- public void reset() {
- final DebuggerSettings settings = DebuggerSettings.getInstance();
+ @Override
+ public void reset(@NotNull DebuggerSettings settings) {
myHotswapInBackground.setSelected(settings.HOTSWAP_IN_BACKGROUND);
myCbCompileBeforeHotswap.setSelected(settings.COMPILE_BEFORE_HOTSWAP);
myCbHangWarningEnabled.setSelected(settings.HOTSWAP_HANG_WARNING_ENABLED);
@@ -48,8 +48,9 @@ public class DebuggerHotswapConfigurable implements SearchableConfigurable {
}
}
- public void apply() {
- getSettingsTo(DebuggerSettings.getInstance());
+ @Override
+ public void apply(@NotNull DebuggerSettings settings) {
+ getSettingsTo(settings);
}
private void getSettingsTo(DebuggerSettings settings) {
@@ -68,31 +69,16 @@ public class DebuggerHotswapConfigurable implements SearchableConfigurable {
}
}
- public boolean isModified() {
- final DebuggerSettings currentSettings = DebuggerSettings.getInstance();
+ @Override
+ public boolean isModified(@NotNull DebuggerSettings currentSettings) {
final DebuggerSettings debuggerSettings = currentSettings.clone();
getSettingsTo(debuggerSettings);
return !debuggerSettings.equals(currentSettings);
}
- public String getDisplayName() {
- return DebuggerBundle.message("debugger.hotswap.configurable.display.name");
- }
-
- public String getHelpTopic() {
- return "reference.idesettings.debugger.hotswap";
- }
-
@NotNull
- public String getId() {
- return getHelpTopic();
- }
-
- public Runnable enableSearch(String option) {
- return null;
- }
-
- public JComponent createComponent() {
+ @Override
+ public JComponent getComponent() {
final JPanel panel = new JPanel(new GridBagLayout());
myCbCompileBeforeHotswap = new JCheckBox(DebuggerBundle.message("label.debugger.hotswap.configurable.compile.before.hotswap"));
@@ -130,9 +116,4 @@ public class DebuggerHotswapConfigurable implements SearchableConfigurable {
return panel;
}
-
-
- public void disposeUIResources() {
- }
-
-}
+} \ No newline at end of file
diff --git a/java/debugger/impl/src/com/intellij/debugger/settings/UserRenderersConfigurable.java b/java/debugger/impl/src/com/intellij/debugger/settings/UserRenderersConfigurable.java
index 3ab2028d5813..3a8505c7dfe8 100644
--- a/java/debugger/impl/src/com/intellij/debugger/settings/UserRenderersConfigurable.java
+++ b/java/debugger/impl/src/com/intellij/debugger/settings/UserRenderersConfigurable.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -20,17 +20,12 @@ import com.intellij.debugger.ui.tree.render.CompoundNodeRenderer;
import com.intellij.debugger.ui.tree.render.NodeRenderer;
import com.intellij.ide.util.ElementsChooser;
import com.intellij.openapi.actionSystem.*;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.options.Configurable;
-import com.intellij.openapi.options.ConfigurationException;
-import com.intellij.openapi.options.SearchableConfigurable;
-import com.intellij.openapi.project.Project;
+import com.intellij.openapi.options.ConfigurableUi;
import com.intellij.ui.DocumentAdapter;
import com.intellij.util.IconUtil;
import com.intellij.util.PlatformIcons;
import com.intellij.util.containers.InternalIterator;
import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
@@ -40,56 +35,25 @@ import java.awt.*;
import java.util.ArrayList;
import java.util.List;
-/**
- * @author Eugene Zhuravlev
- * Date: Feb 19, 2005
- */
-public class UserRenderersConfigurable implements SearchableConfigurable, Configurable.NoScroll {
- private static final Logger LOG = Logger.getInstance("#com.intellij.debugger.settings.UserRenderersConfigurable");
+public final class UserRenderersConfigurable extends JPanel implements ConfigurableUi<NodeRendererSettings> {
private static final Icon ADD_ICON = IconUtil.getAddIcon();
private static final Icon REMOVE_ICON = IconUtil.getRemoveIcon();
private static final Icon COPY_ICON = PlatformIcons.COPY_ICON;
private static final Icon UP_ICON = IconUtil.getMoveUpIcon();
private static final Icon DOWN_ICON = IconUtil.getMoveDownIcon();
- private JPanel myNameFieldPanel;
- private JTextField myNameField;
+ private final JPanel myNameFieldPanel;
+ private final JTextField myNameField;
private ElementsChooser<NodeRenderer> myRendererChooser;
private NodeRenderer myCurrentRenderer = null;
- private final CompoundRendererConfigurable myRendererDataConfigurable;
-
- public UserRenderersConfigurable(@Nullable Project project) {
- myRendererDataConfigurable = new CompoundRendererConfigurable(project);
- }
-
- public String getDisplayName() {
- return DebuggerBundle.message("user.renderers.configurable.display.name");
- }
-
- public String getHelpTopic() {
- return "reference.idesettings.debugger.typerenderers";
- }
-
- @NotNull
- public String getId() {
- return getHelpTopic();
- }
-
- public Runnable enableSearch(String option) {
- return null;
- }
-
- public JComponent createComponent() {
- final JPanel panel = new JPanel(new BorderLayout(4, 0));
+ private final CompoundRendererConfigurable myRendererDataConfigurable = new CompoundRendererConfigurable();
- final JComponent renderersList = createRenderersList();
- final JComponent toolbar = createToolbar();
- final JComponent rendererDataPanel = myRendererDataConfigurable.createComponent();
+ public UserRenderersConfigurable() {
+ super(new BorderLayout(4, 0));
- final JPanel left = new JPanel(new BorderLayout());
-
- left.add(toolbar, BorderLayout.NORTH);
- left.add(renderersList, BorderLayout.CENTER);
+ JPanel left = new JPanel(new BorderLayout());
+ left.add(createToolbar(), BorderLayout.NORTH);
+ left.add(createRenderersList(), BorderLayout.CENTER);
myNameField = new JTextField();
myNameFieldPanel = new JPanel(new BorderLayout());
@@ -98,11 +62,11 @@ public class UserRenderersConfigurable implements SearchableConfigurable, Config
myNameFieldPanel.setVisible(false);
final JPanel center = new JPanel(new BorderLayout(0, 4));
-
center.add(myNameFieldPanel, BorderLayout.NORTH);
- center.add(rendererDataPanel, BorderLayout.CENTER);
+ center.add(myRendererDataConfigurable, BorderLayout.CENTER);
myNameField.getDocument().addDocumentListener(new DocumentAdapter() {
+ @Override
protected void textChanged(DocumentEvent e) {
if (myCurrentRenderer != null) {
myCurrentRenderer.setName(myNameField.getText());
@@ -111,10 +75,14 @@ public class UserRenderersConfigurable implements SearchableConfigurable, Config
}
});
- panel.add(left, BorderLayout.WEST);
- panel.add(center, BorderLayout.CENTER);
+ add(left, BorderLayout.WEST);
+ add(center, BorderLayout.CENTER);
+ }
- return panel;
+ @Override
+ @NotNull
+ public JComponent getComponent() {
+ return this;
}
private JComponent createRenderersList() {
@@ -122,12 +90,14 @@ public class UserRenderersConfigurable implements SearchableConfigurable, Config
myRendererChooser.getEmptyText().setText(DebuggerBundle.message("text.user.renderers.configurable.no.renderers"));
myRendererChooser.addElementsMarkListener(new ElementsChooser.ElementsMarkListener<NodeRenderer>() {
+ @Override
public void elementMarkChanged(final NodeRenderer element, final boolean isMarked) {
element.setEnabled(isMarked);
}
});
myRendererChooser.addListSelectionListener(new ListSelectionListener() {
- public void valueChanged(ListSelectionEvent e) {
+ @Override
+ public void valueChanged(@NotNull ListSelectionEvent e) {
if (!e.getValueIsAdjusting()) {
updateCurrentRenderer(myRendererChooser.getSelectedElements());
}
@@ -138,7 +108,7 @@ public class UserRenderersConfigurable implements SearchableConfigurable, Config
private void updateCurrentRenderer(List<NodeRenderer> selectedElements) {
if (selectedElements.size() != 1) {
- // multiselection
+ // multi selection
setCurrentRenderer(null);
}
else {
@@ -150,13 +120,8 @@ public class UserRenderersConfigurable implements SearchableConfigurable, Config
if (myCurrentRenderer == renderer) {
return;
}
- try {
- if (myRendererDataConfigurable.isModified()) {
- myRendererDataConfigurable.apply();
- }
- }
- catch (ConfigurationException e) {
- LOG.error(e);
+ if (myRendererDataConfigurable.isModified()) {
+ myRendererDataConfigurable.apply();
}
myCurrentRenderer = renderer;
if (renderer != null) {
@@ -181,11 +146,12 @@ public class UserRenderersConfigurable implements SearchableConfigurable, Config
return toolbar.getComponent();
}
- public void apply() throws ConfigurationException {
+ @Override
+ public void apply(@NotNull NodeRendererSettings settings) {
myRendererDataConfigurable.apply();
- flushTo(NodeRendererSettings.getInstance().getCustomRenderers());
+ flushTo(settings.getCustomRenderers());
- NodeRendererSettings.getInstance().fireRenderersChanged();
+ settings.fireRenderersChanged();
}
private void flushTo(final RendererConfiguration rendererConfiguration) {
@@ -197,11 +163,11 @@ public class UserRenderersConfigurable implements SearchableConfigurable, Config
rendererConfiguration.setRenderers(renderers);
}
- public boolean isModified() {
+ @Override
+ public boolean isModified(@NotNull NodeRendererSettings settings) {
if (myRendererDataConfigurable.isModified()) {
return true;
}
- final NodeRendererSettings settings = NodeRendererSettings.getInstance();
final RendererConfiguration rendererConfiguration = settings.getCustomRenderers();
if (myRendererChooser.getElementCount() != rendererConfiguration.getRendererCount()) {
return true;
@@ -211,11 +177,13 @@ public class UserRenderersConfigurable implements SearchableConfigurable, Config
return !uiConfiguration.equals(rendererConfiguration);
}
- public void reset() {
+ @Override
+ public void reset(@NotNull NodeRendererSettings settings) {
myRendererChooser.removeAllElements();
- final RendererConfiguration rendererConfiguration = NodeRendererSettings.getInstance().getCustomRenderers();
+ final RendererConfiguration rendererConfiguration = settings.getCustomRenderers();
final ArrayList<NodeRenderer> elementsToSelect = new ArrayList<NodeRenderer>(1);
rendererConfiguration.iterateRenderers(new InternalIterator<NodeRenderer>() {
+ @Override
public boolean visit(final NodeRenderer renderer) {
final NodeRenderer clonedRenderer = (NodeRenderer)renderer.clone();
myRendererChooser.addElement(clonedRenderer, clonedRenderer.isEnabled());
@@ -230,21 +198,18 @@ public class UserRenderersConfigurable implements SearchableConfigurable, Config
myRendererDataConfigurable.reset();
}
- public void disposeUIResources() {
- myRendererChooser.removeAllElements();
- myRendererDataConfigurable.disposeUIResources();
- }
-
private class AddAction extends AnAction {
public AddAction() {
super(DebuggerBundle.message("button.add"), DebuggerBundle.message("user.renderers.configurable.button.description.add"), ADD_ICON);
}
+ @Override
public void actionPerformed(AnActionEvent e) {
final NodeRenderer renderer = (NodeRenderer)NodeRendererSettings.getInstance().createRenderer(CompoundNodeRenderer.UNIQUE_ID);
renderer.setEnabled(true);
myRendererChooser.addElement(renderer, renderer.isEnabled());
SwingUtilities.invokeLater(new Runnable() {
+ @Override
public void run() {
myNameField.requestFocus();
}
@@ -257,16 +222,18 @@ public class UserRenderersConfigurable implements SearchableConfigurable, Config
super(DebuggerBundle.message("button.remove"), DebuggerBundle.message("user.renderers.configurable.button.description.remove"), REMOVE_ICON);
}
+ @Override
public void actionPerformed(AnActionEvent e) {
for (NodeRenderer selectedElement : myRendererChooser.getSelectedElements()) {
myRendererChooser.removeElement(selectedElement);
}
}
+ @Override
public void update(AnActionEvent e) {
super.update(e);
- final Presentation presentation = e.getPresentation();
- presentation.setEnabled(myRendererChooser.getSelectedElement() != null);
+
+ e.getPresentation().setEnabled(myRendererChooser.getSelectedElement() != null);
}
}
@@ -275,18 +242,18 @@ public class UserRenderersConfigurable implements SearchableConfigurable, Config
super(DebuggerBundle.message("button.copy"), DebuggerBundle.message("user.renderers.configurable.button.description.copy"), COPY_ICON);
}
+ @Override
public void actionPerformed(AnActionEvent e) {
final NodeRenderer selectedElement = myRendererChooser.getSelectedElement();
if (selectedElement != null) {
- final NodeRenderer cloned = (NodeRenderer)selectedElement.clone();
- myRendererChooser.addElement(cloned, true);
+ myRendererChooser.addElement((NodeRenderer)selectedElement.clone(), true);
}
}
+ @Override
public void update(AnActionEvent e) {
super.update(e);
- final Presentation presentation = e.getPresentation();
- presentation.setEnabled(myRendererChooser.getSelectedElement() != null);
+ e.getPresentation().setEnabled(myRendererChooser.getSelectedElement() != null);
}
}
@@ -300,6 +267,7 @@ public class UserRenderersConfigurable implements SearchableConfigurable, Config
myMoveUp = up;
}
+ @Override
public void actionPerformed(AnActionEvent e) {
final int selectedRow = myRendererChooser.getSelectedElementRow();
if (selectedRow < 0) {
@@ -315,10 +283,10 @@ public class UserRenderersConfigurable implements SearchableConfigurable, Config
myRendererChooser.moveElement(myRendererChooser.getElementAt(selectedRow), newRow);
}
+ @Override
public void update(AnActionEvent e) {
super.update(e);
- final Presentation presentation = e.getPresentation();
- presentation.setEnabled(myRendererChooser.getSelectedElement() != null);
+ e.getPresentation().setEnabled(myRendererChooser.getSelectedElement() != null);
}
}
}
diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerPanelsManager.java b/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerPanelsManager.java
index 3809431c21f8..13336358620b 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerPanelsManager.java
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerPanelsManager.java
@@ -214,7 +214,7 @@ public class DebuggerPanelsManager implements ProjectComponent {
public void toFront(DebuggerSession session) {
DebuggerSessionTab sessionTab = getSessionTab(session);
if (sessionTab != null) {
- sessionTab.toFront();
+ sessionTab.toFront(true);
}
}
diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/JavaDebuggerSupport.java b/java/debugger/impl/src/com/intellij/debugger/ui/JavaDebuggerSupport.java
index 27f63e032314..20d95f8fff3d 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/JavaDebuggerSupport.java
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/JavaDebuggerSupport.java
@@ -18,9 +18,6 @@ package com.intellij.debugger.ui;
import com.intellij.debugger.DebuggerManagerEx;
import com.intellij.debugger.actions.*;
import com.intellij.debugger.impl.DebuggerContextImpl;
-import com.intellij.debugger.settings.DebuggerHotswapConfigurable;
-import com.intellij.debugger.settings.NodeRendererSettings;
-import com.intellij.debugger.settings.UserRenderersConfigurable;
import com.intellij.debugger.ui.breakpoints.Breakpoint;
import com.intellij.ide.DataManager;
import com.intellij.openapi.Disposable;
@@ -28,7 +25,6 @@ import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.markup.GutterIconRenderer;
-import com.intellij.openapi.options.Configurable;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectManager;
import com.intellij.xdebugger.AbstractDebuggerSession;
@@ -42,13 +38,11 @@ import com.intellij.xdebugger.impl.actions.MarkObjectActionHandler;
import com.intellij.xdebugger.impl.breakpoints.ui.BreakpointItem;
import com.intellij.xdebugger.impl.breakpoints.ui.BreakpointPanelProvider;
import com.intellij.xdebugger.impl.evaluate.quick.common.QuickEvaluateHandler;
-import com.intellij.xdebugger.impl.settings.DebuggerSettingsPanelProvider;
import com.intellij.xdebugger.impl.ui.DebuggerUIUtil;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.awt.*;
-import java.util.ArrayList;
import java.util.Collection;
/**
@@ -68,7 +62,6 @@ public class JavaDebuggerSupport extends DebuggerSupport {
private final ShowExecutionPointActionHandler myShowExecutionPointActionHandler = new ShowExecutionPointActionHandler();
//private final EvaluateActionHandler myEvaluateActionHandler = new EvaluateActionHandler();
private final QuickEvaluateActionHandler myQuickEvaluateHandler = new QuickEvaluateActionHandler();
- private final JavaDebuggerSettingsPanelProvider myDebuggerSettingsPanelProvider = new JavaDebuggerSettingsPanelProvider();
private final DebuggerActionHandler mySmartStepIntoHandler = new JvmSmartStepIntoActionHandler();
private final DebuggerActionHandler myAddToWatchedActionHandler = new AddToWatchActionHandler();
private final JavaMarkObjectActionHandler myMarkObjectActionHandler = new JavaMarkObjectActionHandler();
@@ -118,13 +111,13 @@ public class JavaDebuggerSupport extends DebuggerSupport {
@Override
@NotNull
public DebuggerActionHandler getRunToCursorHandler() {
- return myRunToCursorActionHandler;
+ return DISABLED;
}
@Override
@NotNull
public DebuggerActionHandler getForceRunToCursorHandler() {
- return myForceRunToCursorActionHandler;
+ return DISABLED;
}
@Override
@@ -216,12 +209,6 @@ public class JavaDebuggerSupport extends DebuggerSupport {
return X_EDIT;
}
- @Override
- @NotNull
- public DebuggerSettingsPanelProvider getSettingsPanelProvider() {
- return myDebuggerSettingsPanelProvider;
- }
-
private static class JavaBreakpointPanelProvider extends BreakpointPanelProvider<Breakpoint> {
//private final List<MyBreakpointManagerListener> myListeners = ContainerUtil.createLockFreeCopyOnWriteList();
@@ -335,27 +322,6 @@ public class JavaDebuggerSupport extends DebuggerSupport {
//}
}
- final static class JavaDebuggerSettingsPanelProvider extends DebuggerSettingsPanelProvider {
- @Override
- public int getPriority() {
- return 1;
- }
-
- @NotNull
- @Override
- public Collection<? extends Configurable> getConfigurables() {
- final ArrayList<Configurable> configurables = new ArrayList<Configurable>();
- configurables.add(new UserRenderersConfigurable(null));
- configurables.add(new DebuggerHotswapConfigurable());
- return configurables;
- }
-
- @Override
- public void apply() {
- NodeRendererSettings.getInstance().fireRenderersChanged();
- }
- }
-
public static Project getContextProjectForEditorFieldsInDebuggerConfigurables() {
//todo[nik] improve
Project project = CommonDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext());
diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/XBreakpointGroupingByPackageRule.java b/java/debugger/impl/src/com/intellij/debugger/ui/XBreakpointGroupingByPackageRule.java
index f06574569db8..98c772d75044 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/XBreakpointGroupingByPackageRule.java
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/XBreakpointGroupingByPackageRule.java
@@ -63,6 +63,6 @@ public class XBreakpointGroupingByPackageRule<B> extends XBreakpointGroupingRule
@Nullable
@Override
public Icon getIcon() {
- return AllIcons.Nodes.Package;
+ return AllIcons.Actions.GroupByPackage;
}
}
diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/AnyExceptionBreakpoint.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/AnyExceptionBreakpoint.java
index ebbef2c2ec44..414960b1980a 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/AnyExceptionBreakpoint.java
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/AnyExceptionBreakpoint.java
@@ -51,7 +51,7 @@ public class AnyExceptionBreakpoint extends ExceptionBreakpoint {
public void createRequest(DebugProcessImpl debugProcess) {
DebuggerManagerThreadImpl.assertIsManagerThread();
- if (!isEnabled() || !debugProcess.isAttached() || debugProcess.areBreakpointsMuted() || !debugProcess.getRequestsManager().findRequests(this).isEmpty()) {
+ if (!shouldCreateRequest(debugProcess)) {
return;
}
super.processClassPrepare(debugProcess, null);
diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/Breakpoint.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/Breakpoint.java
index 6879407b3c9a..328dc5f2cd77 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/Breakpoint.java
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/Breakpoint.java
@@ -33,6 +33,7 @@ import com.intellij.debugger.requests.ClassPrepareRequestor;
import com.intellij.debugger.settings.DebuggerSettings;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.util.JDOMExternalizerUtil;
import com.intellij.openapi.util.Key;
@@ -46,6 +47,7 @@ import com.intellij.xdebugger.XExpression;
import com.intellij.xdebugger.breakpoints.SuspendPolicy;
import com.intellij.xdebugger.breakpoints.XBreakpoint;
import com.intellij.xdebugger.breakpoints.XLineBreakpoint;
+import com.intellij.xdebugger.impl.XDebugSessionImpl;
import com.intellij.xdebugger.impl.XDebuggerHistoryManager;
import com.intellij.xdebugger.impl.XDebuggerUtilImpl;
import com.intellij.xdebugger.impl.breakpoints.XBreakpointBase;
@@ -95,7 +97,20 @@ public abstract class Breakpoint<P extends JavaBreakpointProperties> implements
* Request for creating all needed JPDA requests in the specified VM
* @param debuggerProcess the requesting process
*/
- public abstract void createRequest(DebugProcessImpl debuggerProcess);
+ public abstract void createRequest(DebugProcessImpl debugProcess);
+
+ protected boolean shouldCreateRequest(final DebugProcessImpl debugProcess) {
+ return ApplicationManager.getApplication().runReadAction(new Computable<Boolean>() {
+ @Override
+ public Boolean compute() {
+ JavaDebugProcess process = debugProcess.getXdebugProcess();
+ return process != null
+ && debugProcess.isAttached()
+ && ((XDebugSessionImpl)process.getSession()).isBreakpointActive(myXBreakpoint)
+ && debugProcess.getRequestsManager().findRequests(Breakpoint.this).isEmpty();
+ }
+ });
+ }
/**
* Request for creating all needed JPDA requests in the specified VM
diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointWithHighlighter.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointWithHighlighter.java
index d6cbf1487ab9..cc373743736d 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointWithHighlighter.java
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointWithHighlighter.java
@@ -17,10 +17,7 @@ package com.intellij.debugger.ui.breakpoints;
import com.intellij.CommonBundle;
import com.intellij.debugger.*;
-import com.intellij.debugger.engine.DebugProcess;
-import com.intellij.debugger.engine.DebugProcessImpl;
-import com.intellij.debugger.engine.DebuggerManagerThreadImpl;
-import com.intellij.debugger.engine.JVMNameUtil;
+import com.intellij.debugger.engine.*;
import com.intellij.debugger.engine.events.DebuggerCommandImpl;
import com.intellij.debugger.engine.requests.RequestManagerImpl;
import com.intellij.debugger.impl.DebuggerContextImpl;
@@ -300,10 +297,7 @@ public abstract class BreakpointWithHighlighter<P extends JavaBreakpointProperti
public void createRequest(@NotNull DebugProcessImpl debugProcess) {
DebuggerManagerThreadImpl.assertIsManagerThread();
// check is this breakpoint is enabled, vm reference is valid and there're no requests created yet
- if (!isEnabled() ||
- !debugProcess.isAttached() ||
- isMuted(debugProcess) ||
- !debugProcess.getRequestsManager().findRequests(this).isEmpty()) {
+ if (!shouldCreateRequest(debugProcess)) {
return;
}
diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/ExceptionBreakpoint.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/ExceptionBreakpoint.java
index 88ddf4882733..e4f404e909c7 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/ExceptionBreakpoint.java
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/ExceptionBreakpoint.java
@@ -118,7 +118,7 @@ public class ExceptionBreakpoint extends Breakpoint<JavaExceptionBreakpointPrope
public void createRequest(final DebugProcessImpl debugProcess) {
DebuggerManagerThreadImpl.assertIsManagerThread();
- if (!isEnabled() || !debugProcess.isAttached() || debugProcess.areBreakpointsMuted() || !debugProcess.getRequestsManager().findRequests(this).isEmpty()) {
+ if (!shouldCreateRequest(debugProcess)) {
return;
}
diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaBreakpointTypeBase.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaBreakpointTypeBase.java
index a537db14b2e8..4e1d3e2adb3f 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaBreakpointTypeBase.java
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaBreakpointTypeBase.java
@@ -63,7 +63,7 @@ public abstract class JavaBreakpointTypeBase<T extends JavaBreakpointProperties>
Breakpoint javaBreakpoint = BreakpointManager.getJavaBreakpoint(breakpoint);
if (javaBreakpoint != null) {
PsiClass aClass = javaBreakpoint.getPsiClass();
- if (aClass != null && aClass.getContainingFile() != null) {
+ if (aClass != null && aClass.getContainingFile() != null && aClass.getTextOffset() >= 0) {
return XDebuggerUtil.getInstance().createPositionByOffset(aClass.getContainingFile().getVirtualFile(), aClass.getTextOffset());
}
}
diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/RunToCursorBreakpoint.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/RunToCursorBreakpoint.java
index 5b5233a92157..4d43a2b0d557 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/RunToCursorBreakpoint.java
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/RunToCursorBreakpoint.java
@@ -123,4 +123,9 @@ public class RunToCursorBreakpoint extends LineBreakpoint {
return new RunToCursorBreakpoint(project, pos, restoreBreakpoints);
}
+
+ @Override
+ protected boolean shouldCreateRequest(DebugProcessImpl debugProcess) {
+ return debugProcess.isAttached() && debugProcess.getRequestsManager().findRequests(this).isEmpty();
+ }
}
diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/WildcardMethodBreakpoint.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/WildcardMethodBreakpoint.java
index c106f65cab81..e8b947c0e865 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/WildcardMethodBreakpoint.java
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/WildcardMethodBreakpoint.java
@@ -129,7 +129,7 @@ public class WildcardMethodBreakpoint extends Breakpoint<JavaMethodBreakpointPro
public void createRequest(DebugProcessImpl debugProcess) {
DebuggerManagerThreadImpl.assertIsManagerThread();
- if (!isEnabled() || !debugProcess.isAttached() || debugProcess.areBreakpointsMuted() || !debugProcess.getRequestsManager().findRequests(this).isEmpty()) {
+ if (!shouldCreateRequest(debugProcess)) {
return;
}
try {
diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/ValueDescriptorImpl.java b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/ValueDescriptorImpl.java
index abda6968def4..f4da39f318a7 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/ValueDescriptorImpl.java
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/ValueDescriptorImpl.java
@@ -484,7 +484,7 @@ public abstract class ValueDescriptorImpl extends NodeDescriptorImpl implements
}
public boolean canSetValue() {
- return !myIsSynthetic && isLvalue();
+ return myValueReady && !myIsSynthetic && isLvalue();
}
public String getValueLabel() {
@@ -534,4 +534,10 @@ public abstract class ValueDescriptorImpl extends NodeDescriptorImpl implements
}
}
+ public boolean canMark() {
+ if (!myValueReady) {
+ return false;
+ }
+ return getValue() instanceof ObjectReference;
+ }
}