com.sun.tools.javac.code.Types.union()方法的使用及代码示例

x33g5p2x  于2022-01-30 转载在 其他  
字(8.2k)|赞(0)|评价(0)|浏览(106)

本文整理了Java中com.sun.tools.javac.code.Types.union()方法的一些代码示例,展示了Types.union()的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Types.union()方法的具体详情如下:
包路径:com.sun.tools.javac.code.Types
类名称:Types
方法名:union

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);
  }
};

相关文章

Types类方法