TestHelper.java revision 10526:cfb6c135aef4
1343171Sdim/*
2343171Sdim * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
3353358Sdim * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4353358Sdim *
5353358Sdim * This code is free software; you can redistribute it and/or modify it
6343171Sdim * under the terms of the GNU General Public License version 2 only, as
7343171Sdim * published by the Free Software Foundation.
8343171Sdim *
9343171Sdim * This code is distributed in the hope that it will be useful, but WITHOUT
10343171Sdim * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11343171Sdim * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12343171Sdim * version 2 for more details (a copy is included in the LICENSE file that
13343171Sdim * accompanied this code).
14343171Sdim *
15343171Sdim * You should have received a copy of the GNU General Public License version
16343171Sdim * 2 along with this work; if not, write to the Free Software Foundation,
17343171Sdim * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18343171Sdim *
19343171Sdim * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20343171Sdim * or visit www.oracle.com if you need additional information or have any
21343171Sdim * questions.
22343171Sdim */
23343171Sdim
24343171Sdimpackage jdk.vm.ci.hotspot.test;
25343171Sdim
26343171Sdimimport java.lang.reflect.Field;
27343171Sdimimport java.util.HashMap;
28343171Sdimimport java.util.Map;
29343171Sdimimport jdk.vm.ci.hotspot.HotSpotConstantReflectionProvider;
30343171Sdimimport jdk.vm.ci.meta.JavaConstant;
31343171Sdimimport jdk.vm.ci.meta.MetaAccessProvider;
32343171Sdimimport jdk.vm.ci.meta.ResolvedJavaField;
33343171Sdimimport jdk.vm.ci.runtime.JVMCI;
34343171Sdim
35343171Sdimpublic class TestHelper {
36343171Sdim
37343171Sdim    public static final DummyClass DUMMY_CLASS_INSTANCE = new DummyClass();
38343171Sdim    public static final HotSpotConstantReflectionProvider CONSTANT_REFLECTION_PROVIDER
39343171Sdim            = (HotSpotConstantReflectionProvider) JVMCI.getRuntime().getHostJVMCIBackend().getConstantReflection();
40343171Sdim    public static final JavaConstant DUMMY_CLASS_CONSTANT
41343171Sdim            = CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE);
42343171Sdim
43360784Sdim    public static final Map<ResolvedJavaField, JavaConstant> INSTANCE_FIELDS_MAP
44360784Sdim            = new HashMap<>();
45343171Sdim
46343171Sdim    static {
47343171Sdim        INSTANCE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "booleanField"),
48343171Sdim                                JavaConstant.forBoolean(DUMMY_CLASS_INSTANCE.booleanField));
49360784Sdim        INSTANCE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "byteField"),
50343171Sdim                                JavaConstant.forByte(DUMMY_CLASS_INSTANCE.byteField));
51343171Sdim        INSTANCE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "shortField"),
52343171Sdim                                JavaConstant.forShort(DUMMY_CLASS_INSTANCE.shortField));
53343171Sdim        INSTANCE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "charField"),
54343171Sdim                                JavaConstant.forChar(DUMMY_CLASS_INSTANCE.charField));
55343171Sdim        INSTANCE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "intField"),
56343171Sdim                                JavaConstant.forInt(DUMMY_CLASS_INSTANCE.intField));
57343171Sdim        INSTANCE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "longField"),
58343171Sdim                                JavaConstant.forLong(DUMMY_CLASS_INSTANCE.longField));
59343171Sdim        INSTANCE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "floatField"),
60343171Sdim                                JavaConstant.forFloat(DUMMY_CLASS_INSTANCE.floatField));
61343171Sdim        INSTANCE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "doubleField"),
62343171Sdim                                JavaConstant.forDouble(DUMMY_CLASS_INSTANCE.doubleField));
63343171Sdim        INSTANCE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "objectField"),
64343171Sdim                                CONSTANT_REFLECTION_PROVIDER.forObject(
65343171Sdim                                        DUMMY_CLASS_INSTANCE.objectField));
66343171Sdim    }
67343171Sdim
68353358Sdim    public static final Map<ResolvedJavaField, JavaConstant> INSTANCE_FINAL_FIELDS_MAP
69353358Sdim            = new HashMap<>();
70343171Sdim
71343171Sdim    static {
72343171Sdim        INSTANCE_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "finalBooleanField"),
73343171Sdim                                      JavaConstant.forBoolean(
74343171Sdim                                              DUMMY_CLASS_INSTANCE.finalBooleanField));
75343171Sdim        INSTANCE_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "finalByteField"),
76343171Sdim                                      JavaConstant.forByte(DUMMY_CLASS_INSTANCE.finalByteField));
77343171Sdim        INSTANCE_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "finalShortField"),
78343171Sdim                                      JavaConstant.forShort(DUMMY_CLASS_INSTANCE.finalShortField));
79343171Sdim        INSTANCE_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "finalCharField"),
80343171Sdim                                      JavaConstant.forChar(DUMMY_CLASS_INSTANCE.finalCharField));
81343171Sdim        INSTANCE_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "finalIntField"),
82343171Sdim                                      JavaConstant.forInt(DUMMY_CLASS_INSTANCE.finalIntField));
83343171Sdim        INSTANCE_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "finalLongField"),
84343171Sdim                                      JavaConstant.forLong(DUMMY_CLASS_INSTANCE.finalLongField));
85343171Sdim        INSTANCE_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "finalFloatField"),
86343171Sdim                                      JavaConstant.forFloat(DUMMY_CLASS_INSTANCE.finalFloatField));
87343171Sdim        INSTANCE_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "finalDoubleField"),
88343171Sdim                                      JavaConstant.forDouble(
89343171Sdim                                              DUMMY_CLASS_INSTANCE.finalDoubleField));
90343171Sdim        INSTANCE_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "finalObjectField"),
91343171Sdim                                      CONSTANT_REFLECTION_PROVIDER.forObject(
92343171Sdim                                              DUMMY_CLASS_INSTANCE.finalObjectField));
93343171Sdim    }
94343171Sdim
95343171Sdim    public static final Map<ResolvedJavaField, JavaConstant> INSTANCE_FINAL_DEFAULT_FIELDS_MAP
96343171Sdim            = new HashMap<>();
97343171Sdim
98343171Sdim    static {
99343171Sdim        INSTANCE_FINAL_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
100343171Sdim                                                                   "finalDefaultBooleanField"),
101343171Sdim                                              JavaConstant.forBoolean(
102343171Sdim                                                      DUMMY_CLASS_INSTANCE.finalDefaultBooleanField));
103343171Sdim        INSTANCE_FINAL_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
104343171Sdim                                                                   "finalDefaultByteField"),
105343171Sdim                                              JavaConstant.forByte(
106343171Sdim                                                      DUMMY_CLASS_INSTANCE.finalDefaultByteField));
107353358Sdim        INSTANCE_FINAL_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
108343171Sdim                                                                   "finalDefaultShortField"),
109343171Sdim                                              JavaConstant.forShort(
110343171Sdim                                                      DUMMY_CLASS_INSTANCE.finalDefaultShortField));
111343171Sdim        INSTANCE_FINAL_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
112343171Sdim                                                                   "finalDefaultCharField"),
113343171Sdim                                              JavaConstant.forChar(
114343171Sdim                                                      DUMMY_CLASS_INSTANCE.finalDefaultCharField));
115343171Sdim        INSTANCE_FINAL_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
116353358Sdim                                                                   "finalDefaultIntField"),
117353358Sdim                                              JavaConstant.forInt(
118343171Sdim                                                      DUMMY_CLASS_INSTANCE.finalDefaultIntField));
119343171Sdim        INSTANCE_FINAL_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
120343171Sdim                                                                   "finalDefaultLongField"),
121343171Sdim                                              JavaConstant.forLong(
122343171Sdim                                                      DUMMY_CLASS_INSTANCE.finalDefaultLongField));
123353358Sdim        INSTANCE_FINAL_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
124343171Sdim                                                                   "finalDefaultFloatField"),
125343171Sdim                                              JavaConstant.forFloat(
126343171Sdim                                                      DUMMY_CLASS_INSTANCE.finalDefaultFloatField));
127343171Sdim        INSTANCE_FINAL_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
128343171Sdim                                                                   "finalDefaultDoubleField"),
129343171Sdim                                              JavaConstant.forDouble(
130343171Sdim                                                      DUMMY_CLASS_INSTANCE.finalDefaultDoubleField));
131343171Sdim        INSTANCE_FINAL_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
132343171Sdim                                                                   "finalDefaultObjectField"),
133343171Sdim                                              CONSTANT_REFLECTION_PROVIDER.forObject(
134343171Sdim                                                      DUMMY_CLASS_INSTANCE.finalDefaultObjectField));
135343171Sdim    }
136343171Sdim
137343171Sdim    public static final Map<ResolvedJavaField, JavaConstant> INSTANCE_STABLE_FIELDS_MAP
138343171Sdim            = new HashMap<>();
139343171Sdim
140343171Sdim    static {
141343171Sdim        INSTANCE_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "stableBooleanField"),
142343171Sdim                                       JavaConstant.forBoolean(
143343171Sdim                                               DUMMY_CLASS_INSTANCE.stableBooleanField));
144343171Sdim        INSTANCE_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "stableByteField"),
145343171Sdim                                       JavaConstant.forByte(DUMMY_CLASS_INSTANCE.stableByteField));
146343171Sdim        INSTANCE_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "stableShortField"),
147343171Sdim                                       JavaConstant.forShort(
148343171Sdim                                               DUMMY_CLASS_INSTANCE.stableShortField));
149343171Sdim        INSTANCE_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "stableCharField"),
150343171Sdim                                       JavaConstant.forChar(DUMMY_CLASS_INSTANCE.stableCharField));
151343171Sdim        INSTANCE_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "stableIntField"),
152343171Sdim                                       JavaConstant.forInt(DUMMY_CLASS_INSTANCE.stableIntField));
153343171Sdim        INSTANCE_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "stableLongField"),
154360784Sdim                                       JavaConstant.forLong(DUMMY_CLASS_INSTANCE.stableLongField));
155343171Sdim        INSTANCE_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "stableFloatField"),
156343171Sdim                                       JavaConstant.forFloat(
157343171Sdim                                               DUMMY_CLASS_INSTANCE.stableFloatField));
158343171Sdim        INSTANCE_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "stableDoubleField"),
159343171Sdim                                       JavaConstant.forDouble(
160343171Sdim                                               DUMMY_CLASS_INSTANCE.stableDoubleField));
161343171Sdim        INSTANCE_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "stableObjectField"),
162343171Sdim                                       CONSTANT_REFLECTION_PROVIDER.forObject(
163343171Sdim                                               DUMMY_CLASS_INSTANCE.stableObjectField));
164343171Sdim    }
165343171Sdim
166343171Sdim    public static final Map<ResolvedJavaField, JavaConstant> INSTANCE_STABLE_DEFAULT_FIELDS_MAP
167343171Sdim            = new HashMap<>();
168343171Sdim
169343171Sdim    static {
170343171Sdim        INSTANCE_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
171343171Sdim                                                                    "stableDefaultBooleanField"),
172343171Sdim                                               JavaConstant.forBoolean(
173343171Sdim                                                       DUMMY_CLASS_INSTANCE.stableDefaultBooleanField));
174343171Sdim        INSTANCE_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
175343171Sdim                                                                    "stableDefaultByteField"),
176343171Sdim                                               JavaConstant.forByte(
177343171Sdim                                                       DUMMY_CLASS_INSTANCE.stableDefaultByteField));
178343171Sdim        INSTANCE_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
179343171Sdim                                                                    "stableDefaultShortField"),
180343171Sdim                                               JavaConstant.forShort(
181343171Sdim                                                       DUMMY_CLASS_INSTANCE.stableDefaultShortField));
182343171Sdim        INSTANCE_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
183343171Sdim                                                                    "stableDefaultCharField"),
184343171Sdim                                               JavaConstant.forChar(
185343171Sdim                                                       DUMMY_CLASS_INSTANCE.stableDefaultCharField));
186343171Sdim        INSTANCE_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
187343171Sdim                                                                    "stableDefaultIntField"),
188343171Sdim                                               JavaConstant.forInt(
189343171Sdim                                                       DUMMY_CLASS_INSTANCE.stableDefaultIntField));
190343171Sdim        INSTANCE_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
191343171Sdim                                                                    "stableDefaultLongField"),
192343171Sdim                                               JavaConstant.forLong(
193343171Sdim                                                       DUMMY_CLASS_INSTANCE.stableDefaultLongField));
194343171Sdim        INSTANCE_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
195343171Sdim                                                                    "stableDefaultFloatField"),
196343171Sdim                                               JavaConstant.forFloat(
197343171Sdim                                                       DUMMY_CLASS_INSTANCE.stableDefaultFloatField));
198343171Sdim        INSTANCE_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
199343171Sdim                                                                    "stableDefaultDoubleField"),
200343171Sdim                                               JavaConstant.forDouble(
201353358Sdim                                                       DUMMY_CLASS_INSTANCE.stableDefaultDoubleField));
202343171Sdim        INSTANCE_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
203353358Sdim                                                                    "stableDefaultObjectField"),
204343171Sdim                                               CONSTANT_REFLECTION_PROVIDER.forObject(
205343171Sdim                                                       DUMMY_CLASS_INSTANCE.stableDefaultObjectField));
206360784Sdim    }
207343171Sdim
208343171Sdim    public static final Map<ResolvedJavaField, JavaConstant> STATIC_FIELDS_MAP = new HashMap<>();
209343171Sdim
210343171Sdim    static {
211343171Sdim        STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticBooleanField"),
212343171Sdim                              JavaConstant.forBoolean(DummyClass.staticBooleanField));
213343171Sdim        STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticByteField"),
214343171Sdim                              JavaConstant.forByte(DummyClass.staticByteField));
215343171Sdim        STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticShortField"),
216343171Sdim                              JavaConstant.forShort(DummyClass.staticShortField));
217343171Sdim        STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticCharField"),
218343171Sdim                              JavaConstant.forChar(DummyClass.staticCharField));
219343171Sdim        STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticIntField"),
220343171Sdim                              JavaConstant.forInt(DummyClass.staticIntField));
221343171Sdim        STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticLongField"),
222343171Sdim                              JavaConstant.forLong(DummyClass.staticLongField));
223343171Sdim        STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFloatField"),
224343171Sdim                              JavaConstant.forFloat(DummyClass.staticFloatField));
225343171Sdim        STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticDoubleField"),
226343171Sdim                              JavaConstant.forDouble(DummyClass.staticDoubleField));
227343171Sdim        STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticObjectField"),
228343171Sdim                              CONSTANT_REFLECTION_PROVIDER.forObject(DummyClass.staticObjectField));
229343171Sdim    }
230343171Sdim
231343171Sdim    public static final Map<ResolvedJavaField, JavaConstant> STATIC_FINAL_FIELDS_MAP
232343171Sdim            = new HashMap<>();
233343171Sdim
234343171Sdim    static {
235343171Sdim        STATIC_FINAL_FIELDS_MAP.put(
236343171Sdim                getResolvedJavaField(DummyClass.class, "staticFinalBooleanField"),
237343171Sdim                JavaConstant.forBoolean(DummyClass.staticFinalBooleanField));
238343171Sdim        STATIC_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFinalByteField"),
239343171Sdim                                    JavaConstant.forByte(DummyClass.staticFinalByteField));
240343171Sdim        STATIC_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFinalShortField"),
241343171Sdim                                    JavaConstant.forShort(DummyClass.staticFinalShortField));
242343171Sdim        STATIC_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFinalCharField"),
243343171Sdim                                    JavaConstant.forChar(DummyClass.staticFinalCharField));
244343171Sdim        STATIC_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFinalIntField"),
245343171Sdim                                    JavaConstant.forInt(DummyClass.staticFinalIntField));
246343171Sdim        STATIC_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFinalLongField"),
247343171Sdim                                    JavaConstant.forLong(DummyClass.staticFinalLongField));
248343171Sdim        STATIC_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFinalFloatField"),
249343171Sdim                                    JavaConstant.forFloat(DummyClass.staticFinalFloatField));
250343171Sdim        STATIC_FINAL_FIELDS_MAP.put(
251343171Sdim                getResolvedJavaField(DummyClass.class, "staticFinalDoubleField"),
252343171Sdim                JavaConstant.forDouble(DummyClass.staticFinalDoubleField));
253343171Sdim        STATIC_FINAL_FIELDS_MAP.put(
254343171Sdim                getResolvedJavaField(DummyClass.class, "staticFinalObjectField"),
255343171Sdim                CONSTANT_REFLECTION_PROVIDER.forObject(DummyClass.staticFinalObjectField));
256343171Sdim    }
257343171Sdim
258343171Sdim    public static final Map<ResolvedJavaField, JavaConstant> STATIC_STABLE_FIELDS_MAP
259343171Sdim            = new HashMap<>();
260343171Sdim
261343171Sdim    static {
262343171Sdim        STATIC_STABLE_FIELDS_MAP.put(
263343171Sdim                getResolvedJavaField(DummyClass.class, "staticStableBooleanField"),
264343171Sdim                JavaConstant.forBoolean(DummyClass.staticStableBooleanField));
265343171Sdim        STATIC_STABLE_FIELDS_MAP.put(
266343171Sdim                getResolvedJavaField(DummyClass.class, "staticStableByteField"),
267343171Sdim                JavaConstant.forByte(DummyClass.staticStableByteField));
268343171Sdim        STATIC_STABLE_FIELDS_MAP.put(
269343171Sdim                getResolvedJavaField(DummyClass.class, "staticStableShortField"),
270343171Sdim                JavaConstant.forShort(DummyClass.staticStableShortField));
271343171Sdim        STATIC_STABLE_FIELDS_MAP.put(
272343171Sdim                getResolvedJavaField(DummyClass.class, "staticStableCharField"),
273343171Sdim                JavaConstant.forChar(DummyClass.staticStableCharField));
274343171Sdim        STATIC_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticStableIntField"),
275343171Sdim                                     JavaConstant.forInt(DummyClass.staticStableIntField));
276343171Sdim        STATIC_STABLE_FIELDS_MAP.put(
277343171Sdim                getResolvedJavaField(DummyClass.class, "staticStableLongField"),
278343171Sdim                JavaConstant.forLong(DummyClass.staticStableLongField));
279343171Sdim        STATIC_STABLE_FIELDS_MAP.put(
280343171Sdim                getResolvedJavaField(DummyClass.class, "staticStableFloatField"),
281343171Sdim                JavaConstant.forFloat(DummyClass.staticStableFloatField));
282343171Sdim        STATIC_STABLE_FIELDS_MAP.put(
283343171Sdim                getResolvedJavaField(DummyClass.class, "staticStableDoubleField"),
284343171Sdim                JavaConstant.forDouble(DummyClass.staticStableDoubleField));
285343171Sdim        STATIC_STABLE_FIELDS_MAP.put(
286343171Sdim                getResolvedJavaField(DummyClass.class, "staticStableObjectField"),
287343171Sdim                CONSTANT_REFLECTION_PROVIDER.forObject(DummyClass.staticStableObjectField));
288343171Sdim    }
289343171Sdim
290343171Sdim    public static final Map<ResolvedJavaField, JavaConstant> STATIC_STABLE_DEFAULT_FIELDS_MAP
291343171Sdim            = new HashMap<>();
292343171Sdim
293343171Sdim    static {
294343171Sdim        STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
295343171Sdim                                                                  "staticStableDefaultBooleanField"),
296343171Sdim                                             JavaConstant.forBoolean(
297343171Sdim                                                     DummyClass.staticStableDefaultBooleanField));
298343171Sdim        STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
299343171Sdim                                                                  "staticStableDefaultByteField"),
300343171Sdim                                             JavaConstant.forByte(
301343171Sdim                                                     DummyClass.staticStableDefaultByteField));
302343171Sdim        STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
303343171Sdim                                                                  "staticStableDefaultShortField"),
304343171Sdim                                             JavaConstant.forShort(
305343171Sdim                                                     DummyClass.staticStableDefaultShortField));
306343171Sdim        STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
307343171Sdim                                                                  "staticStableDefaultCharField"),
308343171Sdim                                             JavaConstant.forChar(
309353358Sdim                                                     DummyClass.staticStableDefaultCharField));
310353358Sdim        STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
311353358Sdim                                                                  "staticStableDefaultIntField"),
312353358Sdim                                             JavaConstant.forInt(
313343171Sdim                                                     DummyClass.staticStableDefaultIntField));
314343171Sdim        STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
315343171Sdim                                                                  "staticStableDefaultLongField"),
316343171Sdim                                             JavaConstant.forLong(
317343171Sdim                                                     DummyClass.staticStableDefaultLongField));
318343171Sdim        STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
319343171Sdim                                                                  "staticStableDefaultFloatField"),
320343171Sdim                                             JavaConstant.forFloat(
321343171Sdim                                                     DummyClass.staticStableDefaultFloatField));
322343171Sdim        STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
323343171Sdim                                                                  "staticStableDefaultDoubleField"),
324343171Sdim                                             JavaConstant.forDouble(
325343171Sdim                                                     DummyClass.staticStableDefaultDoubleField));
326343171Sdim        STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
327343171Sdim                                                                  "staticStableDefaultObjectField"),
328343171Sdim                                             CONSTANT_REFLECTION_PROVIDER.forObject(
329343171Sdim                                                     DummyClass.staticStableDefaultObjectField));
330343171Sdim    }
331343171Sdim
332343171Sdim    public static final int ARRAY_DIMENSION = 1;
333343171Sdim    public static final int ARRAY_OF_ARRAYS_DIMENSION = 2;
334343171Sdim
335343171Sdim    public static final Map<ResolvedJavaField, JavaConstant> ARRAYS_MAP = new HashMap<>();
336343171Sdim
337343171Sdim    static {
338343171Sdim        ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "booleanArrayWithValues"),
339343171Sdim                       CONSTANT_REFLECTION_PROVIDER.forObject(
340343171Sdim                               DUMMY_CLASS_INSTANCE.booleanArrayWithValues));
341343171Sdim        ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "byteArrayWithValues"),
342343171Sdim                       CONSTANT_REFLECTION_PROVIDER.forObject(
343343171Sdim                               DUMMY_CLASS_INSTANCE.byteArrayWithValues));
344343171Sdim        ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "shortArrayWithValues"),
345343171Sdim                       CONSTANT_REFLECTION_PROVIDER.forObject(
346343171Sdim                               DUMMY_CLASS_INSTANCE.shortArrayWithValues));
347343171Sdim        ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "charArrayWithValues"),
348343171Sdim                       CONSTANT_REFLECTION_PROVIDER.forObject(
349343171Sdim                               DUMMY_CLASS_INSTANCE.charArrayWithValues));
350343171Sdim        ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "intArrayWithValues"),
351343171Sdim                       CONSTANT_REFLECTION_PROVIDER.forObject(
352343171Sdim                               DUMMY_CLASS_INSTANCE.intArrayWithValues));
353343171Sdim        ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "longArrayWithValues"),
354343171Sdim                       CONSTANT_REFLECTION_PROVIDER.forObject(
355343171Sdim                               DUMMY_CLASS_INSTANCE.longArrayWithValues));
356343171Sdim        ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "floatArrayWithValues"),
357343171Sdim                       CONSTANT_REFLECTION_PROVIDER.forObject(
358343171Sdim                               DUMMY_CLASS_INSTANCE.floatArrayWithValues));
359343171Sdim        ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "doubleArrayWithValues"),
360343171Sdim                       CONSTANT_REFLECTION_PROVIDER.forObject(
361343171Sdim                               DUMMY_CLASS_INSTANCE.doubleArrayWithValues));
362343171Sdim        ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "objectArrayWithValues"),
363343171Sdim                       CONSTANT_REFLECTION_PROVIDER.forObject(
364343171Sdim                               DUMMY_CLASS_INSTANCE.objectArrayWithValues));
365343171Sdim    }
366343171Sdim
367343171Sdim    public static final Map<ResolvedJavaField, JavaConstant> STABLE_ARRAYS_MAP = new HashMap<>();
368343171Sdim
369343171Sdim    static {
370343171Sdim        STABLE_ARRAYS_MAP.put(
371343171Sdim                getResolvedJavaField(DummyClass.class, "stableBooleanArrayWithValues"),
372343171Sdim                CONSTANT_REFLECTION_PROVIDER.forObject(
373343171Sdim                        DUMMY_CLASS_INSTANCE.stableBooleanArrayWithValues));
374343171Sdim        STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableByteArrayWithValues"),
375343171Sdim                              CONSTANT_REFLECTION_PROVIDER.forObject(
376343171Sdim                                      DUMMY_CLASS_INSTANCE.stableByteArrayWithValues));
377343171Sdim        STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableShortArrayWithValues"),
378343171Sdim                              CONSTANT_REFLECTION_PROVIDER.forObject(
379343171Sdim                                      DUMMY_CLASS_INSTANCE.stableShortArrayWithValues));
380343171Sdim        STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableCharArrayWithValues"),
381343171Sdim                              CONSTANT_REFLECTION_PROVIDER.forObject(
382343171Sdim                                      DUMMY_CLASS_INSTANCE.stableCharArrayWithValues));
383343171Sdim        STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableIntArrayWithValues"),
384343171Sdim                              CONSTANT_REFLECTION_PROVIDER.forObject(
385343171Sdim                                      DUMMY_CLASS_INSTANCE.stableIntArrayWithValues));
386343171Sdim        STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableLongArrayWithValues"),
387343171Sdim                              CONSTANT_REFLECTION_PROVIDER.forObject(
388343171Sdim                                      DUMMY_CLASS_INSTANCE.stableLongArrayWithValues));
389343171Sdim        STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableFloatArrayWithValues"),
390343171Sdim                              CONSTANT_REFLECTION_PROVIDER.forObject(
391343171Sdim                                      DUMMY_CLASS_INSTANCE.stableFloatArrayWithValues));
392343171Sdim        STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableDoubleArrayWithValues"),
393343171Sdim                              CONSTANT_REFLECTION_PROVIDER.forObject(
394343171Sdim                                      DUMMY_CLASS_INSTANCE.stableDoubleArrayWithValues));
395343171Sdim        STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableObjectArrayWithValues"),
396343171Sdim                              CONSTANT_REFLECTION_PROVIDER.forObject(
397343171Sdim                                      DUMMY_CLASS_INSTANCE.stableObjectArrayWithValues));
398343171Sdim    }
399343171Sdim
400343171Sdim    public static final Map<ResolvedJavaField, JavaConstant> ARRAY_ARRAYS_MAP = new HashMap<>();
401343171Sdim
402343171Sdim    static {
403343171Sdim        ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "booleanArrayArrayWithValues"),
404343171Sdim                             CONSTANT_REFLECTION_PROVIDER.forObject(
405343171Sdim                                     DUMMY_CLASS_INSTANCE.booleanArrayArrayWithValues));
406343171Sdim        ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "byteArrayArrayWithValues"),
407343171Sdim                             CONSTANT_REFLECTION_PROVIDER.forObject(
408343171Sdim                                     DUMMY_CLASS_INSTANCE.byteArrayArrayWithValues));
409343171Sdim        ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "shortArrayArrayWithValues"),
410343171Sdim                             CONSTANT_REFLECTION_PROVIDER.forObject(
411343171Sdim                                     DUMMY_CLASS_INSTANCE.shortArrayArrayWithValues));
412343171Sdim        ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "charArrayArrayWithValues"),
413343171Sdim                             CONSTANT_REFLECTION_PROVIDER.forObject(
414343171Sdim                                     DUMMY_CLASS_INSTANCE.charArrayArrayWithValues));
415343171Sdim        ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "intArrayArrayWithValues"),
416343171Sdim                             CONSTANT_REFLECTION_PROVIDER.forObject(
417343171Sdim                                     DUMMY_CLASS_INSTANCE.intArrayArrayWithValues));
418343171Sdim        ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "longArrayArrayWithValues"),
419343171Sdim                             CONSTANT_REFLECTION_PROVIDER.forObject(
420343171Sdim                                     DUMMY_CLASS_INSTANCE.longArrayArrayWithValues));
421343171Sdim        ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "floatArrayArrayWithValues"),
422343171Sdim                             CONSTANT_REFLECTION_PROVIDER.forObject(
423343171Sdim                                     DUMMY_CLASS_INSTANCE.floatArrayArrayWithValues));
424353358Sdim        ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "doubleArrayArrayWithValues"),
425353358Sdim                             CONSTANT_REFLECTION_PROVIDER.forObject(
426353358Sdim                                     DUMMY_CLASS_INSTANCE.doubleArrayArrayWithValues));
427353358Sdim        ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "objectArrayArrayWithValues"),
428353358Sdim                             CONSTANT_REFLECTION_PROVIDER.forObject(
429353358Sdim                                     DUMMY_CLASS_INSTANCE.objectArrayArrayWithValues));
430353358Sdim    }
431353358Sdim
432353358Sdim    public static final Map<ResolvedJavaField, JavaConstant> STABLE_ARRAY_ARRAYS_MAP = new HashMap<>();
433353358Sdim
434353358Sdim    static {
435353358Sdim        STABLE_ARRAY_ARRAYS_MAP.put(
436353358Sdim                getResolvedJavaField(DummyClass.class, "stableBooleanArrayArrayWithValues"),
437353358Sdim                CONSTANT_REFLECTION_PROVIDER.forObject(
438353358Sdim                        DUMMY_CLASS_INSTANCE.stableBooleanArrayArrayWithValues));
439353358Sdim        STABLE_ARRAY_ARRAYS_MAP.put(
440353358Sdim                getResolvedJavaField(DummyClass.class, "stableByteArrayArrayWithValues"),
441353358Sdim                CONSTANT_REFLECTION_PROVIDER.forObject(
442353358Sdim                        DUMMY_CLASS_INSTANCE.stableByteArrayArrayWithValues));
443353358Sdim        STABLE_ARRAY_ARRAYS_MAP.put(
444353358Sdim                getResolvedJavaField(DummyClass.class, "stableShortArrayArrayWithValues"),
445353358Sdim                CONSTANT_REFLECTION_PROVIDER.forObject(
446353358Sdim                        DUMMY_CLASS_INSTANCE.stableShortArrayArrayWithValues));
447353358Sdim        STABLE_ARRAY_ARRAYS_MAP.put(
448353358Sdim                getResolvedJavaField(DummyClass.class, "stableCharArrayArrayWithValues"),
449353358Sdim                CONSTANT_REFLECTION_PROVIDER.forObject(
450353358Sdim                        DUMMY_CLASS_INSTANCE.stableCharArrayArrayWithValues));
451353358Sdim        STABLE_ARRAY_ARRAYS_MAP.put(
452353358Sdim                getResolvedJavaField(DummyClass.class, "stableIntArrayArrayWithValues"),
453353358Sdim                CONSTANT_REFLECTION_PROVIDER.forObject(
454353358Sdim                        DUMMY_CLASS_INSTANCE.stableIntArrayArrayWithValues));
455353358Sdim        STABLE_ARRAY_ARRAYS_MAP.put(
456353358Sdim                getResolvedJavaField(DummyClass.class, "stableLongArrayArrayWithValues"),
457353358Sdim                CONSTANT_REFLECTION_PROVIDER.forObject(
458353358Sdim                        DUMMY_CLASS_INSTANCE.stableLongArrayArrayWithValues));
459353358Sdim        STABLE_ARRAY_ARRAYS_MAP.put(
460353358Sdim                getResolvedJavaField(DummyClass.class, "stableFloatArrayArrayWithValues"),
461353358Sdim                CONSTANT_REFLECTION_PROVIDER.forObject(
462353358Sdim                        DUMMY_CLASS_INSTANCE.stableFloatArrayArrayWithValues));
463353358Sdim        STABLE_ARRAY_ARRAYS_MAP.put(
464353358Sdim                getResolvedJavaField(DummyClass.class, "stableDoubleArrayArrayWithValues"),
465353358Sdim                CONSTANT_REFLECTION_PROVIDER.forObject(
466353358Sdim                        DUMMY_CLASS_INSTANCE.stableDoubleArrayArrayWithValues));
467353358Sdim        STABLE_ARRAY_ARRAYS_MAP.put(
468353358Sdim                getResolvedJavaField(DummyClass.class, "stableObjectArrayArrayWithValues"),
469353358Sdim                CONSTANT_REFLECTION_PROVIDER.forObject(
470353358Sdim                        DUMMY_CLASS_INSTANCE.stableObjectArrayArrayWithValues));
471353358Sdim    }
472353358Sdim
473353358Sdim    public static ResolvedJavaField getResolvedJavaField(Class<?> clazz, String fieldName) {
474343171Sdim        Field reflectionField = null;
475343171Sdim        try {
476343171Sdim            reflectionField = clazz.getDeclaredField(fieldName);
477343171Sdim            reflectionField.setAccessible(true);
478343171Sdim        } catch (NoSuchFieldException ex) {
479343171Sdim            throw new Error("Test bug: Invalid field name: " + ex, ex);
480343171Sdim        } catch (SecurityException ex) {
481343171Sdim            throw new Error("Unexpected error: " + ex, ex);
482343171Sdim        }
483343171Sdim        MetaAccessProvider metaAccess = JVMCI.getRuntime().getHostJVMCIBackend().getMetaAccess();
484343171Sdim        return metaAccess.lookupJavaField(reflectionField);
485343171Sdim    }
486343171Sdim}
487343171Sdim