1 /*
2  * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * This code is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 only, as
7  * published by the Free Software Foundation.
8  *
9  * This code is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12  * version 2 for more details (a copy is included in the LICENSE file that
13  * accompanied this code).
14  *
15  * You should have received a copy of the GNU General Public License version
16  * 2 along with this work; if not, write to the Free Software Foundation,
17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20  * or visit www.oracle.com if you need additional information or have any
21  * questions.
22  */
23 
24 package jdk.vm.ci.hotspot.test;
25 
26 import jdk.vm.ci.hotspot.HotSpotConstantReflectionProvider;
27 import jdk.vm.ci.meta.JavaConstant;
28 import jdk.vm.ci.meta.MetaAccessProvider;
29 import jdk.vm.ci.meta.ResolvedJavaField;
30 import jdk.vm.ci.runtime.JVMCI;
31 
32 import java.lang.reflect.Field;
33 import java.util.HashMap;
34 import java.util.Map;
35 
36 public class TestHelper {
37 
38     public static final DummyClass DUMMY_CLASS_INSTANCE = new DummyClass();
39     public static final HotSpotConstantReflectionProvider CONSTANT_REFLECTION_PROVIDER = (HotSpotConstantReflectionProvider) JVMCI.getRuntime().getHostJVMCIBackend().getConstantReflection();
40     public static final JavaConstant DUMMY_CLASS_CONSTANT = CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE);
41 
42     public static final Map<ResolvedJavaField, JavaConstant> INSTANCE_FIELDS_MAP = new HashMap<>();
43 
44     static {
getResolvedJavaField(DummyClass.class, R)45         INSTANCE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "booleanField"),
46                         JavaConstant.forBoolean(DUMMY_CLASS_INSTANCE.booleanField));
getResolvedJavaField(DummyClass.class, R)47         INSTANCE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "byteField"),
48                         JavaConstant.forByte(DUMMY_CLASS_INSTANCE.byteField));
getResolvedJavaField(DummyClass.class, R)49         INSTANCE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "shortField"),
50                         JavaConstant.forShort(DUMMY_CLASS_INSTANCE.shortField));
getResolvedJavaField(DummyClass.class, R)51         INSTANCE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "charField"),
52                         JavaConstant.forChar(DUMMY_CLASS_INSTANCE.charField));
getResolvedJavaField(DummyClass.class, R)53         INSTANCE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "intField"),
54                         JavaConstant.forInt(DUMMY_CLASS_INSTANCE.intField));
getResolvedJavaField(DummyClass.class, R)55         INSTANCE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "longField"),
56                         JavaConstant.forLong(DUMMY_CLASS_INSTANCE.longField));
getResolvedJavaField(DummyClass.class, R)57         INSTANCE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "floatField"),
58                         JavaConstant.forFloat(DUMMY_CLASS_INSTANCE.floatField));
getResolvedJavaField(DummyClass.class, R)59         INSTANCE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "doubleField"),
60                         JavaConstant.forDouble(DUMMY_CLASS_INSTANCE.doubleField));
getResolvedJavaField(DummyClass.class, R)61         INSTANCE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "objectField"),
62                         CONSTANT_REFLECTION_PROVIDER.forObject(
63                                         DUMMY_CLASS_INSTANCE.objectField));
64     }
65 
66     public static final Map<ResolvedJavaField, JavaConstant> INSTANCE_FINAL_FIELDS_MAP = new HashMap<>();
67 
68     static {
getResolvedJavaField(DummyClass.class, R)69         INSTANCE_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "finalBooleanField"),
70                         JavaConstant.forBoolean(
71                                         DUMMY_CLASS_INSTANCE.finalBooleanField));
getResolvedJavaField(DummyClass.class, R)72         INSTANCE_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "finalByteField"),
73                         JavaConstant.forByte(DUMMY_CLASS_INSTANCE.finalByteField));
getResolvedJavaField(DummyClass.class, R)74         INSTANCE_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "finalShortField"),
75                         JavaConstant.forShort(DUMMY_CLASS_INSTANCE.finalShortField));
getResolvedJavaField(DummyClass.class, R)76         INSTANCE_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "finalCharField"),
77                         JavaConstant.forChar(DUMMY_CLASS_INSTANCE.finalCharField));
getResolvedJavaField(DummyClass.class, R)78         INSTANCE_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "finalIntField"),
79                         JavaConstant.forInt(DUMMY_CLASS_INSTANCE.finalIntField));
getResolvedJavaField(DummyClass.class, R)80         INSTANCE_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "finalLongField"),
81                         JavaConstant.forLong(DUMMY_CLASS_INSTANCE.finalLongField));
getResolvedJavaField(DummyClass.class, R)82         INSTANCE_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "finalFloatField"),
83                         JavaConstant.forFloat(DUMMY_CLASS_INSTANCE.finalFloatField));
getResolvedJavaField(DummyClass.class, R)84         INSTANCE_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "finalDoubleField"),
85                         JavaConstant.forDouble(
86                                         DUMMY_CLASS_INSTANCE.finalDoubleField));
getResolvedJavaField(DummyClass.class, R)87         INSTANCE_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "finalObjectField"),
88                         CONSTANT_REFLECTION_PROVIDER.forObject(
89                                         DUMMY_CLASS_INSTANCE.finalObjectField));
90     }
91 
92     public static final Map<ResolvedJavaField, JavaConstant> INSTANCE_FINAL_DEFAULT_FIELDS_MAP = new HashMap<>();
93 
94     static {
getResolvedJavaField(DummyClass.class, R)95         INSTANCE_FINAL_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
96                         "finalDefaultBooleanField"),
97                         JavaConstant.forBoolean(
98                                         DUMMY_CLASS_INSTANCE.finalDefaultBooleanField));
getResolvedJavaField(DummyClass.class, R)99         INSTANCE_FINAL_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
100                         "finalDefaultByteField"),
101                         JavaConstant.forByte(
102                                         DUMMY_CLASS_INSTANCE.finalDefaultByteField));
getResolvedJavaField(DummyClass.class, R)103         INSTANCE_FINAL_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
104                         "finalDefaultShortField"),
105                         JavaConstant.forShort(
106                                         DUMMY_CLASS_INSTANCE.finalDefaultShortField));
getResolvedJavaField(DummyClass.class, R)107         INSTANCE_FINAL_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
108                         "finalDefaultCharField"),
109                         JavaConstant.forChar(
110                                         DUMMY_CLASS_INSTANCE.finalDefaultCharField));
getResolvedJavaField(DummyClass.class, R)111         INSTANCE_FINAL_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
112                         "finalDefaultIntField"),
113                         JavaConstant.forInt(
114                                         DUMMY_CLASS_INSTANCE.finalDefaultIntField));
getResolvedJavaField(DummyClass.class, R)115         INSTANCE_FINAL_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
116                         "finalDefaultLongField"),
117                         JavaConstant.forLong(
118                                         DUMMY_CLASS_INSTANCE.finalDefaultLongField));
getResolvedJavaField(DummyClass.class, R)119         INSTANCE_FINAL_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
120                         "finalDefaultFloatField"),
121                         JavaConstant.forFloat(
122                                         DUMMY_CLASS_INSTANCE.finalDefaultFloatField));
getResolvedJavaField(DummyClass.class, R)123         INSTANCE_FINAL_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
124                         "finalDefaultDoubleField"),
125                         JavaConstant.forDouble(
126                                         DUMMY_CLASS_INSTANCE.finalDefaultDoubleField));
getResolvedJavaField(DummyClass.class, R)127         INSTANCE_FINAL_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
128                         "finalDefaultObjectField"),
129                         CONSTANT_REFLECTION_PROVIDER.forObject(
130                                         DUMMY_CLASS_INSTANCE.finalDefaultObjectField));
131     }
132 
133     public static final Map<ResolvedJavaField, JavaConstant> INSTANCE_STABLE_FIELDS_MAP = new HashMap<>();
134 
135     static {
getResolvedJavaField(DummyClass.class, R)136         INSTANCE_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "stableBooleanField"),
137                         JavaConstant.forBoolean(
138                                         DUMMY_CLASS_INSTANCE.stableBooleanField));
getResolvedJavaField(DummyClass.class, R)139         INSTANCE_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "stableByteField"),
140                         JavaConstant.forByte(DUMMY_CLASS_INSTANCE.stableByteField));
getResolvedJavaField(DummyClass.class, R)141         INSTANCE_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "stableShortField"),
142                         JavaConstant.forShort(
143                                         DUMMY_CLASS_INSTANCE.stableShortField));
getResolvedJavaField(DummyClass.class, R)144         INSTANCE_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "stableCharField"),
145                         JavaConstant.forChar(DUMMY_CLASS_INSTANCE.stableCharField));
getResolvedJavaField(DummyClass.class, R)146         INSTANCE_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "stableIntField"),
147                         JavaConstant.forInt(DUMMY_CLASS_INSTANCE.stableIntField));
getResolvedJavaField(DummyClass.class, R)148         INSTANCE_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "stableLongField"),
149                         JavaConstant.forLong(DUMMY_CLASS_INSTANCE.stableLongField));
getResolvedJavaField(DummyClass.class, R)150         INSTANCE_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "stableFloatField"),
151                         JavaConstant.forFloat(
152                                         DUMMY_CLASS_INSTANCE.stableFloatField));
getResolvedJavaField(DummyClass.class, R)153         INSTANCE_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "stableDoubleField"),
154                         JavaConstant.forDouble(
155                                         DUMMY_CLASS_INSTANCE.stableDoubleField));
getResolvedJavaField(DummyClass.class, R)156         INSTANCE_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "stableObjectField"),
157                         CONSTANT_REFLECTION_PROVIDER.forObject(
158                                         DUMMY_CLASS_INSTANCE.stableObjectField));
159     }
160 
161     public static final Map<ResolvedJavaField, JavaConstant> STATIC_FIELDS_MAP = new HashMap<>();
162 
163     static {
getResolvedJavaField(DummyClass.class, R)164         STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticBooleanField"),
165                         JavaConstant.forBoolean(DummyClass.staticBooleanField));
getResolvedJavaField(DummyClass.class, R)166         STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticByteField"),
167                         JavaConstant.forByte(DummyClass.staticByteField));
getResolvedJavaField(DummyClass.class, R)168         STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticShortField"),
169                         JavaConstant.forShort(DummyClass.staticShortField));
getResolvedJavaField(DummyClass.class, R)170         STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticCharField"),
171                         JavaConstant.forChar(DummyClass.staticCharField));
getResolvedJavaField(DummyClass.class, R)172         STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticIntField"),
173                         JavaConstant.forInt(DummyClass.staticIntField));
getResolvedJavaField(DummyClass.class, R)174         STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticLongField"),
175                         JavaConstant.forLong(DummyClass.staticLongField));
getResolvedJavaField(DummyClass.class, R)176         STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFloatField"),
177                         JavaConstant.forFloat(DummyClass.staticFloatField));
getResolvedJavaField(DummyClass.class, R)178         STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticDoubleField"),
179                         JavaConstant.forDouble(DummyClass.staticDoubleField));
getResolvedJavaField(DummyClass.class, R)180         STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticObjectField"),
181                         CONSTANT_REFLECTION_PROVIDER.forObject(DummyClass.staticObjectField));
182     }
183 
184     public static final Map<ResolvedJavaField, JavaConstant> STATIC_FINAL_FIELDS_MAP = new HashMap<>();
185 
186     static {
187         STATIC_FINAL_FIELDS_MAP.put(
getResolvedJavaField(DummyClass.class, R)188                         getResolvedJavaField(DummyClass.class, "staticFinalBooleanField"),
189                         JavaConstant.forBoolean(DummyClass.staticFinalBooleanField));
getResolvedJavaField(DummyClass.class, R)190         STATIC_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFinalByteField"),
191                         JavaConstant.forByte(DummyClass.staticFinalByteField));
getResolvedJavaField(DummyClass.class, R)192         STATIC_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFinalShortField"),
193                         JavaConstant.forShort(DummyClass.staticFinalShortField));
getResolvedJavaField(DummyClass.class, R)194         STATIC_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFinalCharField"),
195                         JavaConstant.forChar(DummyClass.staticFinalCharField));
getResolvedJavaField(DummyClass.class, R)196         STATIC_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFinalIntField"),
197                         JavaConstant.forInt(DummyClass.staticFinalIntField));
getResolvedJavaField(DummyClass.class, R)198         STATIC_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFinalLongField"),
199                         JavaConstant.forLong(DummyClass.staticFinalLongField));
getResolvedJavaField(DummyClass.class, R)200         STATIC_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFinalFloatField"),
201                         JavaConstant.forFloat(DummyClass.staticFinalFloatField));
202         STATIC_FINAL_FIELDS_MAP.put(
getResolvedJavaField(DummyClass.class, R)203                         getResolvedJavaField(DummyClass.class, "staticFinalDoubleField"),
204                         JavaConstant.forDouble(DummyClass.staticFinalDoubleField));
205         STATIC_FINAL_FIELDS_MAP.put(
getResolvedJavaField(DummyClass.class, R)206                         getResolvedJavaField(DummyClass.class, "staticFinalObjectField"),
207                         CONSTANT_REFLECTION_PROVIDER.forObject(DummyClass.staticFinalObjectField));
208     }
209 
210     public static final Map<ResolvedJavaField, JavaConstant> STATIC_STABLE_FIELDS_MAP = new HashMap<>();
211 
212     static {
213         STATIC_STABLE_FIELDS_MAP.put(
getResolvedJavaField(DummyClass.class, R)214                         getResolvedJavaField(DummyClass.class, "staticStableBooleanField"),
215                         JavaConstant.forBoolean(DummyClass.staticStableBooleanField));
216         STATIC_STABLE_FIELDS_MAP.put(
getResolvedJavaField(DummyClass.class, R)217                         getResolvedJavaField(DummyClass.class, "staticStableByteField"),
218                         JavaConstant.forByte(DummyClass.staticStableByteField));
219         STATIC_STABLE_FIELDS_MAP.put(
getResolvedJavaField(DummyClass.class, R)220                         getResolvedJavaField(DummyClass.class, "staticStableShortField"),
221                         JavaConstant.forShort(DummyClass.staticStableShortField));
222         STATIC_STABLE_FIELDS_MAP.put(
getResolvedJavaField(DummyClass.class, R)223                         getResolvedJavaField(DummyClass.class, "staticStableCharField"),
224                         JavaConstant.forChar(DummyClass.staticStableCharField));
getResolvedJavaField(DummyClass.class, R)225         STATIC_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticStableIntField"),
226                         JavaConstant.forInt(DummyClass.staticStableIntField));
227         STATIC_STABLE_FIELDS_MAP.put(
getResolvedJavaField(DummyClass.class, R)228                         getResolvedJavaField(DummyClass.class, "staticStableLongField"),
229                         JavaConstant.forLong(DummyClass.staticStableLongField));
230         STATIC_STABLE_FIELDS_MAP.put(
getResolvedJavaField(DummyClass.class, R)231                         getResolvedJavaField(DummyClass.class, "staticStableFloatField"),
232                         JavaConstant.forFloat(DummyClass.staticStableFloatField));
233         STATIC_STABLE_FIELDS_MAP.put(
getResolvedJavaField(DummyClass.class, R)234                         getResolvedJavaField(DummyClass.class, "staticStableDoubleField"),
235                         JavaConstant.forDouble(DummyClass.staticStableDoubleField));
236         STATIC_STABLE_FIELDS_MAP.put(
getResolvedJavaField(DummyClass.class, R)237                         getResolvedJavaField(DummyClass.class, "staticStableObjectField"),
238                         CONSTANT_REFLECTION_PROVIDER.forObject(DummyClass.staticStableObjectField));
239     }
240 
241     public static final Map<ResolvedJavaField, JavaConstant> STATIC_STABLE_DEFAULT_FIELDS_MAP = new HashMap<>();
242 
243     static {
getResolvedJavaField(DummyClass.class, R)244         STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
245                         "staticStableDefaultBooleanField"),
246                         JavaConstant.forBoolean(
247                                         DummyClass.staticStableDefaultBooleanField));
getResolvedJavaField(DummyClass.class, R)248         STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
249                         "staticStableDefaultByteField"),
250                         JavaConstant.forByte(
251                                         DummyClass.staticStableDefaultByteField));
getResolvedJavaField(DummyClass.class, R)252         STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
253                         "staticStableDefaultShortField"),
254                         JavaConstant.forShort(
255                                         DummyClass.staticStableDefaultShortField));
getResolvedJavaField(DummyClass.class, R)256         STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
257                         "staticStableDefaultCharField"),
258                         JavaConstant.forChar(
259                                         DummyClass.staticStableDefaultCharField));
getResolvedJavaField(DummyClass.class, R)260         STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
261                         "staticStableDefaultIntField"),
262                         JavaConstant.forInt(
263                                         DummyClass.staticStableDefaultIntField));
getResolvedJavaField(DummyClass.class, R)264         STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
265                         "staticStableDefaultLongField"),
266                         JavaConstant.forLong(
267                                         DummyClass.staticStableDefaultLongField));
getResolvedJavaField(DummyClass.class, R)268         STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
269                         "staticStableDefaultFloatField"),
270                         JavaConstant.forFloat(
271                                         DummyClass.staticStableDefaultFloatField));
getResolvedJavaField(DummyClass.class, R)272         STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
273                         "staticStableDefaultDoubleField"),
274                         JavaConstant.forDouble(
275                                         DummyClass.staticStableDefaultDoubleField));
getResolvedJavaField(DummyClass.class, R)276         STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
277                         "staticStableDefaultObjectField"),
278                         CONSTANT_REFLECTION_PROVIDER.forObject(
279                                         DummyClass.staticStableDefaultObjectField));
280     }
281 
282     public static final int ARRAY_DIMENSION = 1;
283     public static final int ARRAY_OF_ARRAYS_DIMENSION = 2;
284 
285     public static final Map<ResolvedJavaField, JavaConstant> ARRAYS_MAP = new HashMap<>();
286 
287     static {
getResolvedJavaField(DummyClass.class, R)288         ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "booleanArrayWithValues"),
289                         CONSTANT_REFLECTION_PROVIDER.forObject(
290                                         DUMMY_CLASS_INSTANCE.booleanArrayWithValues));
getResolvedJavaField(DummyClass.class, R)291         ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "byteArrayWithValues"),
292                         CONSTANT_REFLECTION_PROVIDER.forObject(
293                                         DUMMY_CLASS_INSTANCE.byteArrayWithValues));
getResolvedJavaField(DummyClass.class, R)294         ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "shortArrayWithValues"),
295                         CONSTANT_REFLECTION_PROVIDER.forObject(
296                                         DUMMY_CLASS_INSTANCE.shortArrayWithValues));
getResolvedJavaField(DummyClass.class, R)297         ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "charArrayWithValues"),
298                         CONSTANT_REFLECTION_PROVIDER.forObject(
299                                         DUMMY_CLASS_INSTANCE.charArrayWithValues));
getResolvedJavaField(DummyClass.class, R)300         ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "intArrayWithValues"),
301                         CONSTANT_REFLECTION_PROVIDER.forObject(
302                                         DUMMY_CLASS_INSTANCE.intArrayWithValues));
getResolvedJavaField(DummyClass.class, R)303         ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "longArrayWithValues"),
304                         CONSTANT_REFLECTION_PROVIDER.forObject(
305                                         DUMMY_CLASS_INSTANCE.longArrayWithValues));
getResolvedJavaField(DummyClass.class, R)306         ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "floatArrayWithValues"),
307                         CONSTANT_REFLECTION_PROVIDER.forObject(
308                                         DUMMY_CLASS_INSTANCE.floatArrayWithValues));
getResolvedJavaField(DummyClass.class, R)309         ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "doubleArrayWithValues"),
310                         CONSTANT_REFLECTION_PROVIDER.forObject(
311                                         DUMMY_CLASS_INSTANCE.doubleArrayWithValues));
getResolvedJavaField(DummyClass.class, R)312         ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "objectArrayWithValues"),
313                         CONSTANT_REFLECTION_PROVIDER.forObject(
314                                         DUMMY_CLASS_INSTANCE.objectArrayWithValues));
315     }
316 
317     public static final Map<ResolvedJavaField, JavaConstant> STABLE_ARRAYS_MAP = new HashMap<>();
318 
319     static {
320         STABLE_ARRAYS_MAP.put(
getResolvedJavaField(DummyClass.class, R)321                         getResolvedJavaField(DummyClass.class, "stableBooleanArrayWithValues"),
322                         CONSTANT_REFLECTION_PROVIDER.forObject(
323                                         DUMMY_CLASS_INSTANCE.stableBooleanArrayWithValues));
getResolvedJavaField(DummyClass.class, R)324         STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableByteArrayWithValues"),
325                         CONSTANT_REFLECTION_PROVIDER.forObject(
326                                         DUMMY_CLASS_INSTANCE.stableByteArrayWithValues));
getResolvedJavaField(DummyClass.class, R)327         STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableShortArrayWithValues"),
328                         CONSTANT_REFLECTION_PROVIDER.forObject(
329                                         DUMMY_CLASS_INSTANCE.stableShortArrayWithValues));
getResolvedJavaField(DummyClass.class, R)330         STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableCharArrayWithValues"),
331                         CONSTANT_REFLECTION_PROVIDER.forObject(
332                                         DUMMY_CLASS_INSTANCE.stableCharArrayWithValues));
getResolvedJavaField(DummyClass.class, R)333         STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableIntArrayWithValues"),
334                         CONSTANT_REFLECTION_PROVIDER.forObject(
335                                         DUMMY_CLASS_INSTANCE.stableIntArrayWithValues));
getResolvedJavaField(DummyClass.class, R)336         STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableLongArrayWithValues"),
337                         CONSTANT_REFLECTION_PROVIDER.forObject(
338                                         DUMMY_CLASS_INSTANCE.stableLongArrayWithValues));
getResolvedJavaField(DummyClass.class, R)339         STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableFloatArrayWithValues"),
340                         CONSTANT_REFLECTION_PROVIDER.forObject(
341                                         DUMMY_CLASS_INSTANCE.stableFloatArrayWithValues));
getResolvedJavaField(DummyClass.class, R)342         STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableDoubleArrayWithValues"),
343                         CONSTANT_REFLECTION_PROVIDER.forObject(
344                                         DUMMY_CLASS_INSTANCE.stableDoubleArrayWithValues));
getResolvedJavaField(DummyClass.class, R)345         STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableObjectArrayWithValues"),
346                         CONSTANT_REFLECTION_PROVIDER.forObject(
347                                         DUMMY_CLASS_INSTANCE.stableObjectArrayWithValues));
348     }
349 
350     public static final Map<ResolvedJavaField, JavaConstant> ARRAY_ARRAYS_MAP = new HashMap<>();
351 
352     static {
getResolvedJavaField(DummyClass.class, R)353         ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "booleanArrayArrayWithValues"),
354                         CONSTANT_REFLECTION_PROVIDER.forObject(
355                                         DUMMY_CLASS_INSTANCE.booleanArrayArrayWithValues));
getResolvedJavaField(DummyClass.class, R)356         ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "byteArrayArrayWithValues"),
357                         CONSTANT_REFLECTION_PROVIDER.forObject(
358                                         DUMMY_CLASS_INSTANCE.byteArrayArrayWithValues));
getResolvedJavaField(DummyClass.class, R)359         ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "shortArrayArrayWithValues"),
360                         CONSTANT_REFLECTION_PROVIDER.forObject(
361                                         DUMMY_CLASS_INSTANCE.shortArrayArrayWithValues));
getResolvedJavaField(DummyClass.class, R)362         ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "charArrayArrayWithValues"),
363                         CONSTANT_REFLECTION_PROVIDER.forObject(
364                                         DUMMY_CLASS_INSTANCE.charArrayArrayWithValues));
getResolvedJavaField(DummyClass.class, R)365         ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "intArrayArrayWithValues"),
366                         CONSTANT_REFLECTION_PROVIDER.forObject(
367                                         DUMMY_CLASS_INSTANCE.intArrayArrayWithValues));
getResolvedJavaField(DummyClass.class, R)368         ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "longArrayArrayWithValues"),
369                         CONSTANT_REFLECTION_PROVIDER.forObject(
370                                         DUMMY_CLASS_INSTANCE.longArrayArrayWithValues));
getResolvedJavaField(DummyClass.class, R)371         ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "floatArrayArrayWithValues"),
372                         CONSTANT_REFLECTION_PROVIDER.forObject(
373                                         DUMMY_CLASS_INSTANCE.floatArrayArrayWithValues));
getResolvedJavaField(DummyClass.class, R)374         ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "doubleArrayArrayWithValues"),
375                         CONSTANT_REFLECTION_PROVIDER.forObject(
376                                         DUMMY_CLASS_INSTANCE.doubleArrayArrayWithValues));
getResolvedJavaField(DummyClass.class, R)377         ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "objectArrayArrayWithValues"),
378                         CONSTANT_REFLECTION_PROVIDER.forObject(
379                                         DUMMY_CLASS_INSTANCE.objectArrayArrayWithValues));
380     }
381 
382     public static final Map<ResolvedJavaField, JavaConstant> STABLE_ARRAY_ARRAYS_MAP = new HashMap<>();
383 
384     static {
385         STABLE_ARRAY_ARRAYS_MAP.put(
getResolvedJavaField(DummyClass.class, R)386                         getResolvedJavaField(DummyClass.class, "stableBooleanArrayArrayWithValues"),
387                         CONSTANT_REFLECTION_PROVIDER.forObject(
388                                         DUMMY_CLASS_INSTANCE.stableBooleanArrayArrayWithValues));
389         STABLE_ARRAY_ARRAYS_MAP.put(
getResolvedJavaField(DummyClass.class, R)390                         getResolvedJavaField(DummyClass.class, "stableByteArrayArrayWithValues"),
391                         CONSTANT_REFLECTION_PROVIDER.forObject(
392                                         DUMMY_CLASS_INSTANCE.stableByteArrayArrayWithValues));
393         STABLE_ARRAY_ARRAYS_MAP.put(
getResolvedJavaField(DummyClass.class, R)394                         getResolvedJavaField(DummyClass.class, "stableShortArrayArrayWithValues"),
395                         CONSTANT_REFLECTION_PROVIDER.forObject(
396                                         DUMMY_CLASS_INSTANCE.stableShortArrayArrayWithValues));
397         STABLE_ARRAY_ARRAYS_MAP.put(
getResolvedJavaField(DummyClass.class, R)398                         getResolvedJavaField(DummyClass.class, "stableCharArrayArrayWithValues"),
399                         CONSTANT_REFLECTION_PROVIDER.forObject(
400                                         DUMMY_CLASS_INSTANCE.stableCharArrayArrayWithValues));
401         STABLE_ARRAY_ARRAYS_MAP.put(
getResolvedJavaField(DummyClass.class, R)402                         getResolvedJavaField(DummyClass.class, "stableIntArrayArrayWithValues"),
403                         CONSTANT_REFLECTION_PROVIDER.forObject(
404                                         DUMMY_CLASS_INSTANCE.stableIntArrayArrayWithValues));
405         STABLE_ARRAY_ARRAYS_MAP.put(
getResolvedJavaField(DummyClass.class, R)406                         getResolvedJavaField(DummyClass.class, "stableLongArrayArrayWithValues"),
407                         CONSTANT_REFLECTION_PROVIDER.forObject(
408                                         DUMMY_CLASS_INSTANCE.stableLongArrayArrayWithValues));
409         STABLE_ARRAY_ARRAYS_MAP.put(
getResolvedJavaField(DummyClass.class, R)410                         getResolvedJavaField(DummyClass.class, "stableFloatArrayArrayWithValues"),
411                         CONSTANT_REFLECTION_PROVIDER.forObject(
412                                         DUMMY_CLASS_INSTANCE.stableFloatArrayArrayWithValues));
413         STABLE_ARRAY_ARRAYS_MAP.put(
getResolvedJavaField(DummyClass.class, R)414                         getResolvedJavaField(DummyClass.class, "stableDoubleArrayArrayWithValues"),
415                         CONSTANT_REFLECTION_PROVIDER.forObject(
416                                         DUMMY_CLASS_INSTANCE.stableDoubleArrayArrayWithValues));
417         STABLE_ARRAY_ARRAYS_MAP.put(
getResolvedJavaField(DummyClass.class, R)418                         getResolvedJavaField(DummyClass.class, "stableObjectArrayArrayWithValues"),
419                         CONSTANT_REFLECTION_PROVIDER.forObject(
420                                         DUMMY_CLASS_INSTANCE.stableObjectArrayArrayWithValues));
421     }
422 
getResolvedJavaField(Class<?> clazz, String fieldName)423     public static ResolvedJavaField getResolvedJavaField(Class<?> clazz, String fieldName) {
424         Field reflectionField = null;
425         try {
426             reflectionField = clazz.getDeclaredField(fieldName);
427             reflectionField.setAccessible(true);
428         } catch (NoSuchFieldException ex) {
429             throw new Error("Test bug: Invalid field name: " + ex, ex);
430         } catch (SecurityException ex) {
431             throw new Error("Unexpected error: " + ex, ex);
432         }
433         MetaAccessProvider metaAccess = JVMCI.getRuntime().getHostJVMCIBackend().getMetaAccess();
434         return metaAccess.lookupJavaField(reflectionField);
435     }
436 }
437