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


Java StaticSlot.getType方法代码示例

本文整理汇总了Java中com.google.javascript.rhino.jstype.StaticSlot.getType方法的典型用法代码示例。如果您正苦于以下问题:Java StaticSlot.getType方法的具体用法?Java StaticSlot.getType怎么用?Java StaticSlot.getType使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在com.google.javascript.rhino.jstype.StaticSlot的用法示例。


在下文中一共展示了StaticSlot.getType方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: diffSlots

import com.google.javascript.rhino.jstype.StaticSlot; //导入方法依赖的package包/类
/**
 * Determines whether two slots are meaningfully different for the
 * purposes of data flow analysis.
 */
private boolean diffSlots(StaticSlot<JSType> slotA,
                          StaticSlot<JSType> slotB) {
  boolean aIsNull = slotA == null || slotA.getType() == null;
  boolean bIsNull = slotB == null || slotB.getType() == null;
  if (aIsNull && bIsNull) {
    return false;
  } else if (aIsNull ^ bIsNull) {
    return true;
  }

  // Both slots must be non-null.
  JSType aType = slotA.getType();
  JSType bType = slotB.getType();
  if (aType.isNoType() || bType.isNoType()) {
    return false;
  }

  // Both types must be non-null.
  return aType.differsFrom(bType);
}
 
开发者ID:andyjko,项目名称:feedlack,代码行数:25,代码来源:LinkedFlowScope.java

示例2: getTypeIfRefinable

import com.google.javascript.rhino.jstype.StaticSlot; //导入方法依赖的package包/类
/**
 * Returns the type of a node in the given scope if the node corresponds to a
 * name whose type is capable of being refined.
 * @return The current type of the node if it can be refined, null otherwise.
 */
JSType getTypeIfRefinable(Node node, FlowScope scope) {
  switch (node.getType()) {
    case Token.NAME:
      StaticSlot<JSType> nameVar = scope.getSlot(node.getString());
      if (nameVar != null) {
        JSType nameVarType = nameVar.getType();
        if (nameVarType == null) {
          nameVarType = node.getJSType();
        }
        return nameVarType;
      }
      return null;

    case Token.GETPROP:
      String qualifiedName = node.getQualifiedName();
      if (qualifiedName == null) {
        return null;
      }
      StaticSlot<JSType> propVar = scope.getSlot(qualifiedName);
      JSType propVarType = null;
      if (propVar != null) {
        propVarType = propVar.getType();
      }
      if (propVarType == null) {
        propVarType = node.getJSType();
      }
      if (propVarType == null) {
        propVarType = getNativeType(UNKNOWN_TYPE);
      }
      return propVarType;
  }
  return null;
}
 
开发者ID:andyjko,项目名称:feedlack,代码行数:39,代码来源:ChainableReverseAbstractInterpreter.java

示例3: traverseName

import com.google.javascript.rhino.jstype.StaticSlot; //导入方法依赖的package包/类
private FlowScope traverseName(Node n, FlowScope scope) {
  String varName = n.getString();
  Node value = n.getFirstChild();
  JSType type = n.getJSType();
  if (value != null) {
    scope = traverse(value, scope);
    updateScopeForTypeChange(scope, n, n.getJSType() /* could be null */,
        getJSType(value));
    return scope;
  } else {
    StaticSlot<JSType> var = scope.getSlot(varName);
    if (var != null) {
      // There are two situations where we don't want to use type information
      // from the scope, even if we have it.

      // 1) The var is escaped in a weird way, e.g.,
      // function f() { var x = 3; function g() { x = null } (x); }
      boolean isInferred = var.isTypeInferred();
      boolean unflowable =
          isInferred && unflowableVarNames.contains(varName);

      // 2) We're reading type information from another scope for an
      // inferred variable.
      // var t = null; function f() { (t); }
      boolean nonLocalInferredSlot =
          isInferred &&
          syntacticScope.getParent() != null &&
          var == syntacticScope.getParent().getSlot(varName);

      if (!unflowable && !nonLocalInferredSlot) {
        type = var.getType();
        if (type == null) {
          type = getNativeType(UNKNOWN_TYPE);
        }
      }
    }
  }
  n.setJSType(type);
  return scope;
}
 
