diff --git a/pkg/compiler/lib/src/deferred_load/program_split_constraints/nodes.dart b/pkg/compiler/lib/src/deferred_load/program_split_constraints/nodes.dart
index dc1ec97..9f10c18 100644
--- a/pkg/compiler/lib/src/deferred_load/program_split_constraints/nodes.dart
+++ b/pkg/compiler/lib/src/deferred_load/program_split_constraints/nodes.dart
@@ -44,7 +44,8 @@
   Uri get uri => _uriAndPrefix.uri;
   String get prefix => _uriAndPrefix.prefix;
 
-  ReferenceNode(String name, this._uriAndPrefix) : super(name);
+  ReferenceNode(this._uriAndPrefix, {name})
+      : super(name ?? _uriAndPrefix.prefix);
 
   @override
   Map<String, dynamic> toJson() {
@@ -59,8 +60,8 @@
     if (nodeJson['type'] != 'reference') {
       throw 'Unrecognized type for reference node: ${nodeJson['type']}.';
     }
-    return ReferenceNode(
-        nodeJson['name'], UriAndPrefix.fromJson(nodeJson['import']));
+    return ReferenceNode(UriAndPrefix.fromJson(nodeJson['import']),
+        name: nodeJson['name']);
   }
 
   @override
@@ -192,10 +193,9 @@
   final Map<String, NamedNode> namedNodes = {};
   ReferenceNodeNamer _referenceNodeNamer;
 
-  /// 'uri#prefix' will become a key to reference this node in other builder
-  /// calls.
-  String _uriAndPrefixNamer(UriAndPrefix uriAndPrefix) =>
-      uriAndPrefix.toString();
+  /// The prefix in the 'uri#prefix' string will become a key to reference this
+  /// node in other builder calls.
+  String _prefixNamer(UriAndPrefix uriAndPrefix) => uriAndPrefix.prefix;
 
   /// Override the default reference node namer.
   set referenceNodeNamer(ReferenceNodeNamer namer) =>
@@ -203,16 +203,7 @@
 
   /// Returns the [ReferenceNodeNamer] to use for naming.
   ReferenceNodeNamer get referenceNodeNamer =>
-      _referenceNodeNamer ?? _uriAndPrefixNamer;
-
-  NamedNode _addNamedNode(NamedNode node) {
-    if (namedNodes.containsKey(node.name)) {
-      throw 'Node with name ${node.name} already exists: '
-          '${namedNodes[node.name]}';
-    }
-    namedNodes[node.name] = node;
-    return node;
-  }
+      _referenceNodeNamer ?? _prefixNamer;
 
   /// Returns a [ReferenceNode] referencing [importUriAndPrefix].
   /// [ReferenceNode]s are typically created in bulk, by mapping over a list of
@@ -221,8 +212,10 @@
   /// [referenceNodeNamer] per [ReferenceNode].
   ReferenceNode referenceNode(String importUriAndPrefix) {
     var uriAndPrefix = UriAndPrefix.fromJson(importUriAndPrefix);
+    var referenceNode = ReferenceNode(uriAndPrefix);
     var name = referenceNodeNamer(uriAndPrefix);
-    return _addNamedNode(ReferenceNode(name, uriAndPrefix));
+    namedNodes[name] = referenceNode;
+    return referenceNode;
   }
 
   /// Creates an unnamed [RelativeOrderNode] referencing two [NamedNode]s.
@@ -233,37 +226,29 @@
 
   /// Creates a [CombinerNode] which can be referenced by [name] in further
   /// calls to the builder.
