< prev index next >
test/testlibrary/jittester/src/jdk/test/lib/jittester/TypesParser.java
Print this page
@@ -40,11 +40,10 @@
import java.util.Set;
import jdk.test.lib.Asserts;
import jdk.test.lib.jittester.functions.FunctionInfo;
import jdk.test.lib.jittester.types.TypeArray;
import jdk.test.lib.jittester.types.TypeKlass;
-import jdk.test.lib.jittester.types.TypeVoid;
/**
* Class used for parsing included classes file and excluded methods file
*/
public class TypesParser {
@@ -60,11 +59,11 @@
* @param exMethodsFileName - name of the excluded method file
*/
public static void parseTypesAndMethods(String klassesFileName, String exMethodsFileName) {
Asserts.assertNotNull(klassesFileName, "Classes input file name is null");
Asserts.assertFalse(klassesFileName.isEmpty(), "Classes input file name is empty");
- Set<Class<?>> klasses = parseKlasses(klassesFileName);
+ List<Class<?>> klasses = parseKlasses(klassesFileName);
Set<Executable> methodsToExclude;
if (exMethodsFileName != null && !exMethodsFileName.isEmpty()) {
methodsToExclude = parseMethods(exMethodsFileName);
} else {
methodsToExclude = new HashSet<>();
@@ -117,33 +116,40 @@
if (type != null) {
return type;
}
if (klass.isPrimitive()) {
if (klass.equals(void.class)) {
- type = new TypeVoid();
+ type = TypeList.VOID;
} else {
type = TypeList.find(klass.getName());
}
} else {
int flags = getKlassFlags(klass);
if (klass.isArray()) {
- TypeKlass elementType
- = new TypeKlass(klass.getCanonicalName().replaceAll("\\[\\]", ""), flags);
+ Class<?> elementKlass = klass.getComponentType();
+ while (elementKlass.isArray()) {
+ elementKlass = elementKlass.getComponentType();
+ }
+ Type elementType = getType(elementKlass);
int dim = getArrayClassDimension(klass);
type = new TypeArray(elementType, dim);
} else {
String canonicalName = klass.getCanonicalName();
if (!"java.lang.Object".equals(canonicalName)) {
flags |= TypeKlass.FINAL;
}
type = new TypeKlass(canonicalName, flags);
}
Class<?> parentKlass = klass.getSuperclass();
+ TypeKlass typeKlass = (TypeKlass) type;
if (parentKlass != null) {
TypeKlass parentTypeKlass = (TypeKlass) getType(parentKlass);
- ((TypeKlass) type).addParent(parentTypeKlass.getName());
- ((TypeKlass) type).setParent(parentTypeKlass);
+ typeKlass.addParent(parentTypeKlass.getName());
+ typeKlass.setParent(parentTypeKlass);
+ }
+ for (Class<?> iface : klass.getInterfaces()) {
+ typeKlass.addParent(getType(iface).getName());
}
}
TYPE_CACHE.put(klass, type);
return type;
}
@@ -195,38 +201,38 @@
flags |= FunctionInfo.SYNCHRONIZED;
}
return flags;
}
- private static Set<Class<?>> parseKlasses(String klassesFileName) {
+ private static List<Class<?>> parseKlasses(String klassesFileName) {
Asserts.assertNotNull(klassesFileName, "Classes input file name is null");
Asserts.assertFalse(klassesFileName.isEmpty(), "Classes input file name is empty");
- Set<String> klassNamesSet = new HashSet<>();
+ List<String> klassNamesList = new ArrayList<>();
Path klassesFilePath = (new File(klassesFileName)).toPath();
try {
Files.lines(klassesFilePath).forEach(line -> {
line = line.trim();
if (line.isEmpty()) {
return;
}
String msg = String.format("Format of the classes input file \"%s\" is incorrect,"
+ " line \"%s\" has wrong format", klassesFileName, line);
Asserts.assertTrue(line.matches("\\w[\\w\\.$]*"), msg);
- klassNamesSet.add(line.replaceAll(";", ""));
+ klassNamesList.add(line.replaceAll(";", ""));
});
} catch (IOException ex) {
throw new Error("Error reading klasses file", ex);
}
- Set<Class<?>> klassesSet = new HashSet<>();
- klassNamesSet.stream().forEach(klassName -> {
+ List<Class<?>> klassesList = new ArrayList<>();
+ klassNamesList.stream().forEach(klassName -> {
try {
- klassesSet.add(Class.forName(klassName));
+ klassesList.add(Class.forName(klassName));
} catch (ClassNotFoundException ex) {
throw new Error("Unexpected exception while parsing klasses file", ex);
}
});
- return klassesSet;
+ return klassesList;
}
private static Set<Executable> parseMethods(String methodsFileName) {
Asserts.assertNotNull(methodsFileName, "Methods exclude input file name is null");
Asserts.assertFalse(methodsFileName.isEmpty(), "Methods exclude input file name is empty");
< prev index next >