Compute type arguments of dill types.

Change-Id: I6d83ff53d7d56b2c50c221b9dd0d4ff8f0d2a5b7
Reviewed-on: https://dart-review.googlesource.com/c/88718
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_loader.dart b/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
index db29642..026c070 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
@@ -19,6 +19,7 @@
         InvalidType,
         Library,
         Source,
+        TypeParameter,
         TypeParameterType,
         TypedefType,
         VoidType;
@@ -29,7 +30,13 @@
 import '../compiler_context.dart' show CompilerContext;
 
 import '../kernel/kernel_builder.dart'
-    show KernelNamedTypeBuilder, KernelTypeBuilder, LibraryBuilder;
+    show
+        DynamicTypeBuilder,
+        KernelNamedTypeBuilder,
+        KernelTypeBuilder,
+        KernelTypeVariableBuilder,
+        LibraryBuilder,
+        VoidTypeBuilder;
 
 import '../loader.dart' show Loader;
 
@@ -113,11 +120,15 @@
   }
 
   KernelTypeBuilder visitDynamicType(DynamicType node) {
-    throw "Not implemented";
+    return new KernelNamedTypeBuilder("dynamic", null)
+      ..bind(new DynamicTypeBuilder<KernelTypeBuilder, DartType>(
+          const DynamicType(), loader.coreLibrary, -1));
   }
 
   KernelTypeBuilder visitVoidType(VoidType node) {
-    throw "Not implemented";
+    return new KernelNamedTypeBuilder("dynamic", null)
+      ..bind(new VoidTypeBuilder<KernelTypeBuilder, VoidType>(
+          const VoidType(), loader.coreLibrary, -1));
   }
 
   KernelTypeBuilder visitBottomType(BottomType node) {
@@ -130,8 +141,15 @@
     DillLibraryBuilder library = loader.builders[kernelLibrary.importUri];
     String name = kernelClass.name;
     DillClassBuilder cls = library[name];
-    // TODO(ahe): Also compute type arguments.
-    return new KernelNamedTypeBuilder(name, null)..bind(cls);
+    List<KernelTypeBuilder> arguments;
+    List<DartType> kernelArguments = node.typeArguments;
+    if (kernelArguments.isNotEmpty) {
+      arguments = new List<KernelTypeBuilder>(kernelArguments.length);
+      for (int i = 0; i < kernelArguments.length; i++) {
+        arguments[i] = kernelArguments[i].accept(this);
+      }
+    }
+    return new KernelNamedTypeBuilder(name, arguments)..bind(cls);
   }
 
   KernelTypeBuilder visitFunctionType(FunctionType node) {
@@ -139,7 +157,12 @@
   }
 
   KernelTypeBuilder visitTypeParameterType(TypeParameterType node) {
-    throw "Not implemented";
+    TypeParameter parameter = node.parameter;
+    Class kernelClass = parameter.parent;
+    Library kernelLibrary = kernelClass.enclosingLibrary;
+    DillLibraryBuilder library = loader.builders[kernelLibrary.importUri];
+    return new KernelNamedTypeBuilder(parameter.name, null)
+      ..bind(new KernelTypeVariableBuilder.fromKernel(parameter, library));
   }
 
   KernelTypeBuilder visitTypedefType(TypedefType node) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_type_variable_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_type_variable_builder.dart
index 241bb28..c427799 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_type_variable_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_type_variable_builder.dart
@@ -36,7 +36,7 @@
         super(name, bound, compilationUnit, charOffset);
 
   KernelTypeVariableBuilder.fromKernel(
-      TypeParameter parameter, KernelLibraryBuilder compilationUnit)
+      TypeParameter parameter, LibraryBuilder compilationUnit)
       : actualParameter = parameter,
         super(parameter.name, null, compilationUnit, parameter.fileOffset);
 
diff --git a/pkg/front_end/test/incremental_dart2js_load_from_dill_test.dart b/pkg/front_end/test/incremental_dart2js_load_from_dill_test.dart
index 9ae979a..cf270cb 100644
--- a/pkg/front_end/test/incremental_dart2js_load_from_dill_test.dart
+++ b/pkg/front_end/test/incremental_dart2js_load_from_dill_test.dart
@@ -75,7 +75,7 @@
     stopwatch.reset();
     bool initializeResult = await initializedCompile(
         dart2jsUrl, fullDillFromInitialized, initializeWith, [invalidateUri]);
-    Expect.equals(initializeExpect, initializeResult);
+    Expect.equals(initializeResult, initializeExpect);
     print("Initialized compile(s) from ${initializeWith.pathSegments.last} "
         "took ${stopwatch.elapsedMilliseconds} ms");