Java Code Examples for com.google.javascript.rhino.Node#isGetElem()

The following examples show how to use com.google.javascript.rhino.Node#isGetElem() . 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: Cardumen_00151_s.java    From coming with MIT License 5 votes vote down vote up
/**
 * Records the assignment of a value to a global name.
 *
 * @param name Fully qualified name
 * @param node The top node representing the name (GETPROP, NAME, or STRING
 * [objlit key])
 */
private void recordSet(String name, Node node) {
  JsName jsn = getName(name, true);
  JsNameRefNode nameRefNode = new JsNameRefNode(jsn, node);
  refNodes.add(nameRefNode);

  // Now, look at all parent names and record that their properties have
  // been written to.
  if (node.isGetElem()) {
    recordWriteOnProperties(name);
  } else if (name.indexOf('.') != -1) {
    recordWriteOnProperties(name.substring(0, name.lastIndexOf('.')));
  }
}
 
Example 2
Source File: Closure_132_PeepholeSubstituteAlternateSyntax_s.java    From coming with MIT License 5 votes vote down vote up
/**
 * @return Whether the node is a block with a single statement that is
 *     an expression.
 */
private boolean isFoldableExpressBlock(Node n) {
  if (n.isBlock()) {
    if (n.hasOneChild()) {
      Node maybeExpr = n.getFirstChild();
      if (maybeExpr.isExprResult()) {
        // IE has a bug where event handlers behave differently when
        // their return value is used vs. when their return value is in
        // an EXPR_RESULT. It's pretty freaking weird. See:
        // http://code.google.com/p/closure-compiler/issues/detail?id=291
        // We try to detect this case, and not fold EXPR_RESULTs
        // into other expressions.
        if (maybeExpr.getFirstChild().isCall()) {
          Node calledFn = maybeExpr.getFirstChild().getFirstChild();

          // We only have to worry about methods with an implicit 'this'
          // param, or this doesn't happen.
          if (calledFn.isGetElem()) {
            return false;
          } else if (calledFn.isGetProp() &&
                     calledFn.getLastChild().getString().startsWith("on")) {
            return false;
          }
        }

        return true;
      }
      return false;
    }
  }

  return false;
}
 
Example 3
Source File: PeepholeSubstituteAlternateSyntax.java    From astor with GNU General Public License v2.0 5 votes vote down vote up
/**
 * @return Whether the node is a block with a single statement that is
 *     an expression.
 */
private boolean isFoldableExpressBlock(Node n) {
  if (n.isBlock()) {
    if (n.hasOneChild()) {
      Node maybeExpr = n.getFirstChild();
      if (maybeExpr.isExprResult()) {
        // IE has a bug where event handlers behave differently when
        // their return value is used vs. when their return value is in
        // an EXPR_RESULT. It's pretty freaking weird. See:
        // http://code.google.com/p/closure-compiler/issues/detail?id=291
        // We try to detect this case, and not fold EXPR_RESULTs
        // into other expressions.
        if (maybeExpr.getFirstChild().isCall()) {
          Node calledFn = maybeExpr.getFirstChild().getFirstChild();

          // We only have to worry about methods with an implicit 'this'
          // param, or this doesn't happen.
          if (calledFn.isGetElem()) {
            return false;
          } else if (calledFn.isGetProp() &&
                     calledFn.getLastChild().getString().startsWith("on")) {
            return false;
          }
        }

        return true;
      }
      return false;
    }
  }

  return false;
}
 
Example 4
Source File: Cardumen_00202_t.java    From coming with MIT License 5 votes vote down vote up
/**
 * Records the assignment of a value to a global name.
 *
 * @param name Fully qualified name
 * @param node The top node representing the name (GETPROP, NAME, or STRING
 * [objlit key])
 */
private void recordSet(String name, Node node) {
  JsName jsn = getName(name, true);
  JsNameRefNode nameRefNode = new JsNameRefNode(jsn, node);
  refNodes.add(nameRefNode);

  // Now, look at all parent names and record that their properties have
  // been written to.
  if (node.isGetElem()) {
    recordWriteOnProperties(name);
  } else if (name.indexOf('.') != -1) {
    recordWriteOnProperties(name.substring(0, name.lastIndexOf('.')));
  }
}
 
Example 5
Source File: Closure_114_NameAnalyzer_t.java    From coming with MIT License 5 votes vote down vote up
/**
 * Records the assignment of a value to a global name.
 *
 * @param name Fully qualified name
 * @param node The top node representing the name (GETPROP, NAME, or STRING
 * [objlit key])
 */
