< prev index next >

test/hotspot/jtreg/compiler/jvmci/jdk.vm.ci.runtime.test/src/jdk/vm/ci/runtime/test/TestResolvedJavaType.java

Print this page
rev 58565 : 8238358: Implementation of JEP 371: Hidden Classes
Reviewed-by: duke
Contributed-by: mandy.chung@oracle.com, lois.foltan@oracle.com, david.holmes@oracle.com, harold.seigel@oracle.com, serguei.spitsyn@oracle.com, alex.buckley@oracle.com, jamsheed.c.m@oracle.com

*** 1,7 **** /* ! * Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 2012, 2020, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 23,33 **** /** * @test * @requires vm.jvmci * @library ../../../../../ ! * @modules java.base/jdk.internal.reflect * jdk.internal.vm.ci/jdk.vm.ci.meta * jdk.internal.vm.ci/jdk.vm.ci.runtime * jdk.internal.vm.ci/jdk.vm.ci.common * java.base/jdk.internal.misc * @run junit/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -XX:-UseJVMCICompiler jdk.vm.ci.runtime.test.TestResolvedJavaType --- 23,34 ---- /** * @test * @requires vm.jvmci * @library ../../../../../ ! * @modules java.base/jdk.internal.org.objectweb.asm ! * java.base/jdk.internal.reflect * jdk.internal.vm.ci/jdk.vm.ci.meta * jdk.internal.vm.ci/jdk.vm.ci.runtime * jdk.internal.vm.ci/jdk.vm.ci.common * java.base/jdk.internal.misc * @run junit/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -XX:-UseJVMCICompiler jdk.vm.ci.runtime.test.TestResolvedJavaType
*** 63,72 **** --- 64,74 ---- import java.util.Map; import java.util.Set; import org.junit.Test; + import jdk.internal.org.objectweb.asm.*; import jdk.internal.reflect.ConstantPool; import jdk.vm.ci.common.JVMCIError; import jdk.vm.ci.meta.Assumptions.AssumptionResult; import jdk.vm.ci.meta.JavaConstant; import jdk.vm.ci.meta.JavaKind;
*** 154,172 **** boolean actual = type.isArray(); assertEquals(expected, actual); } } @Test ! public void getHostClassTest() { ! for (Class<?> c : classes) { ! ResolvedJavaType type = metaAccess.lookupJavaType(c); ResolvedJavaType host = type.getHostClass(); - if (!type.equals(predicateType)) { - assertNull(host); - } else { assertNotNull(host); } } class LocalClass {} Cloneable clone = new Cloneable() {}; --- 156,185 ---- boolean actual = type.isArray(); assertEquals(expected, actual); } } + private static Class<?> anonClass() throws Exception { + ClassWriter cw = new ClassWriter(0); + cw.visit(Opcodes.V1_8, Opcodes.ACC_FINAL + Opcodes.ACC_SUPER, "Anon", null, "java/lang/Object", null); + FieldVisitor intField = cw.visitField(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, "intField", "I", null, 0); + intField.visitEnd(); + cw.visitEnd(); + return unsafe.defineAnonymousClass(TypeUniverse.class, cw.toByteArray(), null); + } + @Test ! public void getHostClassTest() throws Exception { ! ResolvedJavaType type = metaAccess.lookupJavaType(anonClass()); ResolvedJavaType host = type.getHostClass(); assertNotNull(host); + for (Class<?> c : classes) { + type = metaAccess.lookupJavaType(c); + host = type.getHostClass(); + assertNull(host); + if (type.equals(predicateType)) { + assertTrue(c.isHiddenClass()); } } class LocalClass {} Cloneable clone = new Cloneable() {};
*** 174,186 **** assertNull(metaAccess.lookupJavaType(clone.getClass()).getHostClass()); Supplier<Runnable> lambda = () -> () -> System.out.println("run"); ResolvedJavaType lambdaType = metaAccess.lookupJavaType(lambda.getClass()); ResolvedJavaType nestedLambdaType = metaAccess.lookupJavaType(lambda.get().getClass()); ! assertNotNull(lambdaType.getHostClass()); ! assertNotNull(nestedLambdaType.getHostClass()); ! assertEquals(lambdaType.getHostClass(), nestedLambdaType.getHostClass()); } @Test public void getModifiersTest() { for (Class<?> c : classes) { --- 187,200 ---- assertNull(metaAccess.lookupJavaType(clone.getClass()).getHostClass()); Supplier<Runnable> lambda = () -> () -> System.out.println("run"); ResolvedJavaType lambdaType = metaAccess.lookupJavaType(lambda.getClass()); ResolvedJavaType nestedLambdaType = metaAccess.lookupJavaType(lambda.get().getClass()); ! assertNull(lambdaType.getHostClass()); ! assertTrue(lambda.getClass().isHiddenClass()); ! assertNull(nestedLambdaType.getHostClass()); ! assertTrue(lambda.get().getClass().isHiddenClass()); } @Test public void getModifiersTest() { for (Class<?> c : classes) {
*** 764,775 **** return true; } if (f.getDeclaringClass().equals(metaAccess.lookupJavaType(ConstantPool.class)) && f.getName().equals("constantPoolOop")) { return true; } ! if (f.getDeclaringClass().equals(metaAccess.lookupJavaType(Class.class)) && f.getName().equals("classLoader")) { ! return true; } if (f.getDeclaringClass().equals(metaAccess.lookupJavaType(Lookup.class))) { return f.getName().equals("allowedModes") || f.getName().equals("lookupClass"); } if (f.getDeclaringClass().equals(metaAccess.lookupJavaType(ClassLoader.class)) || --- 778,789 ---- return true; } if (f.getDeclaringClass().equals(metaAccess.lookupJavaType(ConstantPool.class)) && f.getName().equals("constantPoolOop")) { return true; } ! if (f.getDeclaringClass().equals(metaAccess.lookupJavaType(Class.class))) { ! return f.getName().equals("classLoader") || f.getName().equals("classData"); } if (f.getDeclaringClass().equals(metaAccess.lookupJavaType(Lookup.class))) { return f.getName().equals("allowedModes") || f.getName().equals("lookupClass"); } if (f.getDeclaringClass().equals(metaAccess.lookupJavaType(ClassLoader.class)) ||
< prev index next >