[dart2js] Migrate tool/graph_isomorphizer and test/tool/graph_isomorphizer for null safety migration.

Change-Id: I9061386d97bed2e366b270e9f70eb5f2e4dff404
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/279801
Commit-Queue: Nate Biggs <natebiggs@google.com>
Reviewed-by: Mayank Patke <fishythefish@google.com>
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/graph_isomorphizer_test.dart b/pkg/compiler/test/tool/graph_isomorphizer/graph_isomorphizer_test.dart
index 41f030f..0bf93e2 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/graph_isomorphizer_test.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/graph_isomorphizer_test.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart = 2.10
-
 import 'dart:io';
 
 import 'package:expect/expect.dart';
@@ -44,7 +42,7 @@
 void verifyGeneratedFile(
     String filename, StringBuffer contents, Map<String, String> expectations) {
   Expect.stringEquals(
-      DartFormatter().format(contents.toString()), expectations[filename]);
+      DartFormatter().format(contents.toString()), expectations[filename]!);
 }
 
 GraphIsomorphizer generateFiles(List<String> graphFileLines,
@@ -82,7 +80,7 @@
       options: ['--dump-deferred-graph=deferred_graph.txt'],
       outputProvider: collector);
   var actual = collector
-      .getOutput("deferred_graph.txt", api.OutputType.debug)
+      .getOutput("deferred_graph.txt", api.OutputType.debug)!
       .split('\n');
 
   // Confirm new graph is isomorphic.
diff --git a/pkg/compiler/tool/graph_isomorphizer.dart b/pkg/compiler/tool/graph_isomorphizer.dart
index 75f6378..00882a5 100644
--- a/pkg/compiler/tool/graph_isomorphizer.dart
+++ b/pkg/compiler/tool/graph_isomorphizer.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart = 2.10
-
 /// This tool builds a program with a deferred graph isomorphic to the provided
 /// graph, or generates permutations of bits and the associated files to
 /// generate complex deferred graphs.
@@ -61,7 +59,7 @@
     for (int i = 0; i < bits.length; i++) {
       if (bits[i] == 1) {
         names.putIfAbsent(i, () => []);
-        names[i].add(List.from(bits));
+        names[i]!.add(List.from(bits));
       }
     }
     return;
@@ -201,7 +199,7 @@
       // generate hierarchies. Also generate a const instance per class and a closure
       // to invoke.
       for (var bitPosition in nameKeys) {
-        var bitsList = names[bitPosition];
+        var bitsList = names[bitPosition]!;
         for (var bits in bitsList) {
           var name = generateBitString(bits);
           if (!uniques.add(name)) continue;
@@ -227,7 +225,7 @@
       newline(out);
       uniques = {};
       for (var bitPosition in nameKeys) {
-        var bitsList = names[bitPosition];
+        var bitsList = names[bitPosition]!;
         for (var bits in bitsList) {
           var name = generateBitString(bits);
           var bitCount = bits.reduce((a, b) => a + b);
@@ -239,9 +237,9 @@
             List<String> types = [];
             for (int i = 0; i < bits.length; i++) {
               if (bits[i] == 1) {
-                classes.addAll(classNames[i]);
-                mixins.addAll(mixinNames[i]);
-                types.addAll(typeNames[i]);
+                classes.addAll(classNames[i]!);
+                mixins.addAll(mixinNames[i]!);
+                types.addAll(typeNames[i]!);
               }
             }
             String mixinString = mixins.join(', ');
@@ -275,8 +273,8 @@
               out.write('implements $typeImplementsString {}\n');
               for (int i = 0; i < bits.length; i++) {
                 if (bits[i] == 1) {
-                  mixerClassNames[i].add(className);
-                  mixerTypeNames[i].add(typeName);
+                  mixerClassNames[i]!.add(className);
+                  mixerTypeNames[i]!.add(typeName);
                 }
               }
               count++;
@@ -290,7 +288,7 @@
     newline(out);
     uniques = {};
     for (var name in nameKeys) {
-      var bitsList = names[name];
+      var bitsList = names[name]!;
       for (var bits in bitsList) {
         var name = generateBitString(bits);
         if (uniques.add(name)) {
@@ -314,7 +312,7 @@
       // create type test.
       noInlineDecorator(out);
       out.write('typeTest(dynamic t) {\n');
-      for (var type in mixerTypeNames[bit]) {
+      for (var type in mixerTypeNames[bit]!) {
         out.write('  if (t is $type) { return true; }\n');
       }
       out.write('  return false;\n');
@@ -328,19 +326,19 @@
       out.write('  // C${generateCommentName(bits, bit)};\n');
 
       // Construct new instances of each class and pass them to the typeTest
-      for (var cls in mixerClassNames[bit]) {
+      for (var cls in mixerClassNames[bit]!) {
         out.write('  Expect.isFalse(typeTest($cls()));\n');
       }
       newline(out);
 
       // Invoke the test closure for each class.
-      for (var cls in mixerClassNames[bit]) {
+      for (var cls in mixerClassNames[bit]!) {
         out.write('  Expect.isTrue(closure$cls($cls())($cls()));\n');
       }
       newline(out);
 
       // Verify the runtimeTypes of the closures haven't been mangled.
-      for (var cls in mixerClassNames[bit]) {
+      for (var cls in mixerClassNames[bit]!) {
         out.write(
             '  Expect.equals(closure$cls($cls()).runtimeType.toString(), ');
         out.write("'($cls) => bool');\n");
@@ -351,7 +349,7 @@
     // Collect the names so we can sort them and put them in a canonical order.
     int count = 0;
     List<String> namesBits = [];
-    names[bit].forEach((nameBits) {
+    names[bit]!.forEach((nameBits) {
       var nameString = generateBitString(nameBits);
       namesBits.add(nameString);
       count++;