private void recordSet(String name, Node node) {
  JsName jsn = getName(name, true);
  JsNameRefNode nameRefNode = new JsNameRefNode(jsn, node);
  refNodes.add(nameRefNode);

  // Now, look at all parent names and record that their properties have
  // been written to.
  if (node.isGetElem()) {
    recordWriteOnProperties(name);
  } else if (name.indexOf('.') != -1) {
    recordWriteOnProperties(name.substring(0, name.lastIndexOf('.')));
  }
}
 
Example 6
Source File: Cardumen_0020_t.java    From coming with MIT License 5 votes vote down vote up
/**
 * Records the assignment of a value to a global name.
 *
 * @param name Fully qualified name
 * @param node The top node representing the name (GETPROP, NAME, or STRING
 * [objlit key])
 */
private void recordSet(String name, Node node) {
  JsName jsn = getName(name, true);
  JsNameRefNode nameRefNode = new JsNameRefNode(jsn, node);
  refNodes.add(nameRefNode);

  // Now, look at all parent names and record that their properties have
  // been written to.
  if (node.isGetElem()) {
    recordWriteOnProperties(name);
  } else if (name.indexOf('.') != -1) {
    recordWriteOnProperties(name.substring(0, name.lastIndexOf('.')));
  }
}
 
Example 7
Source File: Cardumen_0092_t.java    From coming with MIT License 5 votes vote down vote up
/**
 * Records the assignment of a value to a global name.
 *
 * @param name Fully qualified name
 * @param node The top node representing the name (GETPROP, NAME, or STRING
 * [objlit key])
 */
private void recordSet(String name, Node node) {
  JsName jsn = getName(name, true);
  JsNameRefNode nameRefNode = new JsNameRefNode(jsn, node);
  refNodes.add(nameRefNode);

  // Now, look at all parent names and record that their properties have
  // been written to.
  if (node.isGetElem()) {
    recordWriteOnProperties(name);
  } else if (name.indexOf('.') != -1) {
    recordWriteOnProperties(name.substring(0, name.lastIndexOf('.')));
  }
}
 
Example 8
Source File: Cardumen_0092_s.java    From coming with MIT License 5 votes vote down vote up
/**
 * Records the assignment of a value to a global name.
 *
 * @param name Fully qualified name
 * @param node The top node representing the name (GETPROP, NAME, or STRING
 * [objlit key])
 */
private void recordSet(String name, Node node) {
  JsName jsn = getName(name, true);
  JsNameRefNode nameRefNode = new JsNameRefNode(jsn, node);
  refNodes.add(nameRefNode);

  // Now, look at all parent names and record that their properties have
  // been written to.
  if (node.isGetElem()) {
    recordWriteOnProperties(name);
  } else if (name.indexOf('.') != -1) {
    recordWriteOnProperties(name.substring(0, name.lastIndexOf('.')));
  }
}
 
Example 9
Source File: Closure_132_PeepholeSubstituteAlternateSyntax_t.java    From coming with MIT License 5 votes vote down vote up
/**
 * @return Whether the node is a block with a single statement that is
 *     an expression.
 */
private boolean isFoldableExpressBlock(Node n) {
  if (n.isBlock()) {
    if (n.hasOneChild()) {
      Node maybeExpr = n.getFirstChild();
      if (maybeExpr.isExprResult()) {
        // IE has a bug where event handlers behave differently when
        // their return value is used vs. when their return value is in
        // an EXPR_RESULT. It's pretty freaking weird. See:
        // http://code.google.com/p/closure-compiler/issues/detail?id=291
        // We try to detect this case, and not fold EXPR_RESULTs
        // into other expressions.
        if (maybeExpr.getFirstChild().isCall()) {
          Node calledFn = maybeExpr.getFirstChild().getFirstChild();

          // We only have to worry about methods with an implicit 'this'
          // param, or this doesn't happen.
          if (calledFn.isGetElem()) {
            return false;
          } else if (calledFn.isGetProp() &&
                     calledFn.getLastChild().getString().startsWith("on")) {
            return false;
          }
        }

        return true;
      }
      return false;
    }
  }

  return false;
}
 
