Java Code Examples for com.google.javascript.rhino.JSDocInfo#getLendsName()

The following examples show how to use com.google.javascript.rhino.JSDocInfo#getLendsName() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: Closure_48_TypedScopeCreator_t.java    From coming with MIT License 4 votes vote down vote up
private void defineObjectLiteral(NodeTraversal t, Node objectLit) {
  // Handle the @lends annotation.
  JSType type = null;
  JSDocInfo info = objectLit.getJSDocInfo();
  if (info != null &&
      info.getLendsName() != null) {
    String lendsName = info.getLendsName();
    Var lendsVar = scope.getVar(lendsName);
    if (lendsVar == null) {
      compiler.report(
          JSError.make(sourceName, objectLit, UNKNOWN_LENDS, lendsName));
    } else {
      type = lendsVar.getType();
      if (type == null) {
        type = typeRegistry.getNativeType(UNKNOWN_TYPE);
      }
      if (!type.isSubtype(typeRegistry.getNativeType(OBJECT_TYPE))) {
        compiler.report(
            JSError.make(sourceName, objectLit, LENDS_ON_NON_OBJECT,
                lendsName, type.toString()));
        type = null;
      } else {
        objectLit.setJSType(type);
      }
    }
  }

  info = NodeUtil.getBestJSDocInfo(objectLit);
  Node lValue = NodeUtil.getBestLValue(objectLit);
  String lValueName = NodeUtil.getBestLValueName(lValue);
  boolean createdEnumType = false;
  if (info != null && info.hasEnumParameterType()) {
    type = createEnumTypeFromNodes(objectLit, lValueName, info, lValue);
    createdEnumType = true;
  }

  if (type == null) {
    type = typeRegistry.createAnonymousObjectType();
  }

  setDeferredType(objectLit, type);

  // If this is an enum, the properties were already taken care of above.
  processObjectLitProperties(
      t, objectLit, ObjectType.cast(objectLit.getJSType()), !createdEnumType);
}
 
Example 2
Source File: TypedScopeCreator.java    From astor with GNU General Public License v2.0 4 votes vote down vote up
private void defineObjectLiteral(Node objectLit) {
  // Handle the @lends annotation.
  JSType type = null;
  JSDocInfo info = objectLit.getJSDocInfo();
  if (info != null && info.getLendsName() != null) {
    String lendsName = info.getLendsName();
    Var lendsVar = scope.getVar(lendsName);
    if (lendsVar == null) {
      compiler.report(
          JSError.make(sourceName, objectLit, UNKNOWN_LENDS, lendsName));
    } else {
      type = lendsVar.getType();
      if (type == null) {
        type = unknownType;
      }
      if (!type.isSubtype(typeRegistry.getNativeType(OBJECT_TYPE))) {
        compiler.report(
            JSError.make(sourceName, objectLit, LENDS_ON_NON_OBJECT,
                lendsName, type.toString()));
        type = null;
      } else {
        objectLit.setJSType(type);
      }
    }
  }

  info = NodeUtil.getBestJSDocInfo(objectLit);
  Node lValue = NodeUtil.getBestLValue(objectLit);
  String lValueName = NodeUtil.getBestLValueName(lValue);
  boolean createdEnumType = false;
  if (info != null && info.hasEnumParameterType()) {
    type = createEnumTypeFromNodes(objectLit, lValueName, info, lValue);
    createdEnumType = true;
  }

  if (type == null) {
    type = typeRegistry.createAnonymousObjectType(info);
  }

  setDeferredType(objectLit, type);

  // If this is an enum, the properties were already taken care of above.
  processObjectLitProperties(
      objectLit, ObjectType.cast(objectLit.getJSType()), !createdEnumType);
}
 
Example 3
Source File: TypedScopeCreator.java    From astor with GNU General Public License v2.0 4 votes vote down vote up
private void attachLiteralTypes(NodeTraversal t, Node n) {
  switch (n.getType()) {
    case Token.NULL:
      n.setJSType(getNativeType(NULL_TYPE));
      break;

    case Token.VOID:
      n.setJSType(getNativeType(VOID_TYPE));
      break;

    case Token.STRING:
      n.setJSType(getNativeType(STRING_TYPE));
      break;

    case Token.NUMBER:
      n.setJSType(getNativeType(NUMBER_TYPE));
      break;

    case Token.TRUE:
    case Token.FALSE:
      n.setJSType(getNativeType(BOOLEAN_TYPE));
      break;

    case Token.REGEXP:
      n.setJSType(getNativeType(REGEXP_TYPE));
      break;

    case Token.OBJECTLIT:
      JSDocInfo info = n.getJSDocInfo();
      if (info != null &&
          info.getLendsName() != null) {
        if (lentObjectLiterals == null) {
          lentObjectLiterals = Lists.newArrayList();
        }
        lentObjectLiterals.add(n);
      } else {
        defineObjectLiteral(n);
      }
      break;

      // NOTE(nicksantos): If we ever support Array tuples,
      // we will need to put ARRAYLIT here as well.
  }
}
 
