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