Commit b4367046 authored by Vitaliy.Bibaev's avatar Vitaliy.Bibaev
Browse files

[memory-agent] Remove a separate action to display referrers objects using the memory agent

parent b4e19b3f
Branches unavailable Tags unavailable
No related merge requests found
Showing with 13 additions and 62 deletions
+13 -62
......@@ -13,6 +13,8 @@ import com.intellij.debugger.engine.events.DebuggerCommandImpl;
import com.intellij.debugger.engine.events.SuspendContextCommandImpl;
import com.intellij.debugger.impl.DebuggerContextImpl;
import com.intellij.debugger.impl.DebuggerUtilsEx;
import com.intellij.debugger.memory.agent.MemoryAgent;
import com.intellij.debugger.memory.agent.MemoryAgentReferringObjectsProvider;
import com.intellij.debugger.ui.impl.DebuggerTreeRenderer;
import com.intellij.debugger.ui.impl.watch.*;
import com.intellij.debugger.ui.tree.*;
......@@ -512,7 +514,12 @@ public class JavaValue extends XNamedValue implements NodeDescriptorProvider, XV
return new XReferrersProvider() {
@Override
public XValue getReferringObjectsValue() {
return new JavaReferringObjectsValue(JavaValue.this, ReferringObjectsProvider.BASIC_JDI, null);
MemoryAgent memoryAgent = getEvaluationContext().getDebugProcess().getMemoryAgent();
ReferringObjectsProvider provider = ReferringObjectsProvider.BASIC_JDI;
if (memoryAgent != null && memoryAgent.canFindGcRoots()) {
provider = new MemoryAgentReferringObjectsProvider(memoryAgent, MemoryAgent.DEFAULT_GC_ROOTS_OBJECTS_LIMIT);
}
return new JavaReferringObjectsValue(JavaValue.this, provider, null);
}
};
}
......
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.debugger.memory.action;
import com.intellij.debugger.actions.JavaReferringObjectsValue;
import com.intellij.debugger.engine.JavaValue;
import com.intellij.debugger.engine.ReferringObjectsProvider;
import com.intellij.debugger.engine.evaluation.EvaluateException;
import com.intellij.debugger.memory.agent.MemoryAgent;
import com.intellij.debugger.memory.agent.MemoryAgentReferringObjectsProvider;
import com.intellij.notification.NotificationType;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.xdebugger.XDebugSession;
import com.intellij.xdebugger.impl.XDebuggerManagerImpl;
import com.intellij.xdebugger.impl.ui.tree.XDebuggerTree;
import com.intellij.xdebugger.impl.ui.tree.XInspectDialog;
import com.intellij.xdebugger.impl.ui.tree.nodes.XValueNodeImpl;
import com.sun.jdi.ObjectReference;
import org.jetbrains.annotations.NotNull;
public class ShowGarbageCollectorRootsAction extends MemoryAgentActionBase {
private static final int DEFAULT_OBJECTS_LIMIT = 3;
@Override
protected void perform(@NotNull MemoryAgent memoryAgent,
@NotNull ObjectReference reference,
@NotNull XValueNodeImpl node) throws EvaluateException {
ReferringObjectsProvider roots = memoryAgent.canFindGcRoots()
? new MemoryAgentReferringObjectsProvider(memoryAgent, DEFAULT_OBJECTS_LIMIT)
: null;
if (roots == null) {
XDebuggerManagerImpl.NOTIFICATION_GROUP.createNotification("This feature is unavailable", NotificationType.INFORMATION);
return;
}
ApplicationManager.getApplication().invokeLater(
() -> {
XDebuggerTree tree = node.getTree();
JavaValue javaValue = (JavaValue)node.getValueContainer();
XDebugSession session = javaValue.getEvaluationContext().getDebugProcess().getSession().getXDebugSession();
JavaReferringObjectsValue value = new JavaReferringObjectsValue(javaValue, roots, null);
XInspectDialog dialog =
new XInspectDialog(tree.getProject(), tree.getEditorsProvider(), tree.getSourcePosition(), StringUtil.notNullize(node.getName()),
value, tree.getValueMarkers(),
session, false);
dialog.setTitle("Paths to GC Roots");
dialog.show();
}
);
}
@Override
protected boolean isEnabled(@NotNull MemoryAgent agent) {
return agent.canFindGcRoots();
}
}
......@@ -8,6 +8,11 @@ import org.jetbrains.annotations.NotNull;
import java.util.List;
public interface MemoryAgent {
/**
* Maximal number of objects that will be retrieved by {@code findGcRoots} call
*/
int DEFAULT_GC_ROOTS_OBJECTS_LIMIT = 1000;
boolean isLoaded();
boolean canEvaluateObjectSize();
......
......@@ -588,13 +588,6 @@
relative-to-action="MemoryView.ShowInstancesFromDebuggerTree"/>
</action>
<action class="com.intellij.debugger.memory.action.ShowGarbageCollectorRootsAction"
id="Memory.ShowGarbageCollectorRoots"
text="Find Garbage Collector Roots">
<add-to-group group-id="XDebugger.ValueGroup" anchor="after"
relative-to-action="Memory.CalculateRetainedSize"/>
</action>
<action class="com.intellij.debugger.memory.action.tracking.JumpToAllocationSourceAction"
id="MemoryView.ShowAllocationStackTrace"
text="Jump To Allocation Position">
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment