55
55
import org .graalvm .visualvm .lib .profiler .api .icons .Icons ;
56
56
import org .graalvm .visualvm .lib .profiler .api .icons .ProfilerIcons ;
57
57
import org .graalvm .visualvm .lib .ui .swing .renderer .NormalBoldGrayRenderer ;
58
+ import org .openide .util .NbBundle ;
58
59
import org .openide .util .lookup .ServiceProvider ;
59
60
60
61
/**
61
62
*
62
63
* @author Jiri Sedlacek
63
64
*/
65
+ @ NbBundle .Messages ({
66
+ "TruffleObjectMergedReferences_NoReferences=<no references>"
67
+ })
64
68
abstract class TruffleObjectMergedReferences <O extends TruffleObject > {
65
69
66
70
private final Heap heap ;
@@ -108,13 +112,15 @@ protected HeapViewerNode[] getNodes(HeapViewerNode parent, String viewID, HeapVi
108
112
progress .step ();
109
113
Collection <FieldValue > references = getReferences (object );
110
114
Set <Instance > referers = new HashSet ();
111
- for (FieldValue reference : references ) {
115
+ if (references .isEmpty ()) {
116
+ referers .add (null );
117
+ } else for (FieldValue reference : references ) {
112
118
if (refFV == null ) refFV = reference ;
113
119
if (!filtersReferences || includeReference (reference ))
114
120
referers .add (reference .getDefiningInstance ());
115
121
}
116
122
for (Instance referer : referers ) {
117
- long refererID = referer .getInstanceId ();
123
+ long refererID = referer == null ? - 1 : referer .getInstanceId ();
118
124
Integer count = values .get (refererID );
119
125
if (count == null ) count = 0 ;
120
126
values .put (refererID , ++count );
@@ -135,9 +141,12 @@ protected boolean sorts(DataType dataType) {
135
141
return true ;
136
142
}
137
143
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 );
139
146
HeapViewerNode ref ;
140
- if (language .isLanguageObject (instance )) {
147
+ if (instance == null ) {
148
+ ref = new InstanceNode .IncludingNull (null );
149
+ } else if (language .isLanguageObject (instance )) {
141
150
ref = createObjectNode ((O )language .createObject (instance ));
142
151
} else {
143
152
// see for example RObjectProperties.ReferencesProvider.createForeignReferenceNode
@@ -206,6 +215,7 @@ protected boolean exclude(O object) {
206
215
progress .step ();
207
216
try {
208
217
Collection <FieldValue > references = getReferences (object );
218
+ if (referer == null ) return !references .isEmpty ();
209
219
for (FieldValue reference : references ) {
210
220
if (referer .equals (reference .getDefiningInstance ()))
211
221
return false ;
@@ -250,7 +260,11 @@ public void setValue(Object value, int row) {
250
260
renderer = RootNode .get (vnode ).resolveRenderer (node );
251
261
renderer .setValue (node , row );
252
262
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 ) {
254
268
NormalBoldGrayRenderer r = (NormalBoldGrayRenderer )renderer ;
255
269
setNormalValue (r .getNormalValue ());
256
270
setBoldValue (r .getBoldValue ());
@@ -269,20 +283,20 @@ public int getHorizontalAlignment() {
269
283
return renderer .getHorizontalAlignment ();
270
284
}
271
285
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
+ // }
286
300
287
301
}
288
302
0 commit comments