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

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

Issue 2967923002: Use type variables on Typedef correctly. (Closed)
Patch Set: Fix NPE and change compile-time error to warning. Created 3 years, 5 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_builder.dart
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_builder.dart
index a1fe16acc6476fd1ea34479e634651b2aac17e9b..dfa36a8645065a299ee78b34298ab52608c2f32e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_builder.dart
@@ -34,7 +34,37 @@ class KernelFunctionTypeBuilder extends FunctionTypeBuilder
: super(charOffset, fileUri, returnType, typeVariables, formals);
DartType build(LibraryBuilder library) {
- return buildFunctionType(library, returnType, typeVariables, formals);
+ DartType builtReturnType =
+ returnType?.build(library) ?? const DynamicType();
+ List<DartType> positionalParameters = <DartType>[];
+ List<NamedType> namedParameters;
+ int requiredParameterCount = 0;
+ if (formals != null) {
+ for (KernelFormalParameterBuilder formal in formals) {
+ DartType type = formal.type?.build(library) ?? const DynamicType();
+ if (formal.isPositional) {
+ positionalParameters.add(type);
+ if (formal.isRequired) requiredParameterCount++;
+ } else if (formal.isNamed) {
+ namedParameters ??= <NamedType>[];
+ namedParameters.add(new NamedType(formal.name, type));
+ }
+ }
+ if (namedParameters != null) {
+ namedParameters.sort();
+ }
+ }
+ List<TypeParameter> typeParameters;
+ if (typeVariables != null) {
+ typeParameters = <TypeParameter>[];
+ for (KernelTypeVariableBuilder t in typeVariables) {
+ typeParameters.add(t.parameter);
+ }
+ }
+ return new FunctionType(positionalParameters, builtReturnType,
+ namedParameters: namedParameters ?? const <NamedType>[],
+ typeParameters: typeParameters ?? const <TypeParameter>[],
+ requiredParameterCount: requiredParameterCount);
}
Supertype buildSupertype(LibraryBuilder library) {
@@ -44,40 +74,3 @@ class KernelFunctionTypeBuilder extends FunctionTypeBuilder
return null;
}
}
-
-FunctionType buildFunctionType(
- LibraryBuilder library,
- KernelTypeBuilder returnType,
- List<TypeVariableBuilder> typeVariables,
- List<FormalParameterBuilder> formals) {
- DartType builtReturnType = returnType?.build(library) ?? const DynamicType();
- List<DartType> positionalParameters = <DartType>[];
- List<NamedType> namedParameters;
- int requiredParameterCount = 0;
- if (formals != null) {
- for (KernelFormalParameterBuilder formal in formals) {
- DartType type = formal.type?.build(library) ?? const DynamicType();
- if (formal.isPositional) {
- positionalParameters.add(type);
- if (formal.isRequired) requiredParameterCount++;
- } else if (formal.isNamed) {
- namedParameters ??= <NamedType>[];
- namedParameters.add(new NamedType(formal.name, type));
- }
- }
- if (namedParameters != null) {
- namedParameters.sort();
- }
- }
- List<TypeParameter> typeParameters;
- if (typeVariables != null) {
- typeParameters = <TypeParameter>[];
- for (KernelTypeVariableBuilder t in typeVariables) {
- typeParameters.add(t.parameter);
- }
- }
- return new FunctionType(positionalParameters, builtReturnType,
- namedParameters: namedParameters ?? const <NamedType>[],
- typeParameters: typeParameters ?? const <TypeParameter>[],
- requiredParameterCount: requiredParameterCount);
-}

Powered by Google App Engine
This is Rietveld 408576698