Example 4
Source File: Closure_91_CheckGlobalThis_t.java    From coming with MIT License 4 votes vote down vote up
/**
 * Since this pass reports errors only when a global {@code this} keyword
 * is encountered, there is no reason to traverse non global contexts.
 */
public boolean shouldTraverse(NodeTraversal t, Node n, Node parent) {

  if (n.getType() == Token.FUNCTION) {
    // Don't traverse functions that are constructors or have the @this
    // or @override annotation.
    JSDocInfo jsDoc = getFunctionJsDocInfo(n);
    if (jsDoc != null &&
        (jsDoc.isConstructor() ||
         jsDoc.isInterface() ||
         jsDoc.hasThisType() ||
         jsDoc.isOverride())) {
      return false;
    }

    // Don't traverse functions unless they would normally
    // be able to have a @this annotation associated with them. e.g.,
    // var a = function() { }; // or
    // function a() {} // or
    // a.x = function() {}; // or
    // var a = {x: function() {}};
    int pType = parent.getType();
    if (!(pType == Token.BLOCK ||
          pType == Token.SCRIPT ||
          pType == Token.NAME ||
          pType == Token.ASSIGN ||

          // object literal keys
          pType == Token.STRING ||
          pType == Token.NUMBER)) {
      return false;
    }

    // Don't traverse functions that are getting lent to a prototype.
    Node gramps = parent.getParent();
    if (NodeUtil.isObjectLitKey(parent, gramps)) {
      JSDocInfo maybeLends = gramps.getJSDocInfo();
      if (maybeLends != null &&
          maybeLends.getLendsName() != null &&
          maybeLends.getLendsName().endsWith(".prototype")) {
        return false;
      }
    }
  }

  if (parent != null && parent.getType() == Token.ASSIGN) {
    Node lhs = parent.getFirstChild();
    Node rhs = lhs.getNext();

    if (n == lhs) {
      // Always traverse the left side of the assignment. To handle
      // nested assignments properly (e.g., (a = this).property = c;),
      // assignLhsChild should not be overridden.
      if (assignLhsChild == null) {
        assignLhsChild = lhs;
      }
    } else {
      // Only traverse the right side if it's not an assignment to a prototype
      // property or subproperty.
      if (NodeUtil.isGet(lhs)) {
        if (lhs.getType() == Token.GETPROP &&
            lhs.getLastChild().getString().equals("prototype")) {
          return false;
        }
        Node llhs = lhs.getFirstChild();
        if (llhs.getType() == Token.GETPROP &&
            llhs.getLastChild().getString().equals("prototype")) {
          return false;
        }
      }
    }
  }

  return true;
}
 
Example 5
Source File: Closure_54_TypedScopeCreator_t.java    From coming with MIT License 4 votes vote down vote up
private void defineObjectLiteral(NodeTraversal t, Node objectLit) {
  // Handle the @lends annotation.
  JSType type = null;
  JSDocInfo info = objectLit.getJSDocInfo();
  if (info != null &&
      info.getLendsName() != null) {
    String lendsName = info.getLendsName();
    Var lendsVar = scope.getVar(lendsName);
    if (lendsVar == null) {
      compiler.report(
          JSError.make(sourceName, objectLit, UNKNOWN_LENDS, lendsName));
    } else {
      type = lendsVar.getType();
      if (type == null) {
        type = typeRegistry.getNativeType(UNKNOWN_TYPE);
      }
      if (!type.isSubtype(typeRegistry.getNativeType(OBJECT_TYPE))) {
        compiler.report(
            JSError.make(sourceName, objectLit, LENDS_ON_NON_OBJECT,
                lendsName, type.toString()));
        type = null;
      } else {
        objectLit.setJSType(type);
      }
    }
  }

  info = NodeUtil.getBestJSDocInfo(objectLit);
  Node lValue = NodeUtil.getBestLValue(objectLit);
  String lValueName = NodeUtil.getBestLValueName(lValue);
  boolean createdEnumType = false;
  if (info != null && info.hasEnumParameterType()) {
    type = createEnumTypeFromNodes(objectLit, lValueName, info, lValue);
    createdEnumType = true;
  }

  if (type == null) {
    type = typeRegistry.createAnonymousObjectType();
  }

  setDeferredType(objectLit, type);

  // If this is an enum, the properties were already taken care of above.
  if (!createdEnumType) {
    processObjectLitProperties(
        t, objectLit, ObjectType.cast(objectLit.getJSType()));
  }
}
 
