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