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