Example 6
Source File: Closure_54_TypedScopeCreator_s.java    From coming with MIT License 4 votes vote down vote up
private void defineObjectLiteral(NodeTraversal t, Node objectLit) {
  // Handle the @lends annotation.
  JSType type = null;
  JSDocInfo info = objectLit.getJSDocInfo();
  if (info != null &&
      info.getLendsName() != null) {
    String lendsName = info.getLendsName();
    Var lendsVar = scope.getVar(lendsName);
    if (lendsVar == null) {
      compiler.report(
          JSError.make(sourceName, objectLit, UNKNOWN_LENDS, lendsName));
    } else {
      type = lendsVar.getType();
      if (type == null) {
        type = typeRegistry.getNativeType(UNKNOWN_TYPE);
      }
      if (!type.isSubtype(typeRegistry.getNativeType(OBJECT_TYPE))) {
        compiler.report(
            JSError.make(sourceName, objectLit, LENDS_ON_NON_OBJECT,
                lendsName, type.toString()));
        type = null;
      } else {
        objectLit.setJSType(type);
      }
    }
  }

  info = NodeUtil.getBestJSDocInfo(objectLit);
  Node lValue = NodeUtil.getBestLValue(objectLit);
  String lValueName = NodeUtil.getBestLValueName(lValue);
  boolean createdEnumType = false;
  if (info != null && info.hasEnumParameterType()) {
    type = createEnumTypeFromNodes(objectLit, lValueName, info, lValue);
    createdEnumType = true;
  }

  if (type == null) {
    type = typeRegistry.createAnonymousObjectType();
  }

  setDeferredType(objectLit, type);

  // If this is an enum, the properties were already taken care of above.
  if (!createdEnumType) {
    processObjectLitProperties(
        t, objectLit, ObjectType.cast(objectLit.getJSType()));
  }
}
 
Example 7
Source File: Closure_43_TypedScopeCreator_s.java    From coming with MIT License 4 votes vote down vote up
private void defineObjectLiteral(Node objectLit) {
  // Handle the @lends annotation.
  JSType type = null;
  JSDocInfo info = objectLit.getJSDocInfo();
  if (info != null &&
      info.getLendsName() != null) {
    String lendsName = info.getLendsName();
    Var lendsVar = scope.getVar(lendsName);
    if (lendsVar == null) {
      compiler.report(
          JSError.make(sourceName, objectLit, UNKNOWN_LENDS, lendsName));
    } else {
      type = lendsVar.getType();
      if (type == null) {
        type = typeRegistry.getNativeType(UNKNOWN_TYPE);
      }
      if (!type.isSubtype(typeRegistry.getNativeType(OBJECT_TYPE))) {
        compiler.report(
            JSError.make(sourceName, objectLit, LENDS_ON_NON_OBJECT,
                lendsName, type.toString()));
        type = null;
      } else {
        objectLit.setJSType(type);
      }
    }
  }

  info = NodeUtil.getBestJSDocInfo(objectLit);
  Node lValue = NodeUtil.getBestLValue(objectLit);
  String lValueName = NodeUtil.getBestLValueName(lValue);
  boolean createdEnumType = false;
  if (info != null && info.hasEnumParameterType()) {
    type = createEnumTypeFromNodes(objectLit, lValueName, info, lValue);
    createdEnumType = true;
  }

  if (type == null) {
    type = typeRegistry.createAnonymousObjectType();
  }

  setDeferredType(objectLit, type);

  // If this is an enum, the properties were already taken care of above.
  processObjectLitProperties(
      objectLit, ObjectType.cast(objectLit.getJSType()), !createdEnumType);
}
 
