Reland "[dart2js] Address some feedback on constraints API."

This is a reland of 851d821556a7cbb1097336a4b5895f31360de904

Original change's description:
> [dart2js] Address some feedback on constraints API.
>
> * Changes default namer to use the always unique uri#prefix of a
> deferred import.
> * Changes builder api for combiner nodes to take sets.
>
> Change-Id: Iab23db94a166560682a8c2bd4a78ebfd3e734353
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/218880
> Reviewed-by: Sigmund Cherem <sigmund@google.com>
> Commit-Queue: Joshua Litt <joshualitt@google.com>

Change-Id: I6394166be1f3ddebe19cc71f70fa5f5b26e05231
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/219128
Commit-Queue: Joshua Litt <joshualitt@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
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 9f10c18..dc1ec97 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,8 +44,7 @@
   Uri get uri => _uriAndPrefix.uri;
   String get prefix => _uriAndPrefix.prefix;
 
-  ReferenceNode(this._uriAndPrefix, {name})
-      : super(name ?? _uriAndPrefix.prefix);
+  ReferenceNode(String name, this._uriAndPrefix) : super(name);
 
   @override
   Map<String, dynamic> toJson() {
@@ -60,8 +59,8 @@
     if (nodeJson['type'] != 'reference') {
       throw 'Unrecognized type for reference node: ${nodeJson['type']}.';
     }
-    return ReferenceNode(UriAndPrefix.fromJson(nodeJson['import']),
-        name: nodeJson['name']);
+    return ReferenceNode(
+        nodeJson['name'], UriAndPrefix.fromJson(nodeJson['import']));
   }
 
   @override
@@ -193,9 +192,10 @@
   final Map<String, NamedNode> namedNodes = {};
   ReferenceNodeNamer _referenceNodeNamer;
 
-  /// 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;
+  /// 'uri#prefix' will become a key to reference this node in other builder
+  /// calls.
+  String _uriAndPrefixNamer(UriAndPrefix uriAndPrefix) =>
+      uriAndPrefix.toString();
 
   /// Override the default reference node namer.
   set referenceNodeNamer(ReferenceNodeNamer namer) =>
@@ -203,7 +203,16 @@
 
   /// Returns the [ReferenceNodeNamer] to use for naming.
   ReferenceNodeNamer get referenceNodeNamer =>
-      _referenceNodeNamer ?? _prefixNamer;
+      _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;
+  }
 
   /// Returns a [ReferenceNode] referencing [importUriAndPrefix].
   /// [ReferenceNode]s are typically created in bulk, by mapping over a list of
@@ -212,10 +221,8 @@
   /// [referenceNodeNamer] per [ReferenceNode].
   ReferenceNode referenceNode(String importUriAndPrefix) {
     var uriAndPrefix = UriAndPrefix.fromJson(importUriAndPrefix);
-    var referenceNode = ReferenceNode(uriAndPrefix);
     var name = referenceNodeNamer(uriAndPrefix);
-    namedNodes[name] = referenceNode;
-    return referenceNode;
+    return _addNamedNode(ReferenceNode(name, uriAndPrefix));
   }
 
   /// Creates an unnamed [RelativeOrderNode] referencing two [NamedNode]s.
@@ -226,29 +233,37 @@
 
   /// Creates a [CombinerNode] which can be referenced by [name] in further
   /// calls to the builder.
-  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;
+  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()));
   }
 
   /// Creates an 'and' [CombinerNode] which can be referenced by [name] in
   /// further calls to the builder.
-  CombinerNode andNode(String name, List<String> nodes) {
+  CombinerNode andNode(String name, Set<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, List<String> nodes) {
+  CombinerNode fuseNode(String name, Set<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, List<String> nodes) {
+  CombinerNode orNode(String name, Set<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 fb0968a..f1e4fd4 100644
--- a/pkg/compiler/test/custom_split/custom_split_test.dart
+++ b/pkg/compiler/test/custom_split/custom_split_test.dart
@@ -83,17 +83,30 @@
   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 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);
+  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);
 }
 
 /// Compute the [OutputUnit]s for all source files involved in the test, and
@@ -102,6 +115,7 @@
 /// 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(),
@@ -109,6 +123,8 @@
         perTestOptions: createPerTestOptions(),
         args: args, setUpFunction: () {
       importPrefixes.clear();
-    }, testedConfigs: allSpecConfigs, verifyCompiler: verifyCompiler);
+    },
+        testedConfigs: allSpecConfigs,
+        verifyCompiler: generateGoldens ? generateJSON : verifyCompiler);
   });
 }
diff --git a/pkg/compiler/test/custom_split/data/diamond/constraints.dart b/pkg/compiler/test/custom_split/data/diamond/constraints.dart
index 92a7665..88ccb84 100644
--- a/pkg/compiler/test/custom_split/data/diamond/constraints.dart
+++ b/pkg/compiler/test/custom_split/data/diamond/constraints.dart
@@ -12,12 +12,16 @@
 }
 
 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 83dfe0a..21b8afa 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": "step1",
