src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/HotSpotResolvedJavaFieldTest.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Cdiff src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/HotSpotResolvedJavaFieldTest.java

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/HotSpotResolvedJavaFieldTest.java

Print this page

        

*** 34,44 **** import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import org.junit.Assert; import org.junit.Test; ! import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig; import jdk.vm.ci.hotspot.HotSpotResolvedJavaField; import jdk.vm.ci.hotspot.HotSpotResolvedObjectType; import jdk.vm.ci.meta.JavaType; --- 34,44 ---- import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import org.junit.Assert; import org.junit.Test; ! import org.graalvm.compiler.core.common.util.Util; import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig; import jdk.vm.ci.hotspot.HotSpotResolvedJavaField; import jdk.vm.ci.hotspot.HotSpotResolvedObjectType; import jdk.vm.ci.meta.JavaType;
*** 50,71 **** public class HotSpotResolvedJavaFieldTest extends HotSpotGraalCompilerTest { private static final Class<?>[] classesWithInternalFields = {Class.class, ClassLoader.class}; private static final Method createFieldMethod; static { ! Method ret = null; try { Class<?> typeImpl = Class.forName("jdk.vm.ci.hotspot.HotSpotResolvedObjectTypeImpl"); ! ret = typeImpl.getDeclaredMethod("createField", String.class, JavaType.class, long.class, int.class); ! ret.setAccessible(true); ! } catch (ClassNotFoundException | NoSuchMethodException | SecurityException e) { ! e.printStackTrace(); } ! createFieldMethod = ret; } /** * Same as {@code HotSpotModifiers.jvmFieldModifiers()} but works when using a JVMCI version * prior to the introduction of that method. --- 50,77 ---- public class HotSpotResolvedJavaFieldTest extends HotSpotGraalCompilerTest { private static final Class<?>[] classesWithInternalFields = {Class.class, ClassLoader.class}; private static final Method createFieldMethod; + private static final Field indexField; static { ! Method m = null; ! Field f = null; try { Class<?> typeImpl = Class.forName("jdk.vm.ci.hotspot.HotSpotResolvedObjectTypeImpl"); ! m = typeImpl.getDeclaredMethod("createField", JavaType.class, long.class, int.class, int.class); ! Util.setAccessible(m, true); ! Class<?> fieldImpl = Class.forName("jdk.vm.ci.hotspot.HotSpotResolvedJavaFieldImpl"); ! f = fieldImpl.getDeclaredField("index"); ! Util.setAccessible(f, true); ! } catch (Exception e) { ! throw new AssertionError(e); } ! createFieldMethod = m; ! indexField = f; } /** * Same as {@code HotSpotModifiers.jvmFieldModifiers()} but works when using a JVMCI version * prior to the introduction of that method.
*** 94,118 **** } } /** * Tests that {@code HotSpotResolvedObjectType#createField(String, JavaType, long, int)} always ! * returns the same object for an internal field. * * @throws InvocationTargetException * @throws IllegalArgumentException * @throws IllegalAccessException */ @Test ! public void testCachingForInternalFields() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException { ! Assert.assertTrue("HotSpotResolvedObjectTypeImpl.createField method not found", createFieldMethod != null); for (Class<?> c : classesWithInternalFields) { HotSpotResolvedObjectType type = HotSpotResolvedObjectType.fromObjectClass(c); for (ResolvedJavaField field : type.getInstanceFields(false)) { if (field.isInternal()) { HotSpotResolvedJavaField expected = (HotSpotResolvedJavaField) field; ! ResolvedJavaField actual = (ResolvedJavaField) createFieldMethod.invoke(type, expected.getName(), expected.getType(), expected.offset(), expected.getModifiers()); Assert.assertEquals(expected, actual); } } } } --- 100,125 ---- } } /** * Tests that {@code HotSpotResolvedObjectType#createField(String, JavaType, long, int)} always ! * returns an {@linkplain ResolvedJavaField#equals(Object) equivalent} object for an internal ! * field. * * @throws InvocationTargetException * @throws IllegalArgumentException * @throws IllegalAccessException */ @Test ! public void testEquivalenceForInternalFields() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException { for (Class<?> c : classesWithInternalFields) { HotSpotResolvedObjectType type = HotSpotResolvedObjectType.fromObjectClass(c); for (ResolvedJavaField field : type.getInstanceFields(false)) { if (field.isInternal()) { HotSpotResolvedJavaField expected = (HotSpotResolvedJavaField) field; ! int index = indexField.getInt(expected); ! ResolvedJavaField actual = (ResolvedJavaField) createFieldMethod.invoke(type, expected.getType(), expected.offset(), expected.getModifiers(), index); Assert.assertEquals(expected, actual); } } } }
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/HotSpotResolvedJavaFieldTest.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File