开发者ID:andyjko,项目名称:feedlack,代码行数:41,代码来源:TypeInference.java

示例4: getPropertyType

import com.google.javascript.rhino.jstype.StaticSlot; //导入方法依赖的package包/类
private JSType getPropertyType(JSType objType, String propName,
    Node n, FlowScope scope) {
  // Scopes sometimes contain inferred type info about qualified names.
  String qualifiedName = n.getQualifiedName();
  StaticSlot<JSType> var = scope.getSlot(qualifiedName);
  if (var != null) {
    JSType varType = var.getType();
    if (varType != null) {
      if (varType.equals(getNativeType(UNKNOWN_TYPE)) &&
          var != syntacticScope.getSlot(qualifiedName)) {
        // If the type of this qualified name has been checked in this scope,
        // then use CHECKED_UNKNOWN_TYPE instead to indicate that.
        return getNativeType(CHECKED_UNKNOWN_TYPE);
      } else {
        return varType;
      }
    }
  }

  JSType propertyType = null;
  if (objType != null) {
    propertyType = objType.findPropertyType(propName);
  }

  if ((propertyType == null || propertyType.isUnknownType()) &&
      qualifiedName != null) {
    // If we find this node in the registry, then we can infer its type.
    ObjectType regType = ObjectType.cast(registry.getType(qualifiedName));
    if (regType != null) {
      propertyType = regType.getConstructor();
    }
  }

  return propertyType;
}
 
开发者ID:andyjko,项目名称:feedlack,代码行数:36,代码来源:TypeInference.java

示例5: getType

import com.google.javascript.rhino.jstype.StaticSlot; //导入方法依赖的package包/类
private JSType getType(String name) {
  assertTrue("The return scope should not be null.", returnScope != null);
  StaticSlot<JSType> var = returnScope.getSlot(name);
  assertTrue("The variable " + name + " is missing from the scope.",
      var != null);
  return var.getType();
}
 
开发者ID:andyjko,项目名称:feedlack,代码行数:8,代码来源:TypeInferenceTest.java

示例6: expectInterfaceProperty

import com.google.javascript.rhino.jstype.StaticSlot; //导入方法依赖的package包/类
/**
 * Expect that the property in an interface that this type implements is
 * implemented and correctly typed.
 */
private void expectInterfaceProperty(NodeTraversal t, Node n,
    ObjectType instance, ObjectType implementedInterface, String prop) {
  StaticSlot<JSType> propSlot = instance.getSlot(prop);
  if (propSlot == null) {
    // Not implemented
    String sourceName = n.getSourceFileName();
    sourceName = sourceName == null ? "" : sourceName;
    registerMismatch(instance, implementedInterface,
        report(JSError.make(sourceName, n,
        INTERFACE_METHOD_NOT_IMPLEMENTED,
        prop, implementedInterface.toString(), instance.toString())));
  } else {
    Node propNode = propSlot.getDeclaration() == null ?
        null : propSlot.getDeclaration().getNode();

    // Fall back on the constructor node if we can't find a node for the
    // property.
    propNode = propNode == null ? n : propNode;

    JSType found = propSlot.getType();
    JSType required
        = implementedInterface.getImplicitPrototype().getPropertyType(prop);
    found = found.restrictByNotNullOrUndefined();
    required = required.restrictByNotNullOrUndefined();
    if (!found.isSubtype(required)) {
      // Implemented, but not correctly typed
      FunctionType constructor =
          implementedInterface.toObjectType().getConstructor();
      registerMismatch(found, required, report(t.makeError(propNode,
          HIDDEN_INTERFACE_PROPERTY_MISMATCH, prop,
          constructor.getTopMostDefiningType(prop).toString(),
          required.toString(), found.toString())));
    }
  }
}
 