+    "name": "memory:sdk/tests/web/native/main.dart#step1",
     "import": "memory:sdk/tests/web/native/main.dart#step1"
   },
   {
     "type": "reference",
-    "name": "step2a",
+    "name": "memory:sdk/tests/web/native/main.dart#step2a",
     "import": "memory:sdk/tests/web/native/main.dart#step2a"
   },
   {
     "type": "reference",
-    "name": "step2b",
+    "name": "memory:sdk/tests/web/native/main.dart#step2b",
     "import": "memory:sdk/tests/web/native/main.dart#step2b"
   },
   {
     "type": "reference",
-    "name": "step3",
+    "name": "memory:sdk/tests/web/native/main.dart#step3",
     "import": "memory:sdk/tests/web/native/main.dart#step3"
   },
   {
     "type": "order",
-    "predecessor": "step1",
-    "successor": "step2a"
+    "predecessor": "memory:sdk/tests/web/native/main.dart#step1",
+    "successor": "memory:sdk/tests/web/native/main.dart#step2a"
   },
   {
     "type": "order",
-    "predecessor": "step1",
-    "successor": "step2b"
+    "predecessor": "memory:sdk/tests/web/native/main.dart#step1",
+    "successor": "memory:sdk/tests/web/native/main.dart#step2b"
   },
   {
     "type": "order",
-    "predecessor": "step2a",
-    "successor": "step3"
+    "predecessor": "memory:sdk/tests/web/native/main.dart#step2a",
+    "successor": "memory:sdk/tests/web/native/main.dart#step3"
   },
   {
     "type": "order",
-    "predecessor": "step2b",
-    "successor": "step3"
+    "predecessor": "memory:sdk/tests/web/native/main.dart#step2b",
+    "successor": "memory:sdk/tests/web/native/main.dart#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 b3a40ca..a333016 100644
--- a/pkg/compiler/test/custom_split/data/diamond_and/constraints.dart
+++ b/pkg/compiler/test/custom_split/data/diamond_and/constraints.dart
@@ -12,11 +12,15 @@
 }
 
 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 931a910..85344e7 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": "step1",
+    "name": "memory:sdk/tests/web/native/main.dart#step1",
     "import": "memory:sdk/tests/web/native/main.dart#step1"
   },
   {
     "type": "reference",
-    "name": "step2a",
+    "name": "memory:sdk/tests/web/native/main.dart#step2a",
     "import": "memory:sdk/tests/web/native/main.dart#step2a"
   },
   {
     "type": "reference",
-    "name": "step2b",
+    "name": "memory:sdk/tests/web/native/main.dart#step2b",
     "import": "memory:sdk/tests/web/native/main.dart#step2b"
   },
   {
     "type": "reference",
-    "name": "step3",
+    "name": "memory:sdk/tests/web/native/main.dart#step3",
     "import": "memory:sdk/tests/web/native/main.dart#step3"
   },
   {
     "type": "and",
     "name": "step2",
     "nodes": [
-      "step2a",
-      "step2b"
+      "memory:sdk/tests/web/native/main.dart#step2a",
+      "memory:sdk/tests/web/native/main.dart#step2b"
     ]
   },
   {
     "type": "order",
-    "predecessor": "step1",
+    "predecessor": "memory:sdk/tests/web/native/main.dart#step1",
     "successor": "step2"
   },
   {
     "type": "order",
     "predecessor": "step2",
-    "successor": "step3"
+    "successor": "memory:sdk/tests/web/native/main.dart#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 6fdf62e..145cbd1 100644
--- a/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.dart
+++ b/pkg/compiler/test/custom_split/data/diamond_fuse/constraints.dart
@@ -12,11 +12,15 @@
 }
 
 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 f170d18..dccfe20 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": "step1",
+    "name": "memory:sdk/tests/web/native/main.dart#step1",
     "import": "memory:sdk/tests/web/native/main.dart#step1"
   },
   {
     "type": "reference",
-    "name": "step2a",
+    "name": "memory:sdk/tests/web/native/main.dart#step2a",
     "import": "memory:sdk/tests/web/native/main.dart#step2a"
   },
   {
     "type": "reference",
-    "name": "step2b",
+    "name": "memory:sdk/tests/web/native/main.dart#step2b",
     "import": "memory:sdk/tests/web/native/main.dart#step2b"
   },
   {
     "type": "reference",
-    "name": "step3",
+    "name": "memory:sdk/tests/web/native/main.dart#step3",
     "import": "memory:sdk/tests/web/native/main.dart#step3"
   },
   {
     "type": "fuse",
     "name": "step2",
     "nodes": [
-      "step2a",
-      "step2b"
+      "memory:sdk/tests/web/native/main.dart#step2a",
+      "memory:sdk/tests/web/native/main.dart#step2b"
     ]
   },
   {
     "type": "order",
-    "predecessor": "step1",
+    "predecessor": "memory:sdk/tests/web/native/main.dart#step1",
     "successor": "step2"
   },
   {
     "type": "order",
     "predecessor": "step2",
-    "successor": "step3"
+    "successor": "memory:sdk/tests/web/native/main.dart#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 659bf73..bdc5e1f 100644
--- a/pkg/compiler/test/custom_split/data/diamond_or/constraints.dart
+++ b/pkg/compiler/test/custom_split/data/diamond_or/constraints.dart
@@ -12,11 +12,15 @@
 }
 
 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 5fcc300..c4091f4 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": "step1",