Example 10
Source File: Closure_125_TypeCheck_t.java    From coming with MIT License 4 votes vote down vote up
/**
 * Visits a CALL node.
 *
 * @param t The node traversal object that supplies context, such as the
 * scope chain to use in name lookups as well as error reporting.
 * @param n The node being visited.
 */
private void visitCall(NodeTraversal t, Node n) {
  Node child = n.getFirstChild();
  JSType childType = getJSType(child).restrictByNotNullOrUndefined();

  if (!childType.canBeCalled()) {
    report(t, n, NOT_CALLABLE, childType.toString());
    ensureTyped(t, n);
    return;
  }

  // A couple of types can be called as if they were functions.
  // If it is a function type, then validate parameters.
  if (childType.isFunctionType()) {
    FunctionType functionType = childType.toMaybeFunctionType();

    boolean isExtern = false;
    JSDocInfo functionJSDocInfo = functionType.getJSDocInfo();
    if (functionJSDocInfo != null  &&
        functionJSDocInfo.getAssociatedNode() != null) {
      isExtern = functionJSDocInfo.getAssociatedNode().isFromExterns();
    }

    // Non-native constructors should not be called directly
    // unless they specify a return type and are defined
    // in an extern.
    if (functionType.isConstructor() &&
        !functionType.isNativeObjectType() &&
        (functionType.getReturnType().isUnknownType() ||
         functionType.getReturnType().isVoidType() ||
         !isExtern)) {
      report(t, n, CONSTRUCTOR_NOT_CALLABLE, childType.toString());
    }

    // Functions with explicit 'this' types must be called in a GETPROP
    // or GETELEM.
    if (functionType.isOrdinaryFunction() &&
        !functionType.getTypeOfThis().isUnknownType() &&
        !(functionType.getTypeOfThis().toObjectType() != null &&
        functionType.getTypeOfThis().toObjectType().isNativeObjectType()) &&
        !(child.isGetElem() ||
          child.isGetProp())) {
      report(t, n, EXPECTED_THIS_TYPE, functionType.toString());
    }

    visitParameterList(t, n, functionType);
    ensureTyped(t, n, functionType.getReturnType());
  } else {
    ensureTyped(t, n);
  }

  // TODO(nicksantos): Add something to check for calls of RegExp objects,
  // which is not supported by IE. Either say something about the return type
  // or warn about the non-portability of the call or both.
}
 
Example 11
Source File: jMutRepair_003_t.java    From coming with MIT License 4 votes vote down vote up
/**
 * Is this a GETPROP or GETELEM node?
 */
static boolean isGet(Node n) {
  return n.isGetProp() || n.isGetElem();
}
 
Example 12
Source File: Closure_11_TypeCheck_t.java    From coming with MIT License 4 votes vote down vote up
/**
 * Visits a CALL node.
 *
 * @param t The node traversal object that supplies context, such as the
 * scope chain to use in name lookups as well as error reporting.
 * @param n The node being visited.
 */
private void visitCall(NodeTraversal t, Node n) {
  Node child = n.getFirstChild();
  JSType childType = getJSType(child).restrictByNotNullOrUndefined();

  if (!childType.canBeCalled()) {
    report(t, n, NOT_CALLABLE, childType.toString());
    ensureTyped(t, n);
    return;
  }

  // A couple of types can be called as if they were functions.
  // If it is a function type, then validate parameters.
  if (childType.isFunctionType()) {
    FunctionType functionType = childType.toMaybeFunctionType();

    boolean isExtern = false;
    JSDocInfo functionJSDocInfo = functionType.getJSDocInfo();
    if( functionJSDocInfo != null  &&
        functionJSDocInfo.getAssociatedNode() != null) {
      isExtern = functionJSDocInfo.getAssociatedNode().isFromExterns();
    }

    // Non-native constructors should not be called directly
    // unless they specify a return type and are defined
    // in an extern.
    if (functionType.isConstructor() &&
        !functionType.isNativeObjectType() &&
        (functionType.getReturnType().isUnknownType() ||
         functionType.getReturnType().isVoidType() ||
         !isExtern)) {
      report(t, n, CONSTRUCTOR_NOT_CALLABLE, childType.toString());
    }

    // Functions with explicit 'this' types must be called in a GETPROP
    // or GETELEM.
    if (functionType.isOrdinaryFunction() &&
        !functionType.getTypeOfThis().isUnknownType() &&
        !functionType.getTypeOfThis().isNativeObjectType() &&
        !(child.isGetElem() ||
          child.isGetProp())) {
      report(t, n, EXPECTED_THIS_TYPE, functionType.toString());
    }

    visitParameterList(t, n, functionType);
    ensureTyped(t, n, functionType.getReturnType());
  } else {
    ensureTyped(t, n);
  }

  // TODO: Add something to check for calls of RegExp objects, which is not
  // supported by IE.  Either say something about the return type or warn
  // about the non-portability of the call or both.
}
 