-  CombinerNode combinerNode(String name, Set<String> nodes, CombinerType type) {
-    ReferenceNode _lookup(String nodeName) {
-      if (!namedNodes.containsKey(nodeName)) {
-        throw 'Missing reference node for $nodeName';
-      }
-      var node = namedNodes[nodeName];
-      if (node is! ReferenceNode) {
-        // TODO(joshualitt): Implement nested combiners.
-        throw '$name references node $nodeName which is not a ReferenceNode.';
-      }
-      return node as ReferenceNode;
-    }
-
-    return _addNamedNode(CombinerNode(name, type, nodes.map(_lookup).toSet()));
+  CombinerNode combinerNode(
+      String name, List<String> nodes, CombinerType type) {
+    var combinerNode = CombinerNode(name, type,
+        nodes.map((name) => namedNodes[name] as ReferenceNode).toSet());
+    namedNodes[name] = combinerNode;
+    return combinerNode;
   }
 
   /// Creates an 'and' [CombinerNode] which can be referenced by [name] in
   /// further calls to the builder.
-  CombinerNode andNode(String name, Set<String> nodes) {
+  CombinerNode andNode(String name, List<String> nodes) {
     return combinerNode(name, nodes, CombinerType.and);
   }
 
   /// Creates a 'fuse' [CombinerNode] which can be referenced by [name] in
   /// further calls to the builder.
-  CombinerNode fuseNode(String name, Set<String> nodes) {
+  CombinerNode fuseNode(String name, List<String> nodes) {
     return combinerNode(name, nodes, CombinerType.fuse);
   }
 
   /// Creates an 'or' [CombinerNode] which can be referenced by [name] in
   /// further calls to the builder.
-  CombinerNode orNode(String name, Set<String> nodes) {
+  CombinerNode orNode(String name, List<String> nodes) {
     return combinerNode(name, nodes, CombinerType.or);
   }
 }
diff --git a/pkg/compiler/test/custom_split/custom_split_test.dart b/pkg/compiler/test/custom_split/custom_split_test.dart
index f1e4fd4..fb0968a 100644
--- a/pkg/compiler/test/custom_split/custom_split_test.dart
+++ b/pkg/compiler/test/custom_split/custom_split_test.dart
@@ -83,30 +83,17 @@
   return json;
 }
 
-Uri getFileInTestFolder(String test, String file) =>
-    Platform.script.resolve('data/$test/$file');
-
-Future<String> compileConstraintsToJson(String test, Compiler compiler) async {
-  var constraints = getFileInTestFolder(test, 'constraints.dart');
-  var component = compiler.componentForTesting;
-  return constraintsToJson(component, constraints);
-}
-
-File getConstraintsJsonFile(String test) {
-  var constraintsJsonUri = getFileInTestFolder(test, 'constraints.json');
-  return File(constraintsJsonUri.toFilePath());
-}
-
 /// Verifies the programmatic API produces the expected JSON.
 Future<void> verifyCompiler(String test, Compiler compiler) async {
-  var json = await compileConstraintsToJson(test, compiler);
-  Expect.equals(getConstraintsJsonFile(test).readAsStringSync(), json);
-}
-
-/// Generates constraint JSON.
-Future<void> generateJSON(String test, Compiler compiler) async {
-  var json = await compileConstraintsToJson(test, compiler);
-  getConstraintsJsonFile(test).writeAsStringSync(json);
+  var constraints = Platform.script.resolve('data/$test/constraints.dart');
+  var constraintsJsonUri =
+      Platform.script.resolve('data/$test/constraints.json');
+  var component = compiler.componentForTesting;
+  var json = await constraintsToJson(component, constraints);
+  var constraintsJson =
+      File(constraintsJsonUri.toFilePath()).readAsStringSync();
+  constraintsJson = constraintsJson.substring(0, constraintsJson.length - 1);
+  Expect.equals(json, constraintsJson);
 }
 
 /// Compute the [OutputUnit]s for all source files involved in the test, and
@@ -115,7 +102,6 @@
 /// or all supporting libraries to be in the `libs` folder, starting with the
 /// same name as the original file in `data`.
 main(List<String> args) {
-  bool generateGoldens = args.contains('-g');
   asyncTest(() async {
     Directory dataDir = Directory.fromUri(Platform.script.resolve('data'));
     await checkTests(dataDir, const OutputUnitDataComputer(),
@@ -123,8 +109,6 @@
         perTestOptions: createPerTestOptions(),
         args: args, setUpFunction: () {
       importPrefixes.clear();
-    },
-        testedConfigs: allSpecConfigs,
-        verifyCompiler: generateGoldens ? generateJSON : verifyCompiler);
+    }, testedConfigs: allSpecConfigs, verifyCompiler: verifyCompiler);
   });
 }
