Add Loader.computeTypeBuilder
Change-Id: Ida90356e4675b95bdeebe2962aa7359e64c6bc93
Reviewed-on: https://dart-review.googlesource.com/c/92123
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 63af1f2..aa5785b 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
@@ -6,35 +6,15 @@
import 'dart:async' show Future;
-import 'package:kernel/ast.dart'
- show
- BottomType,
- Class,
- Component,
- DartType,
- DartTypeVisitor,
- DynamicType,
- FunctionType,
- InterfaceType,
- InvalidType,
- Library,
- TypeParameter,
- TypeParameterType,
- TypedefType,
- VoidType;
+import 'package:kernel/ast.dart' show Class, Component, DartType, Library;
import '../fasta_codes.dart'
show SummaryTemplate, Template, templateDillOutlineSummary;
import '../kernel/kernel_builder.dart'
- show
- DynamicTypeBuilder,
- KernelClassBuilder,
- KernelNamedTypeBuilder,
- KernelTypeBuilder,
- KernelTypeVariableBuilder,
- LibraryBuilder,
- VoidTypeBuilder;
+ show KernelClassBuilder, KernelTypeBuilder, LibraryBuilder;
+
+import '../kernel/type_builder_computer.dart' show TypeBuilderComputer;
import '../loader.dart' show Loader;
@@ -42,8 +22,6 @@
import '../target_implementation.dart' show TargetImplementation;
-import 'dill_class_builder.dart' show DillClassBuilder;
-
import 'dill_library_builder.dart' show DillLibraryBuilder;
import 'dill_target.dart' show DillTarget;
@@ -107,68 +85,8 @@
return library[cls.name];
}
+ @override
KernelTypeBuilder computeTypeBuilder(DartType type) {
return type.accept(new TypeBuilderComputer(this));
}
}
-
-class TypeBuilderComputer implements DartTypeVisitor<KernelTypeBuilder> {
- final DillLoader loader;
-
- const TypeBuilderComputer(this.loader);
-
- KernelTypeBuilder defaultDartType(DartType node) {
- throw "Unsupported";
- }
-
- KernelTypeBuilder visitInvalidType(InvalidType node) {
- throw "Not implemented";
- }
-
- KernelTypeBuilder visitDynamicType(DynamicType node) {
- return new KernelNamedTypeBuilder("dynamic", null)
- ..bind(new DynamicTypeBuilder<KernelTypeBuilder, DartType>(
- const DynamicType(), loader.coreLibrary, -1));
- }
-
- KernelTypeBuilder visitVoidType(VoidType node) {
- return new KernelNamedTypeBuilder("void", null)
- ..bind(new VoidTypeBuilder<KernelTypeBuilder, VoidType>(
- const VoidType(), loader.coreLibrary, -1));
- }
-
- KernelTypeBuilder visitBottomType(BottomType node) {
- throw "Not implemented";
- }
-
- KernelTypeBuilder visitInterfaceType(InterfaceType node) {
- DillClassBuilder cls =
- loader.computeClassBuilderFromTargetClass(node.classNode);
- 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(cls.name, arguments)..bind(cls);
- }
-
- KernelTypeBuilder visitFunctionType(FunctionType node) {
- throw "Not implemented";
- }
-
- KernelTypeBuilder visitTypeParameterType(TypeParameterType node) {
- 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) {
- throw "Not implemented";
- }
-}
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
index 861f6cc..bbb6e4f 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -119,7 +119,7 @@
/// The [MetadataCollector] to write metadata to.
final MetadataCollector metadataCollector;
- SourceLoader<Library> loader;
+ SourceLoader loader;
Component component;
@@ -147,8 +147,8 @@
void set builderHierarchy(ClassHierarchyBuilder o) {}
- SourceLoader<Library> createLoader() =>
- new SourceLoader<Library>(fileSystem, includeComments, this);
+ SourceLoader createLoader() =>
+ new SourceLoader(fileSystem, includeComments, this);
void addSourceInformation(
Uri uri, List<int> lineStarts, List<int> sourceCode) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/transform_set_literals.dart b/pkg/front_end/lib/src/fasta/kernel/transform_set_literals.dart
index e32f179..abc2f4d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/transform_set_literals.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/transform_set_literals.dart
@@ -55,8 +55,7 @@
return coreTypes.index.getMember('dart:core', 'Set', 'add');
}
- static Constructor _findUnmodifiableSetConstructor(
- SourceLoader<Library> loader) {
+ static Constructor _findUnmodifiableSetConstructor(SourceLoader loader) {
// We should not generally dig into libraries like this, and we should
// avoid dependencies on libraries other than the ones indexed by
// CoreTypes. This is a temporary solution until all backends have
@@ -77,7 +76,7 @@
return null;
}
- SetLiteralTransformer(SourceLoader<Library> loader)
+ SetLiteralTransformer(SourceLoader loader)
: coreTypes = loader.coreTypes,
nullType = new InterfaceType(loader.coreTypes.nullClass, []),
setFactory = _findSetFactory(loader.coreTypes),
diff --git a/pkg/front_end/lib/src/fasta/kernel/type_builder_computer.dart b/pkg/front_end/lib/src/fasta/kernel/type_builder_computer.dart
new file mode 100644
index 0000000..390f4e4
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/kernel/type_builder_computer.dart
@@ -0,0 +1,95 @@
+// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
+// 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.
+
+library fasta.type_builder_computer;
+
+import 'package:kernel/ast.dart'
+ show
+ BottomType,
+ Class,
+ DartType,
+ DartTypeVisitor,
+ DynamicType,
+ FunctionType,
+ InterfaceType,
+ InvalidType,
+ Library,
+ TypeParameter,
+ TypeParameterType,
+ TypedefType,
+ VoidType;
+
+import '../kernel/kernel_builder.dart'
+ show
+ DynamicTypeBuilder,
+ KernelClassBuilder,
+ KernelNamedTypeBuilder,
+ KernelTypeBuilder,
+ KernelTypeVariableBuilder,
+ LibraryBuilder,
+ VoidTypeBuilder;
+
+import '../loader.dart' show Loader;
+
+class TypeBuilderComputer implements DartTypeVisitor<KernelTypeBuilder> {
+ final Loader<Library> loader;
+
+ const TypeBuilderComputer(this.loader);
+
+ KernelTypeBuilder defaultDartType(DartType node) {
+ throw "Unsupported";
+ }
+
+ KernelTypeBuilder visitInvalidType(InvalidType node) {
+ throw "Not implemented";
+ }
+
+ KernelTypeBuilder visitDynamicType(DynamicType node) {
+ return new KernelNamedTypeBuilder("dynamic", null)
+ ..bind(new DynamicTypeBuilder<KernelTypeBuilder, DartType>(
+ const DynamicType(), loader.coreLibrary, -1));
+ }
+
+ KernelTypeBuilder visitVoidType(VoidType node) {
+ return new KernelNamedTypeBuilder("void", null)
+ ..bind(new VoidTypeBuilder<KernelTypeBuilder, VoidType>(
+ const VoidType(), loader.coreLibrary, -1));
+ }
+
+ KernelTypeBuilder visitBottomType(BottomType node) {
+ throw "Not implemented";
+ }
+
+ KernelTypeBuilder visitInterfaceType(InterfaceType node) {
+ KernelClassBuilder cls =
+ loader.computeClassBuilderFromTargetClass(node.classNode);
+ 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(cls.name, arguments)..bind(cls);
+ }
+
+ KernelTypeBuilder visitFunctionType(FunctionType node) {
+ throw "Not implemented";
+ }
+
+ KernelTypeBuilder visitTypeParameterType(TypeParameterType node) {
+ TypeParameter parameter = node.parameter;
+ Class kernelClass = parameter.parent;
+ Library kernelLibrary = kernelClass.enclosingLibrary;
+ LibraryBuilder<KernelTypeBuilder, Library> library =
+ loader.builders[kernelLibrary.importUri];
+ return new KernelNamedTypeBuilder(parameter.name, null)
+ ..bind(new KernelTypeVariableBuilder.fromKernel(parameter, library));
+ }
+
+ KernelTypeBuilder visitTypedefType(TypedefType node) {
+ throw "Not implemented";
+ }
+}
diff --git a/pkg/front_end/lib/src/fasta/loader.dart b/pkg/front_end/lib/src/fasta/loader.dart
index 74e73fa6..da5a124 100644
--- a/pkg/front_end/lib/src/fasta/loader.dart
+++ b/pkg/front_end/lib/src/fasta/loader.dart
@@ -307,4 +307,6 @@
ClassBuilder<TypeBuilder, Object> computeClassBuilderFromTargetClass(
covariant Object cls);
+
+ TypeBuilder computeTypeBuilder(covariant Object type);
}
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index 6702683..05cc836 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -82,6 +82,7 @@
KernelClassBuilder,
KernelFieldBuilder,
KernelProcedureBuilder,
+ KernelTypeBuilder,
LibraryBuilder,
NamedTypeBuilder,
TypeBuilder;
@@ -92,6 +93,8 @@
import '../kernel/transform_set_literals.dart' show SetLiteralTransformer;
+import '../kernel/type_builder_computer.dart' show TypeBuilderComputer;
+
import '../loader.dart' show Loader, untranslatableUriScheme;
import '../parser/class_member_parser.dart' show ClassMemberParser;
@@ -119,7 +122,7 @@
import 'source_library_builder.dart' show SourceLibraryBuilder;
-class SourceLoader<L> extends Loader<L> {
+class SourceLoader extends Loader<Library> {
/// The [FileSystem] which should be used to access files.
final FileSystem fileSystem;
@@ -754,7 +757,7 @@
builders.forEach((Uri uri, LibraryBuilder library) {
if (library.loader == this) {
SourceLibraryBuilder sourceLibrary = library;
- L target = sourceLibrary.build(coreLibrary);
+ Library target = sourceLibrary.build(coreLibrary);
if (!library.isPatch) {
libraries.add(target);
}
@@ -1115,6 +1118,11 @@
LibraryBuilder library = builders[kernelLibrary.importUri];
return library[cls.name];
}
+
+ @override
+ KernelTypeBuilder computeTypeBuilder(DartType type) {
+ return type.accept(new TypeBuilderComputer(this));
+ }
}
/// A minimal implementation of dart:core that is sufficient to create an