code: private Node objectPatternRestRHS(
        Node objectPattern, Node rest, String restTempVarName, ArrayList<Node> statedProperties) {
      checkArgument(objectPattern.getLastChild() == rest);
      Node restTempVarModel = astFactory.createName(restTempVarName, objectPattern.getJSType());
      Node result = restTempVarModel.cloneNode();
      if (!statedProperties.isEmpty()) {
        Iterator<Node> propItr = statedProperties.iterator();
        Node comma = deletionNodeForRestProperty(restTempVarModel.cloneNode(), propItr.next());
        while (propItr.hasNext()) {
          comma =
              astFactory.createComma(
                  comma, deletionNodeForRestProperty(restTempVarModel.cloneNode(), propItr.next()));
        }
        result = astFactory.createComma(comma, result);
      }
      result.useSourceInfoIfMissingFromForTree(rest);
      return result;
    }
docs: Convert "rest" of object destructuring lhs by making a clone and deleting any properties that
  were stated in the original object pattern.
  
  <p>Nodes in statedProperties that are a stringKey will be used in a getprop when deleting. All
  other types will be used in a getelem such as what is done for computed properties.
  
  <pre>
  {a, [foo()]:b, ...x} = rhs;
  becomes
  var temp = rhs;
  var temp1 = Object.assign({}, temp);
  var temp2 = foo()
  a = temp.a
  b = temp[foo()]
  x = (delete temp1.a, delete temp1[temp2], temp1);
  </pre>
  
  @param rest node representing the "...rest" of objectPattern
  @param restTempVarName name of var containing clone of result of rhs evaluation
  @param statedProperties list of properties to delete from the clone