private static boolean canNameValueChange(Node n) {
    return NodeUtil.isLValue(n)
        && !NodeUtil.getEnclosingStatement(n).isConst()
        && !NodeUtil.getEnclosingStatement(n).isLet();
  }
private static boolean canNameValueChange ( Node n ) { return NodeUtil . isLValue ( n ) && ! NodeUtil . getEnclosingStatement ( n ) . isConst ( ) && ! NodeUtil . getEnclosingStatement ( n ) . isLet ( ) ; }
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.