Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(691)

Unified Diff: pkg/front_end/lib/src/fasta/kernel/kernel_named_type_builder.dart

Issue 2729943003: Recover from bad supertypes. (Closed)
Patch Set: Update status files. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/front_end/lib/src/fasta/kernel/kernel_named_type_builder.dart
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_named_type_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_named_type_builder.dart
index f4f88acffe0ec954049e50166f87031a946b65d4..7dd7fb383ba3cc1c06f11ef3c04cf155eefb4a3c 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_named_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_named_type_builder.dart
@@ -14,6 +14,7 @@ import 'kernel_builder.dart'
KernelClassBuilder,
KernelInvalidTypeBuilder,
KernelTypeBuilder,
+ LibraryBuilder,
NamedTypeBuilder,
TypeBuilder,
TypeVariableBuilder;
@@ -37,27 +38,35 @@ class KernelNamedTypeBuilder
return const DynamicType();
}
- Supertype handleMissingSuperType() {
+ Supertype handleMissingSupertype() {
warning(fileUri, charOffset, "No type for: '$name'.");
return null;
}
- DartType build() {
+ Supertype handleInvalidSupertype(LibraryBuilder library) {
+ String message = builder.isTypeVariable
+ ? "The type variable '$name' can't be used as supertype."
+ : "The type '$name' can't be used as supertype.";
+ library.addCompileTimeError(charOffset, message, fileUri);
+ return null;
+ }
+
+ DartType build(LibraryBuilder library) {
if (name == "void") return const VoidType();
if (name == "dynamic") return const DynamicType();
if (builder == null) return handleMissingType();
- return builder.buildType(arguments);
+ return builder.buildType(library, arguments);
}
- Supertype buildSupertype() {
+ Supertype buildSupertype(LibraryBuilder library) {
if (name == "void") return null;
if (name == "dynamic") return null;
- if (builder == null) return handleMissingSuperType();
+ if (builder == null) return handleMissingSupertype();
if (builder is KernelClassBuilder) {
KernelClassBuilder builder = this.builder;
- return builder.buildSupertype(arguments);
+ return builder.buildSupertype(library, arguments);
} else {
- return handleMissingSuperType();
+ return handleInvalidSupertype(library);
}
}

Powered by Google App Engine
This is Rietveld 408576698