Example 8
Source File: Closure_43_TypedScopeCreator_t.java    From coming with MIT License 4 votes vote down vote up
private void defineObjectLiteral(Node objectLit) {
  // Handle the @lends annotation.
  JSType type = null;
  JSDocInfo info = objectLit.getJSDocInfo();
  if (info != null &&
      info.getLendsName() != null) {
    String lendsName = info.getLendsName();
    Var lendsVar = scope.getVar(lendsName);
    if (lendsVar == null) {
      compiler.report(
          JSError.make(sourceName, objectLit, UNKNOWN_LENDS, lendsName));
    } else {
      type = lendsVar.getType();
      if (type == null) {
        type = typeRegistry.getNativeType(UNKNOWN_TYPE);
      }
      if (!type.isSubtype(typeRegistry.getNativeType(OBJECT_TYPE))) {
        compiler.report(
            JSError.make(sourceName, objectLit, LENDS_ON_NON_OBJECT,
                lendsName, type.toString()));
        type = null;
      } else {
        objectLit.setJSType(type);
      }
    }
  }

  info = NodeUtil.getBestJSDocInfo(objectLit);
  Node lValue = NodeUtil.getBestLValue(objectLit);
  String lValueName = NodeUtil.getBestLValueName(lValue);
  boolean createdEnumType = false;
  if (info != null && info.hasEnumParameterType()) {
    type = createEnumTypeFromNodes(objectLit, lValueName, info, lValue);
    createdEnumType = true;
  }

  if (type == null) {
    type = typeRegistry.createAnonymousObjectType();
  }

  setDeferredType(objectLit, type);

  // If this is an enum, the properties were already taken care of above.
  processObjectLitProperties(
      objectLit, ObjectType.cast(objectLit.getJSType()), !createdEnumType);
}
 
Example 9
Source File: Closure_43_TypedScopeCreator_t.java    From coming with MIT License 4 votes vote down vote up
private void attachLiteralTypes(NodeTraversal t, Node n) {
  switch (n.getType()) {
    case Token.NULL:
      n.setJSType(getNativeType(NULL_TYPE));
      break;

    case Token.VOID:
      n.setJSType(getNativeType(VOID_TYPE));
      break;

    case Token.STRING:
      // Defer keys to the Token.OBJECTLIT case
      if (!NodeUtil.isObjectLitKey(n, n.getParent())) {
        n.setJSType(getNativeType(STRING_TYPE));
      }
      break;

    case Token.NUMBER:
      n.setJSType(getNativeType(NUMBER_TYPE));
      break;

    case Token.TRUE:
    case Token.FALSE:
      n.setJSType(getNativeType(BOOLEAN_TYPE));
      break;

    case Token.REGEXP:
      n.setJSType(getNativeType(REGEXP_TYPE));
      break;

    case Token.OBJECTLIT:
      JSDocInfo info = n.getJSDocInfo();
      if (info != null &&
          info.getLendsName() != null) {
        if (lentObjectLiterals == null) {
          lentObjectLiterals = Lists.newArrayList();
        }
        lentObjectLiterals.add(n);
      } else {
        defineObjectLiteral(n);
      }
      break;

      // NOTE(nicksantos): If we ever support Array tuples,
      // we will need to put ARRAYLIT here as well.
  }
}
 
Example 10
Source File: Closure_48_TypedScopeCreator_s.java    From coming with MIT License 4 votes vote down vote up
private void defineObjectLiteral(NodeTraversal t, Node objectLit) {
  // Handle the @lends annotation.
  JSType type = null;
  JSDocInfo info = objectLit.getJSDocInfo();
  if (info != null &&
      info.getLendsName() != null) {
    String lendsName = info.getLendsName();
    Var lendsVar = scope.getVar(lendsName);
    if (lendsVar == null) {
      compiler.report(
          JSError.make(sourceName, objectLit, UNKNOWN_LENDS, lendsName));
    } else {
      type = lendsVar.getType();
      if (type == null) {
        type = typeRegistry.getNativeType(UNKNOWN_TYPE);
      }
      if (!type.isSubtype(typeRegistry.getNativeType(OBJECT_TYPE))) {
        compiler.report(
            JSError.make(sourceName, objectLit, LENDS_ON_NON_OBJECT,
                lendsName, type.toString()));
        type = null;
      } else {
        objectLit.setJSType(type);
      }
    }
  }

  info = NodeUtil.getBestJSDocInfo(objectLit);
  Node lValue = NodeUtil.getBestLValue(objectLit);
  String lValueName = NodeUtil.getBestLValueName(lValue);
  boolean createdEnumType = false;
  if (info != null && info.hasEnumParameterType()) {
    type = createEnumTypeFromNodes(objectLit, lValueName, info, lValue);
    createdEnumType = true;
  }

  if (type == null) {
    type = typeRegistry.createAnonymousObjectType();
  }

  setDeferredType(objectLit, type);

  // If this is an enum, the properties were already taken care of above.
  processObjectLitProperties(
      t, objectLit, ObjectType.cast(objectLit.getJSType()), !createdEnumType);
}
 
