summaryrefslogtreecommitdiff
path: root/java/debugger
diff options
context:
space:
mode:
Diffstat (limited to 'java/debugger')
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/actions/QuickEvaluateActionHandler.java4
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/engine/JavaStackFrame.java40
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/engine/JavaValue.java5
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/engine/evaluation/expression/MethodEvaluator.java4
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsEx.java20
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/impl/JavaEditorTextProviderImpl.java5
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/jdi/Bytecodes.java152
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/jdi/InstructionParser.java3
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/settings/DebuggerDataViewsConfigurable.java68
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/settings/DebuggerLaunchingConfigurable.java38
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/settings/DebuggerSettings.java105
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/settings/DebuggerSteppingConfigurable.java15
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/settings/JavaDebuggerSettings.java66
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/settings/ViewsGeneralSettings.java9
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/ui/DebuggerSessionTab.java3
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/ui/JavaDebuggerSupport.java14
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointWithHighlighter.java7
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaExceptionBreakpointType.java12
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaFieldBreakpointType.java12
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaLineBreakpointType.java12
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaMethodBreakpointType.java12
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaWildcardMethodBreakpointType.java12
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/ui/impl/FrameVariablesTree.java7
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/ui/impl/TipManager.java15
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/DebuggerTree.java3
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/ui/tree/render/BatchEvaluator.java3
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ClassRenderer.java17
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ToStringRenderer.java16
-rw-r--r--java/debugger/impl/src/org/jetbrains/java/debugger/breakpoints/properties/JavaBreakpointProperties.java13
29 files changed, 462 insertions, 230 deletions
diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/QuickEvaluateActionHandler.java b/java/debugger/impl/src/com/intellij/debugger/actions/QuickEvaluateActionHandler.java
index 6eedff4136ea..2696f226e412 100644
--- a/java/debugger/impl/src/com/intellij/debugger/actions/QuickEvaluateActionHandler.java
+++ b/java/debugger/impl/src/com/intellij/debugger/actions/QuickEvaluateActionHandler.java
@@ -22,13 +22,13 @@ package com.intellij.debugger.actions;
import com.intellij.debugger.DebuggerManagerEx;
import com.intellij.debugger.impl.DebuggerSession;
-import com.intellij.debugger.settings.DebuggerSettings;
import com.intellij.debugger.ui.ValueHint;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.xdebugger.impl.evaluate.quick.common.AbstractValueHint;
import com.intellij.xdebugger.impl.evaluate.quick.common.QuickEvaluateHandler;
import com.intellij.xdebugger.impl.evaluate.quick.common.ValueHintType;
+import com.intellij.xdebugger.settings.XDebuggerSettingsManager;
import org.jetbrains.annotations.NotNull;
import java.awt.*;
@@ -53,6 +53,6 @@ public class QuickEvaluateActionHandler extends QuickEvaluateHandler {
@Override
public int getValueLookupDelay(final Project project) {
- return DebuggerSettings.getInstance().VALUE_LOOKUP_DELAY;
+ return XDebuggerSettingsManager.getInstance().getDataViewSettings().getValueLookupDelay();
}
}
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 ed4d8296c381..bcd8257736c2 100644
--- a/java/debugger/impl/src/com/intellij/debugger/engine/JavaStackFrame.java
+++ b/java/debugger/impl/src/com/intellij/debugger/engine/JavaStackFrame.java
@@ -27,7 +27,6 @@ import com.intellij.debugger.impl.DebuggerUtilsEx;
import com.intellij.debugger.jdi.*;
import com.intellij.debugger.settings.DebuggerSettings;
import com.intellij.debugger.settings.NodeRendererSettings;
-import com.intellij.debugger.settings.ViewsGeneralSettings;
import com.intellij.debugger.ui.breakpoints.Breakpoint;
import com.intellij.debugger.ui.impl.FrameVariablesTree;
import com.intellij.debugger.ui.impl.watch.*;
@@ -47,6 +46,7 @@ import com.intellij.xdebugger.frame.XCompositeNode;
import com.intellij.xdebugger.frame.XStackFrame;
import com.intellij.xdebugger.frame.XValueChildrenList;
import com.intellij.xdebugger.impl.ui.XDebuggerUIConstants;
+import com.intellij.xdebugger.settings.XDebuggerSettingsManager;
import com.sun.jdi.*;
import com.sun.jdi.event.Event;
import com.sun.jdi.event.ExceptionEvent;
@@ -66,7 +66,6 @@ public class JavaStackFrame extends XStackFrame {
private final DebugProcessImpl myDebugProcess;
private final XSourcePosition myXSourcePosition;
- private final SourcePosition mySourcePosition;
private final NodeManagerImpl myNodeManager;
private final StackFrameDescriptorImpl myDescriptor;
private static final JavaFramesListRenderer FRAME_RENDERER = new JavaFramesListRenderer();
@@ -74,43 +73,22 @@ public class JavaStackFrame extends XStackFrame {
public JavaStackFrame(@NotNull StackFrameProxyImpl stackFrameProxy, @NotNull DebugProcessImpl debugProcess, MethodsTracker tracker) {
myDebugProcess = debugProcess;
- Pair<SourcePosition, XSourcePosition> positions = calcSourcePosition(stackFrameProxy);
- mySourcePosition = positions.getFirst();
- myXSourcePosition = positions.getSecond();
myNodeManager = debugProcess.getXdebugProcess().getNodeManager();
myDescriptor = new StackFrameDescriptorImpl(stackFrameProxy, tracker);
myDescriptor.setContext(null);
myDescriptor.updateRepresentation(null, DescriptorLabelListener.DUMMY_LISTENER);
+ myXSourcePosition = ApplicationManager.getApplication().runReadAction(new Computable<XSourcePosition>() {
+ @Override
+ public XSourcePosition compute() {
+ return myDescriptor.getSourcePosition() != null ? DebuggerUtilsEx.toXSourcePosition(myDescriptor.getSourcePosition()) : null;
+ }
+ });
}
public StackFrameDescriptorImpl getDescriptor() {
return myDescriptor;
}
- private Pair<SourcePosition, XSourcePosition> calcSourcePosition(StackFrameProxyImpl stackFrameProxy) {
- final CompoundPositionManager positionManager = myDebugProcess.getPositionManager();
- if (positionManager == null) {
- // process already closed
- return null;
- }
- Location location = null;
- try {
- location = stackFrameProxy.location();
- }
- catch (Throwable e) {
- LOG.info(e);
- }
- final Location loc = location;
- return ApplicationManager.getApplication().runReadAction(new Computable<Pair<SourcePosition, XSourcePosition>>() {
- @Override
- public Pair<SourcePosition, XSourcePosition> compute() {
- SourcePosition position = positionManager.getSourcePosition(loc);
- XSourcePosition xSourcePosition = position != null ? DebuggerUtilsEx.toXSourcePosition(position) : null;
- return new Pair<SourcePosition, XSourcePosition>(position, xSourcePosition);
- }
- });
- }
-
@Nullable
@Override
public XDebuggerEvaluator getEvaluator() {
@@ -174,7 +152,7 @@ public class JavaStackFrame extends XStackFrame {
threadSuspendContext,
getStackFrameProxy().threadProxy(),
getStackFrameProxy());
- context.setPositionCache(mySourcePosition);
+ context.setPositionCache(myDescriptor.getSourcePosition());
context.initCaches();
}
return context;
@@ -293,7 +271,7 @@ public class JavaStackFrame extends XStackFrame {
}
try {
- if (!ViewsGeneralSettings.getInstance().ENABLE_AUTO_EXPRESSIONS && !myAutoWatchMode) {
+ if (!XDebuggerSettingsManager.getInstance().getDataViewSettings().isAutoExpressions() && !myAutoWatchMode) {
// optimization
superBuildVariables(evaluationContext, children);
}
diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/JavaValue.java b/java/debugger/impl/src/com/intellij/debugger/engine/JavaValue.java
index 6af021c0f9cc..0a691d332207 100644
--- a/java/debugger/impl/src/com/intellij/debugger/engine/JavaValue.java
+++ b/java/debugger/impl/src/com/intellij/debugger/engine/JavaValue.java
@@ -58,7 +58,10 @@ public class JavaValue extends XNamedValue implements NodeDescriptorProvider {
private final EvaluationContextImpl myEvaluationContext;
private final NodeManagerImpl myNodeManager;
- private JavaValue(JavaValue parent, @NotNull ValueDescriptorImpl valueDescriptor, EvaluationContextImpl evaluationContext, NodeManagerImpl nodeManager) {
+ private JavaValue(JavaValue parent,
+ @NotNull ValueDescriptorImpl valueDescriptor,
+ @NotNull EvaluationContextImpl evaluationContext,
+ NodeManagerImpl nodeManager) {
super(valueDescriptor.getName());
myParent = parent;
myValueDescriptor = valueDescriptor;
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 d299af172340..69cbb140be86 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
@@ -83,8 +83,8 @@ public class MethodEvaluator implements Evaluator {
ReferenceType referenceType = null;
if(object instanceof ObjectReference) {
- final ReferenceType qualifierType = ((ObjectReference)object).referenceType();
- referenceType = debugProcess.findClass(context, qualifierType.name(), qualifierType.classLoader());
+ // it seems that if we have an object of the class, the class must be ready, so no need to use findClass here
+ referenceType = ((ObjectReference)object).referenceType();
}
else if(object instanceof ClassType) {
final ClassType qualifierType = (ClassType)object;
diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsEx.java b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsEx.java
index e937aac836ef..026b7111d18f 100644
--- a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsEx.java
+++ b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsEx.java
@@ -45,6 +45,7 @@ import com.intellij.psi.*;
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
import com.intellij.ui.classFilter.ClassFilter;
import com.intellij.util.SmartList;
+import com.intellij.util.containers.ContainerUtil;
import com.intellij.xdebugger.XSourcePosition;
import com.intellij.xdebugger.impl.XSourcePositionImpl;
import com.sun.jdi.*;
@@ -199,7 +200,7 @@ public abstract class DebuggerUtilsEx extends DebuggerUtils {
public static ClassFilter create(Element element) throws InvalidDataException {
ClassFilter filter = new ClassFilter();
- filter.readExternal(element);
+ DefaultJDOMExternalizer.readExternal(filter, element);
return filter;
}
@@ -245,24 +246,23 @@ public abstract class DebuggerUtilsEx extends DebuggerUtils {
return res;
}
- public static ClassFilter[] readFilters(List children) throws InvalidDataException {
- if (children == null || children.size() == 0) {
+ public static ClassFilter[] readFilters(List<Element> children) throws InvalidDataException {
+ if (ContainerUtil.isEmpty(children)) {
return ClassFilter.EMPTY_ARRAY;
}
- List<ClassFilter> classFiltersList = new ArrayList<ClassFilter>(children.size());
- for (Object aChildren : children) {
- final ClassFilter classFilter = new ClassFilter();
- classFilter.readExternal((Element)aChildren);
- classFiltersList.add(classFilter);
+
+ ClassFilter[] filters = new ClassFilter[children.size()];
+ for (int i = 0, size = children.size(); i < size; i++) {
+ filters[i] = create(children.get(i));
}
- return classFiltersList.toArray(new ClassFilter[classFiltersList.size()]);
+ return filters;
}
public static void writeFilters(Element parentNode, @NonNls String tagName, ClassFilter[] filters) throws WriteExternalException {
for (ClassFilter filter : filters) {
Element element = new Element(tagName);
parentNode.addContent(element);
- filter.writeExternal(element);
+ DefaultJDOMExternalizer.writeExternal(filter, element);
}
}
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 11b077340eb7..7b76b9738843 100644
--- a/java/debugger/impl/src/com/intellij/debugger/impl/JavaEditorTextProviderImpl.java
+++ b/java/debugger/impl/src/com/intellij/debugger/impl/JavaEditorTextProviderImpl.java
@@ -107,7 +107,10 @@ public class JavaEditorTextProviderImpl implements EditorTextProvider {
else if (parent instanceof PsiThisExpression) {
expression = parent;
}
- else if (parent instanceof PsiInstanceOfExpression || parent instanceof PsiBinaryExpression || parent instanceof PsiPolyadicExpression) {
+ else if (parent instanceof PsiInstanceOfExpression
+ || parent instanceof PsiBinaryExpression
+ || parent instanceof PsiPolyadicExpression
+ || parent instanceof PsiPrefixExpression) {
if (allowMethodCalls || !DebuggerUtils.hasSideEffects(parent)) {
expression = parent;
}
diff --git a/java/debugger/impl/src/com/intellij/debugger/jdi/Bytecodes.java b/java/debugger/impl/src/com/intellij/debugger/jdi/Bytecodes.java
index 86fb655b0853..d6aa2372e720 100644
--- a/java/debugger/impl/src/com/intellij/debugger/jdi/Bytecodes.java
+++ b/java/debugger/impl/src/com/intellij/debugger/jdi/Bytecodes.java
@@ -232,15 +232,16 @@ class Bytecodes {
static {
int i;
byte[] b = new byte[220];
- String s = "AAAAAAAAAAAAAAAABCLMMDDDDDEEEEEEEEEEEEEEEEEEEEAAAAAAAADD"
- + "DDDEEEEEEEEEEEEEEEEEEEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- + "AAAAAAAAAAAAAAAAANAAAAAAAAAAAAAAAAAAAAJJJJJJJJJJJJJJJJDOPAA"
- + "AAAAGGGGGGGHIFBFAAFFAARQJJKKJJJJJJJJJJJJJJJJJJ";
- for (i = 0; i < b.length; ++i) {
- b[i] = (byte) (s.charAt(i) - 'A');
- }
- TYPE = b;
+ String s =
+ "AAAAAAAAAAAAAAAABCLMMDDDDDEEEEEEEEEEEEEEEEEEEEAAAAAAAADDDDDEE" +
+ "EEEEEEEEEEEEEEEEEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" +
+ "AAAAAAAAAANAAAAAAAAAAAAAAAAAAAAJJJJJJJJJJJJJJJJDOPAAAAAAGGGGG" +
+ "GGHIFBFAAFFAARQJJKKJLMMGGGGGGGGGGGGHGAFFQFFGGG";
+ for (i = 0; i < b.length; ++i) {
+ b[i] = (byte) (s.charAt(i) - 'A');
}
+ TYPE = b;
+ }
static final int NOP = 0; // visitInsn
@@ -446,4 +447,139 @@ class Bytecodes {
static final int GOTO_W = 200; // -
static final int JSR_W = 201; // -
+ // JVM runtime-specific and reserved opcodes:
+ // From JVM specification:
+ // In addition to the opcodes of the instructions specified later in this chapter, which are used in class files (§4), three opcodes are reserved for internal use by a Java Virtual Machine implementation. If the instruction set of the Java Virtual Machine is extended in the future, these reserved opcodes are guaranteed not to be used.
+ // Two of the reserved opcodes, numbers 254 (0xfe) and 255 (0xff), have the mnemonics impdep1 and impdep2, respectively. These instructions are intended to provide "back doors" or traps to implementation-specific functionality implemented in software and hardware, respectively. The third reserved opcode, number 202 (0xca), has the mnemonic breakpoint and is intended to be used by debuggers to implement breakpoints.
+ // Although these opcodes have been reserved, they may be used only inside a Java Virtual Machine implementation. They cannot appear in valid class files. Tools such as debuggers or JIT code generators (§2.13) that might directly interact with Java Virtual Machine code that has been already loaded and executed may encounter these opcodes. Such tools should attempt to behave gracefully if they encounter any of these reserved instructions.
+
+ static final int BREAKPOINT = 202;
+ static final int LDC_QUICK = 203;
+ static final int LDC_W_QUICK = 204;
+ static final int LDC2_W_QUICK = 205;
+ static final int GETFIELD_QUICK = 206;
+ static final int PUTFIELD_QUICK = 207;
+ static final int GETFIELD2_QUICK = 208;
+ static final int PUTFIELD2_QUICK = 209;
+ static final int GETSTATIC_QUICK = 210;
+ static final int PUTSTATIC_QUICK = 211;
+ static final int GETSTATIC2_QUICK = 212;
+ static final int PUTSTATIC2_QUICK = 213;
+ static final int INVOKEVIRTUAL_QUICK = 214;
+ static final int INVOKENONVIRTUAL_QUICK = 215;
+ static final int INVOKESUPER_QUICK = 216;
+ static final int INVOKESTATIC_QUICK = 217;
+ static final int INVOKEINTERFACE_QUICK = 218;
+ static final int INVOKEVIRTUALOBJECT_QUICK = 219;
+ static final int NEW_QUICK = 221;
+ static final int ANEWARRAY_QUICK = 222;
+ static final int MULTIANEWARRAY_QUICK = 223;
+ static final int CHECKCAST_QUICK = 224;
+ static final int INSTANCEOF_QUICK = 225;
+ static final int INVOKEVIRTUAL_QUICK_W = 226;
+ static final int GETFIELD_QUICK_W = 227;
+ static final int PUTFIELD_QUICK_W = 228;
+ static final int IMPDEP1 = 254;
+ static final int IMPDEP2 = 255;
+
+ public static void main(String[] args) {
+ int[] b = new int[229];
+ //code to generate the above string
+
+ // SBYTE_INSN instructions
+ b[NEWARRAY] = SBYTE_INSN;
+ b[BIPUSH] = SBYTE_INSN;
+
+ // SHORT_INSN instructions
+ b[SIPUSH] = SHORT_INSN;
+
+ // (IMPL)VAR_INSN instructions
+ b[RET] = VAR_INSN;
+ for (int i = ILOAD; i <= ALOAD; ++i) {
+ b[i] = VAR_INSN;
+ }
+ for (int i = ISTORE; i <= ASTORE; ++i) {
+ b[i] = VAR_INSN;
+ }
+ for (int i = 26; i <= 45; ++i) { // ILOAD_0 to ALOAD_3
+ b[i] = IMPLVAR_INSN;
+ }
+ for (int i = 59; i <= 78; ++i) { // ISTORE_0 to ASTORE_3
+ b[i] = IMPLVAR_INSN;
+ }
+
+ // TYPE_INSN instructions
+ b[NEW] = TYPE_INSN;
+ b[ANEWARRAY] = TYPE_INSN;
+ b[CHECKCAST] = TYPE_INSN;
+ b[INSTANCEOF] = TYPE_INSN;
+
+ // (Set)FIELDORMETH_INSN instructions
+ for (int i = GETSTATIC; i <= INVOKESTATIC; ++i) {
+ b[i] = FIELDORMETH_INSN;
+ }
+ b[INVOKEINTERFACE] = ITFMETH_INSN;
+ b[INVOKEDYNAMIC] = INDYMETH_INSN;
+
+ // LABEL(W)_INSN instructions
+ for (int i = IFEQ; i <= JSR; ++i) {
+ b[i] = LABEL_INSN;
+ }
+ b[IFNULL] = LABEL_INSN;
+ b[IFNONNULL] = LABEL_INSN;
+ b[GOTO_W] = LABELW_INSN; // GOTO_W
+ b[JSR_W] = LABELW_INSN; // JSR_W
+
+ b[BREAKPOINT] = LABEL_INSN; // todo: is this correct?
+
+ // LDC(_W) instructions
+ b[LDC] = LDC_INSN;
+ b[LDC_W] = LDCW_INSN; // LDC_W
+ b[LDC2_W] = LDCW_INSN; // LDC2_W
+
+ // special instructions
+ b[IINC] = IINC_INSN;
+ b[TABLESWITCH] = TABL_INSN;
+ b[LOOKUPSWITCH] = LOOK_INSN;
+ b[MULTIANEWARRAY] = MANA_INSN;
+ b[WIDE] = WIDE_INSN; // WIDE
+
+ // runtime-specific
+
+ b[LDC_QUICK] = LDC_INSN; // = 203;
+ b[LDC_W_QUICK] = LDCW_INSN; // = 204;
+ b[LDC2_W_QUICK] = LDCW_INSN; // = 205;
+ b[GETFIELD_QUICK] = FIELDORMETH_INSN; // = 206;
+ b[PUTFIELD_QUICK] = FIELDORMETH_INSN; // = 207;
+
+ b[GETFIELD2_QUICK] = FIELDORMETH_INSN; // = 208;
+ b[PUTFIELD2_QUICK] = FIELDORMETH_INSN; // = 209;
+ b[GETSTATIC_QUICK] = FIELDORMETH_INSN; // = 210;
+ b[PUTSTATIC_QUICK] = FIELDORMETH_INSN; // = 211;
+ b[GETSTATIC2_QUICK] = FIELDORMETH_INSN; // = 212;
+ b[PUTSTATIC2_QUICK] = FIELDORMETH_INSN; // = 213;
+ b[INVOKEVIRTUAL_QUICK] = FIELDORMETH_INSN; // = 214;
+ b[INVOKENONVIRTUAL_QUICK] = FIELDORMETH_INSN; // = 215;
+ b[INVOKESUPER_QUICK] = FIELDORMETH_INSN; // = 216;
+ b[INVOKESTATIC_QUICK] = FIELDORMETH_INSN; // = 217;
+ b[INVOKEINTERFACE_QUICK] = ITFMETH_INSN; // = 218;
+ b[INVOKEVIRTUALOBJECT_QUICK] = FIELDORMETH_INSN; // = 219;
+ b[220] = Bytecodes.NOARG_INSN; // the ID is not used for any opcode
+ b[NEW_QUICK] = TYPE_INSN; // = 221;
+ b[ANEWARRAY_QUICK] = TYPE_INSN; // = 222;
+ b[MULTIANEWARRAY_QUICK] = MANA_INSN; // = 223;
+ b[CHECKCAST_QUICK] = TYPE_INSN; // = 224;
+ b[INSTANCEOF_QUICK] = TYPE_INSN; // = 225;
+ b[INVOKEVIRTUAL_QUICK_W] = FIELDORMETH_INSN; // = 226;
+ b[GETFIELD_QUICK_W] = FIELDORMETH_INSN; // = 227;
+ b[PUTFIELD_QUICK_W] = FIELDORMETH_INSN; // = 228;
+
+
+ for (int i = 0; i < b.length; ++i) {
+ System.err.print((char)('A' + b[i]));
+ }
+ System.err.println();
+
+ }
+
}
diff --git a/java/debugger/impl/src/com/intellij/debugger/jdi/InstructionParser.java b/java/debugger/impl/src/com/intellij/debugger/jdi/InstructionParser.java
index b8053a891d42..78bf10fe7e40 100644
--- a/java/debugger/impl/src/com/intellij/debugger/jdi/InstructionParser.java
+++ b/java/debugger/impl/src/com/intellij/debugger/jdi/InstructionParser.java
@@ -38,7 +38,8 @@ public class InstructionParser {
break;
}
int opcode = myCode[v] & 0xFF;
- switch (Bytecodes.TYPE[opcode]) {
+ final byte opcodeType = opcode == Bytecodes.IMPDEP1 || opcode == Bytecodes.IMPDEP2? Bytecodes.NOARG_INSN : Bytecodes.TYPE[opcode];
+ switch (opcodeType) {
case Bytecodes.NOARG_INSN:
v += 1;
break;
diff --git a/java/debugger/impl/src/com/intellij/debugger/settings/DebuggerDataViewsConfigurable.java b/java/debugger/impl/src/com/intellij/debugger/settings/DebuggerDataViewsConfigurable.java
index db01e13836ef..452a924aed00 100644
--- a/java/debugger/impl/src/com/intellij/debugger/settings/DebuggerDataViewsConfigurable.java
+++ b/java/debugger/impl/src/com/intellij/debugger/settings/DebuggerDataViewsConfigurable.java
@@ -20,6 +20,7 @@ import com.intellij.debugger.impl.DebuggerUtilsEx;
import com.intellij.debugger.ui.JavaDebuggerSupport;
import com.intellij.debugger.ui.tree.render.ClassRenderer;
import com.intellij.debugger.ui.tree.render.ToStringRenderer;
+import com.intellij.openapi.options.OptionsBundle;
import com.intellij.openapi.options.SearchableConfigurable;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.registry.Registry;
@@ -45,7 +46,6 @@ public class DebuggerDataViewsConfigurable implements SearchableConfigurable {
private JCheckBox myCbAutoscroll;
private JCheckBox myCbShowSyntheticFields;
private StateRestoringCheckBox myCbShowValFieldsAsLocalVariables;
- private JCheckBox myCbSort;
private JCheckBox myCbHideNullArrayElements;
private JCheckBox myCbShowStatic;
private JCheckBox myCbShowDeclaredType;
@@ -54,15 +54,13 @@ public class DebuggerDataViewsConfigurable implements SearchableConfigurable {
private StateRestoringCheckBox myCbShowStaticFinalFields;
private final ArrayRendererConfigurable myArrayRendererConfigurable;
- private JCheckBox myCbEnableAutoExpressions;
private JCheckBox myCbEnableAlternateViews;
private JCheckBox myCbEnableToString;
private JRadioButton myRbAllThatOverride;
private JRadioButton myRbFromList;
private ClassFilterEditor myToStringFilterEditor;
- private JTextField myValueTooltipDelayField;
-
+
private Project myProject;
private RegistryCheckBox myAutoTooltip;
@@ -71,16 +69,19 @@ public class DebuggerDataViewsConfigurable implements SearchableConfigurable {
myArrayRendererConfigurable = new ArrayRendererConfigurable(NodeRendererSettings.getInstance().getArrayRenderer());
}
+ @Override
public void disposeUIResources() {
myArrayRendererConfigurable.disposeUIResources();
myToStringFilterEditor = null;
myProject = null;
}
+ @Override
public String getDisplayName() {
- return DebuggerBundle.message("base.renderer.configurable.display.name");
+ return OptionsBundle.message("options.java.display.name");
}
+ @Override
public JComponent createComponent() {
if (myProject == null) {
myProject = JavaDebuggerSupport.getContextProjectForEditorFieldsInDebuggerConfigurables();
@@ -90,13 +91,12 @@ public class DebuggerDataViewsConfigurable implements SearchableConfigurable {
myCbAutoscroll = new JCheckBox(DebuggerBundle.message("label.base.renderer.configurable.autoscroll"));
myCbShowSyntheticFields = new JCheckBox(DebuggerBundle.message("label.base.renderer.configurable.show.synthetic.fields"));
myCbShowValFieldsAsLocalVariables = new StateRestoringCheckBox(DebuggerBundle.message("label.base.renderer.configurable.show.val.fields.as.locals"));
- myCbSort = new JCheckBox(DebuggerBundle.message("label.base.renderer.configurable.sort.alphabetically"));
myCbHideNullArrayElements = new JCheckBox(DebuggerBundle.message("label.base.renderer.configurable.hide.null.array.elements"));
myCbShowStatic = new JCheckBox(DebuggerBundle.message("label.base.renderer.configurable.show.static.fields"));
myCbShowStaticFinalFields = new StateRestoringCheckBox(DebuggerBundle.message("label.base.renderer.configurable.show.static.final.fields"));
myCbEnableAlternateViews = new JCheckBox(DebuggerBundle.message("label.base.renderer.configurable.alternate.view"));
- myCbEnableAutoExpressions = new JCheckBox(DebuggerBundle.message("label.base.renderer.configurable.auto.expressions"));
myCbShowStatic.addChangeListener(new ChangeListener(){
+ @Override
public void stateChanged(ChangeEvent e) {
if(myCbShowStatic.isSelected()) {
myCbShowStaticFinalFields.makeSelectable();
@@ -121,14 +121,15 @@ public class DebuggerDataViewsConfigurable implements SearchableConfigurable {
myCbShowFQNames = new JCheckBox(DebuggerBundle.message("label.base.renderer.configurable.show.fq.names"));
myCbShowObjectId = new JCheckBox(DebuggerBundle.message("label.base.renderer.configurable.show.object.id"));
- myCbEnableToString = new JCheckBox(DebuggerBundle.message("label.base.renderer.configurable.enable.tostring"));
- myRbAllThatOverride = new JRadioButton(DebuggerBundle.message("label.base.renderer.configurable.all.overridding"));
+ myCbEnableToString = new JCheckBox(DebuggerBundle.message("label.base.renderer.configurable.enable.toString"));
+ myRbAllThatOverride = new JRadioButton(DebuggerBundle.message("label.base.renderer.configurable.all.overriding"));
myRbFromList = new JRadioButton(DebuggerBundle.message("label.base.renderer.configurable.classes.from.list"));
ButtonGroup group = new ButtonGroup();
group.add(myRbAllThatOverride);
group.add(myRbFromList);
myToStringFilterEditor = new ClassFilterEditor(myProject, null, "reference.viewBreakpoints.classFilters.newPattern");
myCbEnableToString.addItemListener(new ItemListener() {
+ @Override
public void itemStateChanged(ItemEvent e) {
final boolean enabled = myCbEnableToString.isSelected();
myRbAllThatOverride.setEnabled(enabled);
@@ -137,12 +138,12 @@ public class DebuggerDataViewsConfigurable implements SearchableConfigurable {
}
});
myRbFromList.addItemListener(new ItemListener() {
+ @Override
public void itemStateChanged(ItemEvent e) {
myToStringFilterEditor.setEnabled(myCbEnableToString.isSelected() && myRbFromList.isSelected());
}
});
- panel.add(myCbSort, new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
panel.add(myCbAutoscroll, new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(4, 0, 0, 0), 0, 0));
@@ -151,14 +152,6 @@ public class DebuggerDataViewsConfigurable implements SearchableConfigurable {
DebuggerBundle.message("label.base.renderer.configurable.autoTooltip.description",
Registry.stringValue("ide.forcedShowTooltip")));
panel.add(myAutoTooltip, new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 0, 0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(4, 0, 0, 0), 0, 0));
-
- final JLabel tooltipLabel = new JLabel(DebuggerBundle.message("label.debugger.general.configurable.tooltips.delay"));
- panel.add(tooltipLabel, new GridBagConstraints(1, GridBagConstraints.RELATIVE, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(4, 0, 0, 0), 0, 0));
- myValueTooltipDelayField = new JTextField(10);
- myValueTooltipDelayField.setMinimumSize(new Dimension(50, myValueTooltipDelayField.getPreferredSize().height));
- panel.add(myValueTooltipDelayField, new GridBagConstraints(2, GridBagConstraints.RELATIVE, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(4, 0, 0, 0), 0, 0));
- tooltipLabel.setLabelFor(myValueTooltipDelayField);
-
final JPanel showPanel = new JPanel(new GridBagLayout());
showPanel.setBorder(IdeBorderFactory.createTitledBorder("Show", true));
@@ -174,12 +167,12 @@ public class DebuggerDataViewsConfigurable implements SearchableConfigurable {
final JPanel arraysPanel = new JPanel(new BorderLayout(0, UIUtil.DEFAULT_VGAP));
final JComponent arraysComponent = myArrayRendererConfigurable.createComponent();
+ assert arraysComponent != null;
arraysPanel.add(arraysComponent, BorderLayout.CENTER);
arraysPanel.add(myCbHideNullArrayElements, BorderLayout.SOUTH);
arraysPanel.setBorder(IdeBorderFactory.createTitledBorder("Arrays", true));
panel.add(arraysPanel, new GridBagConstraints(0, GridBagConstraints.RELATIVE, 3, 1, 1.0, 0.0, GridBagConstraints.NORTH, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0));
- panel.add(myCbEnableAutoExpressions, new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 10), 0, 0));
panel.add(myCbEnableAlternateViews, new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(4, 0, 0, 10), 0, 0));
// starting 4-th row
panel.add(myCbEnableToString, new GridBagConstraints(0, GridBagConstraints.RELATIVE, 3, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(4, 0, 0, 0), 0, 0));
@@ -191,22 +184,16 @@ public class DebuggerDataViewsConfigurable implements SearchableConfigurable {
return panel;
}
+ @Override
public void apply() {
final ViewsGeneralSettings generalSettings = ViewsGeneralSettings.getInstance();
final NodeRendererSettings rendererSettings = NodeRendererSettings.getInstance();
- try {
- DebuggerSettings.getInstance().VALUE_LOOKUP_DELAY = Integer.parseInt(myValueTooltipDelayField.getText().trim());
- }
- catch (NumberFormatException ignored) {
- }
generalSettings.AUTOSCROLL_TO_NEW_LOCALS = myCbAutoscroll.isSelected();
rendererSettings.setAlternateCollectionViewsEnabled(myCbEnableAlternateViews.isSelected());
generalSettings.HIDE_NULL_ARRAY_ELEMENTS = myCbHideNullArrayElements.isSelected();
- generalSettings.ENABLE_AUTO_EXPRESSIONS = myCbEnableAutoExpressions.isSelected();
final ClassRenderer classRenderer = rendererSettings.getClassRenderer();
- classRenderer.SORT_ASCENDING = myCbSort.isSelected();
classRenderer.SHOW_STATIC = myCbShowStatic.isSelected();
classRenderer.SHOW_STATIC_FINAL = myCbShowStaticFinalFields.isSelectedWhenSelectable();
classRenderer.SHOW_SYNTHETICS = myCbShowSyntheticFields.isSelected();
@@ -227,15 +214,14 @@ public class DebuggerDataViewsConfigurable implements SearchableConfigurable {
rendererSettings.fireRenderersChanged();
}
+ @Override
public void reset() {
final ViewsGeneralSettings generalSettings = ViewsGeneralSettings.getInstance();
final NodeRendererSettings rendererSettings = NodeRendererSettings.getInstance();
- myValueTooltipDelayField.setText(Integer.toString(DebuggerSettings.getInstance().VALUE_LOOKUP_DELAY));
myCbAutoscroll.setSelected(generalSettings.AUTOSCROLL_TO_NEW_LOCALS);
myCbHideNullArrayElements.setSelected(generalSettings.HIDE_NULL_ARRAY_ELEMENTS);
myCbEnableAlternateViews.setSelected(rendererSettings.areAlternateCollectionViewsEnabled());
- myCbEnableAutoExpressions.setSelected(generalSettings.ENABLE_AUTO_EXPRESSIONS);
ClassRenderer classRenderer = rendererSettings.getClassRenderer();
@@ -244,7 +230,6 @@ public class DebuggerDataViewsConfigurable implements SearchableConfigurable {
if (!classRenderer.SHOW_SYNTHETICS) {
myCbShowValFieldsAsLocalVariables.makeUnselectable(false);
}
- myCbSort.setSelected(classRenderer.SORT_ASCENDING);
myCbShowStatic.setSelected(classRenderer.SHOW_STATIC);
myCbShowStaticFinalFields.setSelected(classRenderer.SHOW_STATIC_FINAL);
if(!classRenderer.SHOW_STATIC) {
@@ -268,36 +253,27 @@ public class DebuggerDataViewsConfigurable implements SearchableConfigurable {
myArrayRendererConfigurable.reset();
}
+ @Override
public boolean isModified() {
- return areGeneralSettingsModified() || areDefaultRenderersModified() || areDebuggerSettingsModified();
- }
-
- private boolean areDebuggerSettingsModified() {
- try {
- return DebuggerSettings.getInstance().VALUE_LOOKUP_DELAY != Integer.parseInt(myValueTooltipDelayField.getText().trim());
- }
- catch (NumberFormatException ignored) {
- }
- return false;
+ return areGeneralSettingsModified() || areDefaultRenderersModified();
}
private boolean areGeneralSettingsModified() {
ViewsGeneralSettings generalSettings = ViewsGeneralSettings.getInstance();
- return
- (generalSettings.AUTOSCROLL_TO_NEW_LOCALS != myCbAutoscroll.isSelected()) ||
- (generalSettings.ENABLE_AUTO_EXPRESSIONS != myCbEnableAutoExpressions.isSelected()) ||
- (generalSettings.HIDE_NULL_ARRAY_ELEMENTS != myCbHideNullArrayElements.isSelected()) || myAutoTooltip.isChanged();
+ return generalSettings.AUTOSCROLL_TO_NEW_LOCALS != myCbAutoscroll.isSelected() ||
+ generalSettings.HIDE_NULL_ARRAY_ELEMENTS != myCbHideNullArrayElements.isSelected() ||
+ myAutoTooltip.isChanged();
}
private boolean areDefaultRenderersModified() {
if (myArrayRendererConfigurable.isModified()) {
return true;
}
+
final NodeRendererSettings rendererSettings = NodeRendererSettings.getInstance();
final ClassRenderer classRenderer = rendererSettings.getClassRenderer();
final boolean isClassRendererModified=
- (classRenderer.SORT_ASCENDING != myCbSort.isSelected()) ||
(classRenderer.SHOW_STATIC != myCbShowStatic.isSelected()) ||
(classRenderer.SHOW_STATIC_FINAL != myCbShowStaticFinalFields.isSelectedWhenSelectable()) ||
(classRenderer.SHOW_SYNTHETICS != myCbShowSyntheticFields.isSelected()) ||
@@ -325,16 +301,20 @@ public class DebuggerDataViewsConfigurable implements SearchableConfigurable {
return false;
}
+ @SuppressWarnings("SpellCheckingInspection")
+ @Override
@NotNull
public String getHelpTopic() {
return "reference.idesettings.debugger.dataviews";
}
+ @Override
@NotNull
public String getId() {
return getHelpTopic();
}
+ @Override
public Runnable enableSearch(String option) {
return null;
}
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 f731c8943dec..490f99bb5461 100644
--- a/java/debugger/impl/src/com/intellij/debugger/settings/DebuggerLaunchingConfigurable.java
+++ b/java/debugger/impl/src/com/intellij/debugger/settings/DebuggerLaunchingConfigurable.java
@@ -17,23 +17,21 @@ 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.util.SystemInfo;
-import com.intellij.openapi.util.registry.Registry;
import com.intellij.ui.StateRestoringCheckBox;
import com.intellij.ui.components.panels.VerticalBox;
import javax.swing.*;
-import javax.swing.border.Border;
import java.awt.*;
-public class DebuggerLaunchingConfigurable implements Configurable{
+public class DebuggerLaunchingConfigurable implements Configurable {
private JRadioButton myRbSocket;
private JRadioButton myRbShmem;
- private JCheckBox myHideDebuggerCheckBox;
private StateRestoringCheckBox myCbForceClassicVM;
private JCheckBox myCbDisableJIT;
- private JCheckBox myFocusAppCheckBox;
+ @Override
public void reset() {
final DebuggerSettings settings = DebuggerSettings.getInstance();
if (!SystemInfo.isWindows) {
@@ -49,12 +47,11 @@ public class DebuggerLaunchingConfigurable implements Configurable{
}
myRbShmem.setEnabled(true);
}
- myHideDebuggerCheckBox.setSelected(settings.HIDE_DEBUGGER_ON_PROCESS_TERMINATION);
myCbForceClassicVM.setSelected(settings.FORCE_CLASSIC_VM);
myCbDisableJIT.setSelected(settings.DISABLE_JIT);
- myFocusAppCheckBox.setSelected(Registry.is("debugger.mayBringFrameToFrontOnBreakpoint"));
}
+ @Override
public void apply() {
getSettingsTo(DebuggerSettings.getInstance());
}
@@ -66,43 +63,34 @@ public class DebuggerLaunchingConfigurable implements Configurable{
else {
settings.DEBUGGER_TRANSPORT = DebuggerSettings.SOCKET_TRANSPORT;
}
- settings.HIDE_DEBUGGER_ON_PROCESS_TERMINATION = myHideDebuggerCheckBox.isSelected();
settings.FORCE_CLASSIC_VM = myCbForceClassicVM.isSelectedWhenSelectable();
settings.DISABLE_JIT = myCbDisableJIT.isSelected();
- Registry.get("debugger.mayBringFrameToFrontOnBreakpoint").setValue(myFocusAppCheckBox.isSelected());
}
+ @Override
public boolean isModified() {
final DebuggerSettings currentSettings = DebuggerSettings.getInstance();
final DebuggerSettings debuggerSettings = currentSettings.clone();
getSettingsTo(debuggerSettings);
- return !debuggerSettings.equals(currentSettings) || Registry.is("debugger.mayBringFrameToFrontOnBreakpoint") != myFocusAppCheckBox.isSelected();
+ return !debuggerSettings.equals(currentSettings);
}
+ @Override
public String getDisplayName() {
- return DebuggerBundle.message("debugger.launching.configurable.display.name");
+ return OptionsBundle.message("options.java.display.name");
}
+ @Override
public String getHelpTopic() {
return "reference.idesettings.debugger.launching";
}
+ @Override
public JComponent createComponent() {
myCbForceClassicVM = new StateRestoringCheckBox(DebuggerBundle.message("label.debugger.launching.configurable.force.classic.vm"));
myCbDisableJIT = new JCheckBox(DebuggerBundle.message("label.debugger.launching.configurable.disable.jit"));
- myHideDebuggerCheckBox = new JCheckBox(DebuggerBundle.message("label.debugger.launching.configurable.hide.window"));
myRbSocket = new JRadioButton(DebuggerBundle.message("label.debugger.launching.configurable.socket"));
myRbShmem = new JRadioButton(DebuggerBundle.message("label.debugger.launching.configurable.shmem"));
- myFocusAppCheckBox = new JCheckBox(DebuggerBundle.message("label.debugger.focusAppOnBreakpoint"));
-
- int cbLeftOffset = 0;
- final Border border = myCbForceClassicVM.getBorder();
- if (border != null) {
- final Insets insets = border.getBorderInsets(myCbForceClassicVM);
- if (insets != null) {
- cbLeftOffset = insets.left;
- }
- }
final ButtonGroup gr = new ButtonGroup();
gr.add(myRbSocket);
@@ -119,8 +107,6 @@ public class DebuggerLaunchingConfigurable implements Configurable{
panel.add(transportPanel);
panel.add(myCbForceClassicVM);
panel.add(myCbDisableJIT);
- panel.add(myHideDebuggerCheckBox);
- panel.add(myFocusAppCheckBox);
JPanel result = new JPanel(new BorderLayout());
result.add(panel, BorderLayout.NORTH);
@@ -129,7 +115,7 @@ public class DebuggerLaunchingConfigurable implements Configurable{
}
+ @Override
public void disposeUIResources() {
}
-
-}
+} \ No newline at end of file
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 e25c895858a5..bb3fafed746f 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-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,25 +16,31 @@
package com.intellij.debugger.settings;
import com.intellij.debugger.impl.DebuggerUtilsEx;
-import com.intellij.openapi.components.NamedComponent;
-import com.intellij.openapi.components.ServiceManager;
+import com.intellij.openapi.components.*;
import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.util.DefaultJDOMExternalizer;
import com.intellij.openapi.util.InvalidDataException;
-import com.intellij.openapi.util.JDOMExternalizable;
import com.intellij.openapi.util.WriteExternalException;
import com.intellij.ui.classFilter.ClassFilter;
+import com.intellij.util.containers.hash.LinkedHashMap;
+import com.intellij.util.xmlb.SkipDefaultValuesSerializationFilters;
+import com.intellij.util.xmlb.XmlSerializer;
+import com.intellij.util.xmlb.annotations.Transient;
import org.jdom.Element;
import org.jetbrains.annotations.NonNls;
-import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
-import java.util.ArrayList;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
-public class DebuggerSettings implements JDOMExternalizable, NamedComponent, Cloneable {
- private static final Logger LOG = Logger.getInstance("#com.intellij.debugger.settings.DebuggerSettings");
+@State(
+ name = "DebuggerSettings",
+ storages = {
+ @Storage(
+ file = StoragePathMacros.APP_CONFIG + "/other.xml"
+ )}
+)
+public class DebuggerSettings implements Cloneable, PersistentStateComponent<Element> {
+ private static final Logger LOG = Logger.getInstance(DebuggerSettings.class);
public static final int SOCKET_TRANSPORT = 0;
public static final int SHMEM_TRANSPORT = 1;
@@ -50,11 +56,9 @@ public class DebuggerSettings implements JDOMExternalizable, NamedComponent, Clo
@NonNls public static final String RUN_HOTSWAP_ASK = "RunHotswapAsk";
public boolean TRACING_FILTERS_ENABLED;
- public int VALUE_LOOKUP_DELAY; // ms
public int DEBUGGER_TRANSPORT;
public boolean FORCE_CLASSIC_VM;
public boolean DISABLE_JIT;
- public boolean HIDE_DEBUGGER_ON_PROCESS_TERMINATION;
public boolean HOTSWAP_IN_BACKGROUND = true;
public boolean SKIP_SYNTHETIC_METHODS;
public boolean SKIP_CONSTRUCTORS;
@@ -72,8 +76,10 @@ public class DebuggerSettings implements JDOMExternalizable, NamedComponent, Clo
private ClassFilter[] mySteppingFilters = ClassFilter.EMPTY_ARRAY;
- private Map<String, ContentState> myContentStates = new HashMap<String, ContentState>();
+ private Map<String, ContentState> myContentStates = new LinkedHashMap<String, ContentState>();
+ // transient - custom serialization
+ @Transient
public ClassFilter[] getSteppingFilters() {
final ClassFilter[] rv = new ClassFilter[mySteppingFilters.length];
for (int idx = 0; idx < rv.length; idx++) {
@@ -82,50 +88,51 @@ public class DebuggerSettings implements JDOMExternalizable, NamedComponent, Clo
return rv;
}
+ public static DebuggerSettings getInstance() {
+ return ServiceManager.getService(DebuggerSettings.class);
+ }
+
public void setSteppingFilters(ClassFilter[] steppingFilters) {
mySteppingFilters = steppingFilters != null ? steppingFilters : ClassFilter.EMPTY_ARRAY;
}
- @SuppressWarnings({"HardCodedStringLiteral"})
- public void readExternal(Element parentNode) throws InvalidDataException {
- DefaultJDOMExternalizer.readExternal(this, parentNode);
- List<ClassFilter> filtersList = new ArrayList<ClassFilter>();
-
- for (final Object o : parentNode.getChildren("filter")) {
- Element filter = (Element)o;
- filtersList.add(DebuggerUtilsEx.create(filter));
- }
- setSteppingFilters(filtersList.toArray(new ClassFilter[filtersList.size()]));
-
- filtersList.clear();
-
- final List contents = parentNode.getChildren("content");
- myContentStates.clear();
- for (Object content : contents) {
- final ContentState state = new ContentState((Element)content);
- myContentStates.put(state.getType(), state);
+ @Nullable
+ @Override
+ public Element getState() {
+ Element state = XmlSerializer.serialize(this, new SkipDefaultValuesSerializationFilters());
+ try {
+ DebuggerUtilsEx.writeFilters(state, "filter", mySteppingFilters);
}
- }
-
- @SuppressWarnings({"HardCodedStringLiteral"})
- public void writeExternal(Element parentNode) throws WriteExternalException {
- DefaultJDOMExternalizer.writeExternal(this, parentNode);
- for (ClassFilter mySteppingFilter : mySteppingFilters) {
- Element element = new Element("filter");
- parentNode.addContent(element);
- mySteppingFilter.writeExternal(element);
+ catch (WriteExternalException e) {
+ LOG.error(e);
+ return null;
}
for (ContentState eachState : myContentStates.values()) {
final Element content = new Element("content");
if (eachState.write(content)) {
- parentNode.addContent(content);
+ state.addContent(content);
}
}
+ return state;
}
- public static DebuggerSettings getInstance() {
- return ServiceManager.getService(DebuggerSettings.class);
+ @Override
+ public void loadState(Element state) {
+ XmlSerializer.deserializeInto(this, state);
+
+ try {
+ setSteppingFilters(DebuggerUtilsEx.readFilters(state.getChildren("filter")));
+ }
+ catch (InvalidDataException e) {
+ LOG.error(e);
+ }
+
+ myContentStates.clear();
+ for (Element content : state.getChildren("content")) {
+ ContentState contentState = new ContentState(content);
+ myContentStates.put(contentState.getType(), contentState);
+ }
}
public boolean equals(Object obj) {
@@ -134,11 +141,9 @@ public class DebuggerSettings implements JDOMExternalizable, NamedComponent, Clo
return
TRACING_FILTERS_ENABLED == secondSettings.TRACING_FILTERS_ENABLED &&
- VALUE_LOOKUP_DELAY == secondSettings.VALUE_LOOKUP_DELAY &&
DEBUGGER_TRANSPORT == secondSettings.DEBUGGER_TRANSPORT &&
FORCE_CLASSIC_VM == secondSettings.FORCE_CLASSIC_VM &&
DISABLE_JIT == secondSettings.DISABLE_JIT &&
- HIDE_DEBUGGER_ON_PROCESS_TERMINATION == secondSettings.HIDE_DEBUGGER_ON_PROCESS_TERMINATION &&
HOTSWAP_IN_BACKGROUND == secondSettings.HOTSWAP_IN_BACKGROUND &&
SKIP_SYNTHETIC_METHODS == secondSettings.SKIP_SYNTHETIC_METHODS &&
SKIP_CLASSLOADERS == secondSettings.SKIP_CLASSLOADERS &&
@@ -150,6 +155,7 @@ public class DebuggerSettings implements JDOMExternalizable, NamedComponent, Clo
DebuggerUtilsEx.filterEquals(mySteppingFilters, secondSettings.mySteppingFilters);
}
+ @Override
public DebuggerSettings clone() {
try {
final DebuggerSettings cloned = (DebuggerSettings)super.clone();
@@ -169,13 +175,7 @@ public class DebuggerSettings implements JDOMExternalizable, NamedComponent, Clo
return null;
}
- @NotNull
- public String getComponentName() {
- return "DebuggerSettings";
- }
-
public static class ContentState implements Cloneable {
-
private final String myType;
private boolean myMinimized;
private String mySelectedTab;
@@ -208,7 +208,7 @@ public class DebuggerSettings implements JDOMExternalizable, NamedComponent, Clo
if (mySelectedTab != null) {
element.setAttribute("selected", mySelectedTab);
}
- element.setAttribute("split", new Double(mySplitProportion).toString());
+ element.setAttribute("split", Double.toString(mySplitProportion));
element.setAttribute("detached", Boolean.valueOf(myDetached).toString());
element.setAttribute("horizontal", Boolean.valueOf(myHorizontalToolbar).toString());
return true;
@@ -266,6 +266,7 @@ public class DebuggerSettings implements JDOMExternalizable, NamedComponent, Clo
myHorizontalToolbar = horizontalToolbar;
}
+ @Override
public ContentState clone() throws CloneNotSupportedException {
return (ContentState)super.clone();
}
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 75d9a81edc62..cec458ccbb70 100644
--- a/java/debugger/impl/src/com/intellij/debugger/settings/DebuggerSteppingConfigurable.java
+++ b/java/debugger/impl/src/com/intellij/debugger/settings/DebuggerSteppingConfigurable.java
@@ -18,6 +18,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.ui.classFilter.ClassFilterEditor;
@@ -37,6 +38,7 @@ public class DebuggerSteppingConfigurable implements SearchableConfigurable, Con
private JCheckBox myCbSkipSimpleGetters;
private Project myProject;
+ @Override
public void reset() {
final DebuggerSettings settings = DebuggerSettings.getInstance();
myCbSkipSimpleGetters.setSelected(settings.SKIP_GETTERS);
@@ -52,6 +54,7 @@ public class DebuggerSteppingConfigurable implements SearchableConfigurable, Con
}
+ @Override
public void apply() {
getSettingsTo(DebuggerSettings.getInstance());
}
@@ -67,6 +70,7 @@ public class DebuggerSteppingConfigurable implements SearchableConfigurable, Con
settings.setSteppingFilters(mySteppingFilterEditor.getFilters());
}
+ @Override
public boolean isModified() {
final DebuggerSettings currentSettings = DebuggerSettings.getInstance();
final DebuggerSettings debuggerSettings = currentSettings.clone();
@@ -74,30 +78,35 @@ public class DebuggerSteppingConfigurable implements SearchableConfigurable, Con
return !debuggerSettings.equals(currentSettings);
}
+ @Override
public String getDisplayName() {
- return DebuggerBundle.message("debugger.stepping.configurable.display.name");
+ 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() {
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"));
+ myCbSkipClassLoaders = new JCheckBox(DebuggerBundle.message("label.debugger.general.configurable.skip.classLoaders"));
myCbSkipSimpleGetters = new JCheckBox(DebuggerBundle.message("label.debugger.general.configurable.skip.simple.getters"));
myCbStepInfoFiltersEnabled = new JCheckBox(DebuggerBundle.message("label.debugger.general.configurable.step.filters.list.header"));
panel.add(myCbSkipSyntheticMethods, new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0),0, 0));
@@ -110,6 +119,7 @@ public class DebuggerSteppingConfigurable implements SearchableConfigurable, Con
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() {
+ @Override
public void actionPerformed(ActionEvent e) {
mySteppingFilterEditor.setEnabled(myCbStepInfoFiltersEnabled.isSelected());
}
@@ -117,6 +127,7 @@ public class DebuggerSteppingConfigurable implements SearchableConfigurable, Con
return panel;
}
+ @Override
public void disposeUIResources() {
mySteppingFilterEditor = null;
myProject = null;
diff --git a/java/debugger/impl/src/com/intellij/debugger/settings/JavaDebuggerSettings.java b/java/debugger/impl/src/com/intellij/debugger/settings/JavaDebuggerSettings.java
new file mode 100644
index 000000000000..7151cb9f650e
--- /dev/null
+++ b/java/debugger/impl/src/com/intellij/debugger/settings/JavaDebuggerSettings.java
@@ -0,0 +1,66 @@
+/*
+ * 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.debugger.settings;
+
+import com.intellij.openapi.options.Configurable;
+import com.intellij.xdebugger.settings.XDebuggerSettings;
+import org.jdom.Element;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * 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.
+ *
+ * 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> {
+ protected JavaDebuggerSettings() {
+ super("java");
+ }
+
+ @Nullable
+ @Override
+ public Configurable createConfigurable(@NotNull Category category) {
+ switch (category) {
+ case ROOT:
+ return new DebuggerLaunchingConfigurable();
+ case DATA_VIEWS:
+ return new DebuggerDataViewsConfigurable(null);
+ case STEPPING:
+ return new DebuggerSteppingConfigurable();
+ }
+ return null;
+ }
+
+ @Override
+ public void generalApplied(@NotNull XDebuggerSettings.Category category) {
+ if (category == XDebuggerSettings.Category.DATA_VIEWS) {
+ NodeRendererSettings.getInstance().fireRenderersChanged();
+ }
+ }
+
+ @Nullable
+ @Override
+ public Element getState() {
+ return null;
+ }
+
+ @Override
+ public void loadState(Element state) {
+ }
+} \ No newline at end of file
diff --git a/java/debugger/impl/src/com/intellij/debugger/settings/ViewsGeneralSettings.java b/java/debugger/impl/src/com/intellij/debugger/settings/ViewsGeneralSettings.java
index 8518e8258519..9555ce6c34dc 100644
--- a/java/debugger/impl/src/com/intellij/debugger/settings/ViewsGeneralSettings.java
+++ b/java/debugger/impl/src/com/intellij/debugger/settings/ViewsGeneralSettings.java
@@ -32,7 +32,6 @@ public class ViewsGeneralSettings implements PersistentStateComponent<Element> {
public boolean SHOW_OBJECTID = true;
public boolean HIDE_NULL_ARRAY_ELEMENTS = true;
public boolean AUTOSCROLL_TO_NEW_LOCALS = true;
- public boolean ENABLE_AUTO_EXPRESSIONS = true;
public ViewsGeneralSettings() {
}
@@ -41,22 +40,22 @@ public class ViewsGeneralSettings implements PersistentStateComponent<Element> {
return ServiceManager.getService(ViewsGeneralSettings.class);
}
+ @Override
public void loadState(Element element) {
try {
DefaultJDOMExternalizer.readExternal(this, element);
}
- catch (InvalidDataException e) {
- // ignore
+ catch (InvalidDataException ignored) {
}
}
+ @Override
public Element getState() {
Element element = new Element("ViewsGeneralSettings");
try {
DefaultJDOMExternalizer.writeExternal(this, element);
}
- catch (WriteExternalException e) {
- // ignore
+ catch (WriteExternalException ignored) {
}
return element;
}
diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerSessionTab.java b/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerSessionTab.java
index 7b4b22ee19be..600efd834e56 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerSessionTab.java
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerSessionTab.java
@@ -61,6 +61,7 @@ import com.intellij.unscramble.ThreadDumpPanel;
import com.intellij.unscramble.ThreadState;
import com.intellij.xdebugger.XDebuggerBundle;
import com.intellij.xdebugger.impl.actions.XDebuggerActions;
+import com.intellij.xdebugger.impl.settings.XDebuggerSettingsManager;
import com.intellij.xdebugger.impl.ui.DebuggerSessionTabBase;
import com.intellij.xdebugger.impl.ui.XDebuggerUIConstants;
import org.jetbrains.annotations.NotNull;
@@ -105,7 +106,7 @@ public class DebuggerSessionTab extends DebuggerSessionTabBase implements Dispos
case DebuggerSession.EVENT_DETACHED:
myUi.updateActionsNow();
- if (debuggerSettings.HIDE_DEBUGGER_ON_PROCESS_TERMINATION) {
+ if (XDebuggerSettingsManager.getInstanceImpl().getGeneralSettings().isHideDebuggerOnProcessTermination()) {
try {
ExecutionManager.getInstance(getProject()).getContentManager().hideRunContent(DefaultDebugExecutor.getDebugExecutorInstance(), myRunContentDescriptor);
}
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 630fa30339d2..27f63e032314 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/JavaDebuggerSupport.java
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/JavaDebuggerSupport.java
@@ -18,7 +18,9 @@ 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.*;
+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;
@@ -333,22 +335,16 @@ public class JavaDebuggerSupport extends DebuggerSupport {
//}
}
- public static class JavaDebuggerSettingsPanelProvider extends DebuggerSettingsPanelProvider {
+ final static class JavaDebuggerSettingsPanelProvider extends DebuggerSettingsPanelProvider {
@Override
public int getPriority() {
return 1;
}
- @Override
- public Configurable getRootConfigurable() {
- return new DebuggerLaunchingConfigurable();
- }
-
+ @NotNull
@Override
public Collection<? extends Configurable> getConfigurables() {
final ArrayList<Configurable> configurables = new ArrayList<Configurable>();
- configurables.add(new DebuggerDataViewsConfigurable(null));
- configurables.add(new DebuggerSteppingConfigurable());
configurables.add(new UserRenderersConfigurable(null));
configurables.add(new DebuggerHotswapConfigurable());
return configurables;
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 1087338ab8d5..d6cbf1487ab9 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
@@ -177,7 +177,12 @@ public abstract class BreakpointWithHighlighter<P extends JavaBreakpointProperti
protected BreakpointWithHighlighter(@NotNull Project project, XBreakpoint xBreakpoint) {
//for persistency
super(project, xBreakpoint);
- reload();
+ ApplicationManager.getApplication().runReadAction(new Runnable() {
+ @Override
+ public void run() {
+ reload();
+ }
+ });
}
@Override
diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaExceptionBreakpointType.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaExceptionBreakpointType.java
index 3bbea653a8a9..638e6a018c96 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaExceptionBreakpointType.java
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaExceptionBreakpointType.java
@@ -59,6 +59,18 @@ public class JavaExceptionBreakpointType extends JavaBreakpointTypeBase<JavaExce
return AllIcons.Debugger.Db_disabled_exception_breakpoint;
}
+ @NotNull
+ @Override
+ public Icon getMutedEnabledIcon() {
+ return AllIcons.Debugger.Db_muted_exception_breakpoint;
+ }
+
+ @NotNull
+ @Override
+ public Icon getMutedDisabledIcon() {
+ return AllIcons.Debugger.Db_muted_disabled_exception_breakpoint;
+ }
+
//@Override
protected String getHelpID() {
return HelpID.EXCEPTION_BREAKPOINTS;
diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaFieldBreakpointType.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaFieldBreakpointType.java
index 0b1ba90ecbd6..f34898b7f615 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaFieldBreakpointType.java
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaFieldBreakpointType.java
@@ -63,6 +63,18 @@ public class JavaFieldBreakpointType extends JavaLineBreakpointTypeBase<JavaFiel
return AllIcons.Debugger.Db_disabled_field_breakpoint;
}
+ @NotNull
+ @Override
+ public Icon getMutedEnabledIcon() {
+ return AllIcons.Debugger.Db_muted_field_breakpoint;
+ }
+
+ @NotNull
+ @Override
+ public Icon getMutedDisabledIcon() {
+ return AllIcons.Debugger.Db_muted_disabled_field_breakpoint;
+ }
+
//@Override
protected String getHelpID() {
return HelpID.FIELD_WATCHPOINTS;
diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaLineBreakpointType.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaLineBreakpointType.java
index 70d0f009e76c..a3c442fb410b 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaLineBreakpointType.java
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaLineBreakpointType.java
@@ -41,18 +41,6 @@ public class JavaLineBreakpointType extends JavaLineBreakpointTypeBase<JavaBreak
super("java-line", DebuggerBundle.message("line.breakpoints.tab.title"));
}
- @NotNull
- @Override
- public Icon getEnabledIcon() {
- return AllIcons.Debugger.Db_set_breakpoint;
- }
-
- @NotNull
- @Override
- public Icon getDisabledIcon() {
- return AllIcons.Debugger.Db_disabled_breakpoint;
- }
-
//@Override
protected String getHelpID() {
return HelpID.LINE_BREAKPOINTS;
diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaMethodBreakpointType.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaMethodBreakpointType.java
index 2ec27499e9a3..4d7d51295fd6 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaMethodBreakpointType.java
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaMethodBreakpointType.java
@@ -51,6 +51,18 @@ public class JavaMethodBreakpointType extends JavaLineBreakpointTypeBase<JavaMet
return AllIcons.Debugger.Db_disabled_method_breakpoint;
}
+ @NotNull
+ @Override
+ public Icon getMutedEnabledIcon() {
+ return AllIcons.Debugger.Db_muted_method_breakpoint;
+ }
+
+ @NotNull
+ @Override
+ public Icon getMutedDisabledIcon() {
+ return AllIcons.Debugger.Db_muted_disabled_method_breakpoint;
+ }
+
//@Override
protected String getHelpID() {
return HelpID.METHOD_BREAKPOINTS;
diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaWildcardMethodBreakpointType.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaWildcardMethodBreakpointType.java
index 8fea87b40db2..83da4a9f7027 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaWildcardMethodBreakpointType.java
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaWildcardMethodBreakpointType.java
@@ -50,6 +50,18 @@ public class JavaWildcardMethodBreakpointType extends JavaBreakpointTypeBase<Jav
return AllIcons.Debugger.Db_disabled_method_breakpoint;
}
+ @NotNull
+ @Override
+ public Icon getMutedEnabledIcon() {
+ return AllIcons.Debugger.Db_muted_method_breakpoint;
+ }
+
+ @NotNull
+ @Override
+ public Icon getMutedDisabledIcon() {
+ return AllIcons.Debugger.Db_muted_disabled_method_breakpoint;
+ }
+
//@Override
protected String getHelpID() {
return HelpID.METHOD_BREAKPOINTS;
diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/impl/FrameVariablesTree.java b/java/debugger/impl/src/com/intellij/debugger/ui/impl/FrameVariablesTree.java
index 8cb6828d26e8..5d32e714ab89 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/impl/FrameVariablesTree.java
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/impl/FrameVariablesTree.java
@@ -53,6 +53,7 @@ import com.intellij.util.text.CharArrayUtil;
import com.intellij.util.ui.tree.TreeModelAdapter;
import com.intellij.xdebugger.XDebuggerBundle;
import com.intellij.xdebugger.frame.XStackFrame;
+import com.intellij.xdebugger.settings.XDebuggerSettingsManager;
import com.sun.jdi.*;
import gnu.trove.TIntObjectHashMap;
import gnu.trove.TObjectProcedure;
@@ -157,7 +158,7 @@ public class FrameVariablesTree extends DebuggerTree {
}
try {
- if (!ViewsGeneralSettings.getInstance().ENABLE_AUTO_EXPRESSIONS && !myAutoWatchMode) {
+ if (!XDebuggerSettingsManager.getInstance().getDataViewSettings().isAutoExpressions() && !myAutoWatchMode) {
// optimization
super.buildVariables(stackDescriptor, evaluationContext);
}
@@ -273,7 +274,7 @@ public class FrameVariablesTree extends DebuggerTree {
}
catch (UnsupportedOperationException ignored) {
}
- catch (InternalException e) {
+ catch (Exception e) {
LOG.info(e);
}
return Collections.emptyList();
@@ -569,7 +570,7 @@ public class FrameVariablesTree extends DebuggerTree {
myVars = vars;
myPosition = position;
myEvalContext = evalContext;
- myCollectExpressions = ViewsGeneralSettings.getInstance().ENABLE_AUTO_EXPRESSIONS;
+ myCollectExpressions = XDebuggerSettingsManager.getInstance().getDataViewSettings().isAutoExpressions();
}
@Override
diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/impl/TipManager.java b/java/debugger/impl/src/com/intellij/debugger/ui/impl/TipManager.java
index fce05d1f23db..df91efed9579 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/impl/TipManager.java
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/impl/TipManager.java
@@ -15,7 +15,6 @@
*/
package com.intellij.debugger.ui.impl;
-import com.intellij.debugger.settings.DebuggerSettings;
import com.intellij.ide.FrameStateListener;
import com.intellij.ide.FrameStateManager;
import com.intellij.openapi.Disposable;
@@ -32,6 +31,7 @@ import com.intellij.util.Alarm;
import com.intellij.util.ui.UIUtil;
import com.intellij.util.ui.update.Activatable;
import com.intellij.util.ui.update.UiNotifyConnector;
+import com.intellij.xdebugger.settings.XDebuggerSettingsManager;
import javax.swing.*;
import javax.swing.event.PopupMenuEvent;
@@ -117,14 +117,17 @@ public class TipManager implements Disposable, PopupMenuListener {
return menu;
}
+ @Override
public void popupMenuWillBecomeVisible(final PopupMenuEvent e) {
myPopupShown = true;
}
+ @Override
public void popupMenuWillBecomeInvisible(final PopupMenuEvent e) {
onPopupClosed(e);
}
+ @Override
public void popupMenuCanceled(final PopupMenuEvent e) {
onPopupClosed(e);
}
@@ -174,12 +177,13 @@ public class TipManager implements Disposable, PopupMenuListener {
myShowAlarm.cancelAllRequests();
myHideAlarm.cancelAllRequests();
myShowAlarm.addRequest(new Runnable() {
+ @Override
public void run() {
if (!myIsDisposed && !myPopupShown) {
showTooltip(e, auto);
}
}
- }, auto ? DebuggerSettings.getInstance().VALUE_LOOKUP_DELAY : 10);
+ }, auto ? XDebuggerSettingsManager.getInstance().getDataViewSettings().getValueLookupDelay() : 10);
}
private void showTooltip(InputEvent e, boolean auto) {
@@ -245,6 +249,7 @@ public class TipManager implements Disposable, PopupMenuListener {
myCurrentTooltip = null;
} else {
myHideAlarm.addRequest(new Runnable() {
+ @Override
public void run() {
if (myInsideComponent) {
hideTooltip(true);
@@ -273,10 +278,12 @@ public class TipManager implements Disposable, PopupMenuListener {
myComponent = component;
new UiNotifyConnector.Once(component, new Activatable() {
+ @Override
public void showNotify() {
installListeners();
}
+ @Override
public void hideNotify() {
}
});
@@ -284,6 +291,7 @@ public class TipManager implements Disposable, PopupMenuListener {
final HideTooltipAction hide = new HideTooltipAction();
hide.registerCustomShortcutSet(new CustomShortcutSet(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0)), myComponent);
Disposer.register(this, new Disposable() {
+ @Override
public void dispose() {
hide.unregisterCustomShortcutSet(myComponent);
}
@@ -292,6 +300,7 @@ public class TipManager implements Disposable, PopupMenuListener {
private class HideTooltipAction extends AnAction {
+ @Override
public void actionPerformed(AnActionEvent e) {
hideTooltip(true);
}
@@ -316,6 +325,7 @@ public class TipManager implements Disposable, PopupMenuListener {
FrameStateManager.getInstance().addListener(myFrameStateListener);
}
+ @Override
public void dispose() {
Disposer.dispose(this);
@@ -333,6 +343,7 @@ public class TipManager implements Disposable, PopupMenuListener {
private class MyAwtPreprocessor implements AWTEventListener {
+ @Override
public void eventDispatched(AWTEvent event) {
if (event.getID() == MouseEvent.MOUSE_MOVED) {
preventFromHideIfInsideTooltip(event);
diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/DebuggerTree.java b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/DebuggerTree.java
index 52d557535917..d333eaaacd10 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/DebuggerTree.java
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/DebuggerTree.java
@@ -55,6 +55,7 @@ import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.ui.SpeedSearchComparator;
import com.intellij.ui.TreeSpeedSearch;
+import com.intellij.xdebugger.settings.XDebuggerSettingsManager;
import com.sun.jdi.*;
import com.sun.jdi.event.Event;
import com.sun.jdi.event.ExceptionEvent;
@@ -485,7 +486,7 @@ public abstract class DebuggerTree extends DebuggerTreeBase implements DataProvi
try {
buildVariables(stackDescriptor, evaluationContext);
- if (classRenderer.SORT_ASCENDING) {
+ if (XDebuggerSettingsManager.getInstance().getDataViewSettings().isSortValues()) {
Collections.sort(myChildren, NodeManagerImpl.getNodeComparator());
}
}
diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/BatchEvaluator.java b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/BatchEvaluator.java
index abf937e5a793..59749a2b001a 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/BatchEvaluator.java
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/BatchEvaluator.java
@@ -27,6 +27,7 @@ import com.intellij.debugger.engine.jdi.ThreadReferenceProxy;
import com.intellij.debugger.engine.managerThread.SuspendContextCommand;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.Key;
+import com.intellij.openapi.util.registry.Registry;
import com.intellij.rt.debugger.BatchEvaluatorServer;
import com.intellij.util.containers.HashMap;
import com.sun.jdi.*;
@@ -120,7 +121,7 @@ public class BatchEvaluator {
final EvaluationContext evaluationContext = command.getEvaluationContext();
final SuspendContext suspendContext = evaluationContext.getSuspendContext();
- if(!hasBatchEvaluator(evaluationContext)) {
+ if(!Registry.is("debugger.batch.evaluation") || !hasBatchEvaluator(evaluationContext)) {
myDebugProcess.getManagerThread().invokeCommand(command);
}
else {
diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ClassRenderer.java b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ClassRenderer.java
index bd14ef55b054..7fe89bb42299 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ClassRenderer.java
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ClassRenderer.java
@@ -38,6 +38,7 @@ import com.intellij.psi.PsiElementFactory;
import com.intellij.psi.PsiExpression;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.StringBuilderSpinAllocator;
+import com.intellij.xdebugger.settings.XDebuggerSettingsManager;
import com.sun.jdi.*;
import org.jdom.Element;
import org.jetbrains.annotations.NonNls;
@@ -58,7 +59,6 @@ public class ClassRenderer extends NodeRendererImpl{
public static final @NonNls String UNIQUE_ID = "ClassRenderer";
- public boolean SORT_ASCENDING = false;
public boolean SHOW_SYNTHETICS = true;
public boolean SHOW_VAL_FIELDS_AS_LOCAL_VARIABLES = true;
public boolean SHOW_STATIC = false;
@@ -83,22 +83,27 @@ public class ClassRenderer extends NodeRendererImpl{
return typeName;
}
+ @Override
public String getUniqueId() {
return UNIQUE_ID;
}
+ @Override
public boolean isEnabled() {
return myProperties.isEnabled();
}
+ @Override
public void setEnabled(boolean enabled) {
myProperties.setEnabled(enabled);
}
+ @Override
public ClassRenderer clone() {
return (ClassRenderer) super.clone();
}
+ @Override
public String calcLabel(ValueDescriptor descriptor, EvaluationContext evaluationContext, DescriptorLabelListener labelListener) throws EvaluateException {
return calcLabel(descriptor);
}
@@ -151,6 +156,7 @@ public class ClassRenderer extends NodeRendererImpl{
}
}
+ @Override
public void buildChildren(final Value value, final ChildrenBuilder builder, final EvaluationContext evaluationContext) {
DebuggerManagerThreadImpl.assertIsManagerThread();
final ValueDescriptorImpl parentDescriptor = (ValueDescriptorImpl)builder.getParentDescriptor();
@@ -171,7 +177,7 @@ public class ClassRenderer extends NodeRendererImpl{
children.add(nodeManager.createNode(nodeDescriptorFactory.getFieldDescriptor(parentDescriptor, objRef, field), evaluationContext));
}
- if(SORT_ASCENDING) {
+ if (XDebuggerSettingsManager.getInstance().getDataViewSettings().isSortValues()) {
Collections.sort(children, NodeManagerImpl.getNodeComparator());
}
}
@@ -211,16 +217,19 @@ public class ClassRenderer extends NodeRendererImpl{
return true;
}
+ @Override
public void readExternal(Element element) throws InvalidDataException {
super.readExternal(element);
DefaultJDOMExternalizer.readExternal(this, element);
}
+ @Override
public void writeExternal(Element element) throws WriteExternalException {
super.writeExternal(element);
DefaultJDOMExternalizer.writeExternal(this, element);
}
+ @Override
public PsiExpression getChildValueExpression(DebuggerTreeNode node, DebuggerContext context) throws EvaluateException {
FieldDescriptor fieldDescriptor = (FieldDescriptor)node.getDescriptor();
@@ -251,19 +260,23 @@ public class ClassRenderer extends NodeRendererImpl{
return false;
}
+ @Override
public boolean isExpandable(Value value, EvaluationContext evaluationContext, NodeDescriptor parentDescriptor) {
DebuggerManagerThreadImpl.assertIsManagerThread();
return valueExpandable(value);
}
+ @Override
public boolean isApplicable(Type type) {
return type instanceof ReferenceType && !(type instanceof ArrayType);
}
+ @Override
public @NonNls String getName() {
return "Object";
}
+ @Override
public void setName(String text) {
LOG.assertTrue(false);
}
diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ToStringRenderer.java b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ToStringRenderer.java
index fd77aa900a7c..4016289147a7 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ToStringRenderer.java
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ToStringRenderer.java
@@ -36,7 +36,7 @@ import com.sun.jdi.*;
import org.jdom.Element;
import org.jetbrains.annotations.NonNls;
-import java.util.Iterator;
+import java.util.List;
import static com.intellij.psi.CommonClassNames.JAVA_LANG_STRING;
@@ -126,14 +126,10 @@ public class ToStringRenderer extends NodeRendererImpl {
@SuppressWarnings({"HardCodedStringLiteral"})
private static boolean overridesToString(Type type) {
if(type instanceof ClassType) {
- final ClassType classType = (ClassType)type;
- final java.util.List methods = classType.methodsByName("toString", "()Ljava/lang/String;");
- if (methods.size() > 0) {
- for (Iterator iterator = methods.iterator(); iterator.hasNext();) {
- final Method method = (Method)iterator.next();
- if(!(method.declaringType().name()).equals(CommonClassNames.JAVA_LANG_OBJECT)){
- return true;
- }
+ final List<Method> methods = ((ClassType)type).methodsByName("toString", "()Ljava/lang/String;");
+ for (Method method : methods) {
+ if (!(method.declaringType().name()).equals(CommonClassNames.JAVA_LANG_OBJECT)) {
+ return true;
}
}
}
@@ -182,7 +178,7 @@ public class ToStringRenderer extends NodeRendererImpl {
private boolean isFiltered(Type t) {
if (t instanceof ReferenceType) {
for (ClassFilter classFilter : myClassFilters) {
- if (classFilter.isEnabled() && DebuggerUtilsEx.getSuperType(t, classFilter.getPattern()) != null) {
+ if (classFilter.isEnabled() && DebuggerUtils.getSuperType(t, classFilter.getPattern()) != null) {
return true;
}
}
diff --git a/java/debugger/impl/src/org/jetbrains/java/debugger/breakpoints/properties/JavaBreakpointProperties.java b/java/debugger/impl/src/org/jetbrains/java/debugger/breakpoints/properties/JavaBreakpointProperties.java
index 599aed3dd0dd..be8833afd55b 100644
--- a/java/debugger/impl/src/org/jetbrains/java/debugger/breakpoints/properties/JavaBreakpointProperties.java
+++ b/java/debugger/impl/src/org/jetbrains/java/debugger/breakpoints/properties/JavaBreakpointProperties.java
@@ -45,7 +45,7 @@ public class JavaBreakpointProperties<T extends JavaBreakpointProperties> extend
}
public boolean setInstanceFilters(InstanceFilter[] instanceFilters) {
- boolean changed = !Comparing.equal(myInstanceFilters, instanceFilters);
+ boolean changed = !filtersEqual(myInstanceFilters, instanceFilters);
myInstanceFilters = instanceFilters;
return changed;
}
@@ -64,11 +64,18 @@ public class JavaBreakpointProperties<T extends JavaBreakpointProperties> extend
}
public final boolean setClassFilters(ClassFilter[] classFilters) {
- boolean changed = !Comparing.equal(myClassFilters, classFilters);
+ boolean changed = !filtersEqual(myClassFilters, classFilters);
myClassFilters = classFilters;
return changed;
}
+ private static boolean filtersEqual(Object[] a, Object[] b) {
+ if ((a == null || a.length == 0) && (b == null || b.length == 0)) {
+ return true;
+ }
+ return Comparing.equal(a, b);
+ }
+
@Tag("class-exclusion-filters")
@AbstractCollection(surroundWithTag = false)
public ClassFilter[] getClassExclusionFilters() {
@@ -76,7 +83,7 @@ public class JavaBreakpointProperties<T extends JavaBreakpointProperties> extend
}
public boolean setClassExclusionFilters(ClassFilter[] classExclusionFilters) {
- boolean changed = !Comparing.equal(myClassExclusionFilters, classExclusionFilters);
+ boolean changed = !filtersEqual(myClassExclusionFilters, classExclusionFilters);
myClassExclusionFilters = classExclusionFilters;
return changed;
}