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> STATIC_FIELDS_MAP = new HashMap<>();
 161 
 162     static {
 163         STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticBooleanField"),
 164                         JavaConstant.forBoolean(DummyClass.staticBooleanField));
 165         STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticByteField"),
 166                         JavaConstant.forByte(DummyClass.staticByteField));
 167         STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticShortField"),
 168                         JavaConstant.forShort(DummyClass.staticShortField));
 169         STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticCharField"),
 170                         JavaConstant.forChar(DummyClass.staticCharField));
 171         STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticIntField"),
 172                         JavaConstant.forInt(DummyClass.staticIntField));
 173         STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticLongField"),
 174                         JavaConstant.forLong(DummyClass.staticLongField));
 175         STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFloatField"),
 176                         JavaConstant.forFloat(DummyClass.staticFloatField));
 177         STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticDoubleField"),
 178                         JavaConstant.forDouble(DummyClass.staticDoubleField));
 179         STATIC_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticObjectField"),
 180                         CONSTANT_REFLECTION_PROVIDER.forObject(DummyClass.staticObjectField));
 181     }
 182 
 183     public static final Map<ResolvedJavaField, JavaConstant> STATIC_FINAL_FIELDS_MAP = new HashMap<>();
 184 
 185     static {
 186         STATIC_FINAL_FIELDS_MAP.put(
 187                         getResolvedJavaField(DummyClass.class, "staticFinalBooleanField"),
 188                         JavaConstant.forBoolean(DummyClass.staticFinalBooleanField));
 189         STATIC_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFinalByteField"),
 190                         JavaConstant.forByte(DummyClass.staticFinalByteField));
 191         STATIC_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFinalShortField"),
 192                         JavaConstant.forShort(DummyClass.staticFinalShortField));
 193         STATIC_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFinalCharField"),
 194                         JavaConstant.forChar(DummyClass.staticFinalCharField));
 195         STATIC_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFinalIntField"),
 196                         JavaConstant.forInt(DummyClass.staticFinalIntField));
 197         STATIC_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFinalLongField"),
 198                         JavaConstant.forLong(DummyClass.staticFinalLongField));
 199         STATIC_FINAL_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticFinalFloatField"),
 200                         JavaConstant.forFloat(DummyClass.staticFinalFloatField));
 201         STATIC_FINAL_FIELDS_MAP.put(
 202                         getResolvedJavaField(DummyClass.class, "staticFinalDoubleField"),
 203                         JavaConstant.forDouble(DummyClass.staticFinalDoubleField));
 204         STATIC_FINAL_FIELDS_MAP.put(
 205                         getResolvedJavaField(DummyClass.class, "staticFinalObjectField"),
 206                         CONSTANT_REFLECTION_PROVIDER.forObject(DummyClass.staticFinalObjectField));
 207     }
 208 
 209     public static final Map<ResolvedJavaField, JavaConstant> STATIC_STABLE_FIELDS_MAP = new HashMap<>();
 210 
 211     static {
 212         STATIC_STABLE_FIELDS_MAP.put(
 213                         getResolvedJavaField(DummyClass.class, "staticStableBooleanField"),
 214                         JavaConstant.forBoolean(DummyClass.staticStableBooleanField));
 215         STATIC_STABLE_FIELDS_MAP.put(
 216                         getResolvedJavaField(DummyClass.class, "staticStableByteField"),
 217                         JavaConstant.forByte(DummyClass.staticStableByteField));
 218         STATIC_STABLE_FIELDS_MAP.put(
 219                         getResolvedJavaField(DummyClass.class, "staticStableShortField"),
 220                         JavaConstant.forShort(DummyClass.staticStableShortField));
 221         STATIC_STABLE_FIELDS_MAP.put(
 222                         getResolvedJavaField(DummyClass.class, "staticStableCharField"),
 223                         JavaConstant.forChar(DummyClass.staticStableCharField));
 224         STATIC_STABLE_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class, "staticStableIntField"),
 225                         JavaConstant.forInt(DummyClass.staticStableIntField));
 226         STATIC_STABLE_FIELDS_MAP.put(
 227                         getResolvedJavaField(DummyClass.class, "staticStableLongField"),
 228                         JavaConstant.forLong(DummyClass.staticStableLongField));
 229         STATIC_STABLE_FIELDS_MAP.put(
 230                         getResolvedJavaField(DummyClass.class, "staticStableFloatField"),
 231                         JavaConstant.forFloat(DummyClass.staticStableFloatField));
 232         STATIC_STABLE_FIELDS_MAP.put(
 233                         getResolvedJavaField(DummyClass.class, "staticStableDoubleField"),
 234                         JavaConstant.forDouble(DummyClass.staticStableDoubleField));
 235         STATIC_STABLE_FIELDS_MAP.put(
 236                         getResolvedJavaField(DummyClass.class, "staticStableObjectField"),
 237                         CONSTANT_REFLECTION_PROVIDER.forObject(DummyClass.staticStableObjectField));
 238     }
 239 
 240     public static final Map<ResolvedJavaField, JavaConstant> STATIC_STABLE_DEFAULT_FIELDS_MAP = new HashMap<>();
 241 
 242     static {
 243         STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 244                         "staticStableDefaultBooleanField"),
 245                         JavaConstant.forBoolean(
 246                                         DummyClass.staticStableDefaultBooleanField));
 247         STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 248                         "staticStableDefaultByteField"),
 249                         JavaConstant.forByte(
 250                                         DummyClass.staticStableDefaultByteField));
 251         STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 252                         "staticStableDefaultShortField"),
 253                         JavaConstant.forShort(
 254                                         DummyClass.staticStableDefaultShortField));
 255         STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 256                         "staticStableDefaultCharField"),
 257                         JavaConstant.forChar(
 258                                         DummyClass.staticStableDefaultCharField));
 259         STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 260                         "staticStableDefaultIntField"),
 261                         JavaConstant.forInt(
 262                                         DummyClass.staticStableDefaultIntField));
 263         STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 264                         "staticStableDefaultLongField"),
 265                         JavaConstant.forLong(
 266                                         DummyClass.staticStableDefaultLongField));
 267         STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 268                         "staticStableDefaultFloatField"),
 269                         JavaConstant.forFloat(
 270                                         DummyClass.staticStableDefaultFloatField));
 271         STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 272                         "staticStableDefaultDoubleField"),
 273                         JavaConstant.forDouble(
 274                                         DummyClass.staticStableDefaultDoubleField));
 275         STATIC_STABLE_DEFAULT_FIELDS_MAP.put(getResolvedJavaField(DummyClass.class,
 276                         "staticStableDefaultObjectField"),
 277                         CONSTANT_REFLECTION_PROVIDER.forObject(
 278                                         DummyClass.staticStableDefaultObjectField));
 279     }
 280 
 281     public static final int ARRAY_DIMENSION = 1;
 282     public static final int ARRAY_OF_ARRAYS_DIMENSION = 2;
 283 
 284     public static final Map<ResolvedJavaField, JavaConstant> ARRAYS_MAP = new HashMap<>();
 285 
 286     static {
 287         ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "booleanArrayWithValues"),
 288                         CONSTANT_REFLECTION_PROVIDER.forObject(
 289                                         DUMMY_CLASS_INSTANCE.booleanArrayWithValues));
 290         ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "byteArrayWithValues"),
 291                         CONSTANT_REFLECTION_PROVIDER.forObject(
 292                                         DUMMY_CLASS_INSTANCE.byteArrayWithValues));
 293         ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "shortArrayWithValues"),
 294                         CONSTANT_REFLECTION_PROVIDER.forObject(
 295                                         DUMMY_CLASS_INSTANCE.shortArrayWithValues));
 296         ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "charArrayWithValues"),
 297                         CONSTANT_REFLECTION_PROVIDER.forObject(
 298                                         DUMMY_CLASS_INSTANCE.charArrayWithValues));
 299         ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "intArrayWithValues"),
 300                         CONSTANT_REFLECTION_PROVIDER.forObject(
 301                                         DUMMY_CLASS_INSTANCE.intArrayWithValues));
 302         ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "longArrayWithValues"),
 303                         CONSTANT_REFLECTION_PROVIDER.forObject(
 304                                         DUMMY_CLASS_INSTANCE.longArrayWithValues));
 305         ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "floatArrayWithValues"),
 306                         CONSTANT_REFLECTION_PROVIDER.forObject(
 307                                         DUMMY_CLASS_INSTANCE.floatArrayWithValues));
 308         ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "doubleArrayWithValues"),
 309                         CONSTANT_REFLECTION_PROVIDER.forObject(
 310                                         DUMMY_CLASS_INSTANCE.doubleArrayWithValues));
 311         ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "objectArrayWithValues"),
 312                         CONSTANT_REFLECTION_PROVIDER.forObject(
 313                                         DUMMY_CLASS_INSTANCE.objectArrayWithValues));
 314     }
 315 
 316     public static final Map<ResolvedJavaField, JavaConstant> STABLE_ARRAYS_MAP = new HashMap<>();
 317 
 318     static {
 319         STABLE_ARRAYS_MAP.put(
 320                         getResolvedJavaField(DummyClass.class, "stableBooleanArrayWithValues"),
 321                         CONSTANT_REFLECTION_PROVIDER.forObject(
 322                                         DUMMY_CLASS_INSTANCE.stableBooleanArrayWithValues));
 323         STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableByteArrayWithValues"),
 324                         CONSTANT_REFLECTION_PROVIDER.forObject(
 325                                         DUMMY_CLASS_INSTANCE.stableByteArrayWithValues));
 326         STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableShortArrayWithValues"),
 327                         CONSTANT_REFLECTION_PROVIDER.forObject(
 328                                         DUMMY_CLASS_INSTANCE.stableShortArrayWithValues));
 329         STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableCharArrayWithValues"),
 330                         CONSTANT_REFLECTION_PROVIDER.forObject(
 331                                         DUMMY_CLASS_INSTANCE.stableCharArrayWithValues));
 332         STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableIntArrayWithValues"),
 333                         CONSTANT_REFLECTION_PROVIDER.forObject(
 334                                         DUMMY_CLASS_INSTANCE.stableIntArrayWithValues));
 335         STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableLongArrayWithValues"),
 336                         CONSTANT_REFLECTION_PROVIDER.forObject(
 337                                         DUMMY_CLASS_INSTANCE.stableLongArrayWithValues));
 338         STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableFloatArrayWithValues"),
 339                         CONSTANT_REFLECTION_PROVIDER.forObject(
 340                                         DUMMY_CLASS_INSTANCE.stableFloatArrayWithValues));
 341         STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableDoubleArrayWithValues"),
 342                         CONSTANT_REFLECTION_PROVIDER.forObject(
 343                                         DUMMY_CLASS_INSTANCE.stableDoubleArrayWithValues));
 344         STABLE_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "stableObjectArrayWithValues"),
 345                         CONSTANT_REFLECTION_PROVIDER.forObject(
 346                                         DUMMY_CLASS_INSTANCE.stableObjectArrayWithValues));
 347     }
 348 
 349     public static final Map<ResolvedJavaField, JavaConstant> ARRAY_ARRAYS_MAP = new HashMap<>();
 350 
 351     static {
 352         ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "booleanArrayArrayWithValues"),
 353                         CONSTANT_REFLECTION_PROVIDER.forObject(
 354                                         DUMMY_CLASS_INSTANCE.booleanArrayArrayWithValues));
 355         ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "byteArrayArrayWithValues"),
 356                         CONSTANT_REFLECTION_PROVIDER.forObject(
 357                                         DUMMY_CLASS_INSTANCE.byteArrayArrayWithValues));
 358         ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "shortArrayArrayWithValues"),
 359                         CONSTANT_REFLECTION_PROVIDER.forObject(
 360                                         DUMMY_CLASS_INSTANCE.shortArrayArrayWithValues));
 361         ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "charArrayArrayWithValues"),
 362                         CONSTANT_REFLECTION_PROVIDER.forObject(
 363                                         DUMMY_CLASS_INSTANCE.charArrayArrayWithValues));
 364         ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "intArrayArrayWithValues"),
 365                         CONSTANT_REFLECTION_PROVIDER.forObject(
 366                                         DUMMY_CLASS_INSTANCE.intArrayArrayWithValues));
 367         ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "longArrayArrayWithValues"),
 368                         CONSTANT_REFLECTION_PROVIDER.forObject(
 369                                         DUMMY_CLASS_INSTANCE.longArrayArrayWithValues));
 370         ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "floatArrayArrayWithValues"),
 371                         CONSTANT_REFLECTION_PROVIDER.forObject(
 372                                         DUMMY_CLASS_INSTANCE.floatArrayArrayWithValues));
 373         ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "doubleArrayArrayWithValues"),
 374                         CONSTANT_REFLECTION_PROVIDER.forObject(
 375                                         DUMMY_CLASS_INSTANCE.doubleArrayArrayWithValues));
 376         ARRAY_ARRAYS_MAP.put(getResolvedJavaField(DummyClass.class, "objectArrayArrayWithValues"),
 377                         CONSTANT_REFLECTION_PROVIDER.forObject(
 378                                         DUMMY_CLASS_INSTANCE.objectArrayArrayWithValues));
 379     }
 380 
 381     public static final Map<ResolvedJavaField, JavaConstant> STABLE_ARRAY_ARRAYS_MAP = new HashMap<>();
 382 
 383     static {
 384         STABLE_ARRAY_ARRAYS_MAP.put(
 385                         getResolvedJavaField(DummyClass.class, "stableBooleanArrayArrayWithValues"),
 386                         CONSTANT_REFLECTION_PROVIDER.forObject(
 387                                         DUMMY_CLASS_INSTANCE.stableBooleanArrayArrayWithValues));
 388         STABLE_ARRAY_ARRAYS_MAP.put(
 389                         getResolvedJavaField(DummyClass.class, "stableByteArrayArrayWithValues"),
 390                         CONSTANT_REFLECTION_PROVIDER.forObject(
 391                                         DUMMY_CLASS_INSTANCE.stableByteArrayArrayWithValues));
 392         STABLE_ARRAY_ARRAYS_MAP.put(
 393                         getResolvedJavaField(DummyClass.class, "stableShortArrayArrayWithValues"),
 394                         CONSTANT_REFLECTION_PROVIDER.forObject(
 395                                         DUMMY_CLASS_INSTANCE.stableShortArrayArrayWithValues));
 396         STABLE_ARRAY_ARRAYS_MAP.put(
 397                         getResolvedJavaField(DummyClass.class, "stableCharArrayArrayWithValues"),
 398                         CONSTANT_REFLECTION_PROVIDER.forObject(
 399                                         DUMMY_CLASS_INSTANCE.stableCharArrayArrayWithValues));
 400         STABLE_ARRAY_ARRAYS_MAP.put(
 401                         getResolvedJavaField(DummyClass.class, "stableIntArrayArrayWithValues"),
 402                         CONSTANT_REFLECTION_PROVIDER.forObject(
 403                                         DUMMY_CLASS_INSTANCE.stableIntArrayArrayWithValues));
 404         STABLE_ARRAY_ARRAYS_MAP.put(
 405                         getResolvedJavaField(DummyClass.class, "stableLongArrayArrayWithValues"),
 406                         CONSTANT_REFLECTION_PROVIDER.forObject(
 407                                         DUMMY_CLASS_INSTANCE.stableLongArrayArrayWithValues));
 408         STABLE_ARRAY_ARRAYS_MAP.put(
 409                         getResolvedJavaField(DummyClass.class, "stableFloatArrayArrayWithValues"),
 410                         CONSTANT_REFLECTION_PROVIDER.forObject(
 411                                         DUMMY_CLASS_INSTANCE.stableFloatArrayArrayWithValues));
 412         STABLE_ARRAY_ARRAYS_MAP.put(
 413                         getResolvedJavaField(DummyClass.class, "stableDoubleArrayArrayWithValues"),
 414                         CONSTANT_REFLECTION_PROVIDER.forObject(
 415                                         DUMMY_CLASS_INSTANCE.stableDoubleArrayArrayWithValues));
 416         STABLE_ARRAY_ARRAYS_MAP.put(
 417                         getResolvedJavaField(DummyClass.class, "stableObjectArrayArrayWithValues"),
 418                         CONSTANT_REFLECTION_PROVIDER.forObject(
 419                                         DUMMY_CLASS_INSTANCE.stableObjectArrayArrayWithValues));
 420     }
 421 
 422     public static ResolvedJavaField getResolvedJavaField(Class<?> clazz, String fieldName) {
 423         Field reflectionField = null;
 424         try {
 425             reflectionField = clazz.getDeclaredField(fieldName);
 426             reflectionField.setAccessible(true);
 427         } catch (NoSuchFieldException ex) {
 428             throw new Error("Test bug: Invalid field name: " + ex, ex);
 429         } catch (SecurityException ex) {
 430             throw new Error("Unexpected error: " + ex, ex);
 431         }
 432         MetaAccessProvider metaAccess = JVMCI.getRuntime().getHostJVMCIBackend().getMetaAccess();
 433         return metaAccess.lookupJavaField(reflectionField);
 434     }
 435 }