mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 14:54:52 +02:00
8295058: test/langtools/tools/javac 116 test classes uses com.sun.tools.classfile library
Reviewed-by: asotona
This commit is contained in:
parent
4726960fcd
commit
380418fad0
117 changed files with 2144 additions and 2011 deletions
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue