This doesn't work for some reason, but it reliably crashes the VM when debugging
diff --git a/lib/src/model/library.dart b/lib/src/model/library.dart
index aa54ce0..82a7233 100644
--- a/lib/src/model/library.dart
+++ b/lib/src/model/library.dart
@@ -2,8 +2,12 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'dart:collection';
+import 'dart:math';
+
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/visitor.dart';
 import 'package:analyzer/source/line_info.dart';
@@ -12,10 +16,27 @@
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:dartdoc/src/model/model.dart';
 import 'package:dartdoc/src/package_meta.dart' show PackageMeta;
+import 'package:dartdoc/src/tuple.dart';
 import 'package:dartdoc/src/warnings.dart';
 import 'package:path/path.dart' as path;
 import 'package:quiver/iterables.dart' as quiver;
 
+class _DeclarationVisitor extends UnifyingAstVisitor<void> {
+
+  final void Function(Declaration) nodeProcessor;
+
+  _DeclarationVisitor(this.nodeProcessor);
+
+  @override
+  void visitNode(AstNode thisNode) {
+    if (thisNode is Declaration) {
+      nodeProcessor(thisNode);
+    }
+    super.visitNode(thisNode);
+  }
+}
+
+
 /// Find all hashable children of a given element that are defined in the
 /// [LibraryElement] given at initialization.
 class _HashableChildLibraryElementVisitor
@@ -67,12 +88,31 @@
 
     // Initialize [packageGraph]'s cache of ModelNodes for relevant
     // elements in this library.
-    Map<String, CompilationUnit> _compilationUnitMap = Map();
+    HashMap<String, CompilationUnit> _compilationUnitMap = HashMap();
     _compilationUnitMap.addEntries(libraryResult.units
         .map((ResolvedUnitResult u) => MapEntry(u.path, u.unit)));
+    /*
     _HashableChildLibraryElementVisitor((Element e) =>
             packageGraph.populateModelNodeFor(e, _compilationUnitMap))
-        .visitElement(element);
+        .visitElement(element);*/
+
+    // Table of the location of the element name to the element itself.
+    HashMap<CompilationUnit, HashSet<Element>> _compilationUnitToElement = HashMap();
+    _HashableChildLibraryElementVisitor((e) {
+      _compilationUnitToElement
+          .putIfAbsent(_compilationUnitMap[element.source.fullName], () => HashSet())
+          .add(e);
+    }).visitElement(element);
+
+    _compilationUnitToElement.entries.map((entry) {
+      print('hi');
+      _DeclarationVisitor((Declaration d) {
+        if (entry.value.contains(d.declaredElement)) {
+          packageGraph.addModelNode(d.declaredElement, d);
+        }
+      }).visitNode(entry.key);
+    });
+
 
     // Initialize the list of elements defined in this library and
     // exported via its export directives.
diff --git a/lib/src/model/package_graph.dart b/lib/src/model/package_graph.dart
index 864ea31..6d54fde 100644
--- a/lib/src/model/package_graph.dart
+++ b/lib/src/model/package_graph.dart
@@ -136,6 +136,12 @@
             ModelNode(utils.getAstNode(element, compilationUnitMap), element));
   }
 
+  void addModelNode(Element element, AstNode node) {
+    _modelNodes.putIfAbsent(
+        element,
+            () => ModelNode(node, element));
+  }
+
   ModelNode getModelNodeFor(Element element) => _modelNodes[element];
 
   SpecialClasses specialClasses;