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")
126 public void isInstanceClassTest() {
127 for (Class<?> c : classes) {
128 ResolvedJavaType type = metaAccess.lookupJavaType(c);
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
|
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.function.Supplier;
58 import java.util.HashMap;
59 import java.util.HashSet;
60 import java.util.Map;
61 import java.util.Set;
62
63 import org.junit.Test;
64
65 import jdk.internal.reflect.ConstantPool;
66 import jdk.vm.ci.common.JVMCIError;
67 import jdk.vm.ci.meta.Assumptions.AssumptionResult;
68 import jdk.vm.ci.meta.JavaConstant;
69 import jdk.vm.ci.meta.JavaKind;
70 import jdk.vm.ci.meta.ResolvedJavaField;
71 import jdk.vm.ci.meta.ResolvedJavaMethod;
72 import jdk.vm.ci.meta.ResolvedJavaType;
73
74 /**
75 * Tests for {@link ResolvedJavaType}.
76 */
77 @SuppressWarnings("unchecked")
127 public void isInstanceClassTest() {
128 for (Class<?> c : classes) {
129 ResolvedJavaType type = metaAccess.lookupJavaType(c);
130 boolean expected = !c.isArray() && !c.isPrimitive() && !c.isInterface();
131 boolean actual = type.isInstanceClass();
132 assertEquals(expected, actual);
133 }
134 }
135
136 @Test
137 public void isArrayTest() {
138 for (Class<?> c : classes) {
139 ResolvedJavaType type = metaAccess.lookupJavaType(c);
140 boolean expected = c.isArray();
141 boolean actual = type.isArray();
142 assertEquals(expected, actual);
143 }
144 }
145
146 @Test
147 public void getHostClassTest() {
148 for (Class<?> c : classes) {
149 ResolvedJavaType type = metaAccess.lookupJavaType(c);
150 ResolvedJavaType host = type.getHostClass();
151 assertNull(host);
152 }
153
154 class LocalClass {}
155 Cloneable clone = new Cloneable() {};
156 assertNull(metaAccess.lookupJavaType(LocalClass.class).getHostClass());
157 assertNull(metaAccess.lookupJavaType(clone.getClass()).getHostClass());
158
159 Supplier<Runnable> lambda = () -> () -> System.out.println("run");
160 ResolvedJavaType lambdaType = metaAccess.lookupJavaType(lambda.getClass());
161 ResolvedJavaType nestedLambdaType = metaAccess.lookupJavaType(lambda.get().getClass());
162 assertNotNull(lambdaType.getHostClass());
163 assertNotNull(nestedLambdaType.getHostClass());
164 assertEquals(lambdaType.getHostClass(), nestedLambdaType.getHostClass());
165 }
166
167 @Test
168 public void getModifiersTest() {
169 for (Class<?> c : classes) {
170 ResolvedJavaType type = metaAccess.lookupJavaType(c);
171 int mask = Modifier.classModifiers() & ~Modifier.STATIC;
172 int expected = c.getModifiers() & mask;
173 int actual = type.getModifiers() & mask;
174 Class<?> elementalType = c;
175 while (elementalType.isArray()) {
176 elementalType = elementalType.getComponentType();
177 }
178 if (elementalType.isMemberClass()) {
179 // member class get their modifiers from the inner-class attribute in the JVM and
180 // from the classfile header in jvmci
181 expected &= ~(Modifier.PUBLIC | Modifier.PRIVATE | Modifier.PROTECTED);
182 actual &= ~(Modifier.PUBLIC | Modifier.PRIVATE | Modifier.PROTECTED);
183 }
184 assertEquals(String.format("%s: 0x%x != 0x%x", type, expected, actual), expected, actual);
185 }
186 }
187
|