Example 11
Source File: Nopol2017_0027_s.java    From coming with MIT License 4 votes vote down vote up
private void attachLiteralTypes(NodeTraversal t, Node n) {
  switch (n.getType()) {
    case Token.NULL:
      n.setJSType(getNativeType(NULL_TYPE));
      break;

    case Token.VOID:
      n.setJSType(getNativeType(VOID_TYPE));
      break;

    case Token.STRING:
      n.setJSType(getNativeType(STRING_TYPE));
      break;

    case Token.NUMBER:
      n.setJSType(getNativeType(NUMBER_TYPE));
      break;

    case Token.TRUE:
    case Token.FALSE:
      n.setJSType(getNativeType(BOOLEAN_TYPE));
      break;

    case Token.REGEXP:
      n.setJSType(getNativeType(REGEXP_TYPE));
      break;

    case Token.OBJECTLIT:
      JSDocInfo info = n.getJSDocInfo();
      if (info != null &&
          info.getLendsName() != null) {
        if (lentObjectLiterals == null) {
          lentObjectLiterals = Lists.newArrayList();
        }
        lentObjectLiterals.add(n);
      } else {
        defineObjectLiteral(n);
      }
      break;

      // NOTE(nicksantos): If we ever support Array tuples,
      // we will need to put ARRAYLIT here as well.
  }
}
 
Example 12
Source File: Closure_70_TypedScopeCreator_s.java    From coming with MIT License 4 votes vote down vote up
private void defineObjectLiteral(NodeTraversal t, Node objectLit) {
  // Handle the @lends annotation.
  JSType type = null;
  JSDocInfo info = objectLit.getJSDocInfo();
  if (info != null &&
      info.getLendsName() != null) {
    String lendsName = info.getLendsName();
    Var lendsVar = scope.getVar(lendsName);
    if (lendsVar == null) {
      compiler.report(
          JSError.make(sourceName, objectLit, UNKNOWN_LENDS, lendsName));
    } else {
      type = lendsVar.getType();
      if (type == null) {
        type = typeRegistry.getNativeType(UNKNOWN_TYPE);
      }
      if (!type.isSubtype(typeRegistry.getNativeType(OBJECT_TYPE))) {
        compiler.report(
            JSError.make(sourceName, objectLit, LENDS_ON_NON_OBJECT,
                lendsName, type.toString()));
        type = null;
      } else {
        objectLit.setJSType(type);
      }
    }
  }

  info = getBestJSDocInfo(objectLit);
  Node lValue = getBestLValue(objectLit);
  String lValueName = getBestLValueName(lValue);
  boolean createdEnumType = false;
  if (info != null && info.hasEnumParameterType()) {
    type = createEnumTypeFromNodes(objectLit, lValueName, info, lValue);
    createdEnumType = true;
  }

  if (type == null) {
    type = typeRegistry.createAnonymousObjectType();
  }

  setDeferredType(objectLit, type);

  // If this is an enum, the properties were already taken care of above.
  if (!createdEnumType) {
    processObjectLitProperties(
        t, objectLit, ObjectType.cast(objectLit.getJSType()));
  }
}
 
