code: @Override
    public void process(Node externs, Node root) {
      checkState(compiler.getLifeCycleStage().isNormalized());
      if (!allowRemovalOfExternProperties) {
        referencedPropertyNames.addAll(compiler.getExternProperties());
      }
      traverseAndRemoveUnusedReferences(root);
      // This pass may remove definitions of getter or setter properties.
      GatherGettersAndSetterProperties.update(compiler, externs, root);
    }
docs: Traverses the root, removing all unused variables. Multiple traversals
  may occur to ensure all unused variables are removed.