/*
- * 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.
final DebuggerContextImpl debuggerContext = DebuggerAction.getDebuggerContext(e.getDataContext());
final List<JavaValue> values = getSelectedValues(e);
+ final List<XValueNodeImpl> selectedNodes = XDebuggerTreeActionBase.getSelectedNodes(e.getDataContext());
LOG.assertTrue(debuggerContext != null && !values.isEmpty());
- debuggerContext.getDebugProcess().getManagerThread().schedule(new DebuggerContextCommandImpl(debuggerContext) {
+ DebugProcessImpl process = debuggerContext.getDebugProcess();
+ if (process == null) {
+ return;
+ }
+
+ process.getManagerThread().schedule(new DebuggerContextCommandImpl(debuggerContext) {
public void threadAction() {
- for (JavaValue value : values) {
- value.getDescriptor().setRenderer(myNodeRenderer);
+ for (final XValueNodeImpl node : selectedNodes) {
+ final XValue container = node.getValueContainer();
+ if (container instanceof JavaValue) {
+ ((JavaValue)container).setRenderer(myNodeRenderer, node);
+ }
}
- DebuggerAction.refreshViews(e);
}
}
);
return myValueDescriptor.getValueText();
}
- private int currentStart = 0;
+ private int myCurrentChildrenStart = 0;
@Override
public void computeChildren(@NotNull final XCompositeNode node) {
@Override
public void initChildrenArrayRenderer(ArrayRenderer renderer) {
- renderer.START_INDEX = currentStart;
- renderer.END_INDEX = currentStart + XCompositeNode.MAX_CHILDREN_TO_SHOW - 1;
- currentStart += XCompositeNode.MAX_CHILDREN_TO_SHOW;
+ renderer.START_INDEX = myCurrentChildrenStart;
+ renderer.END_INDEX = myCurrentChildrenStart + XCompositeNode.MAX_CHILDREN_TO_SHOW - 1;
+ myCurrentChildrenStart += XCompositeNode.MAX_CHILDREN_TO_SHOW;
}
@Override
public String getEvaluationExpression() {
if (evaluationExpression == null) {
// TODO: change API to allow to calculate it asynchronously
- myEvaluationContext.getManagerThread().invokeAndWait(new DebuggerCommandImpl() {
+ myEvaluationContext.getManagerThread().invokeAndWait(new SuspendContextCommandImpl(myEvaluationContext.getSuspendContext()) {
@Override
public Priority getPriority() {
return Priority.HIGH;
}
@Override
- protected void action() throws Exception {
+ public void contextAction() throws Exception {
evaluationExpression = ApplicationManager.getApplication().runReadAction(new Computable<String>() {
@Override
public String compute() {
}
};
}
+
+ public void setRenderer(NodeRenderer nodeRenderer, final XValueNodeImpl node) {
+ DebuggerManagerThreadImpl.assertIsManagerThread();
+ myValueDescriptor.setRenderer(nodeRenderer);
+ myCurrentChildrenStart = 0;
+ node.getTree().getLaterInvocator().offer(new Runnable() {
+ @Override
+ public void run() {
+ node.clearChildren();
+ computePresentation(node, XValuePlace.TREE);
+ }
+ });
+ }
}