Example 13
Source File: Cardumen_0014_t.java    From coming with MIT License 4 votes vote down vote up
/**
 * Is this a GETPROP or GETELEM node?
 */
static boolean isGet(Node n) {
  return n.isGetProp() || n.isGetElem();
}
 
Example 14
Source File: Cardumen_0014_s.java    From coming with MIT License 4 votes vote down vote up
/**
 * Is this a GETPROP or GETELEM node?
 */
static boolean isGet(Node n) {
  return n.isGetProp() || n.isGetElem();
}
 
Example 15
Source File: Closure_125_TypeCheck_s.java    From coming with MIT License 4 votes vote down vote up
/**
 * Visits a CALL node.
 *
 * @param t The node traversal object that supplies context, such as the
 * scope chain to use in name lookups as well as error reporting.
 * @param n The node being visited.
 */
private void visitCall(NodeTraversal t, Node n) {
  Node child = n.getFirstChild();
  JSType childType = getJSType(child).restrictByNotNullOrUndefined();

  if (!childType.canBeCalled()) {
    report(t, n, NOT_CALLABLE, childType.toString());
    ensureTyped(t, n);
    return;
  }

  // A couple of types can be called as if they were functions.
  // If it is a function type, then validate parameters.
  if (childType.isFunctionType()) {
    FunctionType functionType = childType.toMaybeFunctionType();

    boolean isExtern = false;
    JSDocInfo functionJSDocInfo = functionType.getJSDocInfo();
    if (functionJSDocInfo != null  &&
        functionJSDocInfo.getAssociatedNode() != null) {
      isExtern = functionJSDocInfo.getAssociatedNode().isFromExterns();
    }

    // Non-native constructors should not be called directly
    // unless they specify a return type and are defined
    // in an extern.
    if (functionType.isConstructor() &&
        !functionType.isNativeObjectType() &&
        (functionType.getReturnType().isUnknownType() ||
         functionType.getReturnType().isVoidType() ||
         !isExtern)) {
      report(t, n, CONSTRUCTOR_NOT_CALLABLE, childType.toString());
    }

    // Functions with explicit 'this' types must be called in a GETPROP
    // or GETELEM.
    if (functionType.isOrdinaryFunction() &&
        !functionType.getTypeOfThis().isUnknownType() &&
        !(functionType.getTypeOfThis().toObjectType() != null &&
        functionType.getTypeOfThis().toObjectType().isNativeObjectType()) &&
        !(child.isGetElem() ||
          child.isGetProp())) {
      report(t, n, EXPECTED_THIS_TYPE, functionType.toString());
    }

    visitParameterList(t, n, functionType);
    ensureTyped(t, n, functionType.getReturnType());
  } else {
    ensureTyped(t, n);
  }

  // TODO(nicksantos): Add something to check for calls of RegExp objects,
  // which is not supported by IE. Either say something about the return type
  // or warn about the non-portability of the call or both.
}
 
Example 16
Source File: Cardumen_0087_t.java    From coming with MIT License 4 votes vote down vote up
/**
 * Is this a GETPROP or GETELEM node?
 */
static boolean isGet(Node n) {
  return n.isGetProp() || n.isGetElem();
}
 
Example 17
Source File: Cardumen_00200_t.java    From coming with MIT License 4 votes vote down vote up
/**
 * Is this a GETPROP or GETELEM node?
 */
static boolean isGet(Node n) {
  return n.isGetProp() || n.isGetElem();
}
 
Example 18
Source File: Nopol2017_0029_s.java    From coming with MIT License 4 votes vote down vote up
/**
 * Visits a CALL node.
 *
 * @param t The node traversal object that supplies context, such as the
 * scope chain to use in name lookups as well as error reporting.
 * @param n The node being visited.
 */
