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); |
+ } |
} |