annotate graal/com.oracle.graal.api.meta.test/src/com/oracle/graal/api/meta/test/TestResolvedJavaType.java @ 10645:a71fa3b8553b

Fix Truffle cache to handle macro nodes correctly.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Sun, 07 Jul 2013 21:01:31 +0200
parents 21b8cd853b2b
children 7cca436d600b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
1 /*
7044
34753b057324 added unit tests for JavaType, JavaMethod and ResolvedJavaMethod
Doug Simon <doug.simon@oracle.com>
parents: 7043
diff changeset
2 * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
4 *
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
7 * published by the Free Software Foundation.
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
8 *
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
13 * accompanied this code).
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
14 *
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
18 *
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
21 * questions.
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
22 */
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
23 package com.oracle.graal.api.meta.test;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
24
7282
390448a6b535 converted the JTT tests to use the GraalCompilerTest framework which offers more control over what is compiled and executed
Doug Simon <doug.simon@oracle.com>
parents: 7098
diff changeset
25 import static java.lang.Integer.*;
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
26 import static java.lang.reflect.Modifier.*;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
27 import static org.junit.Assert.*;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
28
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
29 import java.lang.annotation.*;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
30 import java.lang.reflect.*;
7831
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
31 import java.net.*;
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
32 import java.util.*;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
33
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
34 import org.junit.*;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
35
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
36 import sun.reflect.ConstantPool;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
37
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
38 import com.oracle.graal.api.meta.*;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
39
7043
947de43c68d6 improved documentation for ResolvedJavaType.findUniqueConcreteSubtype()
Doug Simon <doug.simon@oracle.com>
parents: 7037
diff changeset
40 /**
947de43c68d6 improved documentation for ResolvedJavaType.findUniqueConcreteSubtype()
Doug Simon <doug.simon@oracle.com>
parents: 7037
diff changeset
41 * Tests for {@link ResolvedJavaType}.
947de43c68d6 improved documentation for ResolvedJavaType.findUniqueConcreteSubtype()
Doug Simon <doug.simon@oracle.com>
parents: 7037
diff changeset
42 */
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
43 public class TestResolvedJavaType extends TypeUniverse {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
44
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
45 public TestResolvedJavaType() {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
46 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
47
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
48 @Test
7056
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
49 public void findInstanceFieldWithOffsetTest() {
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
50 for (Class c : classes) {
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
51 ResolvedJavaType type = runtime.lookupJavaType(c);
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
52 Set<Field> reflectionFields = getInstanceFields(c, true);
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
53 for (Field f : reflectionFields) {
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
54 ResolvedJavaField rf = lookupField(type.getInstanceFields(true), f);
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
55 assertNotNull(rf);
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
56 long offset = isStatic(f.getModifiers()) ? unsafe.staticFieldOffset(f) : unsafe.objectFieldOffset(f);
7057
c37022832f1a rename: findFieldWithOffset -> findInstanceFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7056
diff changeset
57 ResolvedJavaField result = type.findInstanceFieldWithOffset(offset);
7056
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
58 assertNotNull(result);
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
59 assertTrue(fieldsEqual(f, result));
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
60 }
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
61 }
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
62 }
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
63
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
64 @Test
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
65 public void isInterfaceTest() {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
66 for (Class c : classes) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
67 ResolvedJavaType type = runtime.lookupJavaType(c);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
68 boolean expected = c.isInterface();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
69 boolean actual = type.isInterface();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
70 assertEquals(expected, actual);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
71 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
72 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
73
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
74 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
75 public void isInstanceClassTest() {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
76 for (Class c : classes) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
77 ResolvedJavaType type = runtime.lookupJavaType(c);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
78 boolean expected = !c.isArray() && !c.isPrimitive() && !c.isInterface();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
79 boolean actual = type.isInstanceClass();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
80 assertEquals(expected, actual);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
81 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
82 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
83
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
84 @Test
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
85 public void isArrayTest() {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
86 for (Class c : classes) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
87 ResolvedJavaType type = runtime.lookupJavaType(c);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
88 boolean expected = c.isArray();
7060
06d5f450f32b rename: ResolvedJavaType.isArrayClass() -> ResolvedJavaType.isArray()
Doug Simon <doug.simon@oracle.com>
parents: 7057
diff changeset
89 boolean actual = type.isArray();
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
90 assertEquals(expected, actual);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
91 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
92 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
93
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
94 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
95 public void getModifiersTest() {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
96 for (Class c : classes) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
97 ResolvedJavaType type = runtime.lookupJavaType(c);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
98 int expected = c.getModifiers();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
99 int actual = type.getModifiers();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
100 assertEquals(expected, actual);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
101 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
102 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
103
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
104 @Test
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
105 public void isAssignableFromTest() {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
106 Class[] all = classes.toArray(new Class[classes.size()]);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
107 for (int i = 0; i < all.length; i++) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
108 Class<?> c1 = all[i];
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
109 for (int j = i; j < all.length; j++) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
110 Class<?> c2 = all[j];
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
111 ResolvedJavaType t1 = runtime.lookupJavaType(c1);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
112 ResolvedJavaType t2 = runtime.lookupJavaType(c2);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
113 boolean expected = c1.isAssignableFrom(c2);
7097
6644cecbd3a7 Replace ResolvedJavaType.isAssignableTo with isAssignableFrom to be consistent with java.lang.Class
Christian Wimmer <christian.wimmer@oracle.com>
parents: 7096
diff changeset
114 boolean actual = t1.isAssignableFrom(t2);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
115 assertEquals(expected, actual);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
116 if (expected && t1 != t2) {
7097
6644cecbd3a7 Replace ResolvedJavaType.isAssignableTo with isAssignableFrom to be consistent with java.lang.Class
Christian Wimmer <christian.wimmer@oracle.com>
parents: 7096
diff changeset
117 assertFalse(t2.isAssignableFrom(t1));
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
118 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
119 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
120 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
121 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
122
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
123 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
124 public void isInstanceTest() {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
125 for (Constant c : constants) {
7098
e23980f4a890 Cleanup of Kind class: remove isXxx methods
Christian Wimmer <christian.wimmer@oracle.com>
parents: 7097
diff changeset
126 if (c.getKind() == Kind.Object && !c.isNull()) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
127 Object o = c.asObject();
7530
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
128 Class<? extends Object> cls = o.getClass();
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
129 while (cls != null) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
130 ResolvedJavaType type = runtime.lookupJavaType(cls);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
131 boolean expected = cls.isInstance(o);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
132 boolean actual = type.isInstance(c);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
133 assertEquals(expected, actual);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
134 cls = cls.getSuperclass();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
135 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
136 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
137 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
138 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
139
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
140 private static Class asExactClass(Class c) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
141 if (c.isArray()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
142 if (asExactClass(c.getComponentType()) != null) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
143 return c;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
144 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
145 } else {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
146 if (c.isPrimitive() || Modifier.isFinal(c.getModifiers())) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
147 return c;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
148 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
149 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
150 return null;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
151 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
152
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
153 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
154 public void asExactTypeTest() {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
155 for (Class c : classes) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
156 ResolvedJavaType type = runtime.lookupJavaType(c);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
157 ResolvedJavaType exactType = type.asExactType();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
158 Class expected = asExactClass(c);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
159 if (expected == null) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
160 assertTrue("exact(" + c.getName() + ") != null", exactType == null);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
161 } else {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
162 assertNotNull(exactType);
7096
585fc9f79ebc Remove ResolvedJavaType.isClass()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 7060
diff changeset
163 assertTrue(exactType.equals(runtime.lookupJavaType(expected)));
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
164 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
165 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
166 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
167
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
168 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
169 public void getSuperclassTest() {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
170 for (Class c : classes) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
171 ResolvedJavaType type = runtime.lookupJavaType(c);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
172 Class expected = c.getSuperclass();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
173 ResolvedJavaType actual = type.getSuperclass();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
174 if (expected == null) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
175 assertTrue(actual == null);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
176 } else {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
177 assertNotNull(actual);
7096
585fc9f79ebc Remove ResolvedJavaType.isClass()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 7060
diff changeset
178 assertTrue(actual.equals(runtime.lookupJavaType(expected)));
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
179 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
180 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
181 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
182
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
183 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
184 public void getInterfacesTest() {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
185 for (Class c : classes) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
186 ResolvedJavaType type = runtime.lookupJavaType(c);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
187 Class[] expected = c.getInterfaces();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
188 ResolvedJavaType[] actual = type.getInterfaces();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
189 assertEquals(expected.length, actual.length);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
190 for (int i = 0; i < expected.length; i++) {
7096
585fc9f79ebc Remove ResolvedJavaType.isClass()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 7060
diff changeset
191 assertTrue(actual[i].equals(runtime.lookupJavaType(expected[i])));
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
192 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
193 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
194 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
195
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
196 public Class getSupertype(Class c) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
197 assert !c.isPrimitive();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
198 if (c.isArray()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
199 Class componentType = c.getComponentType();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
200 if (componentType.isPrimitive() || componentType == Object.class) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
201 return Object.class;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
202 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
203 return getArrayClass(getSupertype(componentType));
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
204 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
205 if (c.isInterface()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
206 return Object.class;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
207 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
208 return c.getSuperclass();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
209 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
210
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
211 public Class findLeastCommonAncestor(Class<?> c1Initial, Class<?> c2Initial) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
212 if (c1Initial.isPrimitive() || c2Initial.isPrimitive()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
213 return null;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
214 } else {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
215 Class<?> c1 = c1Initial;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
216 Class<?> c2 = c2Initial;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
217 while (true) {
7530
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
218 if (c1.isAssignableFrom(c2)) {
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
219 return c1;
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
220 }
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
221 if (c2.isAssignableFrom(c1)) {
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
222 return c2;
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
223 }
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
224 c1 = getSupertype(c1);
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
225 c2 = getSupertype(c2);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
226 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
227 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
228 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
229
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
230 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
231 public void findLeastCommonAncestorTest() {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
232 Class[] all = classes.toArray(new Class[classes.size()]);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
233 for (int i = 0; i < all.length; i++) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
234 Class<?> c1 = all[i];
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
235 for (int j = i; j < all.length; j++) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
236 Class<?> c2 = all[j];
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
237 ResolvedJavaType t1 = runtime.lookupJavaType(c1);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
238 ResolvedJavaType t2 = runtime.lookupJavaType(c2);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
239 Class expected = findLeastCommonAncestor(c1, c2);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
240 ResolvedJavaType actual = t1.findLeastCommonAncestor(t2);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
241 if (expected == null) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
242 assertTrue(actual == null);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
243 } else {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
244 assertNotNull(actual);
7096
585fc9f79ebc Remove ResolvedJavaType.isClass()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 7060
diff changeset
245 assertTrue(actual.equals(runtime.lookupJavaType(expected)));
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
246 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
247 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
248 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
249 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
250
7530
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
251 private static class Base {
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
252 }
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
253
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
254 abstract static class Abstract1 extends Base {
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
255 }
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
256
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
257 interface Interface1 {
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
258 }
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
259
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
260 static class Concrete1 extends Abstract1 {
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
261 }
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
262
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
263 static class Concrete2 extends Abstract1 implements Interface1 {
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
264 }
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
265
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
266 static class Concrete3 extends Concrete2 {
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
267 }
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
268
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
269 abstract static class Abstract4 extends Concrete3 {
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
270 }
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
271
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
272 void checkConcreteSubtype(ResolvedJavaType type, Class expected) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
273 ResolvedJavaType subtype = type.findUniqueConcreteSubtype();
7043
947de43c68d6 improved documentation for ResolvedJavaType.findUniqueConcreteSubtype()
Doug Simon <doug.simon@oracle.com>
parents: 7037
diff changeset
274 if (subtype == null) {
7045
7ac6e4c10e37 bug fix for HotSpotReslvedJavaType.findUniqueConcreteSubtype() on arrays of interfaces
Doug Simon <doug.simon@oracle.com>
parents: 7044
diff changeset
275 // findUniqueConcreteSubtype() is conservative
7ac6e4c10e37 bug fix for HotSpotReslvedJavaType.findUniqueConcreteSubtype() on arrays of interfaces
Doug Simon <doug.simon@oracle.com>
parents: 7044
diff changeset
276 } else {
7ac6e4c10e37 bug fix for HotSpotReslvedJavaType.findUniqueConcreteSubtype() on arrays of interfaces
Doug Simon <doug.simon@oracle.com>
parents: 7044
diff changeset
277 if (expected == null) {
7ac6e4c10e37 bug fix for HotSpotReslvedJavaType.findUniqueConcreteSubtype() on arrays of interfaces
Doug Simon <doug.simon@oracle.com>
parents: 7044
diff changeset
278 assertNull(subtype);
7ac6e4c10e37 bug fix for HotSpotReslvedJavaType.findUniqueConcreteSubtype() on arrays of interfaces
Doug Simon <doug.simon@oracle.com>
parents: 7044
diff changeset
279 } else {
7096
585fc9f79ebc Remove ResolvedJavaType.isClass()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 7060
diff changeset
280 assertTrue(subtype.equals(runtime.lookupJavaType(expected)));
7045
7ac6e4c10e37 bug fix for HotSpotReslvedJavaType.findUniqueConcreteSubtype() on arrays of interfaces
Doug Simon <doug.simon@oracle.com>
parents: 7044
diff changeset
281 }
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
282 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
283
7060
06d5f450f32b rename: ResolvedJavaType.isArrayClass() -> ResolvedJavaType.isArray()
Doug Simon <doug.simon@oracle.com>
parents: 7057
diff changeset
284 if (!type.isArray()) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
285 ResolvedJavaType arrayType = type.getArrayClass();
7043
947de43c68d6 improved documentation for ResolvedJavaType.findUniqueConcreteSubtype()
Doug Simon <doug.simon@oracle.com>
parents: 7037
diff changeset
286 ResolvedJavaType arraySubtype = arrayType.findUniqueConcreteSubtype();
947de43c68d6 improved documentation for ResolvedJavaType.findUniqueConcreteSubtype()
Doug Simon <doug.simon@oracle.com>
parents: 7037
diff changeset
287 if (arraySubtype != null) {
947de43c68d6 improved documentation for ResolvedJavaType.findUniqueConcreteSubtype()
Doug Simon <doug.simon@oracle.com>
parents: 7037
diff changeset
288 assertEquals(arraySubtype, arrayType);
7045
7ac6e4c10e37 bug fix for HotSpotReslvedJavaType.findUniqueConcreteSubtype() on arrays of interfaces
Doug Simon <doug.simon@oracle.com>
parents: 7044
diff changeset
289 } else {
7ac6e4c10e37 bug fix for HotSpotReslvedJavaType.findUniqueConcreteSubtype() on arrays of interfaces
Doug Simon <doug.simon@oracle.com>
parents: 7044
diff changeset
290 // findUniqueConcreteSubtype() method is conservative
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
291 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
292 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
293 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
294
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
295 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
296 public void findUniqueConcreteSubtypeTest() {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
297 ResolvedJavaType base = runtime.lookupJavaType(Base.class);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
298 checkConcreteSubtype(base, Base.class);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
299
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
300 ResolvedJavaType a1 = runtime.lookupJavaType(Abstract1.class);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
301 ResolvedJavaType c1 = runtime.lookupJavaType(Concrete1.class);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
302
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
303 checkConcreteSubtype(base, null);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
304 checkConcreteSubtype(a1, Concrete1.class);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
305 checkConcreteSubtype(c1, Concrete1.class);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
306
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
307 ResolvedJavaType i1 = runtime.lookupJavaType(Interface1.class);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
308 ResolvedJavaType c2 = runtime.lookupJavaType(Concrete2.class);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
309
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
310 checkConcreteSubtype(base, null);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
311 checkConcreteSubtype(a1, null);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
312 checkConcreteSubtype(c1, Concrete1.class);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
313 checkConcreteSubtype(i1, Concrete2.class);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
314 checkConcreteSubtype(c2, Concrete2.class);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
315
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
316 ResolvedJavaType c3 = runtime.lookupJavaType(Concrete3.class);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
317 checkConcreteSubtype(c2, null);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
318 checkConcreteSubtype(c3, Concrete3.class);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
319
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
320 ResolvedJavaType a4 = runtime.lookupJavaType(Abstract4.class);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
321 checkConcreteSubtype(c3, null);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
322 checkConcreteSubtype(a4, null);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
323 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
324
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
325 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
326 public void getComponentTypeTest() {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
327 for (Class c : classes) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
328 ResolvedJavaType type = runtime.lookupJavaType(c);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
329 Class expected = c.getComponentType();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
330 ResolvedJavaType actual = type.getComponentType();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
331 if (expected == null) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
332 assertNull(actual);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
333 } else {
7096
585fc9f79ebc Remove ResolvedJavaType.isClass()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 7060
diff changeset
334 assertTrue(actual.equals(runtime.lookupJavaType(expected)));
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
335 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
336 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
337 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
338
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
339 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
340 public void getArrayClassTest() {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
341 for (Class c : classes) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
342 if (c != void.class) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
343 ResolvedJavaType type = runtime.lookupJavaType(c);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
344 Class expected = getArrayClass(c);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
345 ResolvedJavaType actual = type.getArrayClass();
7096
585fc9f79ebc Remove ResolvedJavaType.isClass()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 7060
diff changeset
346 assertTrue(actual.equals(runtime.lookupJavaType(expected)));
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
347 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
348 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
349 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
350
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
351 static class Declarations {
7530
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
352
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
353 final Method implementation;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
354 final Set<Method> declarations;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
355
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
356 public Declarations(Method impl) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
357 this.implementation = impl;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
358 declarations = new HashSet<>();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
359 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
360 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
361
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
362 /**
7530
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
363 * See <a href="http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-5.html#jvms-5.4.5">Method
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
364 * overriding</a>.
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
365 */
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
366 static boolean isOverriderOf(Method impl, Method m) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
367 if (!isPrivate(m.getModifiers()) && !isFinal(m.getModifiers())) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
368 if (m.getName().equals(impl.getName())) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
369 if (m.getReturnType() == impl.getReturnType()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
370 if (Arrays.equals(m.getParameterTypes(), impl.getParameterTypes())) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
371 if (isPublic(m.getModifiers()) || isProtected(m.getModifiers())) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
372 // m is public or protected
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
373 return isPublic(impl.getModifiers()) || isProtected(impl.getModifiers());
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
374 } else {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
375 // m is package-private
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
376 return impl.getDeclaringClass().getPackage() == m.getDeclaringClass().getPackage();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
377 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
378 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
379 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
380 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
381 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
382 return false;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
383 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
384
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
385 static final Map<Class, VTable> vtables = new HashMap<>();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
386
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
387 static class VTable {
7530
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
388
7044
34753b057324 added unit tests for JavaType, JavaMethod and ResolvedJavaMethod
Doug Simon <doug.simon@oracle.com>
parents: 7043
diff changeset
389 final Map<NameAndSignature, Method> methods = new HashMap<>();
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
390 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
391
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
392 static synchronized VTable getVTable(Class c) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
393 VTable vtable = vtables.get(c);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
394 if (vtable == null) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
395 vtable = new VTable();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
396 if (c != Object.class) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
397 VTable superVtable = getVTable(c.getSuperclass());
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
398 vtable.methods.putAll(superVtable.methods);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
399 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
400 for (Method m : c.getDeclaredMethods()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
401 if (!isStatic(m.getModifiers()) && !isPrivate(m.getModifiers())) {
7044
34753b057324 added unit tests for JavaType, JavaMethod and ResolvedJavaMethod
Doug Simon <doug.simon@oracle.com>
parents: 7043
diff changeset
402 Method overridden = vtable.methods.put(new NameAndSignature(m), m);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
403 if (overridden != null) {
8959
7fee8bd5d2bd Remove some System.(out|err).print...
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 7831
diff changeset
404 // println(m + " overrides " + overridden);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
405 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
406 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
407 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
408 vtables.put(c, vtable);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
409 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
410 return vtable;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
411 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
412
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
413 static Set<Method> findDeclarations(Method impl, Class c) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
414 Set<Method> declarations = new HashSet<>();
7044
34753b057324 added unit tests for JavaType, JavaMethod and ResolvedJavaMethod
Doug Simon <doug.simon@oracle.com>
parents: 7043
diff changeset
415 NameAndSignature implSig = new NameAndSignature(impl);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
416 if (c != null) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
417 for (Method m : c.getDeclaredMethods()) {
7044
34753b057324 added unit tests for JavaType, JavaMethod and ResolvedJavaMethod
Doug Simon <doug.simon@oracle.com>
parents: 7043
diff changeset
418 if (new NameAndSignature(m).equals(implSig)) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
419 declarations.add(m);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
420 break;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
421 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
422 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
423 if (!c.isInterface()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
424 declarations.addAll(findDeclarations(impl, c.getSuperclass()));
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
425 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
426 for (Class i : c.getInterfaces()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
427 declarations.addAll(findDeclarations(impl, i));
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
428 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
429 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
430 return declarations;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
431 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
432
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
433 private static void checkResolveMethod(ResolvedJavaType type, ResolvedJavaMethod decl, ResolvedJavaMethod expected) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
434 ResolvedJavaMethod impl = type.resolveMethod(decl);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
435 assertEquals(expected, impl);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
436 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
437
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
438 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
439 public void resolveMethodTest() {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
440 for (Class c : classes) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
441 if (!c.isPrimitive() && !c.isInterface()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
442 ResolvedJavaType type = runtime.lookupJavaType(c);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
443 VTable vtable = getVTable(c);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
444 for (Method impl : vtable.methods.values()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
445 Set<Method> decls = findDeclarations(impl, c);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
446 for (Method decl : decls) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
447 ResolvedJavaMethod m = runtime.lookupJavaMethod(decl);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
448 ResolvedJavaMethod i = runtime.lookupJavaMethod(impl);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
449 checkResolveMethod(type, m, i);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
450 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
451 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
452 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
453 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
454 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
455
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
456 @Test
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
457 public void findUniqueConcreteMethodTest() throws NoSuchMethodException {
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
458 ResolvedJavaMethod thisMethod = runtime.lookupJavaMethod(getClass().getDeclaredMethod("findUniqueConcreteMethodTest"));
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
459 ResolvedJavaMethod ucm = runtime.lookupJavaType(getClass()).findUniqueConcreteMethod(thisMethod);
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
460 assertEquals(thisMethod, ucm);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
461 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
462
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
463 public static Set<Field> getInstanceFields(Class c, boolean includeSuperclasses) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
464 if (c.isArray() || c.isPrimitive() || c.isInterface()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
465 return Collections.emptySet();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
466 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
467 Set<Field> result = new HashSet<>();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
468 for (Field f : c.getDeclaredFields()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
469 if (!Modifier.isStatic(f.getModifiers())) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
470 result.add(f);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
471 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
472 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
473 if (includeSuperclasses && c != Object.class) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
474 result.addAll(getInstanceFields(c.getSuperclass(), true));
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
475 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
476 return result;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
477 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
478
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
479 public boolean fieldsEqual(Field f, ResolvedJavaField rjf) {
7530
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
480 return rjf.getDeclaringClass().equals(runtime.lookupJavaType(f.getDeclaringClass())) && rjf.getName().equals(f.getName()) &&
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
481 rjf.getType().resolve(rjf.getDeclaringClass()).equals(runtime.lookupJavaType(f.getType()));
7056
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
482 }
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
483
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
484 public ResolvedJavaField lookupField(ResolvedJavaField[] fields, Field key) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
485 for (ResolvedJavaField rf : fields) {
7056
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
486 if (fieldsEqual(key, rf)) {
7282
390448a6b535 converted the JTT tests to use the GraalCompilerTest framework which offers more control over what is compiled and executed
Doug Simon <doug.simon@oracle.com>
parents: 7098
diff changeset
487 assert (fieldModifiers() & key.getModifiers()) == rf.getModifiers() : key + ": " + toHexString(key.getModifiers()) + " != " + toHexString(rf.getModifiers());
7056
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
488 return rf;
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
489 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
490 }
7056
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
491 return null;
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
492 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
493
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
494 public Field lookupField(Set<Field> fields, ResolvedJavaField key) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
495 for (Field f : fields) {
7056
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
496 if (fieldsEqual(f, key)) {
7282
390448a6b535 converted the JTT tests to use the GraalCompilerTest framework which offers more control over what is compiled and executed
Doug Simon <doug.simon@oracle.com>
parents: 7098
diff changeset
497 assert key.getModifiers() == (fieldModifiers() & f.getModifiers()) : key + ": " + toHexString(key.getModifiers()) + " != " + toHexString(f.getModifiers());
7056
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
498 return f;
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
499 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
500 }
7056
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
501 return null;
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
502 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
503
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
504 private boolean isHiddenFromReflection(ResolvedJavaField f) {
7096
585fc9f79ebc Remove ResolvedJavaType.isClass()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 7060
diff changeset
505 if (f.getDeclaringClass().equals(runtime.lookupJavaType(Throwable.class)) && f.getName().equals("backtrace")) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
506 return true;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
507 }
7096
585fc9f79ebc Remove ResolvedJavaType.isClass()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 7060
diff changeset
508 if (f.getDeclaringClass().equals(runtime.lookupJavaType(ConstantPool.class)) && f.getName().equals("constantPoolOop")) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
509 return true;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
510 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
511 return false;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
512 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
513
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
514 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
515 public void getInstanceFieldsTest() {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
516 for (Class c : classes) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
517 ResolvedJavaType type = runtime.lookupJavaType(c);
7530
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
518 for (boolean includeSuperclasses : new boolean[]{true, false}) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
519 Set<Field> expected = getInstanceFields(c, includeSuperclasses);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
520 ResolvedJavaField[] actual = type.getInstanceFields(includeSuperclasses);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
521 for (Field f : expected) {
7056
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
522 assertNotNull(lookupField(actual, f));
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
523 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
524 for (ResolvedJavaField rf : actual) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
525 if (!isHiddenFromReflection(rf)) {
7056
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
526 assertEquals(lookupField(expected, rf) != null, !rf.isInternal());
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
527 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
528 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
529
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
530 // Test stability of getInstanceFields
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
531 ResolvedJavaField[] actual2 = type.getInstanceFields(includeSuperclasses);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
532 assertArrayEquals(actual, actual2);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
533 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
534 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
535 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
536
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
537 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
538 public void getAnnotationTest() {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
539 for (Class c : classes) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
540 ResolvedJavaType type = runtime.lookupJavaType(c);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
541 for (Annotation a : c.getAnnotations()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
542 assertEquals(a, type.getAnnotation(a.annotationType()));
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
543 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
544 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
545 }
7829
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
546
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
547 @Test
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
548 public void memberClassesTest() {
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
549 for (Class c : classes) {
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
550 ResolvedJavaType type = runtime.lookupJavaType(c);
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
551 assertEquals(c.isLocalClass(), type.isLocal());
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
552 assertEquals(c.isMemberClass(), type.isMember());
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
553 Class enclc = c.getEnclosingClass();
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
554 ResolvedJavaType enclt = type.getEnclosingType();
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
555 assertFalse(enclc == null ^ enclt == null);
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
556 if (enclc != null) {
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
557 assertEquals(enclt, runtime.lookupJavaType(enclc));
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
558 }
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
559 }
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
560 }
7831
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
561
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
562 @Test
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
563 public void classFilePathTest() {
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
564 for (Class c : classes) {
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
565 ResolvedJavaType type = runtime.lookupJavaType(c);
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
566 URL path = type.getClassFilePath();
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
567 if (type.isPrimitive() || type.isArray()) {
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
568 assertEquals(null, path);
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
569 } else {
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
570 assertNotNull(path);
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
571 String pathString = path.getPath();
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
572 if (type.isLocal() || type.isMember()) {
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
573 assertTrue(pathString.indexOf('$') > 0);
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
574 }
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
575 }
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
576 }
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
577 }
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
578
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
579 private Method findTestMethod(Method apiMethod) {
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
580 String testName = apiMethod.getName() + "Test";
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
581 for (Method m : getClass().getDeclaredMethods()) {
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
582 if (m.getName().equals(testName) && m.getAnnotation(Test.class) != null) {
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
583 return m;
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
584 }
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
585 }
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
586 return null;
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
587 }
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
588
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
589 // @formatter:off
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
590 private static final String[] untestedApiMethods = {
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
591 "initialize",
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
592 "isPrimitive",
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
593 "newArray",
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
594 "getDeclaredMethods",
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
595 "getDeclaredConstructors",
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
596 "isInitialized",
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
597 "getEncoding",
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
598 "hasFinalizableSubclass",
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
599 "hasFinalizer",
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
600 "getSourceFileName",
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
601 "getClassFilePath",
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
602 "isLocal",
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
603 "isMember",
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
604 "getEnclosingType"
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
605 };
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
606 // @formatter:on
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
607
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
608 /**
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
609 * Ensures that any new methods added to {@link ResolvedJavaMethod} either have a test written
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
610 * for them or are added to {@link #untestedApiMethods}.
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
611 */
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
612 @Test
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
613 public void testCoverage() {
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
614 Set<String> known = new HashSet<>(Arrays.asList(untestedApiMethods));
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
615 for (Method m : ResolvedJavaType.class.getDeclaredMethods()) {
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
616 if (findTestMethod(m) == null) {
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
617 assertTrue("test missing for " + m, known.contains(m.getName()));
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
618 } else {
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
619 assertFalse("test should be removed from untestedApiMethods" + m, known.contains(m.getName()));
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
620 }
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
621 }
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
622 }
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
623
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
624 }