Example 13
Source File: Closure_70_TypedScopeCreator_t.java    From coming with MIT License 4 votes vote down vote up
private void defineObjectLiteral(NodeTraversal t, Node objectLit) {
  // Handle the @lends annotation.
  JSType type = null;
  JSDocInfo info = objectLit.getJSDocInfo();
  if (info != null &&
      info.getLendsName() != null) {
    String lendsName = info.getLendsName();
    Var lendsVar = scope.getVar(lendsName);
    if (lendsVar == null) {
      compiler.report(
          JSError.make(sourceName, objectLit, UNKNOWN_LENDS, lendsName));
    } else {
      type = lendsVar.getType();
      if (type == null) {
        type = typeRegistry.getNativeType(UNKNOWN_TYPE);
      }
      if (!type.isSubtype(typeRegistry.getNativeType(OBJECT_TYPE))) {
        compiler.report(
            JSError.make(sourceName, objectLit, LENDS_ON_NON_OBJECT,
                lendsName, type.toString()));
        type = null;
      } else {
        objectLit.setJSType(type);
      }
    }
  }

  info = getBestJSDocInfo(objectLit);
  Node lValue = getBestLValue(objectLit);
  String lValueName = getBestLValueName(lValue);
  boolean createdEnumType = false;
  if (info != null && info.hasEnumParameterType()) {
    type = createEnumTypeFromNodes(objectLit, lValueName, info, lValue);
    createdEnumType = true;
  }

  if (type == null) {
    type = typeRegistry.createAnonymousObjectType();
  }

  setDeferredType(objectLit, type);

  // If this is an enum, the properties were already taken care of above.
  if (!createdEnumType) {
    processObjectLitProperties(
        t, objectLit, ObjectType.cast(objectLit.getJSType()));
  }
}
 
Example 14
Source File: CheckGlobalThis.java    From astor with GNU General Public License v2.0 4 votes vote down vote up
/**
 * Since this pass reports errors only when a global {@code this} keyword
 * is encountered, there is no reason to traverse non global contexts.
 */
@Override
public boolean shouldTraverse(NodeTraversal t, Node n, Node parent) {

  if (n.isFunction()) {
    // Don't traverse functions that are constructors or have the @this
    // or @override annotation.
    JSDocInfo jsDoc = getFunctionJsDocInfo(n);
    if (jsDoc != null &&
        (jsDoc.isConstructor() ||
         jsDoc.isInterface() ||
         jsDoc.hasThisType() ||
         jsDoc.isOverride())) {
      return false;
    }

    // Don't traverse functions unless they would normally
    // be able to have a @this annotation associated with them. e.g.,
    // var a = function() { }; // or
    // function a() {} // or
    // a.x = function() {}; // or
    // var a = {x: function() {}};
    int pType = parent.getType();
    if (!(pType == Token.BLOCK ||
          pType == Token.SCRIPT ||
          pType == Token.NAME ||
          pType == Token.ASSIGN ||

          // object literal keys
          pType == Token.STRING_KEY)) {
      return false;
    }

    // Don't traverse functions that are getting lent to a prototype.
    Node gramps = parent.getParent();
    if (NodeUtil.isObjectLitKey(parent, gramps)) {
      JSDocInfo maybeLends = gramps.getJSDocInfo();
      if (maybeLends != null &&
          maybeLends.getLendsName() != null &&
          maybeLends.getLendsName().endsWith(".prototype")) {
        return false;
      }
    }
  }

  if (parent != null && parent.isAssign()) {
    Node lhs = parent.getFirstChild();
    Node rhs = lhs.getNext();

    if (n == lhs) {
      // Always traverse the left side of the assignment. To handle
      // nested assignments properly (e.g., (a = this).property = c;),
      // assignLhsChild should not be overridden.
      if (assignLhsChild == null) {
        assignLhsChild = lhs;
      }
    } else {
      // Only traverse the right side if it's not an assignment to a prototype
      // property or subproperty.
      if (NodeUtil.isGet(lhs)) {
        if (lhs.isGetProp() &&
            lhs.getLastChild().getString().equals("prototype")) {
          return false;
        }
        Node llhs = lhs.getFirstChild();
        if (llhs.isGetProp() &&
            llhs.getLastChild().getString().equals("prototype")) {
          return false;
        }
      }
    }
  }

  return true;
}
 
