1
1
/*
2
- * Copyright (c) 2010, 2019 , Oracle and/or its affiliates. All rights reserved.
2
+ * Copyright (c) 2010, 2025 , Oracle and/or its affiliates. All rights reserved.
3
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
4
*
5
5
* This code is free software; you can redistribute it and/or modify it
24
24
25
25
import java .util .Collections ;
26
26
import java .util .IdentityHashMap ;
27
+ import java .util .List ;
27
28
import java .util .Set ;
28
29
29
30
import jdk .vm .ci .common .JVMCIError ;
@@ -43,7 +44,7 @@ public final class VirtualObject implements JavaValue {
43
44
private JavaValue [] values ;
44
45
private JavaKind [] slotKinds ;
45
46
private final int id ;
46
- private boolean isAutoBox ;
47
+ private final boolean isAutoBox ;
47
48
48
49
/**
49
50
* Creates a new {@link VirtualObject} for the given type, with the given fields. If
@@ -89,8 +90,7 @@ private VirtualObject(ResolvedJavaType type, int id, boolean isAutoBox) {
89
90
}
90
91
91
92
private static StringBuilder appendValue (StringBuilder buf , JavaValue value , Set <VirtualObject > visited ) {
92
- if (value instanceof VirtualObject ) {
93
- VirtualObject vo = (VirtualObject ) value ;
93
+ if (value instanceof VirtualObject vo ) {
94
94
buf .append ("vobject:" ).append (vo .type .toJavaName (false )).append (':' ).append (vo .id );
95
95
if (!visited .contains (vo )) {
96
96
visited .add (vo );
@@ -107,22 +107,22 @@ private static StringBuilder appendValue(StringBuilder buf, JavaValue value, Set
107
107
appendValue (buf , vo .values [i ], visited );
108
108
}
109
109
} else {
110
- ResolvedJavaField [] fields = vo .type .getInstanceFields (true );
110
+ List < ResolvedJavaField > fields = vo .type .getInstanceFields (true );
111
111
int fieldIndex = 0 ;
112
112
for (int i = 0 ; i < vo .values .length ; i ++, fieldIndex ++) {
113
113
if (i != 0 ) {
114
114
buf .append (',' );
115
115
}
116
- if (fieldIndex >= fields .length ) {
116
+ if (fieldIndex >= fields .size () ) {
117
117
buf .append ("<missing field>" );
118
118
} else {
119
- ResolvedJavaField field = fields [ fieldIndex ] ;
119
+ ResolvedJavaField field = fields . get ( fieldIndex ) ;
120
120
buf .append (field .getName ());
121
121
if (vo .slotKinds [i ].getSlotCount () == 2 && field .getType ().getJavaKind ().getSlotCount () == 1 ) {
122
- if (fieldIndex + 1 >= fields .length ) {
122
+ if (fieldIndex + 1 >= fields .size () ) {
123
123
buf .append ("/<missing field>" );
124
124
} else {
125
- ResolvedJavaField field2 = fields [ ++fieldIndex ] ;
125
+ ResolvedJavaField field2 = fields . get ( ++fieldIndex ) ;
126
126
buf .append ('/' ).append (field2 .getName ());
127
127
}
128
128
}
@@ -131,8 +131,8 @@ private static StringBuilder appendValue(StringBuilder buf, JavaValue value, Set
131
131
appendValue (buf , vo .values [i ], visited );
132
132
}
133
133
// Extra fields
134
- for (; fieldIndex < fields .length ; fieldIndex ++) {
135
- buf .append (fields [ fieldIndex ] .getName ()).append ("=<missing value>" );
134
+ for (; fieldIndex < fields .size () ; fieldIndex ++) {
135
+ buf .append (fields . get ( fieldIndex ) .getName ()).append ("=<missing value>" );
136
136
}
137
137
}
138
138
}
@@ -154,25 +154,25 @@ default JavaKind getStorageKind(ResolvedJavaField field) {
154
154
155
155
public void verifyLayout (LayoutVerifier verifier ) {
156
156
if (!type .isArray ()) {
157
- ResolvedJavaField [] fields = type .getInstanceFields (true );
157
+ List < ResolvedJavaField > fields = type .getInstanceFields (true );
158
158
int fieldIndex = 0 ;
159
159
for (int i = 0 ; i < values .length ; i ++, fieldIndex ++) {
160
160
JavaKind slotKind = slotKinds [i ];
161
- if (fieldIndex >= fields .length ) {
161
+ if (fieldIndex >= fields .size () ) {
162
162
throw new JVMCIError ("Not enough fields for the values provided for %s" , toString ());
163
163
} else {
164
- ResolvedJavaField field = fields [ fieldIndex ] ;
164
+ ResolvedJavaField field = fields . get ( fieldIndex ) ;
165
165
JavaKind fieldKind = verifier .getStorageKind (field );
166
166
if (slotKind .getSlotCount () == 2 && fieldKind == JavaKind .Int ) {
167
167
int offset = verifier .getOffset (field );
168
168
if (offset % 8 != 0 ) {
169
169
throw new JVMCIError ("Double word value stored across two ints must be aligned %s" , toString ());
170
170
}
171
171
172
- if (fieldIndex + 1 >= fields .length ) {
172
+ if (fieldIndex + 1 >= fields .size () ) {
173
173
throw new JVMCIError ("Missing second field for double word value stored in two ints %s" , toString ());
174
174
}
175
- ResolvedJavaField field2 = fields [ fieldIndex + 1 ] ;
175
+ ResolvedJavaField field2 = fields . get ( fieldIndex + 1 ) ;
176
176
if (field2 .getType ().getJavaKind () != JavaKind .Int ) {
177
177
throw new JVMCIError ("Second field for double word value stored in two ints must be int but got %s in %s" , field2 .getType ().getJavaKind (), toString ());
178
178
}
@@ -187,7 +187,7 @@ public void verifyLayout(LayoutVerifier verifier) {
187
187
}
188
188
}
189
189
// Extra fields
190
- if (fieldIndex < fields .length ) {
190
+ if (fieldIndex < fields .size () ) {
191
191
throw new JVMCIError ("Not enough values provided for fields in %s" , this );
192
192
}
193
193
} else if (type .getComponentType ().getJavaKind () == JavaKind .Byte ) {
@@ -289,8 +289,7 @@ public boolean equals(Object o) {
289
289
if (o == this ) {
290
290
return true ;
291
291
}
292
- if (o instanceof VirtualObject ) {
293
- VirtualObject l = (VirtualObject ) o ;
292
+ if (o instanceof VirtualObject l ) {
294
293
if (!l .type .equals (type ) || l .values .length != values .length ) {
295
294
return false ;
296
295
}
0 commit comments