2929 * @library ../common/patches
3030 * @modules java.base/jdk.internal.access
3131 * @modules jdk.internal.vm.ci/jdk.vm.ci.hotspot
32+ * jdk.internal.vm.ci/jdk.vm.ci.runtime
33+ * jdk.internal.vm.ci/jdk.vm.ci.meta
3234 * @build jdk.internal.vm.ci/jdk.vm.ci.hotspot.CompilerToVMHelper
3335 * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI
3436 * -XX:-UseJVMCICompiler
4345import jdk .test .lib .Asserts ;
4446import jdk .test .lib .Utils ;
4547import jdk .vm .ci .hotspot .CompilerToVMHelper ;
48+ import jdk .vm .ci .hotspot .HotSpotJVMCIRuntime ;
4649import jdk .vm .ci .hotspot .HotSpotResolvedObjectType ;
50+ import jdk .vm .ci .meta .MetaAccessProvider ;
51+ import jdk .vm .ci .meta .ResolvedJavaType ;
4752
48- import java .util .HashSet ;
49- import java .util .Set ;
53+ import java .io .ByteArrayOutputStream ;
54+ import java .io .CharArrayWriter ;
55+ import java .io .PrintStream ;
56+ import java .util .ArrayList ;
57+ import java .util .List ;
5058
5159public class LookupTypeTest {
60+
61+ /**
62+ * Abstracts which lookup method is being tested.
63+ */
64+ public interface Lookup {
65+ ResolvedJavaType lookupType (String name , Class <?> accessingClass , boolean resolve );
66+ }
67+
5268 public static void main (String args []) {
5369 LookupTypeTest test = new LookupTypeTest ();
54- for (TestCase tcase : createTestCases ()) {
55- test .runTest (tcase );
70+
71+ // Test CompilerToVM.lookupType
72+ for (TestCase tcase : createTestCases (false , true )) {
73+ test .runTest (tcase , CompilerToVMHelper ::lookupType );
74+ }
75+
76+ // Test HotSpotJVMCIRuntime.lookupType
77+ HotSpotJVMCIRuntime runtime = HotSpotJVMCIRuntime .runtime ();
78+ MetaAccessProvider metaAccess = runtime .getHostJVMCIBackend ().getMetaAccess ();
79+ for (TestCase tcase : createTestCases (true , false )) {
80+ test .runTest (tcase , (name , accessingClass , resolve ) -> (ResolvedJavaType ) runtime .lookupType (name ,
81+ (HotSpotResolvedObjectType ) metaAccess .lookupJavaType (accessingClass ), resolve ));
5682 }
5783 }
5884
59- private static Set <TestCase > createTestCases () {
60- Set <TestCase > result = new HashSet <>();
85+ private static List <TestCase > createTestCases (boolean allowPrimitive , boolean allowNullAccessingClass ) {
86+ List <TestCase > result = new ArrayList <>();
6187 // a primitive class
62- result .add (new TestCase (Utils .toJVMTypeSignature (int .class ),
88+ if (allowPrimitive ) {
89+ result .add (new TestCase (Utils .toJVMTypeSignature (int .class ),
90+ LookupTypeTest .class , true , true ));
91+ } else {
92+ result .add (new TestCase (Utils .toJVMTypeSignature (int .class ),
6393 LookupTypeTest .class , true , false , InternalError .class ));
94+ }
6495 // lookup not existing class
6596 result .add (new TestCase ("Lsome_not_existing;" , LookupTypeTest .class ,
66- true , false , ClassNotFoundException .class ));
97+ true , false , NoClassDefFoundError .class ));
6798 // lookup invalid classname
6899 result .add (new TestCase ("L!@#$%^&**()[]{}?;" , LookupTypeTest .class ,
69- true , false , ClassNotFoundException .class ));
100+ true , false , NoClassDefFoundError .class ));
70101 // lookup package private class
71102 result .add (new TestCase (
72103 "Lcompiler/jvmci/compilerToVM/testcases/PackagePrivateClass;" ,
73104 LookupTypeTest .class , true , false ,
74- ClassNotFoundException .class ));
105+ NoClassDefFoundError .class ));
75106 // lookup usual class with resolve=true
76107 result .add (new TestCase (Utils .toJVMTypeSignature (SingleSubclass .class ),
77108 LookupTypeTest .class , true , true ));
@@ -80,25 +111,30 @@ private static Set<TestCase> createTestCases() {
80111 Utils .toJVMTypeSignature (DoNotExtendClass .class ),
81112 LookupTypeTest .class , false , true ));
82113 // lookup usual class with null accessor
83- result .add (new TestCase (
114+ if (allowNullAccessingClass ) {
115+ result .add (new TestCase (
84116 Utils .toJVMTypeSignature (MultiSubclassedClass .class ), null ,
85117 false , false , NullPointerException .class ));
118+ }
86119 return result ;
87120 }
88121
89- private void runTest (TestCase tcase ) {
122+ private void runTest (TestCase tcase , Lookup lookup ) {
90123 System .out .println (tcase );
91- HotSpotResolvedObjectType metaspaceKlass ;
124+ ResolvedJavaType metaspaceKlass ;
92125 try {
93- metaspaceKlass = CompilerToVMHelper .lookupType (tcase .className ,
126+ metaspaceKlass = lookup .lookupType (tcase .className ,
94127 tcase .accessing , tcase .resolve );
95128 } catch (Throwable t ) {
129+ ByteArrayOutputStream bos = new ByteArrayOutputStream ();
130+ t .printStackTrace (new PrintStream (bos ));
131+ String tString = bos .toString ();
96132 Asserts .assertNotNull (tcase .expectedException ,
97- "Assumed no exception, but got " + t );
133+ "Assumed no exception, but got " + tString );
98134 Asserts .assertFalse (tcase .isPositive ,
99- "Got unexpected exception " + t );
135+ "Got unexpected exception " + tString );
100136 Asserts .assertEQ (t .getClass (), tcase .expectedException ,
101- "Unexpected exception" );
137+ "Unexpected exception: " + tString );
102138 // passed
103139 return ;
104140 }
0 commit comments