< prev index next >
test/testlibrary/jittester/src/jdk/test/lib/jittester/types/TypeKlass.java
Print this page
*** 31,58 ****
import jdk.test.lib.jittester.SymbolTable;
import jdk.test.lib.jittester.Type;
import jdk.test.lib.jittester.TypeList;
public class TypeKlass extends Type {
!
! private TypeKlass parent;
! private HashSet<String> parentsList;
! private HashSet<String> childrenList;
private final HashSet<Symbol> symbolsSet;
public static final int NONE = 0x00;
public static final int FINAL = 0x01;
public static final int INTERFACE = 0x02;
public static final int ABSTRACT = 0x04;
! private int flags = NONE;
public TypeKlass(String name) {
! this(name, 0);
}
public TypeKlass(String name, int flags) {
super(name);
this.flags = flags;
symbolsSet = new HashSet<>();
}
public boolean addSymbol(Symbol s) {
return symbolsSet.add(s);
--- 31,61 ----
import jdk.test.lib.jittester.SymbolTable;
import jdk.test.lib.jittester.Type;
import jdk.test.lib.jittester.TypeList;
public class TypeKlass extends Type {
! private TypeKlass parentKlass;
! private final HashSet<String> parentsList;
! private final HashSet<String> childrenList;
private final HashSet<Symbol> symbolsSet;
+ private int flags;
+
public static final int NONE = 0x00;
public static final int FINAL = 0x01;
public static final int INTERFACE = 0x02;
public static final int ABSTRACT = 0x04;
!
public TypeKlass(String name) {
! this(name, NONE);
}
public TypeKlass(String name, int flags) {
super(name);
this.flags = flags;
+ parentsList = new HashSet<>();
+ childrenList = new HashSet<>();
symbolsSet = new HashSet<>();
}
public boolean addSymbol(Symbol s) {
return symbolsSet.add(s);
*** 74,117 ****
return symbolsSet.removeAll(symbols);
}
@Override
protected void exportSymbols() {
! symbolsSet.stream().forEach(symbol -> {
! SymbolTable.add(symbol);
! });
}
public void setParent(TypeKlass p) {
! parent = p;
}
public void addParent(String p) {
- if (parentsList == null) {
- parentsList = new HashSet<>();
- }
parentsList.add(p);
}
public void addChild(String c) {
- if (childrenList == null) {
- childrenList = new HashSet<>();
- }
childrenList.add(c);
}
protected void removeParent(String p) {
- if (parentsList != null) {
parentsList.remove(p);
}
- }
protected void removeChild(String c) {
- if (childrenList != null) {
childrenList.remove(c);
}
- }
public HashSet<String> getParentsNames() {
return parentsList;
}
--- 77,108 ----
return symbolsSet.removeAll(symbols);
}
@Override
protected void exportSymbols() {
! symbolsSet.stream().forEach(SymbolTable::add);
}
public void setParent(TypeKlass p) {
! parentKlass = p;
}
public void addParent(String p) {
parentsList.add(p);
}
public void addChild(String c) {
childrenList.add(c);
}
protected void removeParent(String p) {
parentsList.remove(p);
}
protected void removeChild(String c) {
childrenList.remove(c);
}
public HashSet<String> getParentsNames() {
return parentsList;
}
*** 129,169 ****
return true;
}
public TreeSet<TypeKlass> getAllParents() {
TreeSet<TypeKlass> result = new TreeSet<>();
! if (parentsList != null) {
! for (String parentName : parentsList) {
! Type _parentKlass = TypeList.find(new TypeKlass(parentName));
! if (_parentKlass != null) {
! try {
! TypeKlass parentKlass = (TypeKlass) _parentKlass;
result.add(parentKlass);
result.addAll(parentKlass.getAllParents());
! } catch (Exception e) {
! }
! }
! }
! }
return result;
}
public TreeSet<TypeKlass> getAllChildren() {
TreeSet<TypeKlass> r = new TreeSet<>();
! if (childrenList != null) {
! for (String childName : childrenList) {
! Type _childKlass = TypeList.find(new TypeKlass(childName));
! if (_childKlass != null) {
! try {
! TypeKlass childKlass = (TypeKlass) _childKlass;
r.add(childKlass);
r.addAll(childKlass.getAllChildren());
! } catch (Exception e) {
! }
! }
! }
! }
return r;
}
@Override
public boolean canImplicitlyCastTo(Type t) {
--- 120,150 ----
return true;
}
public TreeSet<TypeKlass> getAllParents() {
TreeSet<TypeKlass> result = new TreeSet<>();
! parentsList.stream()
! .map(TypeList::find)
! .filter(parentKlass -> parentKlass != null)
! .map(parentKlass -> (TypeKlass) parentKlass)
! .forEach(parentKlass -> {
result.add(parentKlass);
result.addAll(parentKlass.getAllParents());
! });
return result;
}
public TreeSet<TypeKlass> getAllChildren() {
TreeSet<TypeKlass> r = new TreeSet<>();
! childrenList.stream()
! .map(TypeList::find)
! .filter(childKlass -> childKlass != null)
! .map(childKlass -> (TypeKlass) childKlass)
! .forEach(childKlass -> {
r.add(childKlass);
r.addAll(childKlass.getAllChildren());
! });
return r;
}
@Override
public boolean canImplicitlyCastTo(Type t) {
*** 177,188 ****
// If canExplicitlyCastTo() returns true in this case it doesn't mean that
// it would really be successful. Since explicit casts are inherintly dynamic
// we cannot guarantee that no exception will occur.
@Override
public boolean canExplicitlyCastTo(Type t) {
if (t instanceof TypeKlass && !ProductionParams.disableDowncasts.value()) {
! return equals(t) || getAllChildren().contains(t);
}
return false;
}
--- 158,172 ----
// If canExplicitlyCastTo() returns true in this case it doesn't mean that
// it would really be successful. Since explicit casts are inherintly dynamic
// we cannot guarantee that no exception will occur.
@Override
public boolean canExplicitlyCastTo(Type t) {
+ if (equals(t)) {
+ return true;
+ }
if (t instanceof TypeKlass && !ProductionParams.disableDowncasts.value()) {
! return getAllChildren().contains(t);
}
return false;
}
*** 203,208 ****
--- 187,196 ----
}
public boolean isInterface() {
return (flags & INTERFACE) > 0;
}
+
+ public TypeKlass getParent() {
+ return parentKlass;
+ }
}
< prev index next >