< prev index next >
test/testlibrary/jittester/src/jdk/test/lib/jittester/TypesParser.java
Print this page
*** 40,50 ****
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 {
--- 40,49 ----
*** 60,70 ****
* @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);
Set<Executable> methodsToExclude;
if (exMethodsFileName != null && !exMethodsFileName.isEmpty()) {
methodsToExclude = parseMethods(exMethodsFileName);
} else {
methodsToExclude = new HashSet<>();
--- 59,69 ----
* @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");
! List<Class<?>> klasses = parseKlasses(klassesFileName);
Set<Executable> methodsToExclude;
if (exMethodsFileName != null && !exMethodsFileName.isEmpty()) {
methodsToExclude = parseMethods(exMethodsFileName);
} else {
methodsToExclude = new HashSet<>();
*** 117,149 ****
if (type != null) {
return type;
}
if (klass.isPrimitive()) {
if (klass.equals(void.class)) {
! type = new TypeVoid();
} else {
type = TypeList.find(klass.getName());
}
} else {
int flags = getKlassFlags(klass);
if (klass.isArray()) {
! TypeKlass elementType
! = new TypeKlass(klass.getCanonicalName().replaceAll("\\[\\]", ""), flags);
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();
if (parentKlass != null) {
TypeKlass parentTypeKlass = (TypeKlass) getType(parentKlass);
! ((TypeKlass) type).addParent(parentTypeKlass.getName());
! ((TypeKlass) type).setParent(parentTypeKlass);
}
}
TYPE_CACHE.put(klass, type);
return type;
}
--- 116,155 ----
if (type != null) {
return type;
}
if (klass.isPrimitive()) {
if (klass.equals(void.class)) {
! type = TypeList.VOID;
} else {
type = TypeList.find(klass.getName());
}
} else {
int flags = getKlassFlags(klass);
if (klass.isArray()) {
! 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.addParent(parentTypeKlass.getName());
! typeKlass.setParent(parentTypeKlass);
! }
! for (Class<?> iface : klass.getInterfaces()) {
! typeKlass.addParent(getType(iface).getName());
}
}
TYPE_CACHE.put(klass, type);
return type;
}
*** 195,232 ****
flags |= FunctionInfo.SYNCHRONIZED;
}
return flags;
}
! private static Set<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<>();
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(";", ""));
});
} catch (IOException ex) {
throw new Error("Error reading klasses file", ex);
}
! Set<Class<?>> klassesSet = new HashSet<>();
! klassNamesSet.stream().forEach(klassName -> {
try {
! klassesSet.add(Class.forName(klassName));
} catch (ClassNotFoundException ex) {
throw new Error("Unexpected exception while parsing klasses file", ex);
}
});
! return klassesSet;
}
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");
--- 201,238 ----
flags |= FunctionInfo.SYNCHRONIZED;
}
return flags;
}
! 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");
! 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);
! klassNamesList.add(line.replaceAll(";", ""));
});
} catch (IOException ex) {
throw new Error("Error reading klasses file", ex);
}
! List<Class<?>> klassesList = new ArrayList<>();
! klassNamesList.stream().forEach(klassName -> {
try {
! klassesList.add(Class.forName(klassName));
} catch (ClassNotFoundException ex) {
throw new Error("Unexpected exception while parsing klasses file", ex);
}
});
! 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 >