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 compiler.jvmci.constantReflectionProviderTest;
  25 
  26 import java.lang.reflect.Field;
  27 import java.util.HashMap;
  28 import java.util.Map;
  29 import jdk.vm.ci.hotspot.HotSpotConstantReflectionProvider;
  30 import jdk.vm.ci.meta.JavaConstant;
  31 import jdk.vm.ci.meta.MetaAccessProvider;
  32 import jdk.vm.ci.meta.ResolvedJavaField;
  33 import jdk.vm.ci.runtime.JVMCI;
  34 
  35 public class TestHelper {
  36 
  37     public final static DummyClass DUMMY_CLASS_INSTANCE = new DummyClass();
  38     public final static HotSpotConstantReflectionProvider CONSTANT_REFLECTION_PROVIDER
  39             = (HotSpotConstantReflectionProvider) JVMCI.getRuntime()
  40                     .getHostJVMCIBackend().getConstantReflection();
  41     public final static JavaConstant DUMMY_CLASS_CONSTANT
  42             = CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE);
  43 
  44     public static final Map<ResolvedJavaField, JavaConstant> INSTANCE_FIELDS_MAP
  45             = new HashMap<>();
  46 
  47     static {
  48         INSTANCE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "booleanField"),
  49                 JavaConstant.forBoolean(DUMMY_CLASS_INSTANCE.booleanField));
  50         INSTANCE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "byteField"),
  51                 JavaConstant.forByte(DUMMY_CLASS_INSTANCE.byteField));
  52         INSTANCE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "shortField"),
  53                 JavaConstant.forShort(DUMMY_CLASS_INSTANCE.shortField));
  54         INSTANCE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "charField"),
  55                 JavaConstant.forChar(DUMMY_CLASS_INSTANCE.charField));
  56         INSTANCE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "intField"),
  57                 JavaConstant.forInt(DUMMY_CLASS_INSTANCE.intField));
  58         INSTANCE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "longField"),
  59                 JavaConstant.forLong(DUMMY_CLASS_INSTANCE.longField));
  60         INSTANCE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "floatField"),
  61                 JavaConstant.forFloat(DUMMY_CLASS_INSTANCE.floatField));
  62         INSTANCE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "doubleField"),
  63                 JavaConstant.forDouble(DUMMY_CLASS_INSTANCE.doubleField));
  64         INSTANCE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "objectField"),
  65                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.objectField));
  66     }
  67 
  68     public static final Map<ResolvedJavaField, JavaConstant> INSTANCE_FINAL_FIELDS_MAP
  69             = new HashMap<>();
  70 
  71     static {
  72         INSTANCE_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "finalBooleanField"),
  73                 JavaConstant.forBoolean(DUMMY_CLASS_INSTANCE.finalBooleanField));
  74         INSTANCE_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "finalByteField"),
  75                 JavaConstant.forByte(DUMMY_CLASS_INSTANCE.finalByteField));
  76         INSTANCE_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "finalShortField"),
  77                 JavaConstant.forShort(DUMMY_CLASS_INSTANCE.finalShortField));
  78         INSTANCE_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "finalCharField"),
  79                 JavaConstant.forChar(DUMMY_CLASS_INSTANCE.finalCharField));
  80         INSTANCE_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "finalIntField"),
  81                 JavaConstant.forInt(DUMMY_CLASS_INSTANCE.finalIntField));
  82         INSTANCE_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "finalLongField"),
  83                 JavaConstant.forLong(DUMMY_CLASS_INSTANCE.finalLongField));
  84         INSTANCE_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "finalFloatField"),
  85                 JavaConstant.forFloat(DUMMY_CLASS_INSTANCE.finalFloatField));
  86         INSTANCE_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "finalDoubleField"),
  87                 JavaConstant.forDouble(DUMMY_CLASS_INSTANCE.finalDoubleField));
  88         INSTANCE_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "finalObjectField"),
  89                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.finalObjectField));
  90     }
  91 
  92     public static final Map<ResolvedJavaField, JavaConstant> INSTANCE_FINAL_DEFAULT_FIELDS_MAP
  93             = new HashMap<>();
  94 
  95     static {
  96         INSTANCE_FINAL_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
  97                                                                    "finalDefaultBooleanField"),
  98                 JavaConstant.forBoolean(DUMMY_CLASS_INSTANCE.finalDefaultBooleanField));
  99         INSTANCE_FINAL_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 100                                                                    "finalDefaultByteField"),
 101                 JavaConstant.forByte(DUMMY_CLASS_INSTANCE.finalDefaultByteField));
 102         INSTANCE_FINAL_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 103                                                                    "finalDefaultShortField"),
 104                 JavaConstant.forShort(DUMMY_CLASS_INSTANCE.finalDefaultShortField));
 105         INSTANCE_FINAL_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 106                                                                    "finalDefaultCharField"),
 107                 JavaConstant.forChar(DUMMY_CLASS_INSTANCE.finalDefaultCharField));
 108         INSTANCE_FINAL_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 109                                                                    "finalDefaultIntField"),
 110                 JavaConstant.forInt(DUMMY_CLASS_INSTANCE.finalDefaultIntField));
 111         INSTANCE_FINAL_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 112                                                                    "finalDefaultLongField"),
 113                 JavaConstant.forLong(DUMMY_CLASS_INSTANCE.finalDefaultLongField));
 114         INSTANCE_FINAL_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 115                                                                    "finalDefaultFloatField"),
 116                 JavaConstant.forFloat(DUMMY_CLASS_INSTANCE.finalDefaultFloatField));
 117         INSTANCE_FINAL_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 118                                                                    "finalDefaultDoubleField"),
 119                 JavaConstant.forDouble(DUMMY_CLASS_INSTANCE.finalDefaultDoubleField));
 120         INSTANCE_FINAL_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 121                                                                   "finalDefaultObjectField"),
 122                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.finalDefaultObjectField));
 123     }
 124 
 125     public static final Map<ResolvedJavaField, JavaConstant> INSTANCE_STABLE_FIELDS_MAP
 126             = new HashMap<>();
 127 
 128     static {
 129         INSTANCE_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "stableBooleanField"),
 130                 JavaConstant.forBoolean(DUMMY_CLASS_INSTANCE.stableBooleanField));
 131         INSTANCE_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "stableByteField"),
 132                 JavaConstant.forByte(DUMMY_CLASS_INSTANCE.stableByteField));
 133         INSTANCE_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "stableShortField"),
 134                 JavaConstant.forShort(DUMMY_CLASS_INSTANCE.stableShortField));
 135         INSTANCE_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "stableCharField"),
 136                 JavaConstant.forChar(DUMMY_CLASS_INSTANCE.stableCharField));
 137         INSTANCE_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "stableIntField"),
 138                 JavaConstant.forInt(DUMMY_CLASS_INSTANCE.stableIntField));
 139         INSTANCE_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "stableLongField"),
 140                 JavaConstant.forLong(DUMMY_CLASS_INSTANCE.stableLongField));
 141         INSTANCE_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "stableFloatField"),
 142                 JavaConstant.forFloat(DUMMY_CLASS_INSTANCE.stableFloatField));
 143         INSTANCE_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "stableDoubleField"),
 144                 JavaConstant.forDouble(DUMMY_CLASS_INSTANCE.stableDoubleField));
 145         INSTANCE_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "stableObjectField"),
 146                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.stableObjectField));
 147     }
 148 
 149     public static final Map<ResolvedJavaField, JavaConstant> INSTANCE_STABLE_DEFAULT_FIELDS_MAP
 150             = new HashMap<>();
 151 
 152     static {
 153         INSTANCE_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 154                                                                     "stableDefaultBooleanField"),
 155                 JavaConstant.forBoolean(DUMMY_CLASS_INSTANCE.stableDefaultBooleanField));
 156         INSTANCE_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 157                                                                     "stableDefaultByteField"),
 158                 JavaConstant.forByte(DUMMY_CLASS_INSTANCE.stableDefaultByteField));
 159         INSTANCE_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 160                                                                     "stableDefaultShortField"),
 161                 JavaConstant.forShort(DUMMY_CLASS_INSTANCE.stableDefaultShortField));
 162         INSTANCE_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 163                                                                     "stableDefaultCharField"),
 164                 JavaConstant.forChar(DUMMY_CLASS_INSTANCE.stableDefaultCharField));
 165         INSTANCE_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 166                                                                     "stableDefaultIntField"),
 167                 JavaConstant.forInt(DUMMY_CLASS_INSTANCE.stableDefaultIntField));
 168         INSTANCE_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 169                                                                     "stableDefaultLongField"),
 170                 JavaConstant.forLong(DUMMY_CLASS_INSTANCE.stableDefaultLongField));
 171         INSTANCE_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 172                                                                     "stableDefaultFloatField"),
 173                 JavaConstant.forFloat(DUMMY_CLASS_INSTANCE.stableDefaultFloatField));
 174         INSTANCE_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 175                                                                     "stableDefaultDoubleField"),
 176                 JavaConstant.forDouble(DUMMY_CLASS_INSTANCE.stableDefaultDoubleField));
 177         INSTANCE_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 178                                                                     "stableDefaultObjectField"),
 179                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.stableDefaultObjectField));
 180     }
 181 
 182     public static final Map<ResolvedJavaField, JavaConstant> STATIC_FIELDS_MAP = new HashMap<>();
 183 
 184     static {
 185         STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticBooleanField"),
 186                 JavaConstant.forBoolean(DummyClass.staticBooleanField));
 187         STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticByteField"),
 188                 JavaConstant.forByte(DummyClass.staticByteField));
 189         STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticShortField"),
 190                 JavaConstant.forShort(DummyClass.staticShortField));
 191         STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticCharField"),
 192                 JavaConstant.forChar(DummyClass.staticCharField));
 193         STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticIntField"),
 194                 JavaConstant.forInt(DummyClass.staticIntField));
 195         STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticLongField"),
 196                 JavaConstant.forLong(DummyClass.staticLongField));
 197         STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFloatField"),
 198                 JavaConstant.forFloat(DummyClass.staticFloatField));
 199         STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticDoubleField"),
 200                 JavaConstant.forDouble(DummyClass.staticDoubleField));
 201         STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticObjectField"),
 202                 CONSTANT_REFLECTION_PROVIDER.forObject(DummyClass.staticObjectField));
 203     }
 204 
 205     public static final Map<ResolvedJavaField, JavaConstant> STATIC_FINAL_FIELDS_MAP
 206             = new HashMap<>();
 207 
 208     static {
 209         STATIC_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFinalBooleanField"),
 210                 JavaConstant.forBoolean(DummyClass.staticFinalBooleanField));
 211         STATIC_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFinalByteField"),
 212                 JavaConstant.forByte(DummyClass.staticFinalByteField));
 213         STATIC_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFinalShortField"),
 214                 JavaConstant.forShort(DummyClass.staticFinalShortField));
 215         STATIC_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFinalCharField"),
 216                 JavaConstant.forChar(DummyClass.staticFinalCharField));
 217         STATIC_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFinalIntField"),
 218                 JavaConstant.forInt(DummyClass.staticFinalIntField));
 219         STATIC_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFinalLongField"),
 220                 JavaConstant.forLong(DummyClass.staticFinalLongField));
 221         STATIC_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFinalFloatField"),
 222                 JavaConstant.forFloat(DummyClass.staticFinalFloatField));
 223         STATIC_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFinalDoubleField"),
 224                 JavaConstant.forDouble(DummyClass.staticFinalDoubleField));
 225         STATIC_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFinalObjectField"),
 226                 CONSTANT_REFLECTION_PROVIDER.forObject(DummyClass.staticFinalObjectField));
 227     }
 228 
 229     public static final Map<ResolvedJavaField, JavaConstant> STATIC_STABLE_FIELDS_MAP
 230             = new HashMap<>();
 231 
 232     static {
 233         STATIC_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticStableBooleanField"),
 234                 JavaConstant.forBoolean(DummyClass.staticStableBooleanField));
 235         STATIC_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticStableByteField"),
 236                 JavaConstant.forByte(DummyClass.staticStableByteField));
 237         STATIC_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticStableShortField"),
 238                 JavaConstant.forShort(DummyClass.staticStableShortField));
 239         STATIC_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticStableCharField"),
 240                 JavaConstant.forChar(DummyClass.staticStableCharField));
 241         STATIC_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticStableIntField"),
 242                 JavaConstant.forInt(DummyClass.staticStableIntField));
 243         STATIC_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticStableLongField"),
 244                 JavaConstant.forLong(DummyClass.staticStableLongField));
 245         STATIC_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticStableFloatField"),
 246                 JavaConstant.forFloat(DummyClass.staticStableFloatField));
 247         STATIC_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticStableDoubleField"),
 248                 JavaConstant.forDouble(DummyClass.staticStableDoubleField));
 249         STATIC_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticStableObjectField"),
 250                 CONSTANT_REFLECTION_PROVIDER.forObject(DummyClass.staticStableObjectField));
 251     }
 252 
 253     public static final Map<ResolvedJavaField, JavaConstant> STATIC_STABLE_DEFAULT_FIELDS_MAP
 254             = new HashMap<>();
 255 
 256     static {
 257         STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 258                                                                   "staticStableDefaultBooleanField"),
 259                 JavaConstant.forBoolean(DummyClass.staticStableDefaultBooleanField));
 260         STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 261                                                                   "staticStableDefaultByteField"),
 262                 JavaConstant.forByte(DummyClass.staticStableDefaultByteField));
 263         STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 264                                                                   "staticStableDefaultShortField"),
 265                 JavaConstant.forShort(DummyClass.staticStableDefaultShortField));
 266         STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 267                                                                   "staticStableDefaultCharField"),
 268                 JavaConstant.forChar(DummyClass.staticStableDefaultCharField));
 269         STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 270                                                                   "staticStableDefaultIntField"),
 271                 JavaConstant.forInt(DummyClass.staticStableDefaultIntField));
 272         STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 273                                                                   "staticStableDefaultLongField"),
 274                 JavaConstant.forLong(DummyClass.staticStableDefaultLongField));
 275         STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 276                                                                   "staticStableDefaultFloatField"),
 277                 JavaConstant.forFloat(DummyClass.staticStableDefaultFloatField));
 278         STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 279                                                                   "staticStableDefaultDoubleField"),
 280                 JavaConstant.forDouble(DummyClass.staticStableDefaultDoubleField));
 281         STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 282                                                                   "staticStableDefaultObjectField"),
 283                 CONSTANT_REFLECTION_PROVIDER.forObject(DummyClass.staticStableDefaultObjectField));
 284     }
 285 
 286     public static final int ARRAY_DIMENSION = 1;
 287     public static final int ARRAY_OF_ARRAYS_DIMENSION = 2;
 288 
 289     public static final Map<ResolvedJavaField, JavaConstant> ARRAYS_MAP = new HashMap<>();
 290 
 291     static {
 292         ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "booleanArrayWithValues"),
 293                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.booleanArrayWithValues));
 294         ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "byteArrayWithValues"),
 295                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.byteArrayWithValues));
 296         ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "shortArrayWithValues"),
 297                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.shortArrayWithValues));
 298         ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "charArrayWithValues"),
 299                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.charArrayWithValues));
 300         ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "intArrayWithValues"),
 301                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.intArrayWithValues));
 302         ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "longArrayWithValues"),
 303                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.longArrayWithValues));
 304         ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "floatArrayWithValues"),
 305                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.floatArrayWithValues));
 306         ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "doubleArrayWithValues"),
 307                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.doubleArrayWithValues));
 308         ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "objectArrayWithValues"),
 309                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.objectArrayWithValues));
 310     }
 311 
 312     public static final Map<ResolvedJavaField, JavaConstant> STABLE_ARRAYS_MAP = new HashMap<>();
 313 
 314     static {
 315         STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableBooleanArrayWithValues"),
 316                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.stableBooleanArrayWithValues));
 317         STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableByteArrayWithValues"),
 318                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.stableByteArrayWithValues));
 319         STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableShortArrayWithValues"),
 320                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.stableShortArrayWithValues));
 321         STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableCharArrayWithValues"),
 322                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.stableCharArrayWithValues));
 323         STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableIntArrayWithValues"),
 324                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.stableIntArrayWithValues));
 325         STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableLongArrayWithValues"),
 326                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.stableLongArrayWithValues));
 327         STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableFloatArrayWithValues"),
 328                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.stableFloatArrayWithValues));
 329         STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableDoubleArrayWithValues"),
 330                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.stableDoubleArrayWithValues));
 331         STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableObjectArrayWithValues"),
 332                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.stableObjectArrayWithValues));
 333     }
 334 
 335     public static final Map<ResolvedJavaField, JavaConstant> ARRAY_ARRAYS_MAP = new HashMap<>();
 336 
 337     static {
 338         ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "booleanArrayArrayWithValues"),
 339                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.booleanArrayArrayWithValues));
 340         ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "byteArrayArrayWithValues"),
 341                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.byteArrayArrayWithValues));
 342         ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "shortArrayArrayWithValues"),
 343                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.shortArrayArrayWithValues));
 344         ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "charArrayArrayWithValues"),
 345                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.charArrayArrayWithValues));
 346         ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "intArrayArrayWithValues"),
 347                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.intArrayArrayWithValues));
 348         ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "longArrayArrayWithValues"),
 349                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.longArrayArrayWithValues));
 350         ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "floatArrayArrayWithValues"),
 351                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.floatArrayArrayWithValues));
 352         ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "doubleArrayArrayWithValues"),
 353                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.doubleArrayArrayWithValues));
 354         ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "objectArrayArrayWithValues"),
 355                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.objectArrayArrayWithValues));
 356     }
 357 
 358     public static final Map<ResolvedJavaField, JavaConstant> STABLE_ARRAY_ARRAYS_MAP = new HashMap<>();
 359 
 360     static {
 361         STABLE_ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableBooleanArrayArrayWithValues"),
 362                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.stableBooleanArrayArrayWithValues));
 363         STABLE_ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableByteArrayArrayWithValues"),
 364                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.stableByteArrayArrayWithValues));
 365         STABLE_ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableShortArrayArrayWithValues"),
 366                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.stableShortArrayArrayWithValues));
 367         STABLE_ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableCharArrayArrayWithValues"),
 368                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.stableCharArrayArrayWithValues));
 369         STABLE_ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableIntArrayArrayWithValues"),
 370                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.stableIntArrayArrayWithValues));
 371         STABLE_ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableLongArrayArrayWithValues"),
 372                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.stableLongArrayArrayWithValues));
 373         STABLE_ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableFloatArrayArrayWithValues"),
 374                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.stableFloatArrayArrayWithValues));
 375         STABLE_ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableDoubleArrayArrayWithValues"),
 376                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.stableDoubleArrayArrayWithValues));
 377         STABLE_ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableObjectArrayArrayWithValues"),
 378                 CONSTANT_REFLECTION_PROVIDER.forObject(DUMMY_CLASS_INSTANCE.stableObjectArrayArrayWithValues));
 379     }
 380 
 381     public static ResolvedJavaField getResolvedJavaField(Class clazz, String fieldName) {
 382         Field reflectionField = null;
 383         try {
 384             reflectionField = clazz.getDeclaredField(fieldName);
 385             reflectionField.setAccessible(true);
 386         } catch (NoSuchFieldException ex) {
 387             throw new Error("Test bug: Invalid field name: " + ex, ex);
 388         } catch (SecurityException ex) {
 389             throw new Error("Unexpected error: " + ex, ex);
 390         }
 391         MetaAccessProvider metaAccess = JVMCI.getRuntime().getHostJVMCIBackend().getMetaAccess();
 392         return metaAccess.lookupJavaField(reflectionField);
 393     }
 394 }