开发者ID:SpoonLabs,项目名称:astor,代码行数:40,代码来源:TypeValidator.java

示例7: diffSlots

import com.google.javascript.rhino.jstype.StaticSlot; //导入方法依赖的package包/类
/**
 * Determines whether two slots are meaningfully different for the
 * purposes of data flow analysis.
 */
private boolean diffSlots(StaticSlot<JSType> slotA,
                          StaticSlot<JSType> slotB) {
  boolean aIsNull = slotA == null || slotA.getType() == null;
  boolean bIsNull = slotB == null || slotB.getType() == null;
  if (aIsNull && bIsNull) {
    return false;
  } else if (aIsNull ^ bIsNull) {
    return true;
  }

  // Both slots and types must be non-null.
  return slotA.getType().differsFrom(slotB.getType());
}
 
开发者ID:SpoonLabs,项目名称:astor,代码行数:18,代码来源:LinkedFlowScope.java

示例8: getTypeIfRefinable

import com.google.javascript.rhino.jstype.StaticSlot; //导入方法依赖的package包/类
/**
 * Returns the type of a node in the given scope if the node corresponds to a
 * name whose type is capable of being refined.
 * @return The current type of the node if it can be refined, null otherwise.
 */
protected JSType getTypeIfRefinable(Node node, FlowScope scope) {
  switch (node.getType()) {
    case Token.NAME:
      StaticSlot<JSType> nameVar = scope.getSlot(node.getString());
      if (nameVar != null) {
        JSType nameVarType = nameVar.getType();
        if (nameVarType == null) {
          nameVarType = node.getJSType();
        }
        return nameVarType;
      }
      return null;

    case Token.GETPROP:
      String qualifiedName = node.getQualifiedName();
      if (qualifiedName == null) {
        return null;
      }
      StaticSlot<JSType> propVar = scope.getSlot(qualifiedName);
      JSType propVarType = null;
      if (propVar != null) {
        propVarType = propVar.getType();
      }
      if (propVarType == null) {
        propVarType = node.getJSType();
      }
      if (propVarType == null) {
        propVarType = getNativeType(UNKNOWN_TYPE);
      }
      return propVarType;
  }
  return null;
}
 
开发者ID:SpoonLabs,项目名称:astor,代码行数:39,代码来源:ChainableReverseAbstractInterpreter.java

示例9: diffSlots

import com.google.javascript.rhino.jstype.StaticSlot; //导入方法依赖的package包/类
/**
 * Determines whether two slots are meaningfully different for the
 * purposes of data flow analysis.
 */
private static boolean diffSlots(StaticSlot<JSType> slotA,
                                 StaticSlot<JSType> slotB) {
  boolean aIsNull = slotA == null || slotA.getType() == null;
  boolean bIsNull = slotB == null || slotB.getType() == null;
  if (aIsNull && bIsNull) {
    return false;
  } else if (aIsNull ^ bIsNull) {
    return true;
  }

  // Both slots and types must be non-null.
  return slotA.getType().differsFrom(slotB.getType());
}
 
开发者ID:nicks,项目名称:closure-compiler-old,代码行数:18,代码来源:LinkedFlowScope.java

示例10: traverseName

