diff options
Diffstat (limited to 'platform/script-debugger/debugger-ui/src/org/jetbrains/debugger')
6 files changed, 71 insertions, 26 deletions
diff --git a/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/BasicDebuggerViewSupport.java b/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/BasicDebuggerViewSupport.java index a5cf778db7e2..b2fd544d0b86 100644 --- a/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/BasicDebuggerViewSupport.java +++ b/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/BasicDebuggerViewSupport.java @@ -97,6 +97,17 @@ public class BasicDebuggerViewSupport implements DebuggerViewSupport, MemberFilt @NotNull @Override + public String getName(@NotNull Variable variable) { + return variable.getName(); + } + + @Override + public boolean hasNameMappings() { + return false; + } + + @NotNull + @Override public String normalizeMemberName(@NotNull Variable variable) { return variable.getName(); } diff --git a/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/LazyVariablesGroup.java b/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/LazyVariablesGroup.java index 25b8b3e11ee5..c00f6727203d 100644 --- a/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/LazyVariablesGroup.java +++ b/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/LazyVariablesGroup.java @@ -71,7 +71,7 @@ public final class LazyVariablesGroup extends XValueGroup { @Override public void consumeVariables(@NotNull List<Variable> variables) { - node.addChildren(Variables.createVariablesList(variables, context), true); + node.addChildren(Variables.createVariablesList(variables, context, null), true); } }, componentType); } diff --git a/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/MemberFilter.java b/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/MemberFilter.java index fb3a7c1f175c..b9b60178e5ff 100644 --- a/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/MemberFilter.java +++ b/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/MemberFilter.java @@ -9,4 +9,9 @@ public interface MemberFilter { @NotNull Collection<Variable> getAdditionalVariables(); + + @NotNull + String getName(@NotNull Variable variable); + + boolean hasNameMappings(); }
\ No newline at end of file diff --git a/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/VariableView.java b/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/VariableView.java index ada850da074b..9ee54199ff8c 100644 --- a/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/VariableView.java +++ b/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/VariableView.java @@ -57,7 +57,11 @@ public final class VariableView extends XNamedValue implements VariableContext { private volatile int remainingChildrenOffset; public VariableView(@NotNull Variable variable, @NotNull VariableContext context) { - super(context.getViewSupport().normalizeMemberName(variable)); + this(context.getViewSupport().normalizeMemberName(variable), variable, context); + } + + public VariableView(@NotNull String name, @NotNull Variable variable, @NotNull VariableContext context) { + super(name); this.context = context; this.variable = variable; @@ -162,14 +166,7 @@ public final class VariableView extends XNamedValue implements VariableContext { @Override public void consume(Value value, String error) { if (!node.isObsolete()) { - value = getViewSupport().transformErrorOnGetUsedReferenceValue(value, error); - if (value == null) { - node.setPresentation(AllIcons.Debugger.Db_primitive, null, error, false); - } - else { - VariableView.this.value = value; - computePresentation(value, node); - } + setEvaluatedValue(getViewSupport().transformErrorOnGetUsedReferenceValue(value, error), error, node); } } }); @@ -187,18 +184,29 @@ public final class VariableView extends XNamedValue implements VariableContext { public void startEvaluation(@NotNull final XFullValueEvaluationCallback callback) { ValueModifier valueModifier = variable.getValueModifier(); assert valueModifier != null; - ObsolescentAsyncResults.consume(valueModifier.evaluateGet(variable, getEvaluateContext()), node, new PairConsumer<Value, XValueNode>() { + valueModifier.evaluateGet(variable, getEvaluateContext()).doWhenProcessed(new Consumer<Value>() { @Override - public void consume(Value value, XValueNode node) { - callback.evaluated(""); - VariableView.this.value = value; - computePresentation(value, node); + public void consume(Value value) { + if (!node.isObsolete()) { + callback.evaluated(""); + setEvaluatedValue(value, null, node); + } } }); } }.setShowValuePopup(false)); } + private void setEvaluatedValue(@Nullable Value value, @Nullable String error, @NotNull XValueNode node) { + if (value == null) { + node.setPresentation(AllIcons.Debugger.Db_primitive, null, error == null ? "Internal Error" : error, false); + } + else { + this.value = value; + computePresentation(value, node); + } + } + @NotNull static String trimFunctionDescription(@NotNull Value value) { String presentableValue = value.getValueString(); @@ -358,7 +366,7 @@ public final class VariableView extends XNamedValue implements VariableContext { @Override public void consumeVariables(@NotNull List<Variable> variables) { - node.addChildren(Variables.createVariablesList(variables, VariableView.this), isLastChildren); + node.addChildren(Variables.createVariablesList(variables, VariableView.this, null), isLastChildren); } }, null); } @@ -395,7 +403,7 @@ public final class VariableView extends XNamedValue implements VariableContext { int count = variables.size(); int bucketSize = XCompositeNode.MAX_CHILDREN_TO_SHOW; if (count <= bucketSize) { - node.addChildren(Variables.createVariablesList(variables, this), true); + node.addChildren(Variables.createVariablesList(variables, this, null), true); return; } @@ -413,7 +421,7 @@ public final class VariableView extends XNamedValue implements VariableContext { int notGroupedVariablesOffset; if ((variables.size() - count) > bucketSize) { for (notGroupedVariablesOffset = variables.size(); notGroupedVariablesOffset > 0; notGroupedVariablesOffset--) { - if (!variables.get(notGroupedVariablesOffset - 1).getName().startsWith(Variables.SPECIAL_PROPERTY_PREFIX)) { + if (!variables.get(notGroupedVariablesOffset - 1).getName().startsWith("__")) { break; } } diff --git a/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/Variables.java b/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/Variables.java index b71914443eef..e85091320bfb 100644 --- a/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/Variables.java +++ b/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/Variables.java @@ -18,13 +18,11 @@ import java.util.*; import java.util.regex.Pattern; public final class Variables { - static final String SPECIAL_PROPERTY_PREFIX = "__"; - private static final Pattern UNNAMED_FUNCTION_PATTERN = Pattern.compile("^function[\\t ]*\\("); private static final Comparator<Variable> NATURAL_NAME_COMPARATOR = new Comparator<Variable>() { @Override - public int compare(Variable o1, Variable o2) { + public int compare(@NotNull Variable o1, @NotNull Variable o2) { return naturalCompare(o1.getName(), o2.getName()); } }; @@ -37,7 +35,7 @@ public final class Variables { AsyncResult<?> result = ObsolescentAsyncResults.consume(scope.getVariables(), node, new PairConsumer<List<Variable>, XCompositeNode>() { @Override public void consume(List<Variable> variables, XCompositeNode node) { - MemberFilter memberFilter = context.createMemberFilter(); + final MemberFilter memberFilter = context.createMemberFilter(); Collection<Variable> additionalVariables = memberFilter.getAdditionalVariables(); List<Variable> properties = new ArrayList<Variable>(variables.size() + additionalVariables.size()); List<Variable> functions = new SmartList<Variable>(); @@ -56,7 +54,12 @@ public final class Variables { } } - sort(properties); + ContainerUtil.sort(properties, memberFilter.hasNameMappings() ? new Comparator<Variable>() { + @Override + public int compare(@NotNull Variable o1, @NotNull Variable o2) { + return naturalCompare(memberFilter.getName(o1), memberFilter.getName(o2)); + } + } : NATURAL_NAME_COMPARATOR); sort(functions); for (Variable variable : additionalVariables) { @@ -64,7 +67,7 @@ public final class Variables { } if (!properties.isEmpty()) { - node.addChildren(createVariablesList(properties, context), functions.isEmpty() && isLast); + node.addChildren(createVariablesList(properties, context, memberFilter), functions.isEmpty() && isLast); } if (!functions.isEmpty()) { @@ -110,6 +113,7 @@ public final class Variables { } } + @NotNull public static List<Variable> filterAndSort(@NotNull List<? extends Variable> variables, @NotNull VariableContext context, boolean filterFunctions) { if (variables.isEmpty()) { return Collections.emptyList(); @@ -219,16 +223,28 @@ public final class Variables { return string1Length - string2Length; } + @NotNull public static XValueChildrenList createVariablesList(@NotNull List<Variable> variables, @NotNull VariableContext variableContext) { - return createVariablesList(variables, 0, variables.size(), variableContext); + return createVariablesList(variables, variableContext, null); + } + + @NotNull + public static XValueChildrenList createVariablesList(@NotNull List<Variable> variables, @NotNull VariableContext variableContext, @Nullable MemberFilter memberFilter) { + return createVariablesList(variables, 0, variables.size(), variableContext, memberFilter); } + @NotNull public static XValueChildrenList createVariablesList(@NotNull List<Variable> variables, int from, int to, @NotNull VariableContext variableContext) { + return createVariablesList(variables, from, to, variableContext, null); + } + + @NotNull + public static XValueChildrenList createVariablesList(@NotNull List<Variable> variables, int from, int to, @NotNull VariableContext variableContext, @Nullable MemberFilter memberFilter) { XValueChildrenList list = new XValueChildrenList(to - from); VariableContext getterOrSetterContext = null; for (int i = from; i < to; i++) { Variable variable = variables.get(i); - list.add(new VariableView(variable, variableContext)); + list.add(memberFilter == null ? new VariableView(variable, variableContext) : new VariableView(memberFilter.getName(variable), variable, variableContext)); if (variable instanceof ObjectProperty) { ObjectProperty property = (ObjectProperty)variable; if (property.getGetter() != null) { diff --git a/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/frame/CallFrameView.java b/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/frame/CallFrameView.java index 3cb993a01194..03d960362183 100644 --- a/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/frame/CallFrameView.java +++ b/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/frame/CallFrameView.java @@ -36,6 +36,11 @@ public final class CallFrameView extends StackFrameImplBase implements VariableC inLibraryContent = sourceInfo != null && debugProcess.isInLibraryContent(sourceInfo, script); } + @Nullable + public Script getScript() { + return script; + } + @Override protected boolean isInFileScope() { List<Scope> scopes = callFrame.getVariableScopes(); |