< 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 >