diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index 0dcc915..0329a1f 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -51,10 +51,6 @@
   ///
   /// The BinaryPrinter will use its own buffer, so the [sink] does not need
   /// one.
-  ///
-  /// If multiple binaries are to be written based on the same IR, a shared
-  /// [globalIndexer] may be passed in to avoid rebuilding the same indices
-  /// in every printer.
   BinaryPrinter(Sink<List<int>> sink, {StringIndexer stringIndexer})
       : _mainSink = new BufferedSink(sink),
         _metadataSink = new BufferedSink(new BytesSink()),
@@ -2108,53 +2104,6 @@
   }
 }
 
-/// Computes and stores the index of a library, class, or member within its
-/// parent list.
-class GlobalIndexer extends TreeVisitor {
-  final Map<TreeNode, int> indices = <TreeNode, int>{};
-
-  void buildIndexForContainer(TreeNode libraryOrClass) {
-    libraryOrClass.accept(this);
-  }
-
-  void buildIndexForList(List<TreeNode> list) {
-    for (int i = 0; i < list.length; ++i) {
-      TreeNode child = list[i];
-      if (child != null) {
-        indices[child] = i;
-      }
-    }
-  }
-
-  visitComponent(Component node) {
-    buildIndexForList(node.libraries);
-  }
-
-  visitLibrary(Library node) {
-    buildIndexForList(node.classes);
-    buildIndexForList(node.fields);
-    buildIndexForList(node.procedures);
-  }
-
-  visitClass(Class node) {
-    buildIndexForList(node.fields);
-    buildIndexForList(node.constructors);
-    buildIndexForList(node.procedures);
-  }
-
-  int operator [](TreeNode memberOrLibraryOrClass) {
-    var node = memberOrLibraryOrClass;
-    assert(node is Member || node is Library || node is Class);
-    int index = indices[node];
-    if (index == null) {
-      buildIndexForContainer(node.parent);
-      return indices[node];
-    } else {
-      return index;
-    }
-  }
-}
-
 /// Puts a buffer in front of a [Sink<List<int>>].
 class BufferedSink {
   static const int SIZE = 100000;
