8295058: test/langtools/tools/javac 116 test classes uses com.sun.tools.classfile library

Reviewed-by: asotona
This commit is contained in:
Qing Xiao 2023-08-07 15:49:11 +00:00 committed by Adam Sotona
parent 4726960fcd
commit 380418fad0
117 changed files with 2144 additions and 2011 deletions

View file

@ -28,7 +28,12 @@
* @library /tools/lib /tools/javac/lib ../lib
* @modules jdk.compiler/com.sun.tools.javac.api
* jdk.compiler/com.sun.tools.javac.main
* jdk.jdeps/com.sun.tools.classfile
* java.base/jdk.internal.classfile
* java.base/jdk.internal.classfile.attribute
* java.base/jdk.internal.classfile.constantpool
* java.base/jdk.internal.classfile.instruction
* java.base/jdk.internal.classfile.components
* java.base/jdk.internal.classfile.impl
* @build toolbox.ToolBox InMemoryFileManager TestResult TestBase
* @run main InnerClassesHierarchyTest
*/
@ -40,8 +45,9 @@ import java.lang.annotation.Annotation;
import java.util.*;
import java.util.stream.Collectors;
import com.sun.tools.classfile.*;
import com.sun.tools.classfile.InnerClasses_attribute.Info;
import jdk.internal.classfile.*;
import jdk.internal.classfile.attribute.*;
import jdk.internal.classfile.constantpool.*;
public class InnerClassesHierarchyTest extends TestResult {
@ -55,13 +61,12 @@ public class InnerClassesHierarchyTest extends TestResult {
FilenameFilter filter =
(dir, name) -> name.matches(outerClassName + ".*\\.class");
for (File file : Arrays.asList(classDir.listFiles(filter))) {
ClassFile classFile = readClassFile(file);
String className = classFile.getName();
for (ConstantPool.CPInfo info : classFile.constant_pool.entries()) {
if (info instanceof ConstantPool.CONSTANT_Class_info) {
ConstantPool.CONSTANT_Class_info classInfo =
(ConstantPool.CONSTANT_Class_info) info;
String cpClassName = classInfo.getBaseName();
ClassModel classFile = readClassFile(file);
String className = classFile.thisClass().name().stringValue();
for (int i = 1; i < classFile.constantPool().entryCount(); ++i) {
if (classFile.constantPool().entryByIndex(i) instanceof ClassEntry classInfo
&& classInfo.asSymbol().isClassOrInterface()) {
String cpClassName = classInfo.asInternalName();
if (isInnerClass(cpClassName)) {
get(className).add(cpClassName);
}
@ -96,9 +101,8 @@ public class InnerClassesHierarchyTest extends TestResult {
if (!currentClassName.startsWith(outerClassName)) {
continue;
}
ClassFile cf = readClassFile(currentClassName);
InnerClasses_attribute attr = (InnerClasses_attribute)
cf.getAttribute(Attribute.InnerClasses);
ClassModel cf = readClassFile(currentClassName);
InnerClassesAttribute attr = cf.findAttribute(Attributes.INNER_CLASSES).orElse(null);
checkNotNull(attr, "Class should not contain "
+ "inner classes attribute : " + currentClassName);
checkTrue(innerClasses.containsKey(currentClassName),
@ -107,12 +111,13 @@ public class InnerClassesHierarchyTest extends TestResult {
if (setClasses == null) {
continue;
}
checkEquals(attr.number_of_classes,
checkEquals(attr.classes().size(),
setClasses.size(),
"Check number of inner classes : " + setClasses);
for (Info info : attr.classes) {
for (InnerClassInfo info : attr.classes()) {
if (!info.innerClass().asSymbol().isClassOrInterface()) continue;
String innerClassName = info
.getInnerClassInfo(cf.constant_pool).getBaseName();
.innerClass().asInternalName();
checkTrue(setClasses.contains(innerClassName),
currentClassName + " contains inner class : "
+ innerClassName);