当前位置: 首页>>代码示例>>Java>>正文


Java ConstraintKind类代码示例

本文整理汇总了Java中com.sun.tools.javac.code.Type.ForAll.ConstraintKind的典型用法代码示例。如果您正苦于以下问题:Java ConstraintKind类的具体用法?Java ConstraintKind怎么用?Java ConstraintKind使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。


ConstraintKind类属于com.sun.tools.javac.code.Type.ForAll包,在下文中一共展示了ConstraintKind类的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: instantiateExpr

import com.sun.tools.javac.code.Type.ForAll.ConstraintKind; //导入依赖的package包/类
/** Try to instantiate expression type `that' to given type `to'.
 *  If a maximal instantiation exists which makes this type
 *  a subtype of type `to', return the instantiated type.
 *  If no instantiation exists, or if several incomparable
 *  best instantiations exist throw a NoInstanceException.
 */
public Type instantiateExpr(ForAll that,
                            Type to,
                            Warner warn) throws InferenceException {
    List<Type> undetvars = Type.map(that.tvars, fromTypeVarFun);
    for (List<Type> l = undetvars; l.nonEmpty(); l = l.tail) {
        UndetVar uv = (UndetVar) l.head;
        TypeVar tv = (TypeVar)uv.qtype;
        ListBuffer<Type> hibounds = new ListBuffer<Type>();
        for (Type t : that.getConstraints(tv, ConstraintKind.EXTENDS)) {
            hibounds.append(types.subst(t, that.tvars, undetvars));
        }

        List<Type> inst = that.getConstraints(tv, ConstraintKind.EQUAL);
        if (inst.nonEmpty() && inst.head.tag != BOT) {
            uv.inst = inst.head;
        }
        uv.hibounds = hibounds.toList();
    }
    Type qtype1 = types.subst(that.qtype, that.tvars, undetvars);
    if (!types.isSubtype(qtype1,
            qtype1.tag == UNDETVAR ? types.boxedTypeOrType(to) : to)) {
        throw unambiguousNoInstanceException
            .setMessage("infer.no.conforming.instance.exists",
                        that.tvars, that.qtype, to);
    }
    for (List<Type> l = undetvars; l.nonEmpty(); l = l.tail)
        maximizeInst((UndetVar) l.head, warn);
    // System.out.println(" = " + qtype1.map(getInstFun));//DEBUG

    // check bounds
    List<Type> targs = Type.map(undetvars, getInstFun);
    if (Type.containsAny(targs, that.tvars)) {
        //replace uninferred type-vars
        targs = types.subst(targs,
                that.tvars,
                instantiateAsUninferredVars(undetvars, that.tvars));
    }
    return chk.checkType(warn.pos(), that.inst(targs, types), to);
}
 
开发者ID:tranleduy2000,项目名称:javaide,代码行数:46,代码来源:Infer.java

示例2: instantiateExpr

import com.sun.tools.javac.code.Type.ForAll.ConstraintKind; //导入依赖的package包/类
/** Try to instantiate expression type `that' to given type `to'.
 *  If a maximal instantiation exists which makes this type
 *  a subtype of type `to', return the instantiated type.
 *  If no instantiation exists, or if several incomparable
 *  best instantiations exist throw a NoInstanceException.
 */
public Type instantiateExpr(ForAll that,
                            Type to,
                            Warner warn) throws InferenceException {
    List<Type> undetvars = Type.map(that.tvars, fromTypeVarFun);
    for (List<Type> l = undetvars; l.nonEmpty(); l = l.tail) {
        UndetVar uv = (UndetVar) l.head;
        TypeVar tv = (TypeVar)uv.qtype;
        ListBuffer<Type> hibounds = new ListBuffer<Type>();
        for (Type t : that.getConstraints(tv, ConstraintKind.EXTENDS)) {
            hibounds.append(types.subst(t, that.tvars, undetvars));
        }

        List<Type> inst = that.getConstraints(tv, ConstraintKind.EQUAL);
        if (inst.nonEmpty() && inst.head.tag != BOT) {
            uv.inst = inst.head;
        }
        uv.hibounds = hibounds.toList();
    }
    Type qtype1 = types.subst(that.qtype, that.tvars, undetvars);
    if (!types.isSubtype(qtype1,
            qtype1.tag == UNDETVAR ? types.boxedTypeOrType(to) : to)) {
        throw unambiguousNoInstanceException
            .setMessage("infer.no.conforming.instance.exists",
                        that.tvars, that.qtype, to);
    }
    for (List<Type> l = undetvars; l.nonEmpty(); l = l.tail)
        maximizeInst((UndetVar) l.head, warn);
    // System.out.println(" = " + qtype1.map(getInstFun));//DEBUG

    // check bounds
    List<Type> targs = Type.map(undetvars, getInstFun);
    if (Type.containsAny(targs, that.tvars)) {
        //replace uninferred type-vars
        targs = types.subst(targs,
                that.tvars,
                instaniateAsUninferredVars(undetvars, that.tvars));
    }
    return chk.checkType(warn.pos(), that.inst(targs, types), to);
}
 
开发者ID:aducode,项目名称:openjdk-source-code-learn,代码行数:46,代码来源:Infer.java

示例3: getConstraints

import com.sun.tools.javac.code.Type.ForAll.ConstraintKind; //导入依赖的package包/类
@Override
public List<Type> getConstraints(TypeVar tv, ConstraintKind ck) {
    return UninferredMethodType.this.getConstraints(tv, ck);
}
 
开发者ID:tranleduy2000,项目名称:javaide,代码行数:5,代码来源:Infer.java


注:本文中的com.sun.tools.javac.code.Type.ForAll.ConstraintKind类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。