diff --git a/pkg/compiler/test/custom_split/data/diamond/constraints.dart b/pkg/compiler/test/custom_split/data/diamond/constraints.dart
index 88ccb84..92a7665 100644
--- a/pkg/compiler/test/custom_split/data/diamond/constraints.dart
+++ b/pkg/compiler/test/custom_split/data/diamond/constraints.dart
@@ -12,16 +12,12 @@
 }
 
 List<Node> processDeferredImports(List<String> imports) {
-  var step1 = 'memory:sdk/tests/web/native/main.dart#step1';
-  var step2a = 'memory:sdk/tests/web/native/main.dart#step2a';
-  var step2b = 'memory:sdk/tests/web/native/main.dart#step2b';
-  var step3 = 'memory:sdk/tests/web/native/main.dart#step3';
   var builder = ProgramSplitBuilder();
   return [
     ...imports.map(builder.referenceNode),
-    builder.orderNode(step1, step2a),
-    builder.orderNode(step1, step2b),
-    builder.orderNode(step2a, step3),
-    builder.orderNode(step2b, step3),
+    builder.orderNode('step1', 'step2a'),
+    builder.orderNode('step1', 'step2b'),
+    builder.orderNode('step2a', 'step3'),
+    builder.orderNode('step2b', 'step3'),
   ];
 }
diff --git a/pkg/compiler/test/custom_split/data/diamond/constraints.json b/pkg/compiler/test/custom_split/data/diamond/constraints.json
index 21b8afa..83dfe0a 100644
--- a/pkg/compiler/test/custom_split/data/diamond/constraints.json
+++ b/pkg/compiler/test/custom_split/data/diamond/constraints.json
@@ -1,42 +1,42 @@
 [
   {
     "type": "reference",
-    "name": "memory:sdk/tests/web/native/main.dart#step1",
+    "name": "step1",
     "import": "memory:sdk/tests/web/native/main.dart#step1"
   },
   {
     "type": "reference",
-    "name": "memory:sdk/tests/web/native/main.dart#step2a",
+    "name": "step2a",
     "import": "memory:sdk/tests/web/native/main.dart#step2a"
   },
   {
     "type": "reference",
-    "name": "memory:sdk/tests/web/native/main.dart#step2b",
+    "name": "step2b",
     "import": "memory:sdk/tests/web/native/main.dart#step2b"
   },
   {
     "type": "reference",
-    "name": "memory:sdk/tests/web/native/main.dart#step3",
+    "name": "step3",
     "import": "memory:sdk/tests/web/native/main.dart#step3"
   },
   {
     "type": "order",
-    "predecessor": "memory:sdk/tests/web/native/main.dart#step1",
-    "successor": "memory:sdk/tests/web/native/main.dart#step2a"
+    "predecessor": "step1",
+    "successor": "step2a"
   },
   {
     "type": "order",
-    "predecessor": "memory:sdk/tests/web/native/main.dart#step1",
-    "successor": "memory:sdk/tests/web/native/main.dart#step2b"
+    "predecessor": "step1",
+    "successor": "step2b"
   },
   {
     "type": "order",
-    "predecessor": "memory:sdk/tests/web/native/main.dart#step2a",
-    "successor": "memory:sdk/tests/web/native/main.dart#step3"
+    "predecessor": "step2a",
+    "successor": "step3"
   },
   {
     "type": "order",
-    "predecessor": "memory:sdk/tests/web/native/main.dart#step2b",
-    "successor": "memory:sdk/tests/web/native/main.dart#step3"
+    "predecessor": "step2b",
+    "successor": "step3"
   }
-]
\ No newline at end of file
+]
diff --git a/pkg/compiler/test/custom_split/data/diamond_and/constraints.dart b/pkg/compiler/test/custom_split/data/diamond_and/constraints.dart
index a333016..b3a40ca 100644
--- a/pkg/compiler/test/custom_split/data/diamond_and/constraints.dart
+++ b/pkg/compiler/test/custom_split/data/diamond_and/constraints.dart
@@ -12,15 +12,11 @@
 }
 
 List<Node> processDeferredImports(List<String> imports) {
-  var step1 = 'memory:sdk/tests/web/native/main.dart#step1';
-  var step2a = 'memory:sdk/tests/web/native/main.dart#step2a';
-  var step2b = 'memory:sdk/tests/web/native/main.dart#step2b';
-  var step3 = 'memory:sdk/tests/web/native/main.dart#step3';
   var builder = ProgramSplitBuilder();
   return [
     ...imports.map(builder.referenceNode),
-    builder.andNode('step2', {step2a, step2b}),
-    builder.orderNode(step1, 'step2'),
-    builder.orderNode('step2', step3),
+    builder.andNode('step2', ['step2a', 'step2b']),
+    builder.orderNode('step1', 'step2'),
+    builder.orderNode('step2', 'step3'),
   ];
 }