Example 15
Source File: Closure_17_TypedScopeCreator_t.java    From coming with MIT License 4 votes vote down vote up
private void attachLiteralTypes(NodeTraversal t, Node n) {
  switch (n.getType()) {
    case Token.NULL:
      n.setJSType(getNativeType(NULL_TYPE));
      break;

    case Token.VOID:
      n.setJSType(getNativeType(VOID_TYPE));
      break;

    case Token.STRING:
      n.setJSType(getNativeType(STRING_TYPE));
      break;

    case Token.NUMBER:
      n.setJSType(getNativeType(NUMBER_TYPE));
      break;

    case Token.TRUE:
    case Token.FALSE:
      n.setJSType(getNativeType(BOOLEAN_TYPE));
      break;

    case Token.REGEXP:
      n.setJSType(getNativeType(REGEXP_TYPE));
      break;

    case Token.OBJECTLIT:
      JSDocInfo info = n.getJSDocInfo();
      if (info != null &&
          info.getLendsName() != null) {
        if (lentObjectLiterals == null) {
          lentObjectLiterals = Lists.newArrayList();
        }
        lentObjectLiterals.add(n);
      } else {
        defineObjectLiteral(n);
      }
      break;

      // NOTE(nicksantos): If we ever support Array tuples,
      // we will need to put ARRAYLIT here as well.
  }
}
 
Example 16
Source File: Closure_17_TypedScopeCreator_s.java    From coming with MIT License 4 votes vote down vote up
private void defineObjectLiteral(Node objectLit) {
  // Handle the @lends annotation.
  JSType type = null;
  JSDocInfo info = objectLit.getJSDocInfo();
  if (info != null &&
      info.getLendsName() != null) {
    String lendsName = info.getLendsName();
    Var lendsVar = scope.getVar(lendsName);
    if (lendsVar == null) {
      compiler.report(
          JSError.make(sourceName, objectLit, UNKNOWN_LENDS, lendsName));
    } else {
      type = lendsVar.getType();
      if (type == null) {
        type = typeRegistry.getNativeType(UNKNOWN_TYPE);
      }
      if (!type.isSubtype(typeRegistry.getNativeType(OBJECT_TYPE))) {
        compiler.report(
            JSError.make(sourceName, objectLit, LENDS_ON_NON_OBJECT,
                lendsName, type.toString()));
        type = null;
      } else {
        objectLit.setJSType(type);
      }
    }
  }

  info = NodeUtil.getBestJSDocInfo(objectLit);
  Node lValue = NodeUtil.getBestLValue(objectLit);
  String lValueName = NodeUtil.getBestLValueName(lValue);
  boolean createdEnumType = false;
  if (info != null && info.hasEnumParameterType()) {
    type = createEnumTypeFromNodes(objectLit, lValueName, info, lValue);
    createdEnumType = true;
  }

  if (type == null) {
    type = typeRegistry.createAnonymousObjectType();
  }

  setDeferredType(objectLit, type);

  // If this is an enum, the properties were already taken care of above.
  processObjectLitProperties(
      objectLit, ObjectType.cast(objectLit.getJSType()), !createdEnumType);
}
 
Example 17
Source File: Closure_17_TypedScopeCreator_s.java    From coming with MIT License 4 votes vote down vote up
private void attachLiteralTypes(NodeTraversal t, Node n) {
  switch (n.getType()) {
    case Token.NULL:
      n.setJSType(getNativeType(NULL_TYPE));
      break;

    case Token.VOID:
      n.setJSType(getNativeType(VOID_TYPE));
      break;

    case Token.STRING:
      n.setJSType(getNativeType(STRING_TYPE));
      break;

    case Token.NUMBER:
      n.setJSType(getNativeType(NUMBER_TYPE));
      break;

    case Token.TRUE:
    case Token.FALSE:
      n.setJSType(getNativeType(BOOLEAN_TYPE));
      break;

    case Token.REGEXP:
      n.setJSType(getNativeType(REGEXP_TYPE));
      break;

    case Token.OBJECTLIT:
      JSDocInfo info = n.getJSDocInfo();
      if (info != null &&
          info.getLendsName() != null) {
        if (lentObjectLiterals == null) {
          lentObjectLiterals = Lists.newArrayList();
        }
        lentObjectLiterals.add(n);
      } else {
        defineObjectLiteral(n);
      }
      break;

      // NOTE(nicksantos): If we ever support Array tuples,
      // we will need to put ARRAYLIT here as well.
  }
}
 