import com.google.javascript.rhino.jstype.StaticSlot; //导入方法依赖的package包/类
private FlowScope traverseName(Node n, FlowScope scope) {
  String varName = n.getString();
  Node value = n.getFirstChild();
  JSType type = n.getJSType();
  if (value != null) {
    scope = traverse(value, scope);
    updateScopeForTypeChange(scope, n, n.getJSType() /* could be null */,
        getJSType(value));
    return scope;
  } else {
    StaticSlot<JSType> var = scope.getSlot(varName);
    if (var != null) {
      // There are two situations where we don't want to use type information
      // from the scope, even if we have it.

      // 1) The var is escaped and assigned in an inner scope, e.g.,
      // function f() { var x = 3; function g() { x = null } (x); }
      boolean isInferred = var.isTypeInferred();
      boolean unflowable = isInferred &&
          isUnflowable(syntacticScope.getVar(varName));

      // 2) We're reading type information from another scope for an
      // inferred variable. That variable is assigned more than once,
      // and we can't know which type we're getting.
      //
      // var t = null; function f() { (t); } doStuff(); t = {};
      //
      // Notice that this heuristic isn't perfect. For example, you might
      // have:
      //
      // function f() { (t); } f(); var t = 3;
      //
      // In this case, we would infer the first reference to t as
      // type {number}, even though it's undefined.
      boolean nonLocalInferredSlot = false;
      if (isInferred && syntacticScope.isLocal()) {
        Var maybeOuterVar = syntacticScope.getParent().getVar(varName);
        if (var == maybeOuterVar &&
            !maybeOuterVar.isMarkedAssignedExactlyOnce()) {
          nonLocalInferredSlot = true;
        }
      }

      if (!unflowable && !nonLocalInferredSlot) {
        type = var.getType();
        if (type == null) {
          type = unknownType;
        }
      }
    }
  }
  n.setJSType(type);
  return scope;
}
 
开发者ID:SpoonLabs,项目名称:astor,代码行数:55,代码来源:TypeInference.java

示例11: getPropertyType

import com.google.javascript.rhino.jstype.StaticSlot; //导入方法依赖的package包/类
private JSType getPropertyType(JSType objType, String propName,
    Node n, FlowScope scope) {
  // We often have a couple of different types to choose from for the
  // property. Ordered by accuracy, we have
  // 1) A locally inferred qualified name (which is in the FlowScope)
  // 2) A globally declared qualified name (which is in the FlowScope)
  // 3) A property on the owner type (which is on objType)
  // 4) A name in the type registry (as a last resort)
  JSType propertyType = null;
  boolean isLocallyInferred = false;

  // Scopes sometimes contain inferred type info about qualified names.
  String qualifiedName = n.getQualifiedName();
  StaticSlot<JSType> var = scope.getSlot(qualifiedName);
  if (var != null) {
    JSType varType = var.getType();
    if (varType != null) {
      boolean isDeclared = !var.isTypeInferred();
      isLocallyInferred = (var != syntacticScope.getSlot(qualifiedName));
      if (isDeclared || isLocallyInferred) {
        propertyType = varType;
      }
    }
  }

  if (propertyType == null && objType != null) {
    JSType foundType = objType.findPropertyType(propName);
    if (foundType != null) {
      propertyType = foundType;
    }
  }

  if ((propertyType == null || propertyType.isUnknownType())
      && qualifiedName != null) {
    // If we find this node in the registry, then we can infer its type.
    ObjectType regType = ObjectType.cast(registry.getType(qualifiedName));
    if (regType != null) {
      propertyType = regType.getConstructor();
    }
  }

  if (propertyType == null) {
    return unknownType;
  } else if (propertyType.isEquivalentTo(unknownType) && isLocallyInferred) {
    // If the type has been checked in this scope,
    // then use CHECKED_UNKNOWN_TYPE instead to indicate that.
    return getNativeType(CHECKED_UNKNOWN_TYPE);
  } else {
    return propertyType;
  }
}
 
开发者ID:SpoonLabs,项目名称:astor,代码行数:52,代码来源:TypeInference.java

示例12: expectInterfaceProperty

import com.google.javascript.rhino.jstype.StaticSlot; //导入方法依赖的package包/类
/**
 * Expect that the property in an interface that this type implements is
 * implemented and correctly typed.
 */