+    "name": "memory:sdk/tests/web/native/main.dart#step1",
     "import": "memory:sdk/tests/web/native/main.dart#step1"
   },
   {
     "type": "reference",
-    "name": "step2a",
+    "name": "memory:sdk/tests/web/native/main.dart#step2a",
     "import": "memory:sdk/tests/web/native/main.dart#step2a"
   },
   {
     "type": "reference",
-    "name": "step2b",
+    "name": "memory:sdk/tests/web/native/main.dart#step2b",
     "import": "memory:sdk/tests/web/native/main.dart#step2b"
   },
   {
     "type": "reference",
-    "name": "step3",
+    "name": "memory:sdk/tests/web/native/main.dart#step3",
     "import": "memory:sdk/tests/web/native/main.dart#step3"
   },
   {
     "type": "or",
     "name": "step2",
     "nodes": [
-      "step2a",
-      "step2b"
+      "memory:sdk/tests/web/native/main.dart#step2a",
+      "memory:sdk/tests/web/native/main.dart#step2b"
     ]
   },
   {
     "type": "order",
-    "predecessor": "step1",
+    "predecessor": "memory:sdk/tests/web/native/main.dart#step1",
     "successor": "step2"
   },
   {
     "type": "order",
     "predecessor": "step2",
-    "successor": "step3"
+    "successor": "memory:sdk/tests/web/native/main.dart#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 1e6ad05..27a00ab 100644
--- a/pkg/compiler/test/custom_split/data/two_branch/constraints.dart
+++ b/pkg/compiler/test/custom_split/data/two_branch/constraints.dart
@@ -12,10 +12,13 @@
 }
 
 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 8b86071..1a29d7b 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": "step1",
+    "name": "memory:sdk/tests/web/native/main.dart#step1",
     "import": "memory:sdk/tests/web/native/main.dart#step1"
   },
   {
     "type": "reference",
-    "name": "step2a",
+    "name": "memory:sdk/tests/web/native/main.dart#step2a",
     "import": "memory:sdk/tests/web/native/main.dart#step2a"
   },
   {
     "type": "reference",
-    "name": "step2b",
+    "name": "memory:sdk/tests/web/native/main.dart#step2b",
     "import": "memory:sdk/tests/web/native/main.dart#step2b"
   },
   {
     "type": "order",
-    "predecessor": "step1",
-    "successor": "step2a"
+    "predecessor": "memory:sdk/tests/web/native/main.dart#step1",
+    "successor": "memory:sdk/tests/web/native/main.dart#step2a"
   },
   {
     "type": "order",
-    "predecessor": "step1",
-    "successor": "step2b"
+    "predecessor": "memory:sdk/tests/web/native/main.dart#step1",
+    "successor": "memory:sdk/tests/web/native/main.dart#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 9089c5c..fe0d8a5 100644
--- a/pkg/compiler/test/custom_split/data/two_step/constraints.dart
+++ b/pkg/compiler/test/custom_split/data/two_step/constraints.dart
@@ -12,10 +12,13 @@
 }
 
 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 b72db44..77a02de 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": "step1",
+    "name": "memory:sdk/tests/web/native/main.dart#step1",
     "import": "memory:sdk/tests/web/native/main.dart#step1"
   },
   {
     "type": "reference",
-    "name": "step2",
+    "name": "memory:sdk/tests/web/native/main.dart#step2",
     "import": "memory:sdk/tests/web/native/main.dart#step2"
   },
   {
     "type": "reference",
-    "name": "step3",
+    "name": "memory:sdk/tests/web/native/main.dart#step3",
     "import": "memory:sdk/tests/web/native/main.dart#step3"
   },
   {
     "type": "order",
-    "predecessor": "step1",
-    "successor": "step2"
+    "predecessor": "memory:sdk/tests/web/native/main.dart#step1",
+    "successor": "memory:sdk/tests/web/native/main.dart#step2"
   },
   {
     "type": "order",
-    "predecessor": "step2",
-    "successor": "step3"
+    "predecessor": "memory:sdk/tests/web/native/main.dart#step2",
+    "successor": "memory:sdk/tests/web/native/main.dart#step3"
   }
-]
+]
\ No newline at end of file