diff --git a/pkg/compiler/test/custom_split/data/diamond_and/constraints.json b/pkg/compiler/test/custom_split/data/diamond_and/constraints.json
index 85344e7..931a910 100644
--- a/pkg/compiler/test/custom_split/data/diamond_and/constraints.json
+++ b/pkg/compiler/test/custom_split/data/diamond_and/constraints.json
@@ -1,40 +1,40 @@
 [
   {
     "type": "reference",
-    "name": "memory:sdk/tests/web/native/main.dart#step1",
+    "name": "step1",
     "import": "memory:sdk/tests/web/native/main.dart#step1"
   },
   {
     "type": "reference",
-    "name": "memory:sdk/tests/web/native/main.dart#step2a",
+    "name": "step2a",
     "import": "memory:sdk/tests/web/native/main.dart#step2a"
   },
   {
     "type": "reference",
-    "name": "memory:sdk/tests/web/native/main.dart#step2b",
+    "name": "step2b",
     "import": "memory:sdk/tests/web/native/main.dart#step2b"
   },
   {
     "type": "reference",
-    "name": "memory:sdk/tests/web/native/main.dart#step3",
+    "name": "step3",
     "import": "memory:sdk/tests/web/native/main.dart#step3"
   },
   {
     "type": "and",
     "name": "step2",
     "nodes": [
-      "memory:sdk/tests/web/native/main.dart#step2a",
-      "memory:sdk/tests/web/native/main.dart#step2b"
+      "step2a",
+      "step2b"
     ]
   },
   {
     "type": "order",
-    "predecessor": "memory:sdk/tests/web/native/main.dart#step1",
+    "predecessor": "step1",
     "successor": "step2"
   },
   {
     "type": "order",
     "predecessor": "step2",
-    "successor": "memory:sdk/tests/web/native/main.dart#step3"
+    "successor": "step3"
   }
-]
\ No newline at end of file
+]
diff --git a/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.dart b/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.dart
index 145cbd1..6fdf62e 100644
--- a/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.dart
+++ b/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.dart
@@ -12,15 +12,11 @@
 }
 
 List<Node> processDeferredImports(List<String> imports) {
-  var step1 = 'memory:sdk/tests/web/native/main.dart#step1';
-  var step2a = 'memory:sdk/tests/web/native/main.dart#step2a';
-  var step2b = 'memory:sdk/tests/web/native/main.dart#step2b';
-  var step3 = 'memory:sdk/tests/web/native/main.dart#step3';
   var builder = ProgramSplitBuilder();
   return [
     ...imports.map(builder.referenceNode),
-    builder.fuseNode('step2', {step2a, step2b}),
-    builder.orderNode(step1, 'step2'),
-    builder.orderNode('step2', step3),
+    builder.fuseNode('step2', ['step2a', 'step2b']),
+    builder.orderNode('step1', 'step2'),
+    builder.orderNode('step2', 'step3'),
   ];
 }
