code: private void traverseObjectDefinePropertiesLiteral(Node propertyDefinitions, Scope scope) {
      for (Node property = propertyDefinitions.getFirstChild();
          property != null;
          property = property.getNext()) {
        if (property.isQuotedString()) {
          // Quoted property name counts as a reference to the property and protects it from removal.
          markPropertyNameReferenced(property.getString());
          traverseNode(property.getOnlyChild(), scope);
        } else if (property.isStringKey()) {
          Node definition = property.getOnlyChild();
          if (NodeUtil.mayHaveSideEffects(definition, compiler)) {
            traverseNode(definition, scope);
          } else {
            considerForIndependentRemoval(
                new RemovableBuilder()
                    .addContinuation(new Continuation(definition, scope))
                    .buildObjectDefinePropertiesDefinition(property));
          }
        } else {
          // TODO(bradfordcsmith): Maybe report error for anything other than a computed property,
          // since getters, setters, and methods don't make much sense in this context.
          traverseNode(property, scope);
        }
      }
    }
docs: Traverse the object literal passed as the second argument to `Object.defineProperties()`.