本文整理了Java中com.sun.tools.javac.code.Types.union()
方法的一些代码示例,展示了Types.union()
的具体用法。这些代码示例主要来源于Github
/Stackoverflow
/Maven
等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Types.union()
方法的具体详情如下:
包路径:com.sun.tools.javac.code.Types
类名称:Types
方法名:union
[英]Form the union of two closures
[中]形成两个闭包的并集
代码示例来源:origin: konsoletyper/teavm-javac
/**
* Form the union of two closures
*/
public List<Type> union(List<Type> cl1, List<Type> cl2) {
if (cl1.isEmpty()) {
return cl2;
} else if (cl2.isEmpty()) {
return cl1;
} else if (cl1.head.tsym == cl2.head.tsym) {
return union(cl1.tail, cl2.tail).prepend(cl1.head);
} else if (cl1.head.tsym.precedes(cl2.head.tsym, this)) {
return union(cl1.tail, cl2).prepend(cl1.head);
} else if (cl2.head.tsym.precedes(cl1.head.tsym, this)) {
return union(cl1, cl2.tail).prepend(cl2.head);
} else {
// unrelated types
return union(cl1.tail, cl2).prepend(cl1.head);
}
}
代码示例来源:origin: org.jvnet.sorcerer/sorcerer-javac
/**
* Form the union of two closures
*/
public List<Type> union(List<Type> cl1, List<Type> cl2) {
if (cl1.isEmpty()) {
return cl2;
} else if (cl2.isEmpty()) {
return cl1;
} else if (cl1.head.tsym.precedes(cl2.head.tsym, this)) {
return union(cl1.tail, cl2).prepend(cl1.head);
} else if (cl2.head.tsym.precedes(cl1.head.tsym, this)) {
return union(cl1, cl2.tail).prepend(cl2.head);
} else {
return union(cl1.tail, cl2.tail).prepend(cl1.head);
}
}
代码示例来源:origin: org.kohsuke.sorcerer/sorcerer-javac
/**
* Form the union of two closures
*/
public List<Type> union(List<Type> cl1, List<Type> cl2) {
if (cl1.isEmpty()) {
return cl2;
} else if (cl2.isEmpty()) {
return cl1;
} else if (cl1.head.tsym.precedes(cl2.head.tsym, this)) {
return union(cl1.tail, cl2).prepend(cl1.head);
} else if (cl2.head.tsym.precedes(cl1.head.tsym, this)) {
return union(cl1, cl2.tail).prepend(cl2.head);
} else {
return union(cl1.tail, cl2.tail).prepend(cl1.head);
}
}
代码示例来源:origin: sc.fiji/javac
/**
* Form the union of two closures
*/
public List<Type> union(List<Type> cl1, List<Type> cl2) {
if (cl1.isEmpty()) {
return cl2;
} else if (cl2.isEmpty()) {
return cl1;
} else if (cl1.head.tsym.precedes(cl2.head.tsym, this)) {
return union(cl1.tail, cl2).prepend(cl1.head);
} else if (cl2.head.tsym.precedes(cl1.head.tsym, this)) {
return union(cl1, cl2.tail).prepend(cl2.head);
} else {
return union(cl1.tail, cl2.tail).prepend(cl1.head);
}
}
代码示例来源:origin: org.jvnet.sorcerer/sorcerer-javac
private List<Type> superClosure(Type t, Type s) {
List<Type> cl = List.nil();
for (List<Type> l = interfaces(t); l.nonEmpty(); l = l.tail) {
if (isSubtype(s, erasure(l.head))) {
cl = insert(cl, l.head);
} else {
cl = union(cl, superClosure(l.head, s));
}
}
return cl;
}
代码示例来源:origin: org.kohsuke.sorcerer/sorcerer-javac
private List<Type> superClosure(Type t, Type s) {
List<Type> cl = List.nil();
for (List<Type> l = interfaces(t); l.nonEmpty(); l = l.tail) {
if (isSubtype(s, erasure(l.head))) {
cl = insert(cl, l.head);
} else {
cl = union(cl, superClosure(l.head, s));
}
}
return cl;
}
代码示例来源:origin: konsoletyper/teavm-javac
public Type glb(Type t, Type s) {
if (s == null)
return t;
else if (t.isPrimitive() || s.isPrimitive())
return syms.errType;
else if (isSubtypeNoCapture(t, s))
return t;
else if (isSubtypeNoCapture(s, t))
return s;
List<Type> closure = union(closure(t), closure(s));
return glbFlattened(closure, t);
}
//where
代码示例来源:origin: sc.fiji/javac
private List<Type> superClosure(Type t, Type s) {
List<Type> cl = List.nil();
for (List<Type> l = interfaces(t); l.nonEmpty(); l = l.tail) {
if (isSubtype(s, erasure(l.head))) {
cl = insert(cl, l.head);
} else {
cl = union(cl, superClosure(l.head, s));
}
}
return cl;
}
代码示例来源:origin: konsoletyper/teavm-javac
private List<Type> superClosure(Type t, Type s) {
List<Type> cl = List.nil();
for (List<Type> l = interfaces(t); l.nonEmpty(); l = l.tail) {
if (isSubtype(s, erasure(l.head))) {
cl = insert(cl, l.head);
} else {
cl = union(cl, superClosure(l.head, s));
}
}
return cl;
}
代码示例来源:origin: org.jvnet.sorcerer/sorcerer-javac
/**
* Returns the closure of a class or interface type.
*/
public List<Type> closure(Type t) {
List<Type> cl = closureCache.get(t);
if (cl == null) {
Type st = supertype(t);
if (!t.isCompound()) {
if (st.tag == CLASS) {
cl = insert(closure(st), t);
} else if (st.tag == TYPEVAR) {
cl = closure(st).prepend(t);
} else {
cl = List.of(t);
}
} else {
cl = closure(supertype(t));
}
for (List<Type> l = interfaces(t); l.nonEmpty(); l = l.tail)
cl = union(cl, closure(l.head));
closureCache.put(t, cl);
}
return cl;
}
代码示例来源:origin: sc.fiji/javac
/**
* Returns the closure of a class or interface type.
*/
public List<Type> closure(Type t) {
List<Type> cl = closureCache.get(t);
if (cl == null) {
Type st = supertype(t);
if (!t.isCompound()) {
if (st.tag == CLASS) {
cl = insert(closure(st), t);
} else if (st.tag == TYPEVAR) {
cl = closure(st).prepend(t);
} else {
cl = List.of(t);
}
} else {
cl = closure(supertype(t));
}
for (List<Type> l = interfaces(t); l.nonEmpty(); l = l.tail)
cl = union(cl, closure(l.head));
closureCache.put(t, cl);
}
return cl;
}
代码示例来源:origin: org.kohsuke.sorcerer/sorcerer-javac
/**
* Returns the closure of a class or interface type.
*/
public List<Type> closure(Type t) {
List<Type> cl = closureCache.get(t);
if (cl == null) {
Type st = supertype(t);
if (!t.isCompound()) {
if (st.hasTag(CLASS)) {
cl = insert(closure(st), t);
} else if (st.hasTag(TYPEVAR)) {
cl = closure(st).prepend(t);
} else {
cl = List.of(t);
}
} else {
cl = closure(supertype(t));
}
for (List<Type> l = interfaces(t); l.nonEmpty(); l = l.tail)
cl = union(cl, closure(l.head));
closureCache.put(t, cl);
}
return cl;
}
代码示例来源:origin: konsoletyper/teavm-javac
/**
* Returns the closure of a class or interface type.
*/
public List<Type> closure(Type t) {
List<Type> cl = closureCache.get(t);
if (cl == null) {
Type st = supertype(t);
if (!t.isCompound()) {
if (st.hasTag(CLASS)) {
cl = insert(closure(st), t);
} else if (st.hasTag(TYPEVAR)) {
cl = closure(st).prepend(t);
} else {
cl = List.of(t);
}
} else {
cl = closure(supertype(t));
}
for (List<Type> l = interfaces(t); l.nonEmpty(); l = l.tail)
cl = union(cl, closure(l.head));
closureCache.put(t, cl);
}
return cl;
}
代码示例来源:origin: sc.fiji/javac
public Type glb(Type t, Type s) {
if (s == null)
return t;
else if (isSubtypeNoCapture(t, s))
return t;
else if (isSubtypeNoCapture(s, t))
return s;
List<Type> closure = union(closure(t), closure(s));
List<Type> bounds = closureMin(closure);
if (bounds.isEmpty()) { // length == 0
return syms.objectType;
} else if (bounds.tail.isEmpty()) { // length == 1
return bounds.head;
} else { // length > 1
int classCount = 0;
for (Type bound : bounds)
if (!bound.isInterface())
classCount++;
if (classCount > 1)
return syms.errType;
}
return makeCompoundType(bounds);
}
// </editor-fold>
代码示例来源:origin: org.jvnet.sorcerer/sorcerer-javac
public Type glb(Type t, Type s) {
if (s == null)
return t;
else if (isSubtypeNoCapture(t, s))
return t;
else if (isSubtypeNoCapture(s, t))
return s;
List<Type> closure = union(closure(t), closure(s));
List<Type> bounds = closureMin(closure);
if (bounds.isEmpty()) { // length == 0
return syms.objectType;
} else if (bounds.tail.isEmpty()) { // length == 1
return bounds.head;
} else { // length > 1
int classCount = 0;
for (Type bound : bounds)
if (!bound.isInterface())
classCount++;
if (classCount > 1)
return syms.errType;
}
return makeCompoundType(bounds);
}
// </editor-fold>
代码示例来源:origin: org.kohsuke.sorcerer/sorcerer-javac
public Type glb(Type t, Type s) {
if (s == null)
return t;
else if (t.isPrimitive() || s.isPrimitive())
return syms.errType;
else if (isSubtypeNoCapture(t, s))
return t;
else if (isSubtypeNoCapture(s, t))
return s;
List<Type> closure = union(closure(t), closure(s));
List<Type> bounds = closureMin(closure);
if (bounds.isEmpty()) { // length == 0
return syms.objectType;
} else if (bounds.tail.isEmpty()) { // length == 1
return bounds.head;
} else { // length > 1
int classCount = 0;
for (Type bound : bounds)
if (!bound.isInterface())
classCount++;
if (classCount > 1)
return createErrorType(t);
}
return makeCompoundType(bounds);
}
// </editor-fold>
代码示例来源:origin: konsoletyper/teavm-javac
return createErrorType(errT);
else
return glbFlattened(union(bounds, lowers), errT);
代码示例来源:origin: org.kohsuke.sorcerer/sorcerer-javac
class LookupFilter implements Filter<Symbol> {
boolean abstractOk;
LookupFilter(boolean abstractOk) {
this.abstractOk = abstractOk;
}
public boolean accepts(Symbol s) {
long flags = s.flags();
return s.kind == MTH &&
(flags & SYNTHETIC) == 0 &&
(abstractOk ||
(flags & DEFAULT) != 0 ||
(flags & ABSTRACT) == 0);
}
};
代码示例来源:origin: konsoletyper/teavm-javac
class LookupFilter implements Filter<Symbol> {
boolean abstractOk;
LookupFilter(boolean abstractOk) {
this.abstractOk = abstractOk;
}
public boolean accepts(Symbol s) {
long flags = s.flags();
return s.kind == MTH &&
(flags & SYNTHETIC) == 0 &&
(abstractOk ||
(flags & DEFAULT) != 0 ||
(flags & ABSTRACT) == 0);
}
};
内容来源于网络,如有侵权,请联系作者删除!