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

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

Issue 2880213002: Reduce use of relativize and unsort methods. (Closed)
Patch Set: Fix warning and ensure only one AST node is created. Created 3 years, 7 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_function_type_alias_builder.dart
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_alias_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_alias_builder.dart
index f69cf3406c614a7bd6244c561a37175ec5c739c6..fea4cea5f9d707b3087ae33a715d33e3678ce7af 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_alias_builder.dart
@@ -4,7 +4,6 @@
library fasta.kernel_function_type_alias_builder;
-import 'package:front_end/src/fasta/util/relativize.dart';
import 'package:kernel/ast.dart'
show
DartType,
@@ -14,15 +13,16 @@ import 'package:kernel/ast.dart'
NamedType,
TypeParameter,
Typedef;
+
import 'package:kernel/type_algebra.dart' show substitute;
import '../messages.dart' show warning;
+
import 'kernel_builder.dart'
show
FormalParameterBuilder,
FunctionTypeAliasBuilder,
KernelFormalParameterBuilder,
- KernelLibraryBuilder,
KernelTypeBuilder,
KernelTypeVariableBuilder,
LibraryBuilder,
@@ -32,9 +32,9 @@ import 'kernel_builder.dart'
class KernelFunctionTypeAliasBuilder
extends FunctionTypeAliasBuilder<KernelTypeBuilder, DartType> {
- DartType thisType;
+ final Typedef target;
- DartType type;
+ DartType thisType;
KernelFunctionTypeAliasBuilder(
List<MetadataBuilder> metadata,
@@ -43,16 +43,17 @@ class KernelFunctionTypeAliasBuilder
List<TypeVariableBuilder> typeVariables,
List<FormalParameterBuilder> formals,
LibraryBuilder parent,
- int charOffset)
- : super(metadata, returnType, name, typeVariables, formals, parent,
+ int charOffset,
+ [Typedef target])
+ : target = target ??
+ (new Typedef(name, null, fileUri: parent.target.fileUri)
+ ..fileOffset = charOffset),
+ super(metadata, returnType, name, typeVariables, formals, parent,
charOffset);
- Typedef build(KernelLibraryBuilder libraryBuilder) {
- DartType type = buildThisType(libraryBuilder);
- var typedef_ = new Typedef(name, type);
- typedef_.fileUri = relativizeUri(parent.fileUri);
- typedef_.fileOffset = charOffset;
- return typedef_;
+ Typedef build(LibraryBuilder libraryBuilder) {
+ // TODO(ahe): We need to move type parameters from [thisType] to [target].
+ return target..type ??= buildThisType(libraryBuilder);
}
DartType buildThisType(LibraryBuilder library) {
@@ -99,22 +100,6 @@ class KernelFunctionTypeAliasBuilder
requiredParameterCount: requiredParameterCount);
}
- DartType buildType(
- LibraryBuilder library, List<KernelTypeBuilder> arguments) {
- var thisType = buildThisType(library);
- if (thisType is DynamicType) return thisType;
- FunctionType result = thisType;
- if (result.typeParameters.isEmpty && arguments == null) return result;
- // Otherwise, substitute.
- List<DartType> builtArguments = <DartType>[];
- if (arguments != null) {
- for (int i = 0; i < arguments.length; i++) {
- builtArguments.add(arguments[i].build(library));
- }
- }
- return buildTypesWithBuiltArguments(library, builtArguments);
- }
-
/// [arguments] have already been built.
DartType buildTypesWithBuiltArguments(
LibraryBuilder library, List<DartType> arguments) {
@@ -130,4 +115,21 @@ class KernelFunctionTypeAliasBuilder
}
return substitute(result.withoutTypeParameters, substitution);
}
+
+ @override
+ DartType buildType(
+ LibraryBuilder library, List<KernelTypeBuilder> arguments) {
+ var thisType = buildThisType(library);
+ if (thisType is DynamicType) return thisType;
+ FunctionType result = thisType;
+ if (result.typeParameters.isEmpty && arguments == null) return result;
+ // Otherwise, substitute.
+ List<DartType> builtArguments = <DartType>[];
+ if (arguments != null) {
+ for (int i = 0; i < arguments.length; i++) {
+ builtArguments.add(arguments[i].build(library));
+ }
+ }
+ return buildTypesWithBuiltArguments(library, builtArguments);
+ }
}

Powered by Google App Engine
This is Rietveld 408576698