Example 18
Source File: Nopol2017_0027_t.java    From coming with MIT License 4 votes vote down vote up
private void defineObjectLiteral(Node objectLit) {
  // Handle the @lends annotation.
  JSType type = null;
  JSDocInfo info = objectLit.getJSDocInfo();
  if (info != null &&
      info.getLendsName() != null) {
    String lendsName = info.getLendsName();
    Var lendsVar = scope.getVar(lendsName);
    if (lendsVar == null) {
      compiler.report(
          JSError.make(sourceName, objectLit, UNKNOWN_LENDS, lendsName));
    } else {
      type = lendsVar.getType();
      if (type == null) {
        type = typeRegistry.getNativeType(UNKNOWN_TYPE);
      }
      if (!type.isSubtype(typeRegistry.getNativeType(OBJECT_TYPE))) {
        compiler.report(
            JSError.make(sourceName, objectLit, LENDS_ON_NON_OBJECT,
                lendsName, type.toString()));
        type = null;
      } else {
        objectLit.setJSType(type);
      }
    }
  }

  info = NodeUtil.getBestJSDocInfo(objectLit);
  Node lValue = NodeUtil.getBestLValue(objectLit);
  String lValueName = NodeUtil.getBestLValueName(lValue);
  boolean createdEnumType = false;
  if (info != null && info.hasEnumParameterType()) {
    type = createEnumTypeFromNodes(objectLit, lValueName, info, lValue);
    createdEnumType = true;
  }

  if (type == null) {
    type = typeRegistry.createAnonymousObjectType();
  }

  setDeferredType(objectLit, type);

  // If this is an enum, the properties were already taken care of above.
  processObjectLitProperties(
      objectLit, ObjectType.cast(objectLit.getJSType()), !createdEnumType);
}
 
Example 19
Source File: Nopol2017_0027_t.java    From coming with MIT License 4 votes vote down vote up
private void attachLiteralTypes(NodeTraversal t, Node n) {
  switch (n.getType()) {
    case Token.NULL:
      n.setJSType(getNativeType(NULL_TYPE));
      break;

    case Token.VOID:
      n.setJSType(getNativeType(VOID_TYPE));
      break;

    case Token.STRING:
      n.setJSType(getNativeType(STRING_TYPE));
      break;

    case Token.NUMBER:
      n.setJSType(getNativeType(NUMBER_TYPE));
      break;

    case Token.TRUE:
    case Token.FALSE:
      n.setJSType(getNativeType(BOOLEAN_TYPE));
      break;

    case Token.REGEXP:
      n.setJSType(getNativeType(REGEXP_TYPE));
      break;

    case Token.OBJECTLIT:
      JSDocInfo info = n.getJSDocInfo();
      if (info != null &&
          info.getLendsName() != null) {
        if (lentObjectLiterals == null) {
          lentObjectLiterals = Lists.newArrayList();
        }
        lentObjectLiterals.add(n);
      } else {
        defineObjectLiteral(n);
      }
      break;

      // NOTE(nicksantos): If we ever support Array tuples,
      // we will need to put ARRAYLIT here as well.
  }
}
 
Example 20
Source File: Nopol2017_0027_s.java    From coming with MIT License 4 votes vote down vote up
private void defineObjectLiteral(Node objectLit) {
  // Handle the @lends annotation.
  JSType type = null;
  JSDocInfo info = objectLit.getJSDocInfo();
  if (info != null &&
      info.getLendsName() != null) {
    String lendsName = info.getLendsName();
    Var lendsVar = scope.getVar(lendsName);
    if (lendsVar == null) {
      compiler.report(
          JSError.make(sourceName, objectLit, UNKNOWN_LENDS, lendsName));
    } else {
      type = lendsVar.getType();
      if (type == null) {
        type = typeRegistry.getNativeType(UNKNOWN_TYPE);
      }
      if (!type.isSubtype(typeRegistry.getNativeType(OBJECT_TYPE))) {
        compiler.report(
            JSError.make(sourceName, objectLit, LENDS_ON_NON_OBJECT,
                lendsName, type.toString()));
        type = null;
      } else {
        objectLit.setJSType(type);
      }
    }
  }

  info = NodeUtil.getBestJSDocInfo(objectLit);
  Node lValue = NodeUtil.getBestLValue(objectLit);
  String lValueName = NodeUtil.getBestLValueName(lValue);
  boolean createdEnumType = false;
  if (info != null && info.hasEnumParameterType()) {
    type = createEnumTypeFromNodes(objectLit, lValueName, info, lValue);
    createdEnumType = true;
  }

  if (type == null) {
    type = typeRegistry.createAnonymousObjectType();
  }

  setDeferredType(objectLit, type);

  // If this is an enum, the properties were already taken care of above.
  processObjectLitProperties(
      objectLit, ObjectType.cast(objectLit.getJSType()), !createdEnumType);
}