annotate jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestResolvedJavaType.java @ 24100:839dcc4f2cf6 jvmci-0.24

handle signature polymorphic methods correctly (JDK-8161550)
author Doug Simon <doug.simon@oracle.com>
date Wed, 08 Feb 2017 23:49:32 +0100
parents d6bd0b9cd0b6
children 6d70d9c43369
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 /*
22518
37d2643aa69a Add jtreg annotations to some tests
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22505
diff changeset
2 * Copyright (c) 2012, 2015, 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 */
22518
37d2643aa69a Add jtreg annotations to some tests
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22505
diff changeset
23
37d2643aa69a Add jtreg annotations to some tests
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22505
diff changeset
24 /**
37d2643aa69a Add jtreg annotations to some tests
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22505
diff changeset
25 * @test
37d2643aa69a Add jtreg annotations to some tests
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22505
diff changeset
26 * @compile TestResolvedJavaType.java TypeUniverse.java TestMetaAccessProvider.java
22672
1bbd4a7c274b Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22569
diff changeset
27 * @run junit jdk.vm.ci.runtime.test.TestResolvedJavaType
22518
37d2643aa69a Add jtreg annotations to some tests
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22505
diff changeset
28 */
37d2643aa69a Add jtreg annotations to some tests
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22505
diff changeset
29
22672
1bbd4a7c274b Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22569
diff changeset
30 package jdk.vm.ci.runtime.test;
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
31
22569
ec96f33a101d updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22536
diff changeset
32 import static java.lang.reflect.Modifier.isAbstract;
ec96f33a101d updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22536
diff changeset
33 import static java.lang.reflect.Modifier.isFinal;
ec96f33a101d updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22536
diff changeset
34 import static java.lang.reflect.Modifier.isPrivate;
ec96f33a101d updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22536
diff changeset
35 import static java.lang.reflect.Modifier.isProtected;
ec96f33a101d updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22536
diff changeset
36 import static java.lang.reflect.Modifier.isPublic;
ec96f33a101d updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22536
diff changeset
37 import static java.lang.reflect.Modifier.isStatic;
ec96f33a101d updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22536
diff changeset
38 import static org.junit.Assert.assertArrayEquals;
ec96f33a101d updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22536
diff changeset
39 import static org.junit.Assert.assertEquals;
ec96f33a101d updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22536
diff changeset
40 import static org.junit.Assert.assertFalse;
ec96f33a101d updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22536
diff changeset
41 import static org.junit.Assert.assertNotNull;
ec96f33a101d updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22536
diff changeset
42 import static org.junit.Assert.assertNull;
ec96f33a101d updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22536
diff changeset
43 import static org.junit.Assert.assertTrue;
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
44
22569
ec96f33a101d updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22536
diff changeset
45 import java.lang.annotation.Annotation;
ec96f33a101d updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22536
diff changeset
46 import java.lang.reflect.Field;
ec96f33a101d updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22536
diff changeset
47 import java.lang.reflect.Method;
ec96f33a101d updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22536
diff changeset
48 import java.lang.reflect.Modifier;
ec96f33a101d updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22536
diff changeset
49 import java.util.Arrays;
ec96f33a101d updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22536
diff changeset
50 import java.util.Collections;
ec96f33a101d updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22536
diff changeset
51 import java.util.HashMap;
ec96f33a101d updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22536
diff changeset
52 import java.util.HashSet;
ec96f33a101d updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22536
diff changeset
53 import java.util.Map;
ec96f33a101d updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22536
diff changeset
54 import java.util.Set;
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
55
23365
30af491f98c5 Remove TrustedInterface (JDK-8155719).
Roland Schatz <roland.schatz@oracle.com>
parents: 23347
diff changeset
56 import org.junit.Test;
30af491f98c5 Remove TrustedInterface (JDK-8155719).
Roland Schatz <roland.schatz@oracle.com>
parents: 23347
diff changeset
57
23392
b3a816d3b844 Backed out changeset: a920338dd4d4
Doug Simon <doug.simon@oracle.com>
parents: 23387
diff changeset
58 import jdk.vm.ci.common.JVMCIError;
22672
1bbd4a7c274b Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22569
diff changeset
59 import jdk.vm.ci.meta.Assumptions.AssumptionResult;
1bbd4a7c274b Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22569
diff changeset
60 import jdk.vm.ci.meta.JavaConstant;
1bbd4a7c274b Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22569
diff changeset
61 import jdk.vm.ci.meta.JavaKind;
1bbd4a7c274b Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22569
diff changeset
62 import jdk.vm.ci.meta.ResolvedJavaField;
1bbd4a7c274b Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22569
diff changeset
63 import jdk.vm.ci.meta.ResolvedJavaMethod;
1bbd4a7c274b Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22569
diff changeset
64 import jdk.vm.ci.meta.ResolvedJavaType;
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
65 import sun.reflect.ConstantPool;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
66
7043
947de43c68d6 improved documentation for ResolvedJavaType.findUniqueConcreteSubtype()
Doug Simon <doug.simon@oracle.com>
parents: 7037
diff changeset
67 /**
947de43c68d6 improved documentation for ResolvedJavaType.findUniqueConcreteSubtype()
Doug Simon <doug.simon@oracle.com>
parents: 7037
diff changeset
68 * Tests for {@link ResolvedJavaType}.
947de43c68d6 improved documentation for ResolvedJavaType.findUniqueConcreteSubtype()
Doug Simon <doug.simon@oracle.com>
parents: 7037
diff changeset
69 */
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
70 public class TestResolvedJavaType extends TypeUniverse {
24100
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
71 private static final Class<? extends Annotation> SIGNATURE_POLYMORPHIC_CLASS = findPolymorphicSignatureClass();
7037
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 public TestResolvedJavaType() {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
74 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
75
24100
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
76 @SuppressWarnings("unchecked")
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
77 private static Class<? extends Annotation> findPolymorphicSignatureClass() {
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
78 Class<? extends Annotation> signaturePolyAnnotation = null;
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
79 try {
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
80 for (Class<?> clazz : TestResolvedJavaType.class.getClassLoader().loadClass("java.lang.invoke.MethodHandle").getDeclaredClasses()) {
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
81 if (clazz.getName().endsWith("PolymorphicSignature") && Annotation.class.isAssignableFrom(clazz)) {
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
82 signaturePolyAnnotation = (Class<? extends Annotation>) clazz;
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
83 break;
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
84 }
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
85 }
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
86 } catch (Throwable e) {
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
87 throw new AssertionError("Could not find annotation PolymorphicSignature in java.lang.invoke.MethodHandle", e);
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
88 }
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
89 assertNotNull(signaturePolyAnnotation);
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
90 return signaturePolyAnnotation;
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
91 }
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
92
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
93 @Test
7056
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
94 public void findInstanceFieldWithOffsetTest() {
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);
7056
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
97 Set<Field> reflectionFields = getInstanceFields(c, true);
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
98 for (Field f : reflectionFields) {
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
99 ResolvedJavaField rf = lookupField(type.getInstanceFields(true), f);
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
100 assertNotNull(rf);
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
101 long offset = isStatic(f.getModifiers()) ? unsafe.staticFieldOffset(f) : unsafe.objectFieldOffset(f);
22536
dc1aeef79e7e Refactoring: Rename Kind to JavaKind.
Roland Schatz <roland.schatz@oracle.com>
parents: 22518
diff changeset
102 ResolvedJavaField result = type.findInstanceFieldWithOffset(offset, rf.getJavaKind());
7056
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
103 assertNotNull(result);
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
104 assertTrue(fieldsEqual(f, result));
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
105 }
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
106 }
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
107 }
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
108
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
109 @Test
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
110 public void isInterfaceTest() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
111 for (Class<?> c : classes) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
112 ResolvedJavaType type = metaAccess.lookupJavaType(c);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
113 boolean expected = c.isInterface();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
114 boolean actual = type.isInterface();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
115 assertEquals(expected, actual);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
116 }
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 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
120 public void isInstanceClassTest() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
121 for (Class<?> c : classes) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
122 ResolvedJavaType type = metaAccess.lookupJavaType(c);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
123 boolean expected = !c.isArray() && !c.isPrimitive() && !c.isInterface();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
124 boolean actual = type.isInstanceClass();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
125 assertEquals(expected, actual);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
126 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
127 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
128
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
129 @Test
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
130 public void isArrayTest() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
131 for (Class<?> c : classes) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
132 ResolvedJavaType type = metaAccess.lookupJavaType(c);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
133 boolean expected = c.isArray();
7060
06d5f450f32b rename: ResolvedJavaType.isArrayClass() -> ResolvedJavaType.isArray()
Doug Simon <doug.simon@oracle.com>
parents: 7057
diff changeset
134 boolean actual = type.isArray();
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
135 assertEquals(expected, actual);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
136 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
137 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
138
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
139 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
140 public void getModifiersTest() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
141 for (Class<?> c : classes) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
142 ResolvedJavaType type = metaAccess.lookupJavaType(c);
23749
d6bd0b9cd0b6 remove uses of setAccessible (JDK-8165434)
Doug Simon <doug.simon@oracle.com>
parents: 23392
diff changeset
143 int mask = Modifier.classModifiers() & ~Modifier.STATIC;
d6bd0b9cd0b6 remove uses of setAccessible (JDK-8165434)
Doug Simon <doug.simon@oracle.com>
parents: 23392
diff changeset
144 int expected = c.getModifiers() & mask;
d6bd0b9cd0b6 remove uses of setAccessible (JDK-8165434)
Doug Simon <doug.simon@oracle.com>
parents: 23392
diff changeset
145 int actual = type.getModifiers() & mask;
22011
4c9d4fe1cbd8 Add ModifiersProvider.isSynthetic, isVarArgs and isBridge.
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21798
diff changeset
146 Class<?> elementalType = c;
4c9d4fe1cbd8 Add ModifiersProvider.isSynthetic, isVarArgs and isBridge.
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21798
diff changeset
147 while (elementalType.isArray()) {
4c9d4fe1cbd8 Add ModifiersProvider.isSynthetic, isVarArgs and isBridge.
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21798
diff changeset
148 elementalType = elementalType.getComponentType();
4c9d4fe1cbd8 Add ModifiersProvider.isSynthetic, isVarArgs and isBridge.
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21798
diff changeset
149 }
4c9d4fe1cbd8 Add ModifiersProvider.isSynthetic, isVarArgs and isBridge.
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21798
diff changeset
150 if (elementalType.isMemberClass()) {
4c9d4fe1cbd8 Add ModifiersProvider.isSynthetic, isVarArgs and isBridge.
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21798
diff changeset
151 // member class get their modifiers from the inner-class attribute in the JVM and
4c9d4fe1cbd8 Add ModifiersProvider.isSynthetic, isVarArgs and isBridge.
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21798
diff changeset
152 // from the classfile header in jvmci
4c9d4fe1cbd8 Add ModifiersProvider.isSynthetic, isVarArgs and isBridge.
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21798
diff changeset
153 expected &= ~(Modifier.PUBLIC | Modifier.PRIVATE | Modifier.PROTECTED);
4c9d4fe1cbd8 Add ModifiersProvider.isSynthetic, isVarArgs and isBridge.
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21798
diff changeset
154 actual &= ~(Modifier.PUBLIC | Modifier.PRIVATE | Modifier.PROTECTED);
4c9d4fe1cbd8 Add ModifiersProvider.isSynthetic, isVarArgs and isBridge.
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21798
diff changeset
155 }
4c9d4fe1cbd8 Add ModifiersProvider.isSynthetic, isVarArgs and isBridge.
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21798
diff changeset
156 assertEquals(String.format("%s: 0x%x != 0x%x", type, expected, actual), expected, actual);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
157 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
158 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
159
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
160 @Test
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
161 public void isAssignableFromTest() {
22505
575eb1036ea9 fixed all existing -Xlint warnings
Doug Simon <doug.simon@oracle.com>
parents: 22435
diff changeset
162 Class<?>[] all = classes.toArray(new Class<?>[classes.size()]);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
163 for (int i = 0; i < all.length; i++) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
164 Class<?> c1 = all[i];
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
165 for (int j = i; j < all.length; j++) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
166 Class<?> c2 = all[j];
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
167 ResolvedJavaType t1 = metaAccess.lookupJavaType(c1);
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
168 ResolvedJavaType t2 = metaAccess.lookupJavaType(c2);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
169 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
170 boolean actual = t1.isAssignableFrom(t2);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
171 assertEquals(expected, actual);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
172 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
173 assertFalse(t2.isAssignableFrom(t1));
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
174 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
175 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
176 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
177 }
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 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
180 public void isInstanceTest() {
21663
381ab4105afe moved com.oracle.graal.java.test to com.oracle.jvmci.runtime.test
Doug Simon <doug.simon@oracle.com>
parents: 21556
diff changeset
181 for (ConstantValue cv : constants()) {
381ab4105afe moved com.oracle.graal.java.test to com.oracle.jvmci.runtime.test
Doug Simon <doug.simon@oracle.com>
parents: 21556
diff changeset
182 JavaConstant c = cv.value;
22536
dc1aeef79e7e Refactoring: Rename Kind to JavaKind.
Roland Schatz <roland.schatz@oracle.com>
parents: 22518
diff changeset
183 if (c.getJavaKind() == JavaKind.Object && !c.isNull()) {
21663
381ab4105afe moved com.oracle.graal.java.test to com.oracle.jvmci.runtime.test
Doug Simon <doug.simon@oracle.com>
parents: 21556
diff changeset
184 ResolvedJavaType cType = metaAccess.lookupJavaType(c);
381ab4105afe moved com.oracle.graal.java.test to com.oracle.jvmci.runtime.test
Doug Simon <doug.simon@oracle.com>
parents: 21556
diff changeset
185 for (ResolvedJavaType t : javaTypes) {
381ab4105afe moved com.oracle.graal.java.test to com.oracle.jvmci.runtime.test
Doug Simon <doug.simon@oracle.com>
parents: 21556
diff changeset
186 if (t.isAssignableFrom(cType)) {
381ab4105afe moved com.oracle.graal.java.test to com.oracle.jvmci.runtime.test
Doug Simon <doug.simon@oracle.com>
parents: 21556
diff changeset
187 assertTrue(t.isInstance(c));
381ab4105afe moved com.oracle.graal.java.test to com.oracle.jvmci.runtime.test
Doug Simon <doug.simon@oracle.com>
parents: 21556
diff changeset
188 } else {
381ab4105afe moved com.oracle.graal.java.test to com.oracle.jvmci.runtime.test
Doug Simon <doug.simon@oracle.com>
parents: 21556
diff changeset
189 assertFalse(t.isInstance(c));
381ab4105afe moved com.oracle.graal.java.test to com.oracle.jvmci.runtime.test
Doug Simon <doug.simon@oracle.com>
parents: 21556
diff changeset
190 }
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 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
195
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
196 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
197 public void getSuperclassTest() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
198 for (Class<?> c : classes) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
199 ResolvedJavaType type = metaAccess.lookupJavaType(c);
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
200 Class<?> expected = c.getSuperclass();
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
201 ResolvedJavaType actual = type.getSuperclass();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
202 if (expected == null) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
203 assertTrue(actual == null);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
204 } else {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
205 assertNotNull(actual);
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
206 assertTrue(actual.equals(metaAccess.lookupJavaType(expected)));
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
207 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
208 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
209 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
210
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
211 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
212 public void getInterfacesTest() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
213 for (Class<?> c : classes) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
214 ResolvedJavaType type = metaAccess.lookupJavaType(c);
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
215 Class<?>[] expected = c.getInterfaces();
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
216 ResolvedJavaType[] actual = type.getInterfaces();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
217 assertEquals(expected.length, actual.length);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
218 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
219 assertTrue(actual[i].equals(metaAccess.lookupJavaType(expected[i])));
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
220 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
221 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
222 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
223
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
224 public Class<?> getSupertype(Class<?> c) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
225 assert !c.isPrimitive();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
226 if (c.isArray()) {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
227 Class<?> componentType = c.getComponentType();
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
228 if (componentType.isPrimitive() || componentType == Object.class) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
229 return Object.class;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
230 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
231 return getArrayClass(getSupertype(componentType));
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
232 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
233 if (c.isInterface()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
234 return Object.class;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
235 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
236 return c.getSuperclass();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
237 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
238
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
239 public Class<?> findLeastCommonAncestor(Class<?> c1Initial, Class<?> c2Initial) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
240 if (c1Initial.isPrimitive() || c2Initial.isPrimitive()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
241 return 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 Class<?> c1 = c1Initial;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
244 Class<?> c2 = c2Initial;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
245 while (true) {
7530
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
246 if (c1.isAssignableFrom(c2)) {
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
247 return c1;
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
248 }
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
249 if (c2.isAssignableFrom(c1)) {
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
250 return c2;
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 c1 = getSupertype(c1);
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
253 c2 = getSupertype(c2);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
254 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
255 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
256 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
257
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
258 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
259 public void findLeastCommonAncestorTest() {
22505
575eb1036ea9 fixed all existing -Xlint warnings
Doug Simon <doug.simon@oracle.com>
parents: 22435
diff changeset
260 Class<?>[] all = classes.toArray(new Class<?>[classes.size()]);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
261 for (int i = 0; i < all.length; i++) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
262 Class<?> c1 = all[i];
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
263 for (int j = i; j < all.length; j++) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
264 Class<?> c2 = all[j];
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
265 ResolvedJavaType t1 = metaAccess.lookupJavaType(c1);
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
266 ResolvedJavaType t2 = metaAccess.lookupJavaType(c2);
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
267 Class<?> expected = findLeastCommonAncestor(c1, c2);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
268 ResolvedJavaType actual = t1.findLeastCommonAncestor(t2);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
269 if (expected == null) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
270 assertTrue(actual == null);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
271 } else {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
272 assertNotNull(actual);
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
273 assertTrue(actual.equals(metaAccess.lookupJavaType(expected)));
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
274 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
275 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
276 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
277 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
278
7530
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
279 private static class Base {
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
280 }
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
281
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
282 abstract static class Abstract1 extends Base {
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
283 }
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
284
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
285 interface Interface1 {
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
286 }
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
287
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
288 static class Concrete1 extends Abstract1 {
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
289 }
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
290
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
291 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
292 }
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
293
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
294 static class Concrete3 extends Concrete2 {
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
295 }
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
296
15729
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
297 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
298 }
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
299
7530
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
300 abstract static class Abstract4 extends Concrete3 {
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
301 }
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
302
15729
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
303 void checkConcreteSubtype(ResolvedJavaType type, ResolvedJavaType expected) {
19801
deab43a789ad Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 19800
diff changeset
304 AssumptionResult<ResolvedJavaType> leafConcreteSubtype = type.findLeafConcreteSubtype();
deab43a789ad Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 19800
diff changeset
305 if (leafConcreteSubtype == null) {
deab43a789ad Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 19800
diff changeset
306 // findLeafConcreteSubtype() is conservative
7045
7ac6e4c10e37 bug fix for HotSpotReslvedJavaType.findUniqueConcreteSubtype() on arrays of interfaces
Doug Simon <doug.simon@oracle.com>
parents: 7044
diff changeset
307 } else {
7ac6e4c10e37 bug fix for HotSpotReslvedJavaType.findUniqueConcreteSubtype() on arrays of interfaces
Doug Simon <doug.simon@oracle.com>
parents: 7044
diff changeset
308 if (expected == null) {
19801
deab43a789ad Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 19800
diff changeset
309 assertNull(leafConcreteSubtype);
7045
7ac6e4c10e37 bug fix for HotSpotReslvedJavaType.findUniqueConcreteSubtype() on arrays of interfaces
Doug Simon <doug.simon@oracle.com>
parents: 7044
diff changeset
310 } else {
19801
deab43a789ad Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 19800
diff changeset
311 assertTrue(leafConcreteSubtype.getResult().equals(expected));
7045
7ac6e4c10e37 bug fix for HotSpotReslvedJavaType.findUniqueConcreteSubtype() on arrays of interfaces
Doug Simon <doug.simon@oracle.com>
parents: 7044
diff changeset
312 }
23340
22c3bdf28fff Don't generate LeafType assumptions for isLeaf == true types
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23338
diff changeset
313 assertTrue(!type.isLeaf() || leafConcreteSubtype.isAssumptionFree());
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
314 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
315
7060
06d5f450f32b rename: ResolvedJavaType.isArrayClass() -> ResolvedJavaType.isArray()
Doug Simon <doug.simon@oracle.com>
parents: 7057
diff changeset
316 if (!type.isArray()) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
317 ResolvedJavaType arrayType = type.getArrayClass();
19801
deab43a789ad Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 19800
diff changeset
318 AssumptionResult<ResolvedJavaType> arraySubtype = arrayType.findLeafConcreteSubtype();
7043
947de43c68d6 improved documentation for ResolvedJavaType.findUniqueConcreteSubtype()
Doug Simon <doug.simon@oracle.com>
parents: 7037
diff changeset
319 if (arraySubtype != null) {
19800
3362ba500371 Connect required Assumptions with answer to CHA query
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18950
diff changeset
320 assertEquals(arraySubtype.getResult(), arrayType);
7045
7ac6e4c10e37 bug fix for HotSpotReslvedJavaType.findUniqueConcreteSubtype() on arrays of interfaces
Doug Simon <doug.simon@oracle.com>
parents: 7044
diff changeset
321 } else {
19801
deab43a789ad Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 19800
diff changeset
322 // findLeafConcreteSubtype() method is conservative
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
323 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
324 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
325 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
326
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
327 @Test
19801
deab43a789ad Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 19800
diff changeset
328 public void findLeafConcreteSubtypeTest() {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
329 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
330 checkConcreteSubtype(base, base);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
331
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
332 ResolvedJavaType a1 = metaAccess.lookupJavaType(Abstract1.class);
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
333 ResolvedJavaType c1 = metaAccess.lookupJavaType(Concrete1.class);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
334
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
335 checkConcreteSubtype(base, null);
15729
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
336 checkConcreteSubtype(a1, c1);
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
337 checkConcreteSubtype(c1, c1);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
338
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
339 ResolvedJavaType i1 = metaAccess.lookupJavaType(Interface1.class);
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
340 ResolvedJavaType c2 = metaAccess.lookupJavaType(Concrete2.class);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
341
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
342 checkConcreteSubtype(base, null);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
343 checkConcreteSubtype(a1, null);
15729
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
344 checkConcreteSubtype(c1, c1);
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
345 checkConcreteSubtype(i1, c2);
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
346 checkConcreteSubtype(c2, c2);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
347
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
348 ResolvedJavaType c3 = metaAccess.lookupJavaType(Concrete3.class);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
349 checkConcreteSubtype(c2, null);
15729
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
350 checkConcreteSubtype(c3, c3);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
351
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
352 ResolvedJavaType a4 = metaAccess.lookupJavaType(Abstract4.class);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
353 checkConcreteSubtype(c3, null);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
354 checkConcreteSubtype(a4, null);
15729
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
355
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
356 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
357 checkConcreteSubtype(a1a, null);
23338
a3471785190d findLeafConcreteSubtype should handle arrays of leaf concrete subtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23318
diff changeset
358 ResolvedJavaType i1a = metaAccess.lookupJavaType(Interface1[].class);
a3471785190d findLeafConcreteSubtype should handle arrays of leaf concrete subtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23318
diff changeset
359 checkConcreteSubtype(i1a, null);
15729
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
360 ResolvedJavaType c1a = metaAccess.lookupJavaType(Concrete1[].class);
23338
a3471785190d findLeafConcreteSubtype should handle arrays of leaf concrete subtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23318
diff changeset
361 checkConcreteSubtype(c1a, c1a);
15729
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
362 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
363 checkConcreteSubtype(f1a, f1a);
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
364
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
365 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
366 checkConcreteSubtype(obja, null);
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
367
59a85df7a418 Add some assertions and tests to TestResolvedJavaType.findUniqueConcreteSubtypeTest
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15722
diff changeset
368 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
369 checkConcreteSubtype(inta, inta);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
370 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
371
18183
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
372 interface NoImplementor {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
373 }
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 interface SingleImplementorInterface {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
376 }
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 static class SingleConcreteImplementor implements SingleImplementorInterface {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
379 }
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 interface SingleAbstractImplementorInterface {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
382 }
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 abstract static class SingleAbstractImplementor implements SingleAbstractImplementorInterface {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
385 }
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 interface MultiImplementorInterface {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
388 }
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
389
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
390 static class ConcreteImplementor1 implements MultiImplementorInterface {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
391 }
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 static class ConcreteImplementor2 implements MultiImplementorInterface {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
394 }
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 interface MultipleAbstractImplementorInterface {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
397 }
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
398
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
399 abstract static class MultiAbstractImplementor1 implements MultipleAbstractImplementorInterface {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
400 }
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
401
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
402 abstract static class MultiAbstractImplementor2 implements MultipleAbstractImplementorInterface {
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
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
405 interface SingleAbstractImplementorInterface2 {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
406 }
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
407
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
408 interface ExtendedSingleImplementorInterface {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
409 }
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
410
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
411 abstract static class SingleAbstractImplementor2 implements SingleAbstractImplementorInterface2 {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
412 }
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 static class ConcreteTransitiveImplementor1 extends SingleAbstractImplementor2 implements ExtendedSingleImplementorInterface {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
415 }
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
416
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
417 static class ConcreteTransitiveImplementor2 extends SingleAbstractImplementor2 implements ExtendedSingleImplementorInterface {
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
418 }
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 @Test
18194
b7226cb963c3 Rename ResolvedJavaType.getImplementor() to getSingleImplementor().
Josef Eisl <josef.eisl@jku.at>
parents: 18193
diff changeset
421 public void getSingleImplementorTest() {
18183
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
422 ResolvedJavaType iNi = metaAccess.lookupJavaType(NoImplementor.class);
18194
b7226cb963c3 Rename ResolvedJavaType.getImplementor() to getSingleImplementor().
Josef Eisl <josef.eisl@jku.at>
parents: 18193
diff changeset
423 assertNull(iNi.getSingleImplementor());
18183
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
424
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
425 ResolvedJavaType iSi = metaAccess.lookupJavaType(SingleImplementorInterface.class);
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
426 ResolvedJavaType cSi = metaAccess.lookupJavaType(SingleConcreteImplementor.class);
18194
b7226cb963c3 Rename ResolvedJavaType.getImplementor() to getSingleImplementor().
Josef Eisl <josef.eisl@jku.at>
parents: 18193
diff changeset
427 assertEquals(cSi, iSi.getSingleImplementor());
18183
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
428
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
429 ResolvedJavaType iSai = metaAccess.lookupJavaType(SingleAbstractImplementorInterface.class);
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
430 ResolvedJavaType aSai = metaAccess.lookupJavaType(SingleAbstractImplementor.class);
18194
b7226cb963c3 Rename ResolvedJavaType.getImplementor() to getSingleImplementor().
Josef Eisl <josef.eisl@jku.at>
parents: 18193
diff changeset
431 assertEquals(aSai, iSai.getSingleImplementor());
18183
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
432
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
433 ResolvedJavaType iMi = metaAccess.lookupJavaType(MultiImplementorInterface.class);
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
434 metaAccess.lookupJavaType(ConcreteImplementor1.class);
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
435 metaAccess.lookupJavaType(ConcreteImplementor2.class);
18194
b7226cb963c3 Rename ResolvedJavaType.getImplementor() to getSingleImplementor().
Josef Eisl <josef.eisl@jku.at>
parents: 18193
diff changeset
436 assertEquals(iMi, iMi.getSingleImplementor());
18183
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
437
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
438 ResolvedJavaType iMai = metaAccess.lookupJavaType(MultipleAbstractImplementorInterface.class);
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
439 metaAccess.lookupJavaType(MultiAbstractImplementor1.class);
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
440 metaAccess.lookupJavaType(MultiAbstractImplementor2.class);
18194
b7226cb963c3 Rename ResolvedJavaType.getImplementor() to getSingleImplementor().
Josef Eisl <josef.eisl@jku.at>
parents: 18193
diff changeset
441 assertEquals(iMai, iMai.getSingleImplementor());
18183
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
442
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
443 ResolvedJavaType iSai2 = metaAccess.lookupJavaType(SingleAbstractImplementorInterface2.class);
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
444 ResolvedJavaType aSai2 = metaAccess.lookupJavaType(SingleAbstractImplementor2.class);
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
445 metaAccess.lookupJavaType(ConcreteTransitiveImplementor1.class);
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
446 metaAccess.lookupJavaType(ConcreteTransitiveImplementor2.class);
18194
b7226cb963c3 Rename ResolvedJavaType.getImplementor() to getSingleImplementor().
Josef Eisl <josef.eisl@jku.at>
parents: 18193
diff changeset
447 assertEquals(aSai2, iSai2.getSingleImplementor());
18183
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
448 }
d3dfd1f9545f Add TestResolvedJavaType.getImplementorTest().
Josef Eisl <josef.eisl@jku.at>
parents: 17156
diff changeset
449
23392
b3a816d3b844 Backed out changeset: a920338dd4d4
Doug Simon <doug.simon@oracle.com>
parents: 23387
diff changeset
450 @Test(expected = JVMCIError.class)
18194
b7226cb963c3 Rename ResolvedJavaType.getImplementor() to getSingleImplementor().
Josef Eisl <josef.eisl@jku.at>
parents: 18193
diff changeset
451 public void getSingleImplementorTestClassReceiver() {
18193
0a17944b7baf Throw an exception if ResolvedJavaType.getImplementor() is called with a non-interface type.
Josef Eisl <josef.eisl@jku.at>
parents: 18192
diff changeset
452 ResolvedJavaType base = metaAccess.lookupJavaType(Base.class);
18194
b7226cb963c3 Rename ResolvedJavaType.getImplementor() to getSingleImplementor().
Josef Eisl <josef.eisl@jku.at>
parents: 18193
diff changeset
453 base.getSingleImplementor();
18193
0a17944b7baf Throw an exception if ResolvedJavaType.getImplementor() is called with a non-interface type.
Josef Eisl <josef.eisl@jku.at>
parents: 18192
diff changeset
454 }
0a17944b7baf Throw an exception if ResolvedJavaType.getImplementor() is called with a non-interface type.
Josef Eisl <josef.eisl@jku.at>
parents: 18192
diff changeset
455
23392
b3a816d3b844 Backed out changeset: a920338dd4d4
Doug Simon <doug.simon@oracle.com>
parents: 23387
diff changeset
456 @Test(expected = JVMCIError.class)
18194
b7226cb963c3 Rename ResolvedJavaType.getImplementor() to getSingleImplementor().
Josef Eisl <josef.eisl@jku.at>
parents: 18193
diff changeset
457 public void getSingleImplementorTestPrimitiveReceiver() {
18193
0a17944b7baf Throw an exception if ResolvedJavaType.getImplementor() is called with a non-interface type.
Josef Eisl <josef.eisl@jku.at>
parents: 18192
diff changeset
458 ResolvedJavaType primitive = metaAccess.lookupJavaType(int.class);
18194
b7226cb963c3 Rename ResolvedJavaType.getImplementor() to getSingleImplementor().
Josef Eisl <josef.eisl@jku.at>
parents: 18193
diff changeset
459 primitive.getSingleImplementor();
18193
0a17944b7baf Throw an exception if ResolvedJavaType.getImplementor() is called with a non-interface type.
Josef Eisl <josef.eisl@jku.at>
parents: 18192
diff changeset
460 }
0a17944b7baf Throw an exception if ResolvedJavaType.getImplementor() is called with a non-interface type.
Josef Eisl <josef.eisl@jku.at>
parents: 18192
diff changeset
461
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
462 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
463 public void getComponentTypeTest() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
464 for (Class<?> c : classes) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
465 ResolvedJavaType type = metaAccess.lookupJavaType(c);
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
466 Class<?> expected = c.getComponentType();
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
467 ResolvedJavaType actual = type.getComponentType();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
468 if (expected == null) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
469 assertNull(actual);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
470 } else {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
471 assertTrue(actual.equals(metaAccess.lookupJavaType(expected)));
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
472 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
473 }
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 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
477 public void getArrayClassTest() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
478 for (Class<?> c : classes) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
479 if (c != void.class) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
480 ResolvedJavaType type = metaAccess.lookupJavaType(c);
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
481 Class<?> expected = getArrayClass(c);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
482 ResolvedJavaType actual = type.getArrayClass();
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
483 assertTrue(actual.equals(metaAccess.lookupJavaType(expected)));
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
484 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
485 }
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
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
488 static class Declarations {
7530
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
489
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
490 final Method implementation;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
491 final Set<Method> declarations;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
492
23297
4b58c92e939b remove redundant modifiers
Manuel Rigger <rigger.manuel@gmail.com>
parents: 22672
diff changeset
493 Declarations(Method impl) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
494 this.implementation = impl;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
495 declarations = new HashSet<>();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
496 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
497 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
498
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
499 /**
7530
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
500 * 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
501 * overriding</a>.
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
502 */
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
503 static boolean isOverriderOf(Method impl, Method m) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
504 if (!isPrivate(m.getModifiers()) && !isFinal(m.getModifiers())) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
505 if (m.getName().equals(impl.getName())) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
506 if (m.getReturnType() == impl.getReturnType()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
507 if (Arrays.equals(m.getParameterTypes(), impl.getParameterTypes())) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
508 if (isPublic(m.getModifiers()) || isProtected(m.getModifiers())) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
509 // m is public or protected
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
510 return isPublic(impl.getModifiers()) || isProtected(impl.getModifiers());
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
511 } else {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
512 // m is package-private
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
513 return impl.getDeclaringClass().getPackage() == m.getDeclaringClass().getPackage();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
514 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
515 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
516 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
517 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
518 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
519 return false;
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
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
522 static final Map<Class<?>, VTable> vtables = new HashMap<>();
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
523
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
524 static class VTable {
7530
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
525
7044
34753b057324 added unit tests for JavaType, JavaMethod and ResolvedJavaMethod
Doug Simon <doug.simon@oracle.com>
parents: 7043
diff changeset
526 final Map<NameAndSignature, Method> methods = new HashMap<>();
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
527 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
528
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
529 static synchronized VTable getVTable(Class<?> c) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
530 VTable vtable = vtables.get(c);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
531 if (vtable == null) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
532 vtable = new VTable();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
533 if (c != Object.class) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
534 VTable superVtable = getVTable(c.getSuperclass());
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
535 vtable.methods.putAll(superVtable.methods);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
536 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
537 for (Method m : c.getDeclaredMethods()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
538 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
539 if (isAbstract(m.getModifiers())) {
6440f50c1ea8 improved documentation and testing for ResolvedJavaType.resolveMethod() (GRAAL-489)
Doug Simon <doug.simon@oracle.com>
parents: 11520
diff changeset
540 // 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
541 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
542 } else {
6440f50c1ea8 improved documentation and testing for ResolvedJavaType.resolveMethod() (GRAAL-489)
Doug Simon <doug.simon@oracle.com>
parents: 11520
diff changeset
543 vtable.methods.put(new NameAndSignature(m), m);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
544 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
545 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
546 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
547 vtables.put(c, vtable);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
548 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
549 return vtable;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
550 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
551
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
552 static Set<Method> findDeclarations(Method impl, Class<?> c) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
553 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
554 NameAndSignature implSig = new NameAndSignature(impl);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
555 if (c != null) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
556 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
557 if (new NameAndSignature(m).equals(implSig)) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
558 declarations.add(m);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
559 break;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
560 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
561 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
562 if (!c.isInterface()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
563 declarations.addAll(findDeclarations(impl, c.getSuperclass()));
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
564 }
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
565 for (Class<?> i : c.getInterfaces()) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
566 declarations.addAll(findDeclarations(impl, i));
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
567 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
568 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
569 return declarations;
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 @Test
18192
660875e586f0 Add ResolvedJavaType.resolveMethod() (get the like-time resolved method).
Josef Eisl <josef.eisl@jku.at>
parents: 18191
diff changeset
573 public void resolveMethodTest() {
660875e586f0 Add ResolvedJavaType.resolveMethod() (get the like-time resolved method).
Josef Eisl <josef.eisl@jku.at>
parents: 18191
diff changeset
574 ResolvedJavaType context = metaAccess.lookupJavaType(TestResolvedJavaType.class);
660875e586f0 Add ResolvedJavaType.resolveMethod() (get the like-time resolved method).
Josef Eisl <josef.eisl@jku.at>
parents: 18191
diff changeset
575 for (Class<?> c : classes) {
23347
7ae6a635fad0 8152903: [JVMCI] CompilerToVM::resolveMethod should correctly handle private methods in interfaces
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23340
diff changeset
576 ResolvedJavaType type = metaAccess.lookupJavaType(c);
7ae6a635fad0 8152903: [JVMCI] CompilerToVM::resolveMethod should correctly handle private methods in interfaces
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23340
diff changeset
577 if (c.isInterface()) {
18192
660875e586f0 Add ResolvedJavaType.resolveMethod() (get the like-time resolved method).
Josef Eisl <josef.eisl@jku.at>
parents: 18191
diff changeset
578 for (Method m : c.getDeclaredMethods()) {
23347
7ae6a635fad0 8152903: [JVMCI] CompilerToVM::resolveMethod should correctly handle private methods in interfaces
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23340
diff changeset
579 ResolvedJavaMethod resolved = metaAccess.lookupJavaMethod(m);
7ae6a635fad0 8152903: [JVMCI] CompilerToVM::resolveMethod should correctly handle private methods in interfaces
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23340
diff changeset
580 ResolvedJavaMethod impl = type.resolveMethod(resolved, context);
7ae6a635fad0 8152903: [JVMCI] CompilerToVM::resolveMethod should correctly handle private methods in interfaces
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23340
diff changeset
581 assertEquals(m.toString(), null, impl);
18192
660875e586f0 Add ResolvedJavaType.resolveMethod() (get the like-time resolved method).
Josef Eisl <josef.eisl@jku.at>
parents: 18191
diff changeset
582 }
23347
7ae6a635fad0 8152903: [JVMCI] CompilerToVM::resolveMethod should correctly handle private methods in interfaces
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23340
diff changeset
583 } else if (c.isPrimitive()) {
7ae6a635fad0 8152903: [JVMCI] CompilerToVM::resolveMethod should correctly handle private methods in interfaces
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23340
diff changeset
584 assertEquals("No methods expected", c.getDeclaredMethods().length, 0);
18192
660875e586f0 Add ResolvedJavaType.resolveMethod() (get the like-time resolved method).
Josef Eisl <josef.eisl@jku.at>
parents: 18191
diff changeset
585 } else {
660875e586f0 Add ResolvedJavaType.resolveMethod() (get the like-time resolved method).
Josef Eisl <josef.eisl@jku.at>
parents: 18191
diff changeset
586 VTable vtable = getVTable(c);
660875e586f0 Add ResolvedJavaType.resolveMethod() (get the like-time resolved method).
Josef Eisl <josef.eisl@jku.at>
parents: 18191
diff changeset
587 for (Method impl : vtable.methods.values()) {
660875e586f0 Add ResolvedJavaType.resolveMethod() (get the like-time resolved method).
Josef Eisl <josef.eisl@jku.at>
parents: 18191
diff changeset
588 Set<Method> decls = findDeclarations(impl, c);
660875e586f0 Add ResolvedJavaType.resolveMethod() (get the like-time resolved method).
Josef Eisl <josef.eisl@jku.at>
parents: 18191
diff changeset
589 for (Method decl : decls) {
660875e586f0 Add ResolvedJavaType.resolveMethod() (get the like-time resolved method).
Josef Eisl <josef.eisl@jku.at>
parents: 18191
diff changeset
590 ResolvedJavaMethod m = metaAccess.lookupJavaMethod(decl);
660875e586f0 Add ResolvedJavaType.resolveMethod() (get the like-time resolved method).
Josef Eisl <josef.eisl@jku.at>
parents: 18191
diff changeset
591 if (m.isPublic()) {
24100
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
592 ResolvedJavaMethod resolvedMethod = type.resolveMethod(m, context);
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
593 if (isSignaturePolymorphic(m)) {
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
594 // Signature polymorphic methods must not be resolved
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
595 assertNull(resolvedMethod);
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
596 } else {
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
597 ResolvedJavaMethod i = metaAccess.lookupJavaMethod(impl);
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
598 assertEquals(m.toString(), i, resolvedMethod);
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
599 }
18192
660875e586f0 Add ResolvedJavaType.resolveMethod() (get the like-time resolved method).
Josef Eisl <josef.eisl@jku.at>
parents: 18191
diff changeset
600 }
660875e586f0 Add ResolvedJavaType.resolveMethod() (get the like-time resolved method).
Josef Eisl <josef.eisl@jku.at>
parents: 18191
diff changeset
601 }
660875e586f0 Add ResolvedJavaType.resolveMethod() (get the like-time resolved method).
Josef Eisl <josef.eisl@jku.at>
parents: 18191
diff changeset
602 }
660875e586f0 Add ResolvedJavaType.resolveMethod() (get the like-time resolved method).
Josef Eisl <josef.eisl@jku.at>
parents: 18191
diff changeset
603 }
660875e586f0 Add ResolvedJavaType.resolveMethod() (get the like-time resolved method).
Josef Eisl <josef.eisl@jku.at>
parents: 18191
diff changeset
604 }
660875e586f0 Add ResolvedJavaType.resolveMethod() (get the like-time resolved method).
Josef Eisl <josef.eisl@jku.at>
parents: 18191
diff changeset
605 }
660875e586f0 Add ResolvedJavaType.resolveMethod() (get the like-time resolved method).
Josef Eisl <josef.eisl@jku.at>
parents: 18191
diff changeset
606
660875e586f0 Add ResolvedJavaType.resolveMethod() (get the like-time resolved method).
Josef Eisl <josef.eisl@jku.at>
parents: 18191
diff changeset
607 @Test
18191
839f97696479 Rename ResolvedJavaMethod.resolvedMethod() to resolveConcreteMethod() the reflect its actual behavior.
Josef Eisl <josef.eisl@jku.at>
parents: 18187
diff changeset
608 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
609 ResolvedJavaType context = metaAccess.lookupJavaType(TestResolvedJavaType.class);
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
610 for (Class<?> c : classes) {
23347
7ae6a635fad0 8152903: [JVMCI] CompilerToVM::resolveMethod should correctly handle private methods in interfaces
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23340
diff changeset
611 ResolvedJavaType type = metaAccess.lookupJavaType(c);
7ae6a635fad0 8152903: [JVMCI] CompilerToVM::resolveMethod should correctly handle private methods in interfaces
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23340
diff changeset
612 if (c.isInterface()) {
11823
6440f50c1ea8 improved documentation and testing for ResolvedJavaType.resolveMethod() (GRAAL-489)
Doug Simon <doug.simon@oracle.com>
parents: 11520
diff changeset
613 for (Method m : c.getDeclaredMethods()) {
23347
7ae6a635fad0 8152903: [JVMCI] CompilerToVM::resolveMethod should correctly handle private methods in interfaces
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23340
diff changeset
614 ResolvedJavaMethod resolved = metaAccess.lookupJavaMethod(m);
7ae6a635fad0 8152903: [JVMCI] CompilerToVM::resolveMethod should correctly handle private methods in interfaces
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23340
diff changeset
615 ResolvedJavaMethod impl = type.resolveConcreteMethod(resolved, context);
7ae6a635fad0 8152903: [JVMCI] CompilerToVM::resolveMethod should correctly handle private methods in interfaces
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23340
diff changeset
616 assertEquals(m.toString(), null, impl);
11823
6440f50c1ea8 improved documentation and testing for ResolvedJavaType.resolveMethod() (GRAAL-489)
Doug Simon <doug.simon@oracle.com>
parents: 11520
diff changeset
617 }
23347
7ae6a635fad0 8152903: [JVMCI] CompilerToVM::resolveMethod should correctly handle private methods in interfaces
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23340
diff changeset
618 } else if (c.isPrimitive()) {
7ae6a635fad0 8152903: [JVMCI] CompilerToVM::resolveMethod should correctly handle private methods in interfaces
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23340
diff changeset
619 assertEquals("No methods expected", c.getDeclaredMethods().length, 0);
11823
6440f50c1ea8 improved documentation and testing for ResolvedJavaType.resolveMethod() (GRAAL-489)
Doug Simon <doug.simon@oracle.com>
parents: 11520
diff changeset
620 } else {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
621 VTable vtable = getVTable(c);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
622 for (Method impl : vtable.methods.values()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
623 Set<Method> decls = findDeclarations(impl, c);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
624 for (Method decl : decls) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
625 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
626 if (m.isPublic()) {
24100
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
627 ResolvedJavaMethod resolvedMethod = type.resolveConcreteMethod(m, context);
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
628 if (isSignaturePolymorphic(m)) {
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
629 // Signature polymorphic methods must not be resolved
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
630 assertNull(String.format("Got: %s", resolvedMethod), resolvedMethod);
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
631 } else {
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
632 ResolvedJavaMethod i = metaAccess.lookupJavaMethod(impl);
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
633 assertEquals(i, resolvedMethod);
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
634 }
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
635 }
7037
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 }
11823
6440f50c1ea8 improved documentation and testing for ResolvedJavaType.resolveMethod() (GRAAL-489)
Doug Simon <doug.simon@oracle.com>
parents: 11520
diff changeset
638 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
639 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
640 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
641 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
642 }
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
643 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
644 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
645 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
646
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
647 @Test
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
648 public void findUniqueConcreteMethodTest() throws NoSuchMethodException {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
649 ResolvedJavaMethod thisMethod = metaAccess.lookupJavaMethod(getClass().getDeclaredMethod("findUniqueConcreteMethodTest"));
19800
3362ba500371 Connect required Assumptions with answer to CHA query
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18950
diff changeset
650 ResolvedJavaMethod ucm = metaAccess.lookupJavaType(getClass()).findUniqueConcreteMethod(thisMethod).getResult();
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
651 assertEquals(thisMethod, ucm);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
652 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
653
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
654 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
655 if (c.isArray() || c.isPrimitive() || c.isInterface()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
656 return Collections.emptySet();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
657 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
658 Set<Field> result = new HashSet<>();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
659 for (Field f : c.getDeclaredFields()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
660 if (!Modifier.isStatic(f.getModifiers())) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
661 result.add(f);
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 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
664 if (includeSuperclasses && c != Object.class) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
665 result.addAll(getInstanceFields(c.getSuperclass(), true));
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
666 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
667 return result;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
668 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
669
15841
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
670 public static Set<Field> getStaticFields(Class<?> c) {
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
671 Set<Field> result = new HashSet<>();
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
672 for (Field f : c.getDeclaredFields()) {
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
673 if (Modifier.isStatic(f.getModifiers())) {
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
674 result.add(f);
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 return result;
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
678 }
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
679
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
680 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
681 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
682 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
683 }
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
684
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
685 public ResolvedJavaField lookupField(ResolvedJavaField[] fields, Field key) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
686 for (ResolvedJavaField rf : fields) {
7056
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
687 if (fieldsEqual(key, rf)) {
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
688 return rf;
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
689 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
690 }
7056
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
691 return null;
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
692 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
693
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
694 public Field lookupField(Set<Field> fields, ResolvedJavaField key) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
695 for (Field f : fields) {
7056
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
696 if (fieldsEqual(f, key)) {
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
697 return f;
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
698 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
699 }
7056
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
700 return null;
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
701 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
702
21663
381ab4105afe moved com.oracle.graal.java.test to com.oracle.jvmci.runtime.test
Doug Simon <doug.simon@oracle.com>
parents: 21556
diff changeset
703 private static boolean isHiddenFromReflection(ResolvedJavaField f) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
704 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
705 return true;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
706 }
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
707 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
708 return true;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
709 }
20811
652194a6414f Class.classloader is hidden from reflection
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 19801
diff changeset
710 if (f.getDeclaringClass().equals(metaAccess.lookupJavaType(Class.class)) && f.getName().equals("classLoader")) {
652194a6414f Class.classloader is hidden from reflection
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 19801
diff changeset
711 return true;
652194a6414f Class.classloader is hidden from reflection
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 19801
diff changeset
712 }
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
713 return false;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
714 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
715
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
716 @Test
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
717 public void getInstanceFieldsTest() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
718 for (Class<?> c : classes) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
719 ResolvedJavaType type = metaAccess.lookupJavaType(c);
7530
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7282
diff changeset
720 for (boolean includeSuperclasses : new boolean[]{true, false}) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
721 Set<Field> expected = getInstanceFields(c, includeSuperclasses);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
722 ResolvedJavaField[] actual = type.getInstanceFields(includeSuperclasses);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
723 for (Field f : expected) {
7056
2841e28b5f41 added test for ResolvedJavaType.findFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
724 assertNotNull(lookupField(actual, f));
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
725 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
726 for (ResolvedJavaField rf : actual) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
727 if (!isHiddenFromReflection(rf)) {
20811
652194a6414f Class.classloader is hidden from reflection
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 19801
diff changeset
728 assertEquals(rf.toString(), lookupField(expected, rf) != null, !rf.isInternal());
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
729 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
730 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
731
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
732 // Test stability of getInstanceFields
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
733 ResolvedJavaField[] actual2 = type.getInstanceFields(includeSuperclasses);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
734 assertArrayEquals(actual, actual2);
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
735 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
736 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
737 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
738
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
739 @Test
15841
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
740 public void getStaticFieldsTest() {
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
741 for (Class<?> c : classes) {
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
742 ResolvedJavaType type = metaAccess.lookupJavaType(c);
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
743 Set<Field> expected = getStaticFields(c);
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
744 ResolvedJavaField[] actual = type.getStaticFields();
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
745 for (Field f : expected) {
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
746 assertNotNull(lookupField(actual, f));
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
747 }
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
748 for (ResolvedJavaField rf : actual) {
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
749 if (!isHiddenFromReflection(rf)) {
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
750 assertEquals(lookupField(expected, rf) != null, !rf.isInternal());
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
751 }
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
752 }
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
753
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
754 // Test stability of getStaticFields
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
755 ResolvedJavaField[] actual2 = type.getStaticFields();
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
756 assertArrayEquals(actual, actual2);
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
757 }
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
758 }
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
759
cb87019df5aa Add test for getStaticFields()
Christian Wimmer <christian.wimmer@oracle.com>
parents: 15729
diff changeset
760 @Test
11953
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
761 public void getDeclaredMethodsTest() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
762 for (Class<?> c : classes) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
763 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
764 Method[] raw = c.getDeclaredMethods();
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
765 Set<ResolvedJavaMethod> expected = new HashSet<>();
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
766 for (Method m : raw) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
767 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
768 assertNotNull(resolvedMethod);
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
769 expected.add(resolvedMethod);
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
770 }
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
771 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
772 assertEquals(expected, actual);
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
773 }
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
774 }
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
775
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
776 static class A {
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
777 static String name = "foo";
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
778 }
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
779
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
780 static class B extends A {
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
781 }
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
782
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
783 static class C {
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
784 }
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
785
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
786 static class D {
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
787 void foo() {
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
788 // 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
789 assert getClass() != null;
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
790 }
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
791 }
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
792
22012
53b4acee50f1 Add ResolvedJavaMethod.isSignaturePolymorphic and ResolvedJavaType.findMethod
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 22011
diff changeset
793 static class SubD extends D {
53b4acee50f1 Add ResolvedJavaMethod.isSignaturePolymorphic and ResolvedJavaType.findMethod
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 22011
diff changeset
794
53b4acee50f1 Add ResolvedJavaMethod.isSignaturePolymorphic and ResolvedJavaType.findMethod
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 22011
diff changeset
795 }
53b4acee50f1 Add ResolvedJavaMethod.isSignaturePolymorphic and ResolvedJavaType.findMethod
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 22011
diff changeset
796
11953
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
797 @Test
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
798 public void getClassInitializerTest() {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
799 assertNotNull(metaAccess.lookupJavaType(A.class).getClassInitializer());
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
800 assertNotNull(metaAccess.lookupJavaType(D.class).getClassInitializer());
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
801 assertNull(metaAccess.lookupJavaType(B.class).getClassInitializer());
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
802 assertNull(metaAccess.lookupJavaType(C.class).getClassInitializer());
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
803 assertNull(metaAccess.lookupJavaType(int.class).getClassInitializer());
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
804 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
805 }
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
806
f9f18098479e added tests for ResolvedJavaType.getClassInitializer() and ResolvedJavaType.getDeclaredMethods()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
807 @Test
22435
ccfb5d9c5fc8 Add unitests
Christian Wimmer <christian.wimmer@oracle.com>
parents: 22165
diff changeset
808 public void getAnnotationsTest() {
ccfb5d9c5fc8 Add unitests
Christian Wimmer <christian.wimmer@oracle.com>
parents: 22165
diff changeset
809 for (Class<?> c : classes) {
ccfb5d9c5fc8 Add unitests
Christian Wimmer <christian.wimmer@oracle.com>
parents: 22165
diff changeset
810 ResolvedJavaType type = metaAccess.lookupJavaType(c);
ccfb5d9c5fc8 Add unitests
Christian Wimmer <christian.wimmer@oracle.com>
parents: 22165
diff changeset
811 assertArrayEquals(c.getAnnotations(), type.getAnnotations());
ccfb5d9c5fc8 Add unitests
Christian Wimmer <christian.wimmer@oracle.com>
parents: 22165
diff changeset
812 }
ccfb5d9c5fc8 Add unitests
Christian Wimmer <christian.wimmer@oracle.com>
parents: 22165
diff changeset
813 }
ccfb5d9c5fc8 Add unitests
Christian Wimmer <christian.wimmer@oracle.com>
parents: 22165
diff changeset
814
ccfb5d9c5fc8 Add unitests
Christian Wimmer <christian.wimmer@oracle.com>
parents: 22165
diff changeset
815 @Test
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
816 public void getAnnotationTest() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
817 for (Class<?> c : classes) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
818 ResolvedJavaType type = metaAccess.lookupJavaType(c);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
819 for (Annotation a : c.getAnnotations()) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
820 assertEquals(a, type.getAnnotation(a.annotationType()));
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
821 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
822 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
823 }
7829
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
824
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
825 @Test
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
826 public void memberClassesTest() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
827 for (Class<?> c : classes) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
828 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
829 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
830 assertEquals(c.isMemberClass(), type.isMember());
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
831 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
832 ResolvedJavaType enclt = type.getEnclosingType();
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
833 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
834 if (enclc != null) {
11959
23ccaa863eda made CodeCacheProvider independent of MetaAccessProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 11953
diff changeset
835 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
836 }
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
837 }
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
838 }
7831
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
839
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
840 @Test
22033
547ae53182bf Add test for isLeaf
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22012
diff changeset
841 public void isLeafTest() {
547ae53182bf Add test for isLeaf
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22012
diff changeset
842 for (Class<?> c : classes) {
547ae53182bf Add test for isLeaf
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22012
diff changeset
843 ResolvedJavaType type = metaAccess.lookupJavaType(c);
547ae53182bf Add test for isLeaf
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22012
diff changeset
844 ResolvedJavaType arrayType = c != void.class ? metaAccess.lookupJavaType(getArrayClass(c)) : null;
547ae53182bf Add test for isLeaf
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22012
diff changeset
845 if (c.isPrimitive()) {
547ae53182bf Add test for isLeaf
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22012
diff changeset
846 assertTrue(type.isLeaf());
547ae53182bf Add test for isLeaf
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22012
diff changeset
847 assertTrue(arrayType == null || arrayType.isLeaf());
547ae53182bf Add test for isLeaf
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22012
diff changeset
848 } else {
547ae53182bf Add test for isLeaf
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22012
diff changeset
849 assertTrue(c.toString(), type.isLeaf() == arrayType.isLeaf());
547ae53182bf Add test for isLeaf
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22012
diff changeset
850 if (!c.isArray()) {
547ae53182bf Add test for isLeaf
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22012
diff changeset
851 assertTrue(c.toString(), type.isLeaf() == Modifier.isFinal(c.getModifiers()));
547ae53182bf Add test for isLeaf
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22012
diff changeset
852 }
547ae53182bf Add test for isLeaf
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22012
diff changeset
853 }
547ae53182bf Add test for isLeaf
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22012
diff changeset
854 }
547ae53182bf Add test for isLeaf
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22012
diff changeset
855 }
547ae53182bf Add test for isLeaf
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22012
diff changeset
856
23357
b05ad394cfd5 Add ResolvedJavaType.isAllocationClonable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23347
diff changeset
857 static class TrivialCloneable implements Cloneable {
b05ad394cfd5 Add ResolvedJavaType.isAllocationClonable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23347
diff changeset
858 @Override
b05ad394cfd5 Add ResolvedJavaType.isAllocationClonable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23347
diff changeset
859 protected Object clone() {
b05ad394cfd5 Add ResolvedJavaType.isAllocationClonable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23347
diff changeset
860 return new TrivialCloneable();
b05ad394cfd5 Add ResolvedJavaType.isAllocationClonable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23347
diff changeset
861 }
b05ad394cfd5 Add ResolvedJavaType.isAllocationClonable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23347
diff changeset
862 }
b05ad394cfd5 Add ResolvedJavaType.isAllocationClonable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23347
diff changeset
863
b05ad394cfd5 Add ResolvedJavaType.isAllocationClonable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23347
diff changeset
864 @Test
23373
802821d82a92 Rename isAllocationCloneable to isCloneableWithAllocation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23366
diff changeset
865 public void isCloneableWithAllocationTest() {
23357
b05ad394cfd5 Add ResolvedJavaType.isAllocationClonable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23347
diff changeset
866 ResolvedJavaType cloneable = metaAccess.lookupJavaType(Cloneable.class);
b05ad394cfd5 Add ResolvedJavaType.isAllocationClonable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23347
diff changeset
867 for (Class<?> c : classes) {
b05ad394cfd5 Add ResolvedJavaType.isAllocationClonable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23347
diff changeset
868 ResolvedJavaType type = metaAccess.lookupJavaType(c);
23373
802821d82a92 Rename isAllocationCloneable to isCloneableWithAllocation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23366
diff changeset
869 if (type.isCloneableWithAllocation()) {
23357
b05ad394cfd5 Add ResolvedJavaType.isAllocationClonable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23347
diff changeset
870 // Only Cloneable types should be allocation cloneable
b05ad394cfd5 Add ResolvedJavaType.isAllocationClonable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23347
diff changeset
871 assertTrue(c.toString(), cloneable.isAssignableFrom(type));
b05ad394cfd5 Add ResolvedJavaType.isAllocationClonable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23347
diff changeset
872 }
b05ad394cfd5 Add ResolvedJavaType.isAllocationClonable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23347
diff changeset
873 }
b05ad394cfd5 Add ResolvedJavaType.isAllocationClonable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23347
diff changeset
874 /*
b05ad394cfd5 Add ResolvedJavaType.isAllocationClonable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23347
diff changeset
875 * We can't know for sure which types should be allocation cloneable on a particular
b05ad394cfd5 Add ResolvedJavaType.isAllocationClonable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23347
diff changeset
876 * platform but assume that at least totally trivial objects should be.
b05ad394cfd5 Add ResolvedJavaType.isAllocationClonable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23347
diff changeset
877 */
b05ad394cfd5 Add ResolvedJavaType.isAllocationClonable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23347
diff changeset
878 ResolvedJavaType trivialCloneable = metaAccess.lookupJavaType(TrivialCloneable.class);
23373
802821d82a92 Rename isAllocationCloneable to isCloneableWithAllocation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23366
diff changeset
879 assertTrue(trivialCloneable.toString(), trivialCloneable.isCloneableWithAllocation());
23357
b05ad394cfd5 Add ResolvedJavaType.isAllocationClonable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23347
diff changeset
880 }
b05ad394cfd5 Add ResolvedJavaType.isAllocationClonable
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 23347
diff changeset
881
22033
547ae53182bf Add test for isLeaf
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22012
diff changeset
882 @Test
22012
53b4acee50f1 Add ResolvedJavaMethod.isSignaturePolymorphic and ResolvedJavaType.findMethod
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 22011
diff changeset
883 public void findMethodTest() {
53b4acee50f1 Add ResolvedJavaMethod.isSignaturePolymorphic and ResolvedJavaType.findMethod
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 22011
diff changeset
884 try {
53b4acee50f1 Add ResolvedJavaMethod.isSignaturePolymorphic and ResolvedJavaType.findMethod
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 22011
diff changeset
885 ResolvedJavaMethod findFoo = metaAccess.lookupJavaType(D.class).findMethod("foo", metaAccess.parseMethodDescriptor("()V"));
53b4acee50f1 Add ResolvedJavaMethod.isSignaturePolymorphic and ResolvedJavaType.findMethod
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 22011
diff changeset
886 ResolvedJavaMethod expectedFoo = metaAccess.lookupJavaMethod(D.class.getDeclaredMethod("foo"));
53b4acee50f1 Add ResolvedJavaMethod.isSignaturePolymorphic and ResolvedJavaType.findMethod
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 22011
diff changeset
887 assertEquals(expectedFoo, findFoo);
53b4acee50f1 Add ResolvedJavaMethod.isSignaturePolymorphic and ResolvedJavaType.findMethod
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 22011
diff changeset
888
53b4acee50f1 Add ResolvedJavaMethod.isSignaturePolymorphic and ResolvedJavaType.findMethod
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 22011
diff changeset
889 ResolvedJavaMethod wrongReturnTypeFoo = metaAccess.lookupJavaType(D.class).findMethod("foo", metaAccess.parseMethodDescriptor("()I"));
53b4acee50f1 Add ResolvedJavaMethod.isSignaturePolymorphic and ResolvedJavaType.findMethod
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 22011
diff changeset
890 assertNull(wrongReturnTypeFoo);
53b4acee50f1 Add ResolvedJavaMethod.isSignaturePolymorphic and ResolvedJavaType.findMethod
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 22011
diff changeset
891
53b4acee50f1 Add ResolvedJavaMethod.isSignaturePolymorphic and ResolvedJavaType.findMethod
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 22011
diff changeset
892 ResolvedJavaMethod wrongArgumentsFoo = metaAccess.lookupJavaType(D.class).findMethod("foo", metaAccess.parseMethodDescriptor("(I)V"));
53b4acee50f1 Add ResolvedJavaMethod.isSignaturePolymorphic and ResolvedJavaType.findMethod
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 22011
diff changeset
893 assertNull(wrongArgumentsFoo);
53b4acee50f1 Add ResolvedJavaMethod.isSignaturePolymorphic and ResolvedJavaType.findMethod
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 22011
diff changeset
894
53b4acee50f1 Add ResolvedJavaMethod.isSignaturePolymorphic and ResolvedJavaType.findMethod
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 22011
diff changeset
895 ResolvedJavaMethod wrongNameFoo = metaAccess.lookupJavaType(D.class).findMethod("bar", metaAccess.parseMethodDescriptor("()V"));
53b4acee50f1 Add ResolvedJavaMethod.isSignaturePolymorphic and ResolvedJavaType.findMethod
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 22011
diff changeset
896 assertNull(wrongNameFoo);
53b4acee50f1 Add ResolvedJavaMethod.isSignaturePolymorphic and ResolvedJavaType.findMethod
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 22011
diff changeset
897
53b4acee50f1 Add ResolvedJavaMethod.isSignaturePolymorphic and ResolvedJavaType.findMethod
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 22011
diff changeset
898 ResolvedJavaMethod wrongClassFoo = metaAccess.lookupJavaType(SubD.class).findMethod("foo", metaAccess.parseMethodDescriptor("()V"));
53b4acee50f1 Add ResolvedJavaMethod.isSignaturePolymorphic and ResolvedJavaType.findMethod
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 22011
diff changeset
899 assertNull(wrongClassFoo);
53b4acee50f1 Add ResolvedJavaMethod.isSignaturePolymorphic and ResolvedJavaType.findMethod
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 22011
diff changeset
900 } catch (NoSuchMethodException | SecurityException e) {
53b4acee50f1 Add ResolvedJavaMethod.isSignaturePolymorphic and ResolvedJavaType.findMethod
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 22011
diff changeset
901 throw new RuntimeException(e);
53b4acee50f1 Add ResolvedJavaMethod.isSignaturePolymorphic and ResolvedJavaType.findMethod
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 22011
diff changeset
902 }
53b4acee50f1 Add ResolvedJavaMethod.isSignaturePolymorphic and ResolvedJavaType.findMethod
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 22011
diff changeset
903 }
53b4acee50f1 Add ResolvedJavaMethod.isSignaturePolymorphic and ResolvedJavaType.findMethod
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 22011
diff changeset
904
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
905 private Method findTestMethod(Method apiMethod) {
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
906 String testName = apiMethod.getName() + "Test";
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
907 for (Method m : getClass().getDeclaredMethods()) {
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
908 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
909 return m;
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
910 }
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
911 }
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
912 return null;
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
913 }
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
914
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
915 // @formatter:off
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
916 private static final String[] untestedApiMethods = {
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
917 "initialize",
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
918 "isPrimitive",
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
919 "newArray",
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
920 "getDeclaredConstructors",
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
921 "isInitialized",
11520
7cca436d600b Add isLinked method to ResolvedJavaType
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 9806
diff changeset
922 "isLinked",
18361
6ac7e9c85be6 Split getEncoding into two methods.
Roland Schatz <roland.schatz@oracle.com>
parents: 18194
diff changeset
923 "getJavaClass",
6ac7e9c85be6 Split getEncoding into two methods.
Roland Schatz <roland.schatz@oracle.com>
parents: 18194
diff changeset
924 "getObjectHub",
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
925 "hasFinalizableSubclass",
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
926 "hasFinalizer",
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
927 "getSourceFileName",
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
928 "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
929 "isJavaLangObject",
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
930 "isMember",
16485
d6604020da93 removed com.oracle.graal.api.meta.jdk8.test project
Doug Simon <doug.simon@oracle.com>
parents: 15841
diff changeset
931 "getElementalType",
18694
ec1b0b097d82 Ignore $jacocoInit methods in coverage tests.
Roland Schatz <roland.schatz@oracle.com>
parents: 18533
diff changeset
932 "getEnclosingType",
ec1b0b097d82 Ignore $jacocoInit methods in coverage tests.
Roland Schatz <roland.schatz@oracle.com>
parents: 18533
diff changeset
933 "$jacocoInit"
9806
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
934 };
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
935 // @formatter:on
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
936
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
937 /**
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
938 * 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
939 * 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
940 */
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
941 @Test
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
942 public void testCoverage() {
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
943 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
944 for (Method m : ResolvedJavaType.class.getDeclaredMethods()) {
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
945 if (findTestMethod(m) == null) {
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
946 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
947 } else {
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
948 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
949 }
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
950 }
21b8cd853b2b cleaned up api.meta tests (GRAAL-59)
Doug Simon <doug.simon@oracle.com>
parents: 8959
diff changeset
951 }
24100
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
952
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
953 private static boolean isSignaturePolymorphic(ResolvedJavaMethod method) {
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
954 return method.getAnnotation(SIGNATURE_POLYMORPHIC_CLASS) != null;
839dcc4f2cf6 handle signature polymorphic methods correctly (JDK-8161550)
Doug Simon <doug.simon@oracle.com>
parents: 23749
diff changeset
955 }
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
956 }