private void expectInterfaceProperty(NodeTraversal t, Node n,
    ObjectType instance, ObjectType implementedInterface, String prop) {
  StaticSlot<JSType> propSlot = instance.getSlot(prop);
  if (propSlot == null) {
    // Not implemented
    String sourceName = n.getSourceFileName();
    sourceName = sourceName == null ? "" : sourceName;
    registerMismatch(instance, implementedInterface,
        report(JSError.make(sourceName, n,
        INTERFACE_METHOD_NOT_IMPLEMENTED,
        prop, implementedInterface.toString(), instance.toString())));
  } else {
    Node propNode = propSlot.getDeclaration() == null ?
        null : propSlot.getDeclaration().getNode();

    // Fall back on the constructor node if we can't find a node for the
    // property.
    propNode = propNode == null ? n : propNode;

    JSType found = propSlot.getType();
    found = found.restrictByNotNullOrUndefined();

    JSType required
        = implementedInterface.getImplicitPrototype().getPropertyType(prop);
    TemplateTypeMap typeMap = implementedInterface.getTemplateTypeMap();
    if (!typeMap.isEmpty()) {
      TemplateTypeMapReplacer replacer = new TemplateTypeMapReplacer(
          typeRegistry, typeMap);
      required = required.visit(replacer);
    }
    required = required.restrictByNotNullOrUndefined();

    if (!found.isSubtype(required)) {
      // Implemented, but not correctly typed
      FunctionType constructor =
          implementedInterface.toObjectType().getConstructor();
      registerMismatch(found, required, report(t.makeError(propNode,
          HIDDEN_INTERFACE_PROPERTY_MISMATCH, prop,
          constructor.getTopMostDefiningType(prop).toString(),
          required.toString(), found.toString())));
    }
  }
}
 
开发者ID:nicks,项目名称:closure-compiler-old,代码行数:48,代码来源:TypeValidator.java

示例13: getPropertyType

import com.google.javascript.rhino.jstype.StaticSlot; //导入方法依赖的package包/类
private JSType getPropertyType(JSType objType, String propName,
    Node n, FlowScope scope) {
  // We often have a couple of different types to choose from for the
  // property. Ordered by accuracy, we have
  // 1) A locally inferred qualified name (which is in the FlowScope)
  // 2) A globally declared qualified name (which is in the FlowScope)
  // 3) A property on the owner type (which is on objType)
  // 4) A name in the type registry (as a last resort)
  JSType propertyType = null;
  boolean isLocallyInferred = false;

  // Scopes sometimes contain inferred type info about qualified names.
  String qualifiedName = n.getQualifiedName();
  StaticSlot<JSType> var = scope.getSlot(qualifiedName);
  if (var != null) {
    JSType varType = var.getType();
    if (varType != null) {
      boolean isDeclared = !var.isTypeInferred();
      isLocallyInferred = (var != syntacticScope.getSlot(qualifiedName));
      if (isDeclared || isLocallyInferred) {
        propertyType = varType;
      }
    }
  }

  if (propertyType == null && objType != null) {
    JSType foundType = objType.findPropertyType(propName);
    if (foundType != null) {
      propertyType = foundType;
    }
  }

  if (propertyType != null && objType != null) {
    JSType restrictedObjType = objType.restrictByNotNullOrUndefined();
    if (!restrictedObjType.getTemplateTypeMap().isEmpty()
        && propertyType.hasAnyTemplateTypes()) {
      TemplateTypeMap typeMap = restrictedObjType.getTemplateTypeMap();
      TemplateTypeMapReplacer replacer = new TemplateTypeMapReplacer(
          registry, typeMap);
      propertyType = propertyType.visit(replacer);
    }
  }

  if ((propertyType == null || propertyType.isUnknownType())
      && qualifiedName != null) {
    // If we find this node in the registry, then we can infer its type.
    ObjectType regType = ObjectType.cast(registry.getType(qualifiedName));
    if (regType != null) {
      propertyType = regType.getConstructor();
    }
  }

  if (propertyType == null) {
    return unknownType;
  } else if (propertyType.isEquivalentTo(unknownType) && isLocallyInferred) {
    // If the type has been checked in this scope,
    // then use CHECKED_UNKNOWN_TYPE instead to indicate that.
    return getNativeType(CHECKED_UNKNOWN_TYPE);
  } else {
    return propertyType;
  }
}
 
开发者ID:nicks,项目名称:closure-compiler-old,代码行数:63,代码来源:TypeInference.java


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