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