private void visitCall(NodeTraversal t, Node n) {
  Node child = n.getFirstChild();
  JSType childType = getJSType(child).restrictByNotNullOrUndefined();

  if (!childType.canBeCalled()) {
    report(t, n, NOT_CALLABLE, childType.toString());
    ensureTyped(t, n);
    return;
  }

  // A couple of types can be called as if they were functions.
  // If it is a function type, then validate parameters.
  if (childType.isFunctionType()) {
    FunctionType functionType = childType.toMaybeFunctionType();

    boolean isExtern = false;
    JSDocInfo functionJSDocInfo = functionType.getJSDocInfo();
    if( functionJSDocInfo != null  &&
        functionJSDocInfo.getAssociatedNode() != null) {
      isExtern = functionJSDocInfo.getAssociatedNode().isFromExterns();
    }

    // Non-native constructors should not be called directly
    // unless they specify a return type and are defined
    // in an extern.
    if (functionType.isConstructor() &&
        !functionType.isNativeObjectType() &&
        (functionType.getReturnType().isUnknownType() ||
         functionType.getReturnType().isVoidType() ||
         !isExtern)) {
      report(t, n, CONSTRUCTOR_NOT_CALLABLE, childType.toString());
    }

    // Functions with explicit 'this' types must be called in a GETPROP
    // or GETELEM.
    if (functionType.isOrdinaryFunction() &&
        !functionType.getTypeOfThis().isUnknownType() &&
        !(functionType.getTypeOfThis().toObjectType() != null &&
        functionType.getTypeOfThis().toObjectType().isNativeObjectType()) &&
        !(child.isGetElem() ||
          child.isGetProp())) {
      report(t, n, EXPECTED_THIS_TYPE, functionType.toString());
    }

    visitParameterList(t, n, functionType);
    ensureTyped(t, n, functionType.getReturnType());
  } else {
    ensureTyped(t, n);
  }

  // TODO: Add something to check for calls of RegExp objects, which is not
  // supported by IE.  Either say something about the return type or warn
  // about the non-portability of the call or both.
}
 
Example 19
Source File: Closure_2_TypeCheck_s.java    From coming with MIT License 4 votes vote down vote up
/**
 * Visits a CALL node.
 *
 * @param t The node traversal object that supplies context, such as the
 * scope chain to use in name lookups as well as error reporting.
 * @param n The node being visited.
 */
private void visitCall(NodeTraversal t, Node n) {
  Node child = n.getFirstChild();
  JSType childType = getJSType(child).restrictByNotNullOrUndefined();

  if (!childType.canBeCalled()) {
    report(t, n, NOT_CALLABLE, childType.toString());
    ensureTyped(t, n);
    return;
  }

  // A couple of types can be called as if they were functions.
  // If it is a function type, then validate parameters.
  if (childType.isFunctionType()) {
    FunctionType functionType = childType.toMaybeFunctionType();

    boolean isExtern = false;
    JSDocInfo functionJSDocInfo = functionType.getJSDocInfo();
    if( functionJSDocInfo != null  &&
        functionJSDocInfo.getAssociatedNode() != null) {
      isExtern = functionJSDocInfo.getAssociatedNode().isFromExterns();
    }

    // Non-native constructors should not be called directly
    // unless they specify a return type and are defined
    // in an extern.
    if (functionType.isConstructor() &&
        !functionType.isNativeObjectType() &&
        (functionType.getReturnType().isUnknownType() ||
         functionType.getReturnType().isVoidType() ||
         !isExtern)) {
      report(t, n, CONSTRUCTOR_NOT_CALLABLE, childType.toString());
    }

    // Functions with explicit 'this' types must be called in a GETPROP
    // or GETELEM.
    if (functionType.isOrdinaryFunction() &&
        !functionType.getTypeOfThis().isUnknownType() &&
        !(functionType.getTypeOfThis().toObjectType() != null &&
        functionType.getTypeOfThis().toObjectType().isNativeObjectType()) &&
        !(child.isGetElem() ||
          child.isGetProp())) {
      report(t, n, EXPECTED_THIS_TYPE, functionType.toString());
    }

    visitParameterList(t, n, functionType);
    ensureTyped(t, n, functionType.getReturnType());
  } else {
    ensureTyped(t, n);
  }

  // TODO: Add something to check for calls of RegExp objects, which is not
  // supported by IE.  Either say something about the return type or warn
  // about the non-portability of the call or both.
}
 
Example 20
Source File: Closure_10_NodeUtil_s.java    From coming with MIT License 4 votes vote down vote up
/**
 * Is this a GETPROP or GETELEM node?
 */
static boolean isGet(Node n) {
  return n.isGetProp() || n.isGetElem();
}