diff --git a/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.json b/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.json
index dccfe20..f170d18 100644
--- a/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.json
+++ b/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.json
@@ -1,40 +1,40 @@
 [
   {
     "type": "reference",
-    "name": "memory:sdk/tests/web/native/main.dart#step1",
+    "name": "step1",
     "import": "memory:sdk/tests/web/native/main.dart#step1"
   },
   {
     "type": "reference",
-    "name": "memory:sdk/tests/web/native/main.dart#step2a",
+    "name": "step2a",
     "import": "memory:sdk/tests/web/native/main.dart#step2a"
   },
   {
     "type": "reference",
-    "name": "memory:sdk/tests/web/native/main.dart#step2b",
+    "name": "step2b",
     "import": "memory:sdk/tests/web/native/main.dart#step2b"
   },
   {
     "type": "reference",
-    "name": "memory:sdk/tests/web/native/main.dart#step3",
+    "name": "step3",
     "import": "memory:sdk/tests/web/native/main.dart#step3"
   },
   {
     "type": "fuse",
     "name": "step2",
     "nodes": [
-      "memory:sdk/tests/web/native/main.dart#step2a",
-      "memory:sdk/tests/web/native/main.dart#step2b"
+      "step2a",
+      "step2b"
     ]
   },
   {
     "type": "order",
-    "predecessor": "memory:sdk/tests/web/native/main.dart#step1",
+    "predecessor": "step1",
     "successor": "step2"
   },
   {
     "type": "order",
     "predecessor": "step2",
-    "successor": "memory:sdk/tests/web/native/main.dart#step3"
+    "successor": "step3"
   }
-]
\ No newline at end of file
+]
diff --git a/pkg/compiler/test/custom_split/data/diamond_or/constraints.dart b/pkg/compiler/test/custom_split/data/diamond_or/constraints.dart
index bdc5e1f..659bf73 100644
--- a/pkg/compiler/test/custom_split/data/diamond_or/constraints.dart
+++ b/pkg/compiler/test/custom_split/data/diamond_or/constraints.dart
@@ -12,15 +12,11 @@
 }
 
 List<Node> processDeferredImports(List<String> imports) {
-  var step1 = 'memory:sdk/tests/web/native/main.dart#step1';
-  var step2a = 'memory:sdk/tests/web/native/main.dart#step2a';
-  var step2b = 'memory:sdk/tests/web/native/main.dart#step2b';
-  var step3 = 'memory:sdk/tests/web/native/main.dart#step3';
   var builder = ProgramSplitBuilder();
   return [
     ...imports.map(builder.referenceNode),
-    builder.orNode('step2', {step2a, step2b}),
-    builder.orderNode(step1, 'step2'),
-    builder.orderNode('step2', step3),
+    builder.orNode('step2', ['step2a', 'step2b']),
+    builder.orderNode('step1', 'step2'),
+    builder.orderNode('step2', 'step3'),
   ];
 }
diff --git a/pkg/compiler/test/custom_split/data/diamond_or/constraints.json b/pkg/compiler/test/custom_split/data/diamond_or/constraints.json
index c4091f4..5fcc300 100644
--- a/pkg/compiler/test/custom_split/data/diamond_or/constraints.json
+++ b/pkg/compiler/test/custom_split/data/diamond_or/constraints.json
@@ -1,40 +1,40 @@
 [
   {
     "type": "reference",
-    "name": "memory:sdk/tests/web/native/main.dart#step1",
+    "name": "step1",
     "import": "memory:sdk/tests/web/native/main.dart#step1"
   },
   {
     "type": "reference",
-    "name": "memory:sdk/tests/web/native/main.dart#step2a",
+    "name": "step2a",
     "import": "memory:sdk/tests/web/native/main.dart#step2a"
   },
   {
     "type": "reference",
-    "name": "memory:sdk/tests/web/native/main.dart#step2b",
+    "name": "step2b",
     "import": "memory:sdk/tests/web/native/main.dart#step2b"
   },
   {
     "type": "reference",
-    "name": "memory:sdk/tests/web/native/main.dart#step3",
+    "name": "step3",
     "import": "memory:sdk/tests/web/native/main.dart#step3"
   },
   {
     "type": "or",
     "name": "step2",
     "nodes": [
-      "memory:sdk/tests/web/native/main.dart#step2a",
-      "memory:sdk/tests/web/native/main.dart#step2b"
+      "step2a",
+      "step2b"
     ]
   },
   {
     "type": "order",
-    "predecessor": "memory:sdk/tests/web/native/main.dart#step1",
+    "predecessor": "step1",
     "successor": "step2"
   },
   {
     "type": "order",
     "predecessor": "step2",
-    "successor": "memory:sdk/tests/web/native/main.dart#step3"
+    "successor": "step3"
   }
-]
\ No newline at end of file
+]
diff --git a/pkg/compiler/test/custom_split/data/two_branch/constraints.dart b/pkg/compiler/test/custom_split/data/two_branch/constraints.dart
index 27a00ab..1e6ad05 100644
--- a/pkg/compiler/test/custom_split/data/two_branch/constraints.dart
+++ b/pkg/compiler/test/custom_split/data/two_branch/constraints.dart
@@ -12,13 +12,10 @@
 }
 
 List<Node> processDeferredImports(List<String> imports) {
-  var step1 = 'memory:sdk/tests/web/native/main.dart#step1';
-  var step2a = 'memory:sdk/tests/web/native/main.dart#step2a';
-  var step2b = 'memory:sdk/tests/web/native/main.dart#step2b';
   var builder = ProgramSplitBuilder();
   return [
     ...imports.map(builder.referenceNode),
-    builder.orderNode(step1, step2a),
-    builder.orderNode(step1, step2b),
+    builder.orderNode('step1', 'step2a'),
+    builder.orderNode('step1', 'step2b'),
   ];
 }
