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