< prev index next >

test/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestResolvedJavaType.java

Print this page




  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++) {


< prev index next >