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 /** 25 * @test 26 * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") 27 * @library ../../../../../ 28 * @modules java.base/jdk.internal.reflect 29 * jdk.vm.ci/jdk.vm.ci.meta 30 * jdk.vm.ci/jdk.vm.ci.runtime 31 * jdk.vm.ci/jdk.vm.ci.common 32 * java.base/jdk.internal.misc 33 * @run junit/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI jdk.vm.ci.runtime.test.TestResolvedJavaType 34 */ 35 36 package jdk.vm.ci.runtime.test; 37 38 import jdk.internal.reflect.ConstantPool; 39 import jdk.vm.ci.common.JVMCIError; 40 import jdk.vm.ci.meta.Assumptions.AssumptionResult; 41 import jdk.vm.ci.meta.JavaConstant; 42 import jdk.vm.ci.meta.JavaKind; 43 import jdk.vm.ci.meta.ModifiersProvider; 44 import jdk.vm.ci.meta.ResolvedJavaField; 45 import jdk.vm.ci.meta.ResolvedJavaMethod; 46 import jdk.vm.ci.meta.ResolvedJavaType; 47 import org.junit.Test; 48 49 import java.lang.annotation.Annotation; 50 import java.lang.reflect.Field; 51 import java.lang.reflect.Method; 52 import java.lang.reflect.Modifier; 53 import java.util.Arrays; 54 import java.util.Collections; 55 import java.util.HashMap; 56 import java.util.HashSet; 57 import java.util.Map; 58 import java.util.Set; 59 60 import static java.lang.reflect.Modifier.isAbstract; 61 import static java.lang.reflect.Modifier.isFinal; 62 import static java.lang.reflect.Modifier.isPrivate; 63 import static java.lang.reflect.Modifier.isProtected; 64 import static java.lang.reflect.Modifier.isPublic; 65 import static java.lang.reflect.Modifier.isStatic; 66 import static org.junit.Assert.assertArrayEquals; 67 import static org.junit.Assert.assertEquals; 68 import static org.junit.Assert.assertFalse; 69 import static org.junit.Assert.assertNotNull; 70 import static org.junit.Assert.assertNull; 71 import static org.junit.Assert.assertTrue; 72 73 /** 74 * Tests for {@link ResolvedJavaType}. 75 */ 76 @SuppressWarnings("unchecked") 77 public class TestResolvedJavaType extends TypeUniverse { 78 private static final Class<? extends Annotation> SIGNATURE_POLYMORPHIC_CLASS = findPolymorphicSignatureClass(); 79 80 public TestResolvedJavaType() { 81 } 82 83 private static Class<? extends Annotation> findPolymorphicSignatureClass() { 84 Class<? extends Annotation> signaturePolyAnnotation = null; 85 try { 86 for (Class<?> clazz : TestResolvedJavaType.class.getClassLoader().loadClass("java.lang.invoke.MethodHandle").getDeclaredClasses()) { 87 if (clazz.getName().endsWith("PolymorphicSignature") && Annotation.class.isAssignableFrom(clazz)) { 88 signaturePolyAnnotation = (Class<? extends Annotation>) clazz; 89 break; 90 } 91 } 92 } catch (Throwable e) { 129 boolean expected = !c.isArray() && !c.isPrimitive() && !c.isInterface(); 130 boolean actual = type.isInstanceClass(); 131 assertEquals(expected, actual); 132 } 133 } 134 135 @Test 136 public void isArrayTest() { 137 for (Class<?> c : classes) { 138 ResolvedJavaType type = metaAccess.lookupJavaType(c); 139 boolean expected = c.isArray(); 140 boolean actual = type.isArray(); 141 assertEquals(expected, actual); 142 } 143 } 144 145 @Test 146 public void getModifiersTest() { 147 for (Class<?> c : classes) { 148 ResolvedJavaType type = metaAccess.lookupJavaType(c); 149 int expected = c.getModifiers() & ModifiersProvider.jvmClassModifiers(); 150 int actual = type.getModifiers() & ModifiersProvider.jvmClassModifiers(); 151 Class<?> elementalType = c; 152 while (elementalType.isArray()) { 153 elementalType = elementalType.getComponentType(); 154 } 155 if (elementalType.isMemberClass()) { 156 // member class get their modifiers from the inner-class attribute in the JVM and 157 // from the classfile header in jvmci 158 expected &= ~(Modifier.PUBLIC | Modifier.PRIVATE | Modifier.PROTECTED); 159 actual &= ~(Modifier.PUBLIC | Modifier.PRIVATE | Modifier.PROTECTED); 160 } 161 assertEquals(String.format("%s: 0x%x != 0x%x", type, expected, actual), expected, actual); 162 } 163 } 164 165 @Test 166 public void isAssignableFromTest() { 167 Class<?>[] all = classes.toArray(new Class<?>[classes.size()]); 168 for (int i = 0; i < all.length; i++) { 169 Class<?> c1 = all[i]; 170 for (int j = i; j < all.length; j++) { | 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 /** 25 * @test 26 * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") 27 * @library ../../../../../ 28 * @modules java.base/jdk.internal.reflect 29 * jdk.vm.ci/jdk.vm.ci.meta 30 * jdk.vm.ci/jdk.vm.ci.runtime 31 * jdk.vm.ci/jdk.vm.ci.common 32 * java.base/jdk.internal.misc 33 * @run junit/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI jdk.vm.ci.runtime.test.TestResolvedJavaType 34 */ 35 36 package jdk.vm.ci.runtime.test; 37 38 import static java.lang.reflect.Modifier.isAbstract; 39 import static java.lang.reflect.Modifier.isFinal; 40 import static java.lang.reflect.Modifier.isPrivate; 41 import static java.lang.reflect.Modifier.isProtected; 42 import static java.lang.reflect.Modifier.isPublic; 43 import static java.lang.reflect.Modifier.isStatic; 44 import static org.junit.Assert.assertArrayEquals; 45 import static org.junit.Assert.assertEquals; 46 import static org.junit.Assert.assertFalse; 47 import static org.junit.Assert.assertNotNull; 48 import static org.junit.Assert.assertNull; 49 import static org.junit.Assert.assertTrue; 50 51 import java.lang.annotation.Annotation; 52 import java.lang.reflect.Field; 53 import java.lang.reflect.Method; 54 import java.lang.reflect.Modifier; 55 import java.util.Arrays; 56 import java.util.Collections; 57 import java.util.HashMap; 58 import java.util.HashSet; 59 import java.util.Map; 60 import java.util.Set; 61 62 import org.junit.Test; 63 64 import jdk.internal.reflect.ConstantPool; 65 import jdk.vm.ci.common.JVMCIError; 66 import jdk.vm.ci.meta.Assumptions.AssumptionResult; 67 import jdk.vm.ci.meta.JavaConstant; 68 import jdk.vm.ci.meta.JavaKind; 69 import jdk.vm.ci.meta.ResolvedJavaField; 70 import jdk.vm.ci.meta.ResolvedJavaMethod; 71 import jdk.vm.ci.meta.ResolvedJavaType; 72 73 /** 74 * Tests for {@link ResolvedJavaType}. 75 */ 76 @SuppressWarnings("unchecked") 77 public class TestResolvedJavaType extends TypeUniverse { 78 private static final Class<? extends Annotation> SIGNATURE_POLYMORPHIC_CLASS = findPolymorphicSignatureClass(); 79 80 public TestResolvedJavaType() { 81 } 82 83 private static Class<? extends Annotation> findPolymorphicSignatureClass() { 84 Class<? extends Annotation> signaturePolyAnnotation = null; 85 try { 86 for (Class<?> clazz : TestResolvedJavaType.class.getClassLoader().loadClass("java.lang.invoke.MethodHandle").getDeclaredClasses()) { 87 if (clazz.getName().endsWith("PolymorphicSignature") && Annotation.class.isAssignableFrom(clazz)) { 88 signaturePolyAnnotation = (Class<? extends Annotation>) clazz; 89 break; 90 } 91 } 92 } catch (Throwable e) { 129 boolean expected = !c.isArray() && !c.isPrimitive() && !c.isInterface(); 130 boolean actual = type.isInstanceClass(); 131 assertEquals(expected, actual); 132 } 133 } 134 135 @Test 136 public void isArrayTest() { 137 for (Class<?> c : classes) { 138 ResolvedJavaType type = metaAccess.lookupJavaType(c); 139 boolean expected = c.isArray(); 140 boolean actual = type.isArray(); 141 assertEquals(expected, actual); 142 } 143 } 144 145 @Test 146 public void getModifiersTest() { 147 for (Class<?> c : classes) { 148 ResolvedJavaType type = metaAccess.lookupJavaType(c); 149 int mask = Modifier.classModifiers() & ~Modifier.STATIC; 150 int expected = c.getModifiers() & mask; 151 int actual = type.getModifiers() & mask; 152 Class<?> elementalType = c; 153 while (elementalType.isArray()) { 154 elementalType = elementalType.getComponentType(); 155 } 156 if (elementalType.isMemberClass()) { 157 // member class get their modifiers from the inner-class attribute in the JVM and 158 // from the classfile header in jvmci 159 expected &= ~(Modifier.PUBLIC | Modifier.PRIVATE | Modifier.PROTECTED); 160 actual &= ~(Modifier.PUBLIC | Modifier.PRIVATE | Modifier.PROTECTED); 161 } 162 assertEquals(String.format("%s: 0x%x != 0x%x", type, expected, actual), expected, actual); 163 } 164 } 165 166 @Test 167 public void isAssignableFromTest() { 168 Class<?>[] all = classes.toArray(new Class<?>[classes.size()]); 169 for (int i = 0; i < all.length; i++) { 170 Class<?> c1 = all[i]; 171 for (int j = i; j < all.length; j++) { |