diff --git a/pkg/compiler/test/custom_split/data/two_branch/constraints.json b/pkg/compiler/test/custom_split/data/two_branch/constraints.json
index 1a29d7b..8b86071 100644
--- a/pkg/compiler/test/custom_split/data/two_branch/constraints.json
+++ b/pkg/compiler/test/custom_split/data/two_branch/constraints.json
@@ -1,27 +1,27 @@
 [
   {
     "type": "reference",
-    "name": "memory:sdk/tests/web/native/main.dart#step1",
+    "name": "step1",
     "import": "memory:sdk/tests/web/native/main.dart#step1"
   },
   {
     "type": "reference",
-    "name": "memory:sdk/tests/web/native/main.dart#step2a",
+    "name": "step2a",
     "import": "memory:sdk/tests/web/native/main.dart#step2a"
   },
   {
     "type": "reference",
-    "name": "memory:sdk/tests/web/native/main.dart#step2b",
+    "name": "step2b",
     "import": "memory:sdk/tests/web/native/main.dart#step2b"
   },
   {
     "type": "order",
-    "predecessor": "memory:sdk/tests/web/native/main.dart#step1",
-    "successor": "memory:sdk/tests/web/native/main.dart#step2a"
+    "predecessor": "step1",
+    "successor": "step2a"
   },
   {
     "type": "order",
-    "predecessor": "memory:sdk/tests/web/native/main.dart#step1",
-    "successor": "memory:sdk/tests/web/native/main.dart#step2b"
+    "predecessor": "step1",
+    "successor": "step2b"
   }
-]
\ No newline at end of file
+]
diff --git a/pkg/compiler/test/custom_split/data/two_step/constraints.dart b/pkg/compiler/test/custom_split/data/two_step/constraints.dart
index fe0d8a5..9089c5c 100644
--- a/pkg/compiler/test/custom_split/data/two_step/constraints.dart
+++ b/pkg/compiler/test/custom_split/data/two_step/constraints.dart
@@ -12,13 +12,10 @@
 }
 
 List<Node> processDeferredImports(List<String> imports) {
-  var step1 = 'memory:sdk/tests/web/native/main.dart#step1';
-  var step2 = 'memory:sdk/tests/web/native/main.dart#step2';
-  var step3 = 'memory:sdk/tests/web/native/main.dart#step3';
   var builder = ProgramSplitBuilder();
   return [
     ...imports.map(builder.referenceNode),
-    builder.orderNode(step1, step2),
-    builder.orderNode(step2, step3),
+    builder.orderNode('step1', 'step2'),
+    builder.orderNode('step2', 'step3'),
   ];
 }
diff --git a/pkg/compiler/test/custom_split/data/two_step/constraints.json b/pkg/compiler/test/custom_split/data/two_step/constraints.json
index 77a02de..b72db44 100644
--- a/pkg/compiler/test/custom_split/data/two_step/constraints.json
+++ b/pkg/compiler/test/custom_split/data/two_step/constraints.json
@@ -1,27 +1,27 @@
 [
   {
     "type": "reference",
-    "name": "memory:sdk/tests/web/native/main.dart#step1",
+    "name": "step1",
     "import": "memory:sdk/tests/web/native/main.dart#step1"
   },
   {
     "type": "reference",
-    "name": "memory:sdk/tests/web/native/main.dart#step2",
+    "name": "step2",
     "import": "memory:sdk/tests/web/native/main.dart#step2"
   },
   {
     "type": "reference",
-    "name": "memory:sdk/tests/web/native/main.dart#step3",
+    "name": "step3",
     "import": "memory:sdk/tests/web/native/main.dart#step3"
   },
   {
     "type": "order",
-    "predecessor": "memory:sdk/tests/web/native/main.dart#step1",
-    "successor": "memory:sdk/tests/web/native/main.dart#step2"
+    "predecessor": "step1",
+    "successor": "step2"
   },
   {
     "type": "order",
-    "predecessor": "memory:sdk/tests/web/native/main.dart#step2",
-    "successor": "memory:sdk/tests/web/native/main.dart#step3"
+    "predecessor": "step2",
+    "successor": "step3"
   }
-]
\ No newline at end of file
+]
