Skip to content

Commit 8c364e0

Browse files
committed
Show <no references> aggregation in guest language merged references
1 parent 1770a98 commit 8c364e0

File tree

1 file changed

+33
-19
lines changed

1 file changed

+33
-19
lines changed

visualvm/heapviewer.truffle/src/org/graalvm/visualvm/heapviewer/truffle/TruffleObjectMergedReferences.java

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,16 @@
5555
import org.graalvm.visualvm.lib.profiler.api.icons.Icons;
5656
import org.graalvm.visualvm.lib.profiler.api.icons.ProfilerIcons;
5757
import org.graalvm.visualvm.lib.ui.swing.renderer.NormalBoldGrayRenderer;
58+
import org.openide.util.NbBundle;
5859
import org.openide.util.lookup.ServiceProvider;
5960

6061
/**
6162
*
6263
* @author Jiri Sedlacek
6364
*/
65+
@NbBundle.Messages({
66+
"TruffleObjectMergedReferences_NoReferences=<no references>"
67+
})
6468
abstract class TruffleObjectMergedReferences<O extends TruffleObject> {
6569

6670
private final Heap heap;
@@ -108,13 +112,15 @@ protected HeapViewerNode[] getNodes(HeapViewerNode parent, String viewID, HeapVi
108112
progress.step();
109113
Collection<FieldValue> references = getReferences(object);
110114
Set<Instance> referers = new HashSet();
111-
for (FieldValue reference : references) {
115+
if (references.isEmpty()) {
116+
referers.add(null);
117+
} else for (FieldValue reference : references) {
112118
if (refFV == null) refFV = reference;
113119
if (!filtersReferences || includeReference(reference))
114120
referers.add(reference.getDefiningInstance());
115121
}
116122
for (Instance referer : referers) {
117-
long refererID = referer.getInstanceId();
123+
long refererID = referer == null ? -1 : referer.getInstanceId();
118124
Integer count = values.get(refererID);
119125
if (count == null) count = 0;
120126
values.put(refererID, ++count);
@@ -135,9 +141,12 @@ protected boolean sorts(DataType dataType) {
135141
return true;
136142
}
137143
protected HeapViewerNode createNode(final Map.Entry<Long, Integer> node) {
138-
final Instance instance = heap.getInstanceByID(node.getKey());
144+
long refererID = node.getKey();
145+
final Instance instance = refererID == -1 ? null : heap.getInstanceByID(refererID);
139146
HeapViewerNode ref;
140-
if (language.isLanguageObject(instance)) {
147+
if (instance == null) {
148+
ref = new InstanceNode.IncludingNull(null);
149+
} else if (language.isLanguageObject(instance)) {
141150
ref = createObjectNode((O)language.createObject(instance));
142151
} else {
143152
// see for example RObjectProperties.ReferencesProvider.createForeignReferenceNode
@@ -206,6 +215,7 @@ protected boolean exclude(O object) {
206215
progress.step();
207216
try {
208217
Collection<FieldValue> references = getReferences(object);
218+
if (referer == null) return !references.isEmpty();
209219
for (FieldValue reference : references) {
210220
if (referer.equals(reference.getDefiningInstance()))
211221
return false;
@@ -250,7 +260,11 @@ public void setValue(Object value, int row) {
250260
renderer = RootNode.get(vnode).resolveRenderer(node);
251261
renderer.setValue(node, row);
252262

253-
if (renderer instanceof NormalBoldGrayRenderer) {
263+
if (node instanceof InstanceNode.IncludingNull) {
264+
setNormalValue(Bundle.TruffleObjectMergedReferences_NoReferences());
265+
setBoldValue(""); // NOI18N
266+
setGrayValue(""); // NOI18N
267+
} else if (renderer instanceof NormalBoldGrayRenderer) {
254268
NormalBoldGrayRenderer r = (NormalBoldGrayRenderer)renderer;
255269
setNormalValue(r.getNormalValue());
256270
setBoldValue(r.getBoldValue());
@@ -269,20 +283,20 @@ public int getHorizontalAlignment() {
269283
return renderer.getHorizontalAlignment();
270284
}
271285

272-
@Override
273-
public String toString() {
274-
return renderer.toString();
275-
}
276-
277-
@Override
278-
public String getShortName() {
279-
return renderer.getShortName();
280-
}
281-
282-
@Override
283-
public AccessibleContext getAccessibleContext() {
284-
return renderer.getAccessibleContext();
285-
}
286+
// @Override
287+
// public String toString() {
288+
// return renderer.toString();
289+
// }
290+
//
291+
// @Override
292+
// public String getShortName() {
293+
// return renderer.getShortName();
294+
// }
295+
//
296+
// @Override
297+
// public AccessibleContext getAccessibleContext() {
298+
// return renderer.getAccessibleContext();
299+
// }
286300

287301
}
288302

0 commit comments

Comments
 (0)