code: private static boolean canNameValueChange(Node n) {
      return NodeUtil.isLValue(n)
          && !NodeUtil.getEnclosingStatement(n).isConst()
          && !NodeUtil.getEnclosingStatement(n).isLet();
    }
docs: This is similar to NodeUtil.isLValue except that object properties and
  array member modification aren't important ("o" in "o.a = 2" is still "o"
  after assignment, where in as "o = x", "o" is now "x").
  
  This also looks for the redefinition of a name.
  function (x) {var x;}
  
  @param n The NAME node in question.
  @param parent The parent of the node.