annotate graal/com.oracle.graal.api.meta.test/src/com/oracle/graal/api/meta/test/TestResolvedJavaType.java @ 18191:839f97696479

Rename ResolvedJavaMethod.resolvedMethod() to resolveConcreteMethod() the reflect its actual behavior.
author Josef Eisl <josef.eisl@jku.at>
date Wed, 29 Oct 2014 18:54:32 +0100
parents 9619ba4daf4c
children 660875e586f0
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 /*
18187
9619ba4daf4c Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents: 18183
diff changeset
2 * Copyright (c) 2012, 2014, 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
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
25 import static java.lang.reflect.Modifier.*;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
26 import static org.junit.Assert.*;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
27
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
28 import java.lang.annotation.*;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
29 import java.lang.reflect.*;
7831
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
30 import java.net.*;
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
31 import java.util.*;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
32
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
33 import org.junit.*;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
34
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
35 import sun.reflect.ConstantPool;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
36
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
37 import com.oracle.graal.api.meta.*;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
38
7043
947de43c68d6 improved documentation for ResolvedJavaType.findUniqueConcreteSubtype()
Doug Simon <doug.simon@oracle.com>
parents: 7037
diff changeset
39 /**
947de43c68d6 improved documentation for ResolvedJavaType.findUniqueConcreteSubtype()
Doug Simon <doug.simon@oracle.com>
parents: 7037
diff changeset
40 * Tests for {@link ResolvedJavaType}.
947de43c68d6 improved documentation for ResolvedJavaType.findUniqueConcreteSubtype()
Doug Simon <doug.simon@oracle.com>
parents: 7037
diff changeset
41 */
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
42 public class TestResolvedJavaType extends TypeUniverse {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
43
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
44 public TestResolvedJavaType() {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
45 }
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 @Test
7056
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
48 public void findInstanceFieldWithOffsetTest() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
49 for (Class<?> c : classes) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
50 ResolvedJavaType type = metaAccess.lookupJavaType(c);
7056
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
51 Set<Field> reflectionFields = getInstanceFields(c, true);
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
52 for (Field f : reflectionFields) {
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
53 ResolvedJavaField rf = lookupField(type.getInstanceFields(true), f);
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
54 assertNotNull(rf);
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
55 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
56 ResolvedJavaField result = type.findInstanceFieldWithOffset(offset);
7056
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
57 assertNotNull(result);
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
58 assertTrue(fieldsEqual(f, result));
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
59 }
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 @Test
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
64 public void isInterfaceTest() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
65 for (Class<?> c : classes) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
66 ResolvedJavaType type = metaAccess.lookupJavaType(c);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
67 boolean expected = c.isInterface();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
68 boolean actual = type.isInterface();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
69 assertEquals(expected, actual);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
70 }
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 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
74 public void isInstanceClassTest() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
75 for (Class<?> c : classes) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
76 ResolvedJavaType type = metaAccess.lookupJavaType(c);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
77 boolean expected = !c.isArray() && !c.isPrimitive() && !c.isInterface();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
78 boolean actual = type.isInstanceClass();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
79 assertEquals(expected, actual);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
80 }
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 @Test
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
84 public void isArrayTest() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
85 for (Class<?> c : classes) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
86 ResolvedJavaType type = metaAccess.lookupJavaType(c);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
87 boolean expected = c.isArray();
7060
06d5f450f32b rename: ResolvedJavaType.isArrayClass() -> ResolvedJavaType.isArray()
Doug Simon <doug.simon@oracle.com>
parents: 7057
diff changeset
88 boolean actual = type.isArray();
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
89 assertEquals(expected, actual);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
90 }
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 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
94 public void getModifiersTest() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
95 for (Class<?> c : classes) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
96 ResolvedJavaType type = metaAccess.lookupJavaType(c);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
97 int expected = c.getModifiers();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
98 int actual = type.getModifiers();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
99 assertEquals(expected, actual);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
100 }
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 @Test
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
104 public void isAssignableFromTest() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
105 Class<?>[] all = classes.toArray(new Class[classes.size()]);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
106 for (int i = 0; i < all.length; i++) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
107 Class<?> c1 = all[i];
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
108 for (int j = i; j < all.length; j++) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
109 Class<?> c2 = all[j];
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
110 ResolvedJavaType t1 = metaAccess.lookupJavaType(c1);
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
111 ResolvedJavaType t2 = metaAccess.lookupJavaType(c2);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
112 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
113 boolean actual = t1.isAssignableFrom(t2);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
114 assertEquals(expected, actual);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
115 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
116 assertFalse(t2.isAssignableFrom(t1));
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
117 }
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 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
123 public void isInstanceTest() {
18187
9619ba4daf4c Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents: 18183
diff changeset
124 for (JavaConstant c : constants) {
7098
e23980f4a890 Cleanup of Kind class: remove isXxx methods
Christian Wimmer <christian.wimmer@oracle.com>
parents: 7097
diff changeset
125 if (c.getKind() == Kind.Object && !c.isNull()) {
15018
db4254246f9a Remove Constant.forObject and Constant.asObject to improve compiler/VM separation
Christian Wimmer <christian.wimmer@oracle.com>
parents: 14991
diff changeset
126 Object o = snippetReflection.asObject(c);
7530
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
127 Class<? extends Object> cls = o.getClass();
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
128 while (cls != null) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
129 ResolvedJavaType type = metaAccess.lookupJavaType(cls);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
130 boolean expected = cls.isInstance(o);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
131 boolean actual = type.isInstance(c);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
132 assertEquals(expected, actual);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
133 cls = cls.getSuperclass();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
134 }
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
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
139 private static Class<?> asExactClass(Class<?> c) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
140 if (c.isArray()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
141 if (asExactClass(c.getComponentType()) != null) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
142 return c;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
143 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
144 } else {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
145 if (c.isPrimitive() || Modifier.isFinal(c.getModifiers())) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
146 return c;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
147 }
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 return null;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
150 }
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 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
153 public void asExactTypeTest() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
154 for (Class<?> c : classes) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
155 ResolvedJavaType type = metaAccess.lookupJavaType(c);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
156 ResolvedJavaType exactType = type.asExactType();
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
157 Class<?> expected = asExactClass(c);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
158 if (expected == null) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
159 assertTrue("exact(" + c.getName() + ") != null", exactType == null);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
160 } else {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
161 assertNotNull(exactType);
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
162 assertTrue(exactType.equals(metaAccess.lookupJavaType(expected)));
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
163 }
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 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
168 public void getSuperclassTest() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
169 for (Class<?> c : classes) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
170 ResolvedJavaType type = metaAccess.lookupJavaType(c);
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
171 Class<?> expected = c.getSuperclass();
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
172 ResolvedJavaType actual = type.getSuperclass();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
173 if (expected == null) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
174 assertTrue(actual == null);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
175 } else {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
176 assertNotNull(actual);
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
177 assertTrue(actual.equals(metaAccess.lookupJavaType(expected)));
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
178 }
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 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
183 public void getInterfacesTest() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
184 for (Class<?> c : classes) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
185 ResolvedJavaType type = metaAccess.lookupJavaType(c);
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
186 Class<?>[] expected = c.getInterfaces();
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
187 ResolvedJavaType[] actual = type.getInterfaces();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
188 assertEquals(expected.length, actual.length);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
189 for (int i = 0; i < expected.length; i++) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
190 assertTrue(actual[i].equals(metaAccess.lookupJavaType(expected[i])));
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
191 }
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
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
195 public Class<?> getSupertype(Class<?> c) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
196 assert !c.isPrimitive();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
197 if (c.isArray()) {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
198 Class<?> componentType = c.getComponentType();
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
199 if (componentType.isPrimitive() || componentType == Object.class) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
200 return Object.class;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
201 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
202 return getArrayClass(getSupertype(componentType));
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
203 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
204 if (c.isInterface()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
205 return Object.class;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
206 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
207 return c.getSuperclass();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
208 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
209
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
210 public Class<?> findLeastCommonAncestor(Class<?> c1Initial, Class<?> c2Initial) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
211 if (c1Initial.isPrimitive() || c2Initial.isPrimitive()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
212 return null;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
213 } else {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
214 Class<?> c1 = c1Initial;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
215 Class<?> c2 = c2Initial;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
216 while (true) {
7530
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
217 if (c1.isAssignableFrom(c2)) {
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
218 return c1;
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
219 }
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
220 if (c2.isAssignableFrom(c1)) {
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
221 return c2;
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
222 }
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
223 c1 = getSupertype(c1);
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
224 c2 = getSupertype(c2);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
225 }
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 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
230 public void findLeastCommonAncestorTest() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
231 Class<?>[] all = classes.toArray(new Class[classes.size()]);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
232 for (int i = 0; i < all.length; i++) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
233 Class<?> c1 = all[i];
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
234 for (int j = i; j < all.length; j++) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
235 Class<?> c2 = all[j];
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
236 ResolvedJavaType t1 = metaAccess.lookupJavaType(c1);
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
237 ResolvedJavaType t2 = metaAccess.lookupJavaType(c2);
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
238 Class<?> expected = findLeastCommonAncestor(c1, c2);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
239 ResolvedJavaType actual = t1.findLeastCommonAncestor(t2);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
240 if (expected == null) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
241 assertTrue(actual == null);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
242 } else {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
243 assertNotNull(actual);
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
244 assertTrue(actual.equals(metaAccess.lookupJavaType(expected)));
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
245 }
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
7530
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
250 private static class Base {
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
251 }
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 abstract static class Abstract1 extends Base {
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
254 }
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 interface Interface1 {
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
257 }
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 static class Concrete1 extends Abstract1 {
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
260 }
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 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
263 }
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 static class Concrete3 extends Concrete2 {
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
266 }
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
267
15729
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
268 static final class Final1 extends Abstract1 {
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
269 }
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
270
7530
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
271 abstract static class Abstract4 extends Concrete3 {
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
272 }
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
273
15729
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
274 void checkConcreteSubtype(ResolvedJavaType type, ResolvedJavaType expected) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
275 ResolvedJavaType subtype = type.findUniqueConcreteSubtype();
7043
947de43c68d6 improved documentation for ResolvedJavaType.findUniqueConcreteSubtype()
Doug Simon <doug.simon@oracle.com>
parents: 7037
diff changeset
276 if (subtype == null) {
7045
7ac6e4c10e37 bug fix for HotSpotReslvedJavaType.findUniqueConcreteSubtype() on arrays of interfaces
Doug Simon <doug.simon@oracle.com>
parents: 7044
diff changeset
277 // findUniqueConcreteSubtype() is conservative
7ac6e4c10e37 bug fix for HotSpotReslvedJavaType.findUniqueConcreteSubtype() on arrays of interfaces
Doug Simon <doug.simon@oracle.com>
parents: 7044
diff changeset
278 } else {
7ac6e4c10e37 bug fix for HotSpotReslvedJavaType.findUniqueConcreteSubtype() on arrays of interfaces
Doug Simon <doug.simon@oracle.com>
parents: 7044
diff changeset
279 if (expected == null) {
7ac6e4c10e37 bug fix for HotSpotReslvedJavaType.findUniqueConcreteSubtype() on arrays of interfaces
Doug Simon <doug.simon@oracle.com>
parents: 7044
diff changeset
280 assertNull(subtype);
7ac6e4c10e37 bug fix for HotSpotReslvedJavaType.findUniqueConcreteSubtype() on arrays of interfaces
Doug Simon <doug.simon@oracle.com>
parents: 7044
diff changeset
281 } else {
15729
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
282 assertTrue(subtype.equals(expected));
7045
7ac6e4c10e37 bug fix for HotSpotReslvedJavaType.findUniqueConcreteSubtype() on arrays of interfaces
Doug Simon <doug.simon@oracle.com>
parents: 7044
diff changeset
283 }
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
284 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
285
7060
06d5f450f32b rename: ResolvedJavaType.isArrayClass() -> ResolvedJavaType.isArray()
Doug Simon <doug.simon@oracle.com>
parents: 7057
diff changeset
286 if (!type.isArray()) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
287 ResolvedJavaType arrayType = type.getArrayClass();
7043
947de43c68d6 improved documentation for ResolvedJavaType.findUniqueConcreteSubtype()
Doug Simon <doug.simon@oracle.com>
parents: 7037
diff changeset
288 ResolvedJavaType arraySubtype = arrayType.findUniqueConcreteSubtype();
947de43c68d6 improved documentation for ResolvedJavaType.findUniqueConcreteSubtype()
Doug Simon <doug.simon@oracle.com>
parents: 7037
diff changeset
289 if (arraySubtype != null) {
947de43c68d6 improved documentation for ResolvedJavaType.findUniqueConcreteSubtype()
Doug Simon <doug.simon@oracle.com>
parents: 7037
diff changeset
290 assertEquals(arraySubtype, arrayType);
7045
7ac6e4c10e37 bug fix for HotSpotReslvedJavaType.findUniqueConcreteSubtype() on arrays of interfaces
Doug Simon <doug.simon@oracle.com>
parents: 7044
diff changeset
291 } else {
7ac6e4c10e37 bug fix for HotSpotReslvedJavaType.findUniqueConcreteSubtype() on arrays of interfaces
Doug Simon <doug.simon@oracle.com>
parents: 7044
diff changeset
292 // findUniqueConcreteSubtype() method is conservative
7037
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 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
296
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
297 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
298 public void findUniqueConcreteSubtypeTest() {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
299 ResolvedJavaType base = metaAccess.lookupJavaType(Base.class);
15729
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
300 checkConcreteSubtype(base, base);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
301
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
302 ResolvedJavaType a1 = metaAccess.lookupJavaType(Abstract1.class);
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
303 ResolvedJavaType c1 = metaAccess.lookupJavaType(Concrete1.class);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
304
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
305 checkConcreteSubtype(base, null);
15729
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
306 checkConcreteSubtype(a1, c1);
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
307 checkConcreteSubtype(c1, c1);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
308
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
309 ResolvedJavaType i1 = metaAccess.lookupJavaType(Interface1.class);
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
310 ResolvedJavaType c2 = metaAccess.lookupJavaType(Concrete2.class);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
311
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
312 checkConcreteSubtype(base, null);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
313 checkConcreteSubtype(a1, null);
15729
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
314 checkConcreteSubtype(c1, c1);
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
315 checkConcreteSubtype(i1, c2);
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
316 checkConcreteSubtype(c2, c2);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
317
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
318 ResolvedJavaType c3 = metaAccess.lookupJavaType(Concrete3.class);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
319 checkConcreteSubtype(c2, null);
15729
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
320 checkConcreteSubtype(c3, c3);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
321
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
322 ResolvedJavaType a4 = metaAccess.lookupJavaType(Abstract4.class);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
323 checkConcreteSubtype(c3, null);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
324 checkConcreteSubtype(a4, null);
15729
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
325
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
326 ResolvedJavaType a1a = metaAccess.lookupJavaType(Abstract1[].class);
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
327 checkConcreteSubtype(a1a, null);
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
328 ResolvedJavaType c1a = metaAccess.lookupJavaType(Concrete1[].class);
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
329 checkConcreteSubtype(c1a, null);
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
330 ResolvedJavaType f1a = metaAccess.lookupJavaType(Final1[].class);
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
331 checkConcreteSubtype(f1a, f1a);
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
332
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
333 ResolvedJavaType obja = metaAccess.lookupJavaType(Object[].class);
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
334 checkConcreteSubtype(obja, null);
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
335
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
336 ResolvedJavaType inta = metaAccess.lookupJavaType(int[].class);
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
337 checkConcreteSubtype(inta, inta);
7037
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
18183
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
340 interface NoImplementor {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
341 }
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
342
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
343 interface SingleImplementorInterface {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
344 }
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
345
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
346 static class SingleConcreteImplementor implements SingleImplementorInterface {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
347 }
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
348
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
349 interface SingleAbstractImplementorInterface {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
350 }
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
351
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
352 abstract static class SingleAbstractImplementor implements SingleAbstractImplementorInterface {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
353 }
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
354
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
355 interface MultiImplementorInterface {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
356 }
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
357
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
358 static class ConcreteImplementor1 implements MultiImplementorInterface {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
359 }
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
360
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
361 static class ConcreteImplementor2 implements MultiImplementorInterface {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
362 }
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
363
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
364 interface MultipleAbstractImplementorInterface {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
365 }
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
366
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
367 abstract static class MultiAbstractImplementor1 implements MultipleAbstractImplementorInterface {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
368 }
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
369
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
370 abstract static class MultiAbstractImplementor2 implements MultipleAbstractImplementorInterface {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
371 }
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
372
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
373 interface SingleAbstractImplementorInterface2 {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
374 }
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
375
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
376 interface ExtendedSingleImplementorInterface {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
377 }
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
378
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
379 abstract static class SingleAbstractImplementor2 implements SingleAbstractImplementorInterface2 {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
380 }
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
381
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
382 static class ConcreteTransitiveImplementor1 extends SingleAbstractImplementor2 implements ExtendedSingleImplementorInterface {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
383 }
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
384
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
385 static class ConcreteTransitiveImplementor2 extends SingleAbstractImplementor2 implements ExtendedSingleImplementorInterface {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
386 }
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
387
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
388 @Test
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
389 public void getImplementorTest() {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
390 ResolvedJavaType base = metaAccess.lookupJavaType(Base.class);
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
391 assertNull(base.getImplementor());
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
392
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
393 ResolvedJavaType iNi = metaAccess.lookupJavaType(NoImplementor.class);
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
394 assertNull(iNi.getImplementor());
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
395
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
396 ResolvedJavaType iSi = metaAccess.lookupJavaType(SingleImplementorInterface.class);
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
397 ResolvedJavaType cSi = metaAccess.lookupJavaType(SingleConcreteImplementor.class);
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
398 assertEquals(cSi, iSi.getImplementor());
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
399
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
400 ResolvedJavaType iSai = metaAccess.lookupJavaType(SingleAbstractImplementorInterface.class);
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
401 ResolvedJavaType aSai = metaAccess.lookupJavaType(SingleAbstractImplementor.class);
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
402 assertEquals(aSai, iSai.getImplementor());
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
403
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
404 ResolvedJavaType iMi = metaAccess.lookupJavaType(MultiImplementorInterface.class);
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
405 metaAccess.lookupJavaType(ConcreteImplementor1.class);
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
406 metaAccess.lookupJavaType(ConcreteImplementor2.class);
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
407 assertEquals(iMi, iMi.getImplementor());
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
408
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
409 ResolvedJavaType iMai = metaAccess.lookupJavaType(MultipleAbstractImplementorInterface.class);
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
410 metaAccess.lookupJavaType(MultiAbstractImplementor1.class);
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
411 metaAccess.lookupJavaType(MultiAbstractImplementor2.class);
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
412 assertEquals(iMai, iMai.getImplementor());
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
413
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
414 ResolvedJavaType iSai2 = metaAccess.lookupJavaType(SingleAbstractImplementorInterface2.class);
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
415 ResolvedJavaType aSai2 = metaAccess.lookupJavaType(SingleAbstractImplementor2.class);
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
416 metaAccess.lookupJavaType(ConcreteTransitiveImplementor1.class);
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
417 metaAccess.lookupJavaType(ConcreteTransitiveImplementor2.class);
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
418 assertEquals(aSai2, iSai2.getImplementor());
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
419 }
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
420
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
421 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
422 public void getComponentTypeTest() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
423 for (Class<?> c : classes) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
424 ResolvedJavaType type = metaAccess.lookupJavaType(c);
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
425 Class<?> expected = c.getComponentType();
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
426 ResolvedJavaType actual = type.getComponentType();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
427 if (expected == null) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
428 assertNull(actual);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
429 } else {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
430 assertTrue(actual.equals(metaAccess.lookupJavaType(expected)));
7037
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 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
434
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
435 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
436 public void getArrayClassTest() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
437 for (Class<?> c : classes) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
438 if (c != void.class) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
439 ResolvedJavaType type = metaAccess.lookupJavaType(c);
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
440 Class<?> expected = getArrayClass(c);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
441 ResolvedJavaType actual = type.getArrayClass();
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
442 assertTrue(actual.equals(metaAccess.lookupJavaType(expected)));
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
443 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
444 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
445 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
446
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
447 static class Declarations {
7530
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
448
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
449 final Method implementation;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
450 final Set<Method> declarations;
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 public Declarations(Method impl) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
453 this.implementation = impl;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
454 declarations = new HashSet<>();
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 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
457
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
458 /**
7530
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
459 * 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
460 * overriding</a>.
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 static boolean isOverriderOf(Method impl, Method m) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
463 if (!isPrivate(m.getModifiers()) && !isFinal(m.getModifiers())) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
464 if (m.getName().equals(impl.getName())) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
465 if (m.getReturnType() == impl.getReturnType()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
466 if (Arrays.equals(m.getParameterTypes(), impl.getParameterTypes())) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
467 if (isPublic(m.getModifiers()) || isProtected(m.getModifiers())) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
468 // m is public or protected
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
469 return isPublic(impl.getModifiers()) || isProtected(impl.getModifiers());
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
470 } else {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
471 // m is package-private
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
472 return impl.getDeclaringClass().getPackage() == m.getDeclaringClass().getPackage();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
473 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
474 }
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 }
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 return false;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
479 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
480
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
481 static final Map<Class<?>, VTable> vtables = new HashMap<>();
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
482
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
483 static class VTable {
7530
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
484
7044
34753b057324 added unit tests for JavaType, JavaMethod and ResolvedJavaMethod
Doug Simon <doug.simon@oracle.com>
parents: 7043
diff changeset
485 final Map<NameAndSignature, Method> methods = new HashMap<>();
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
486 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
487
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
488 static synchronized VTable getVTable(Class<?> c) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
489 VTable vtable = vtables.get(c);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
490 if (vtable == null) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
491 vtable = new VTable();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
492 if (c != Object.class) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
493 VTable superVtable = getVTable(c.getSuperclass());
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
494 vtable.methods.putAll(superVtable.methods);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
495 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
496 for (Method m : c.getDeclaredMethods()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
497 if (!isStatic(m.getModifiers()) && !isPrivate(m.getModifiers())) {
11823
6440f50c1ea8 improved documentation and testing for ResolvedJavaType.resolveMethod() (GRAAL-489)
Doug Simon <doug.simon@oracle.com>
parents: 11520
diff changeset
498 if (isAbstract(m.getModifiers())) {
6440f50c1ea8 improved documentation and testing for ResolvedJavaType.resolveMethod() (GRAAL-489)
Doug Simon <doug.simon@oracle.com>
parents: 11520
diff changeset
499 // A subclass makes a concrete method in a superclass abstract
6440f50c1ea8 improved documentation and testing for ResolvedJavaType.resolveMethod() (GRAAL-489)
Doug Simon <doug.simon@oracle.com>
parents: 11520
diff changeset
500 vtable.methods.remove(new NameAndSignature(m));
6440f50c1ea8 improved documentation and testing for ResolvedJavaType.resolveMethod() (GRAAL-489)
Doug Simon <doug.simon@oracle.com>
parents: 11520
diff changeset
501 } else {
6440f50c1ea8 improved documentation and testing for ResolvedJavaType.resolveMethod() (GRAAL-489)
Doug Simon <doug.simon@oracle.com>
parents: 11520
diff changeset
502 vtable.methods.put(new NameAndSignature(m), m);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
503 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
504 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
505 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
506 vtables.put(c, vtable);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
507 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
508 return vtable;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
509 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
510
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
511 static Set<Method> findDeclarations(Method impl, Class<?> c) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
512 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
513 NameAndSignature implSig = new NameAndSignature(impl);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
514 if (c != null) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
515 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
516 if (new NameAndSignature(m).equals(implSig)) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
517 declarations.add(m);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
518 break;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
519 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
520 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
521 if (!c.isInterface()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
522 declarations.addAll(findDeclarations(impl, c.getSuperclass()));
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
523 }
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
524 for (Class<?> i : c.getInterfaces()) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
525 declarations.addAll(findDeclarations(impl, i));
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
526 }
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 return declarations;
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
15722
c583759bbcfd ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15040
diff changeset
531 private static void checkResolveMethod(ResolvedJavaType type, ResolvedJavaType context, ResolvedJavaMethod decl, ResolvedJavaMethod expected) {
18191
839f97696479 Rename ResolvedJavaMethod.resolvedMethod() to resolveConcreteMethod() the reflect its actual behavior.
Josef Eisl <josef.eisl@jku.at>
parents: 18187
diff changeset
532 ResolvedJavaMethod impl = type.resolveConcreteMethod(decl, context);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
533 assertEquals(expected, impl);
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 @Test
18191
839f97696479 Rename ResolvedJavaMethod.resolvedMethod() to resolveConcreteMethod() the reflect its actual behavior.
Josef Eisl <josef.eisl@jku.at>
parents: 18187
diff changeset
537 public void resolveConcreteMethodTest() {
15722
c583759bbcfd ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15040
diff changeset
538 ResolvedJavaType context = metaAccess.lookupJavaType(TestResolvedJavaType.class);
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
539 for (Class<?> c : classes) {
11823
6440f50c1ea8 improved documentation and testing for ResolvedJavaType.resolveMethod() (GRAAL-489)
Doug Simon <doug.simon@oracle.com>
parents: 11520
diff changeset
540 if (c.isInterface() || c.isPrimitive()) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
541 ResolvedJavaType type = metaAccess.lookupJavaType(c);
11823
6440f50c1ea8 improved documentation and testing for ResolvedJavaType.resolveMethod() (GRAAL-489)
Doug Simon <doug.simon@oracle.com>
parents: 11520
diff changeset
542 for (Method m : c.getDeclaredMethods()) {
13183
0266ac3b26c0 JDK8: added support for default methods as well as interfaces containing static and private methods
Doug Simon <doug.simon@oracle.com>
parents: 11959
diff changeset
543 if (JAVA_VERSION <= 1.7D || (!isStatic(m.getModifiers()) && !isPrivate(m.getModifiers()))) {
0266ac3b26c0 JDK8: added support for default methods as well as interfaces containing static and private methods
Doug Simon <doug.simon@oracle.com>
parents: 11959
diff changeset
544 ResolvedJavaMethod resolved = metaAccess.lookupJavaMethod(m);
18191
839f97696479 Rename ResolvedJavaMethod.resolvedMethod() to resolveConcreteMethod() the reflect its actual behavior.
Josef Eisl <josef.eisl@jku.at>
parents: 18187
diff changeset
545 ResolvedJavaMethod impl = type.resolveConcreteMethod(resolved, context);
13183
0266ac3b26c0 JDK8: added support for default methods as well as interfaces containing static and private methods
Doug Simon <doug.simon@oracle.com>
parents: 11959
diff changeset
546 ResolvedJavaMethod expected = resolved.isDefault() ? resolved : null;
0266ac3b26c0 JDK8: added support for default methods as well as interfaces containing static and private methods
Doug Simon <doug.simon@oracle.com>
parents: 11959
diff changeset
547 assertEquals(m.toString(), expected, impl);
0266ac3b26c0 JDK8: added support for default methods as well as interfaces containing static and private methods
Doug Simon <doug.simon@oracle.com>
parents: 11959
diff changeset
548 } else {
0266ac3b26c0 JDK8: added support for default methods as well as interfaces containing static and private methods
Doug Simon <doug.simon@oracle.com>
parents: 11959
diff changeset
549 // As of JDK 8, interfaces can have static and private methods
0266ac3b26c0 JDK8: added support for default methods as well as interfaces containing static and private methods
Doug Simon <doug.simon@oracle.com>
parents: 11959
diff changeset
550 }
11823
6440f50c1ea8 improved documentation and testing for ResolvedJavaType.resolveMethod() (GRAAL-489)
Doug Simon <doug.simon@oracle.com>
parents: 11520
diff changeset
551 }
6440f50c1ea8 improved documentation and testing for ResolvedJavaType.resolveMethod() (GRAAL-489)
Doug Simon <doug.simon@oracle.com>
parents: 11520
diff changeset
552 } else {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
553 ResolvedJavaType type = metaAccess.lookupJavaType(c);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
554 VTable vtable = getVTable(c);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
555 for (Method impl : vtable.methods.values()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
556 Set<Method> decls = findDeclarations(impl, c);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
557 for (Method decl : decls) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
558 ResolvedJavaMethod m = metaAccess.lookupJavaMethod(decl);
15722
c583759bbcfd ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15040
diff changeset
559 if (m.isPublic()) {
c583759bbcfd ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15040
diff changeset
560 ResolvedJavaMethod i = metaAccess.lookupJavaMethod(impl);
c583759bbcfd ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15040
diff changeset
561 checkResolveMethod(type, context, m, i);
c583759bbcfd ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15040
diff changeset
562 }
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
563 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
564 }
11823
6440f50c1ea8 improved documentation and testing for ResolvedJavaType.resolveMethod() (GRAAL-489)
Doug Simon <doug.simon@oracle.com>
parents: 11520
diff changeset
565 for (Method m : c.getDeclaredMethods()) {
18191
839f97696479 Rename ResolvedJavaMethod.resolvedMethod() to resolveConcreteMethod() the reflect its actual behavior.
Josef Eisl <josef.eisl@jku.at>
parents: 18187
diff changeset
566 ResolvedJavaMethod impl = type.resolveConcreteMethod(metaAccess.lookupJavaMethod(m), context);
11823
6440f50c1ea8 improved documentation and testing for ResolvedJavaType.resolveMethod() (GRAAL-489)
Doug Simon <doug.simon@oracle.com>
parents: 11520
diff changeset
567 ResolvedJavaMethod expected = isAbstract(m.getModifiers()) ? null : impl;
6440f50c1ea8 improved documentation and testing for ResolvedJavaType.resolveMethod() (GRAAL-489)
Doug Simon <doug.simon@oracle.com>
parents: 11520
diff changeset
568 assertEquals(type + " " + m.toString(), expected, impl);
6440f50c1ea8 improved documentation and testing for ResolvedJavaType.resolveMethod() (GRAAL-489)
Doug Simon <doug.simon@oracle.com>
parents: 11520
diff changeset
569 }
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
570 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
571 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
572 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
573
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
574 @Test
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
575 public void findUniqueConcreteMethodTest() throws NoSuchMethodException {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
576 ResolvedJavaMethod thisMethod = metaAccess.lookupJavaMethod(getClass().getDeclaredMethod("findUniqueConcreteMethodTest"));
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
577 ResolvedJavaMethod ucm = metaAccess.lookupJavaType(getClass()).findUniqueConcreteMethod(thisMethod);
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
578 assertEquals(thisMethod, ucm);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
579 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
580
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
581 public static Set<Field> getInstanceFields(Class<?> c, boolean includeSuperclasses) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
582 if (c.isArray() || c.isPrimitive() || c.isInterface()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
583 return Collections.emptySet();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
584 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
585 Set<Field> result = new HashSet<>();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
586 for (Field f : c.getDeclaredFields()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
587 if (!Modifier.isStatic(f.getModifiers())) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
588 result.add(f);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
589 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
590 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
591 if (includeSuperclasses && c != Object.class) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
592 result.addAll(getInstanceFields(c.getSuperclass(), true));
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
593 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
594 return result;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
595 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
596
15841
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
597 public static Set<Field> getStaticFields(Class<?> c) {
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
598 Set<Field> result = new HashSet<>();
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
599 for (Field f : c.getDeclaredFields()) {
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
600 if (Modifier.isStatic(f.getModifiers())) {
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
601 result.add(f);
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
602 }
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
603 }
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
604 return result;
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
605 }
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
606
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
607 public boolean fieldsEqual(Field f, ResolvedJavaField rjf) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
608 return rjf.getDeclaringClass().equals(metaAccess.lookupJavaType(f.getDeclaringClass())) && rjf.getName().equals(f.getName()) &&
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
609 rjf.getType().resolve(rjf.getDeclaringClass()).equals(metaAccess.lookupJavaType(f.getType()));
7056
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
610 }
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
611
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
612 public ResolvedJavaField lookupField(ResolvedJavaField[] fields, Field key) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
613 for (ResolvedJavaField rf : fields) {
7056
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
614 if (fieldsEqual(key, rf)) {
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
615 return rf;
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
616 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
617 }
7056
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
618 return null;
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
619 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
620
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
621 public Field lookupField(Set<Field> fields, ResolvedJavaField key) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
622 for (Field f : fields) {
7056
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
623 if (fieldsEqual(f, key)) {
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
624 return f;
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
625 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
626 }
7056
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
627 return null;
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
628 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
629
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
630 private boolean isHiddenFromReflection(ResolvedJavaField f) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
631 if (f.getDeclaringClass().equals(metaAccess.lookupJavaType(Throwable.class)) && f.getName().equals("backtrace")) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
632 return true;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
633 }
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
634 if (f.getDeclaringClass().equals(metaAccess.lookupJavaType(ConstantPool.class)) && f.getName().equals("constantPoolOop")) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
635 return true;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
636 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
637 return false;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
638 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
639
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
640 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
641 public void getInstanceFieldsTest() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
642 for (Class<?> c : classes) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
643 ResolvedJavaType type = metaAccess.lookupJavaType(c);
7530
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
644 for (boolean includeSuperclasses : new boolean[]{true, false}) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
645 Set<Field> expected = getInstanceFields(c, includeSuperclasses);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
646 ResolvedJavaField[] actual = type.getInstanceFields(includeSuperclasses);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
647 for (Field f : expected) {
7056
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
648 assertNotNull(lookupField(actual, f));
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
649 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
650 for (ResolvedJavaField rf : actual) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
651 if (!isHiddenFromReflection(rf)) {
7056
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
652 assertEquals(lookupField(expected, rf) != null, !rf.isInternal());
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
653 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
654 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
655
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
656 // Test stability of getInstanceFields
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
657 ResolvedJavaField[] actual2 = type.getInstanceFields(includeSuperclasses);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
658 assertArrayEquals(actual, actual2);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
659 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
660 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
661 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
662
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
663 @Test
15841
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
664 public void getStaticFieldsTest() {
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
665 for (Class<?> c : classes) {
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
666 ResolvedJavaType type = metaAccess.lookupJavaType(c);
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
667 Set<Field> expected = getStaticFields(c);
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
668 ResolvedJavaField[] actual = type.getStaticFields();
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
669 for (Field f : expected) {
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
670 assertNotNull(lookupField(actual, f));
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
671 }
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
672 for (ResolvedJavaField rf : actual) {
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
673 if (!isHiddenFromReflection(rf)) {
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
674 assertEquals(lookupField(expected, rf) != null, !rf.isInternal());
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
675 }
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
676 }
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
677
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
678 // Test stability of getStaticFields
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
679 ResolvedJavaField[] actual2 = type.getStaticFields();
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
680 assertArrayEquals(actual, actual2);
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
681 }
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
682 }
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
683
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
684 @Test
11953
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
685 public void getDeclaredMethodsTest() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
686 for (Class<?> c : classes) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
687 ResolvedJavaType type = metaAccess.lookupJavaType(c);
11953
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
688 Method[] raw = c.getDeclaredMethods();
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
689 Set<ResolvedJavaMethod> expected = new HashSet<>();
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
690 for (Method m : raw) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
691 ResolvedJavaMethod resolvedMethod = metaAccess.lookupJavaMethod(m);
11953
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
692 assertNotNull(resolvedMethod);
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
693 expected.add(resolvedMethod);
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
694 }
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
695 Set<ResolvedJavaMethod> actual = new HashSet<>(Arrays.asList(type.getDeclaredMethods()));
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
696 assertEquals(expected, actual);
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
697 }
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
698 }
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
699
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
700 static class A {
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
701 static String name = "foo";
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
702 }
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
703
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
704 static class B extends A {
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
705 }
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
706
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
707 static class C {
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
708 }
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
709
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
710 static class D {
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
711 void foo() {
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
712 // use of assertions causes the class to have a <clinit>
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
713 assert getClass() != null;
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
714 }
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
715 }
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
716
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
717 @Test
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
718 public void getClassInitializerTest() {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
719 assertNotNull(metaAccess.lookupJavaType(A.class).getClassInitializer());
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
720 assertNotNull(metaAccess.lookupJavaType(D.class).getClassInitializer());
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
721 assertNull(metaAccess.lookupJavaType(B.class).getClassInitializer());
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
722 assertNull(metaAccess.lookupJavaType(C.class).getClassInitializer());
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
723 assertNull(metaAccess.lookupJavaType(int.class).getClassInitializer());
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
724 assertNull(metaAccess.lookupJavaType(void.class).getClassInitializer());
11953
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
725 }
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
726
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
727 @Test
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
728 public void getAnnotationTest() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
729 for (Class<?> c : classes) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
730 ResolvedJavaType type = metaAccess.lookupJavaType(c);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
731 for (Annotation a : c.getAnnotations()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
732 assertEquals(a, type.getAnnotation(a.annotationType()));
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
733 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
734 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
735 }
7829
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
736
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
737 @Test
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
738 public void memberClassesTest() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
739 for (Class<?> c : classes) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
740 ResolvedJavaType type = metaAccess.lookupJavaType(c);
7829
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
741 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
742 assertEquals(c.isMemberClass(), type.isMember());
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
743 Class<?> enclc = c.getEnclosingClass();
7829
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
744 ResolvedJavaType enclt = type.getEnclosingType();
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
745 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
746 if (enclc != null) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
747 assertEquals(enclt, metaAccess.lookupJavaType(enclc));
7829
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
748 }
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
749 }
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
750 }
7831
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
751
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
752 @Test
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
753 public void classFilePathTest() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
754 for (Class<?> c : classes) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
755 ResolvedJavaType type = metaAccess.lookupJavaType(c);
7831
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
756 URL path = type.getClassFilePath();
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
757 if (type.isPrimitive() || type.isArray()) {
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
758 assertEquals(null, path);
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
759 } else {
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
760 assertNotNull(path);
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
761 String pathString = path.getPath();
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
762 if (type.isLocal() || type.isMember()) {
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
763 assertTrue(pathString.indexOf('$') > 0);
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
764 }
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
765 }
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
766 }
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
767 }
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
768
17156
ac6e25901d62 Add trusted interface concept and use it for WordBase, fix a NPE and some tests
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 16491
diff changeset
769 @Test
ac6e25901d62 Add trusted interface concept and use it for WordBase, fix a NPE and some tests
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 16491
diff changeset
770 public void isTrustedInterfaceTypeTest() {
ac6e25901d62 Add trusted interface concept and use it for WordBase, fix a NPE and some tests
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 16491
diff changeset
771 for (Class<?> c : classes) {
ac6e25901d62 Add trusted interface concept and use it for WordBase, fix a NPE and some tests
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 16491
diff changeset
772 ResolvedJavaType type = metaAccess.lookupJavaType(c);
ac6e25901d62 Add trusted interface concept and use it for WordBase, fix a NPE and some tests
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 16491
diff changeset
773 if (TrustedInterface.class.isAssignableFrom(c)) {
ac6e25901d62 Add trusted interface concept and use it for WordBase, fix a NPE and some tests
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 16491
diff changeset
774 assertTrue(type.isTrustedInterfaceType());
ac6e25901d62 Add trusted interface concept and use it for WordBase, fix a NPE and some tests
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 16491
diff changeset
775 }
ac6e25901d62 Add trusted interface concept and use it for WordBase, fix a NPE and some tests
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 16491
diff changeset
776 }
ac6e25901d62 Add trusted interface concept and use it for WordBase, fix a NPE and some tests
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 16491
diff changeset
777 }
ac6e25901d62 Add trusted interface concept and use it for WordBase, fix a NPE and some tests
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 16491
diff changeset
778
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
779 private Method findTestMethod(Method apiMethod) {
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
780 String testName = apiMethod.getName() + "Test";
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
781 for (Method m : getClass().getDeclaredMethods()) {
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
782 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
783 return m;
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
784 }
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
785 }
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
786 return null;
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
787 }
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
788
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
789 // @formatter:off
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
790 private static final String[] untestedApiMethods = {
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
791 "initialize",
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
792 "isPrimitive",
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
793 "newArray",
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
794 "getDeclaredConstructors",
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
795 "isInitialized",
11520
7cca436d600b Add isLinked method to ResolvedJavaType
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 9806
diff changeset
796 "isLinked",
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
797 "getEncoding",
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
798 "hasFinalizableSubclass",
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
799 "hasFinalizer",
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
800 "getSourceFileName",
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
801 "getClassFilePath",
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
802 "isLocal",
16491
4d7a9829315e moved isJavaLangObject(ResolvedJavaType type) from MetaUtil to be a default method in ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents: 16485
diff changeset
803 "isJavaLangObject",
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
804 "isMember",
16485
d6604020da93 removed com.oracle.graal.api.meta.jdk8.test project
Doug Simon <doug.simon@oracle.com>
parents: 15841
diff changeset
805 "getElementalType",
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
806 "getEnclosingType"
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
807 };
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
808 // @formatter:on
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
809
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
810 /**
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
811 * 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
812 * 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
813 */
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
814 @Test
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
815 public void testCoverage() {
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
816 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
817 for (Method m : ResolvedJavaType.class.getDeclaredMethods()) {
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
818 if (findTestMethod(m) == null) {
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
819 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
820 } else {
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
821 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
822 }
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
823 }
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
824 }
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
825 }