Version 2.18.0-160.0.dev
Merge commit 'eab17a790cba9713703dd8010b255801fab3f67a' into 'dev'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2eab9df..2a5483d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -139,15 +139,19 @@
It can still be created with the `--legacy-packages-file` flag.
* `dart pub outdated` now shows which of your dependencies are discontinued.
-## 2.17.2 - 2022-06-01
+## 2.17.3 - 2022-06-01
This is a patch release that fixes:
- a Dart VM compiler crash (issue [#100375][]).
-- code completion when writing method overrides (issue [#49086][]).
+- code completion when writing method overrides (issue [#49027][]).
+- the `dart pub login` command (issue [#3424][]).
+- analysis of enhanced enums (issue [#49097][]).
[#100375]: https://github.com/flutter/flutter/issues/100375
-[#49086]: https://github.com/dart-lang/sdk/issues/49086
+[#49027]: https://github.com/dart-lang/sdk/issues/49027
+[#3424]: https://github.com/dart-lang/pub/issues/3424
+[#49097]: https://github.com/dart-lang/sdk/issues/49097
## 2.17.1 - 2022-05-18
diff --git a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
index 57e4d89..fe77f2d 100644
--- a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
@@ -26,13 +26,14 @@
import 'metadata_builder.dart';
import 'modifier_builder.dart';
import 'named_type_builder.dart';
+import 'omitted_type_builder.dart';
import 'type_builder.dart';
import 'variable_builder.dart';
abstract class ParameterBuilder {
/// List of metadata builders for the metadata declared on this parameter.
List<MetadataBuilder>? get metadata;
- TypeBuilder? get type;
+ TypeBuilder get type;
/// The kind of this parameter, i.e. if it's required, positional optional,
/// or named optional.
@@ -65,7 +66,7 @@
final int modifiers;
@override
- final TypeBuilder? type;
+ final TypeBuilder type;
@override
final String name;
@@ -144,7 +145,11 @@
VariableDeclaration build(SourceLibraryBuilder library) {
if (variable == null) {
- DartType? builtType = type?.build(library, TypeUse.parameterType);
+ DartType? builtType = type is OmittedTypeBuilder
+ // `null` is used in [VariableDeclarationImpl] to signal an omitted
+ // type.
+ ? null
+ : type.build(library, TypeUse.parameterType);
variable = new VariableDeclarationImpl(
name == noNameSentinel ? null : name,
type: builtType,
@@ -168,7 +173,7 @@
// TODO(cstefantsova): It's not clear how [metadata] is used currently,
// and how it should be cloned. Consider cloning it instead of reusing it.
return new FunctionTypeParameterBuilder(metadata, kind,
- type?.clone(newTypes, contextLibrary, contextDeclaration), name);
+ type.clone(newTypes, contextLibrary, contextDeclaration), name);
}
FormalParameterBuilder forFormalParameterInitializerScope() {
@@ -271,7 +276,7 @@
final FormalParameterKind kind;
@override
- final TypeBuilder? type;
+ final TypeBuilder type;
@override
final String? name;
@@ -286,7 +291,7 @@
// TODO(cstefantsova): It's not clear how [metadata] is used currently,
// and how it should be cloned. Consider cloning it instead of reusing it.
return new FunctionTypeParameterBuilder(metadata, kind,
- type?.clone(newTypes, contextLibrary, contextDeclaration), name);
+ type.clone(newTypes, contextLibrary, contextDeclaration), name);
}
@override
diff --git a/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart
index 30493a8..3b20c82 100644
--- a/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart
@@ -22,11 +22,12 @@
import 'library_builder.dart';
import 'named_type_builder.dart';
import 'nullability_builder.dart';
+import 'omitted_type_builder.dart';
import 'type_builder.dart';
import 'type_variable_builder.dart';
class FunctionTypeBuilder extends TypeBuilder {
- final TypeBuilder? returnType;
+ final TypeBuilder returnType;
final List<TypeVariableBuilder>? typeVariables;
final List<ParameterBuilder>? formals;
@override
@@ -80,7 +81,7 @@
buffer.write(") ->");
nullabilityBuilder.writeNullabilityOn(buffer);
buffer.write(" ");
- buffer.write(returnType?.fullNameForErrors);
+ buffer.write(returnType.fullNameForErrors);
return buffer;
}
@@ -97,17 +98,17 @@
@override
DartType buildAliased(LibraryBuilder library, TypeUse typeUse) {
- DartType builtReturnType =
- returnType?.buildAliased(library, TypeUse.returnType) ??
- const DynamicType();
+ DartType builtReturnType = returnType is OmittedTypeBuilder
+ ? const DynamicType()
+ : returnType.buildAliased(library, TypeUse.returnType);
List<DartType> positionalParameters = <DartType>[];
List<NamedType>? namedParameters;
int requiredParameterCount = 0;
if (formals != null) {
for (ParameterBuilder formal in formals!) {
- DartType type =
- formal.type?.buildAliased(library, TypeUse.parameterType) ??
- const DynamicType();
+ DartType type = formal.type is OmittedTypeBuilder
+ ? const DynamicType()
+ : formal.type.buildAliased(library, TypeUse.parameterType);
if (formal.isPositional) {
positionalParameters.add(type);
if (formal.isRequiredPositional) requiredParameterCount++;
@@ -169,7 +170,7 @@
}, growable: false);
}
return new FunctionTypeBuilder(
- returnType?.clone(newTypes, contextLibrary, contextDeclaration),
+ returnType.clone(newTypes, contextLibrary, contextDeclaration),
clonedTypeVariables,
clonedFormals,
nullabilityBuilder,
diff --git a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
index 036806f..2437686 100644
--- a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
@@ -447,7 +447,7 @@
// length is 0) references a ClassBuilder of the Null class. Otherwise,
// it won't produce the NullType on the output.
while (unaliasedDeclaration is TypeAliasBuilder) {
- unaliasedDeclaration = unaliasedDeclaration.type?.declaration;
+ unaliasedDeclaration = unaliasedDeclaration.type.declaration;
assert(unaliasedDeclaration != null);
}
assert(unaliasedDeclaration is ClassBuilder &&
@@ -468,7 +468,7 @@
// length is 0) references a ClassBuilder of the FutureOr class.
// Otherwise, it won't produce the FutureOrType on the output.
while (unaliasedDeclaration is TypeAliasBuilder) {
- unaliasedDeclaration = unaliasedDeclaration.type?.declaration;
+ unaliasedDeclaration = unaliasedDeclaration.type.declaration;
assert(unaliasedDeclaration != null);
}
assert(unaliasedDeclaration is ClassBuilder &&
diff --git a/pkg/front_end/lib/src/fasta/builder/omitted_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/omitted_type_builder.dart
new file mode 100644
index 0000000..3cfc546
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/builder/omitted_type_builder.dart
@@ -0,0 +1,70 @@
+// Copyright (c) 2022, 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.
+
+import 'package:kernel/ast.dart';
+
+import '../source/source_library_builder.dart';
+import 'library_builder.dart';
+import 'named_type_builder.dart';
+import 'nullability_builder.dart';
+import 'type_builder.dart';
+
+class OmittedTypeBuilder extends TypeBuilder {
+ const OmittedTypeBuilder();
+
+ @override
+ DartType build(LibraryBuilder library, TypeUse typeUse) {
+ throw new UnsupportedError('$runtimeType.build');
+ }
+
+ @override
+ DartType buildAliased(LibraryBuilder library, TypeUse typeUse) {
+ throw new UnsupportedError('$runtimeType.buildAliased');
+ }
+
+ @override
+ Supertype? buildMixedInType(LibraryBuilder library) {
+ throw new UnsupportedError('$runtimeType.buildMixedInType');
+ }
+
+ @override
+ Supertype? buildSupertype(LibraryBuilder library) {
+ throw new UnsupportedError('$runtimeType.buildSupertype');
+ }
+
+ @override
+ int? get charOffset => null;
+
+ @override
+ TypeBuilder clone(
+ List<NamedTypeBuilder> newTypes,
+ SourceLibraryBuilder contextLibrary,
+ TypeParameterScopeBuilder contextDeclaration) {
+ return this;
+ }
+
+ @override
+ String get debugName => 'OmittedTypeBuilder';
+
+ @override
+ Uri? get fileUri => null;
+
+ @override
+ bool get isVoidType => false;
+
+ @override
+ Object? get name => null;
+
+ @override
+ NullabilityBuilder get nullabilityBuilder =>
+ const NullabilityBuilder.omitted();
+
+ @override
+ StringBuffer printOn(StringBuffer buffer) => buffer;
+
+ @override
+ TypeBuilder withNullabilityBuilder(NullabilityBuilder nullabilityBuilder) {
+ return this;
+ }
+}
diff --git a/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart
index 3b977bc..464674f 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart
@@ -27,7 +27,7 @@
import 'type_variable_builder.dart';
abstract class TypeAliasBuilder implements TypeDeclarationBuilder {
- TypeBuilder? get type;
+ TypeBuilder get type;
/// The [Typedef] built by this builder.
Typedef get typedef;
@@ -231,7 +231,7 @@
TypeDeclarationBuilder current = this;
while (current is TypeAliasBuilder) {
TypeAliasBuilder currentAliasBuilder = current;
- TypeDeclarationBuilder? next = currentAliasBuilder.type?.declaration;
+ TypeDeclarationBuilder? next = currentAliasBuilder.type.declaration;
if (next != null) {
current = next;
} else {
@@ -325,7 +325,7 @@
List<TypeBuilder>? currentTypeArguments = typeArguments;
while (currentDeclarationBuilder is TypeAliasBuilder) {
TypeAliasBuilder currentAliasBuilder = currentDeclarationBuilder;
- TypeBuilder? nextTypeBuilder = currentAliasBuilder.type;
+ TypeBuilder nextTypeBuilder = currentAliasBuilder.type;
if (nextTypeBuilder is NamedTypeBuilder) {
Map<TypeVariableBuilder, TypeBuilder> substitution = {};
int index = 0;
@@ -420,7 +420,7 @@
List<TypeBuilder>? currentTypeArguments = typeArguments;
while (currentDeclarationBuilder is TypeAliasBuilder) {
TypeAliasBuilder currentAliasBuilder = currentDeclarationBuilder;
- TypeBuilder? nextTypeBuilder = currentAliasBuilder.type;
+ TypeBuilder nextTypeBuilder = currentAliasBuilder.type;
assert(nextTypeBuilder is NamedTypeBuilder,
"Expected NamedTypeBuilder, got '${nextTypeBuilder.runtimeType}'.");
NamedTypeBuilder namedNextTypeBuilder =
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_type_alias_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_type_alias_builder.dart
index 92df2a0..47a9b85 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_type_alias_builder.dart
@@ -59,12 +59,8 @@
int get typeVariablesCount => typedef.typeParameters.length;
@override
- TypeBuilder? get type {
- if (_type == null && typedef.type is! InvalidType) {
- _type = libraryBuilder.loader.computeTypeBuilder(typedef.type!);
- }
- // TODO(johnniwinther): Support TypeBuilder for InvalidType.
- return _type;
+ TypeBuilder get type {
+ return _type ??= libraryBuilder.loader.computeTypeBuilder(typedef.type!);
}
@override
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 2946592..586fae6 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -58,6 +58,7 @@
import '../builder/modifier_builder.dart';
import '../builder/named_type_builder.dart';
import '../builder/nullability_builder.dart';
+import '../builder/omitted_type_builder.dart';
import '../builder/prefix_builder.dart';
import '../builder/type_alias_builder.dart';
import '../builder/type_builder.dart';
@@ -1182,8 +1183,9 @@
DartType _computeReturnTypeContext(MemberBuilder member) {
if (member is SourceProcedureBuilder) {
- final bool isReturnTypeUndeclared = member.returnType == null &&
- member.function.returnType is DynamicType;
+ final bool isReturnTypeUndeclared =
+ member.returnType is OmittedTypeBuilder &&
+ member.function.returnType is DynamicType;
return isReturnTypeUndeclared && libraryBuilder.isNonNullableByDefault
? const UnknownType()
: member.function.returnType;
@@ -1281,7 +1283,7 @@
transformCollections, libraryBuilder.library);
}
- if (builder.returnType != null) {
+ if (builder.returnType is! OmittedTypeBuilder) {
checkAsyncReturnType(asyncModifier, builder.function.returnType,
builder.charOffset, builder.name.length);
}
@@ -1718,7 +1720,7 @@
/* metadata = */ null,
FormalParameterKind.requiredPositional,
/* modifiers = */ 0,
- /* type = */ null,
+ const OmittedTypeBuilder(),
formal.name!,
libraryBuilder,
formal.fileOffset,
@@ -4175,7 +4177,7 @@
}
}
TypeBuilder type = formals.toFunctionType(
- returnType,
+ returnType ?? const OmittedTypeBuilder(),
libraryBuilder.nullableBuilderIfTrue(questionMark != null),
typeVariables);
exitLocalScope();
@@ -4378,8 +4380,14 @@
return;
}
} else {
- parameter = new FormalParameterBuilder(null, kind, modifiers, type,
- name?.name ?? '', libraryBuilder, offsetForToken(nameToken),
+ parameter = new FormalParameterBuilder(
+ null,
+ kind,
+ modifiers,
+ type ?? const OmittedTypeBuilder(),
+ name?.name ?? '',
+ libraryBuilder,
+ offsetForToken(nameToken),
fileUri: uri)
..hasDeclaredInitializer = (initializerStart != null);
}
@@ -4452,8 +4460,10 @@
if (!libraryBuilder.isNonNullableByDefault) {
reportErrorIfNullableType(question);
}
- TypeBuilder type = formals.toFunctionType(returnType,
- libraryBuilder.nullableBuilderIfTrue(question != null), typeVariables);
+ TypeBuilder type = formals.toFunctionType(
+ returnType ?? const OmittedTypeBuilder(),
+ libraryBuilder.nullableBuilderIfTrue(question != null),
+ typeVariables);
exitLocalScope();
push(type);
functionNestingLevel--;
@@ -7075,7 +7085,7 @@
..fileOffset = assignmentOffset
];
} else {
- if (formal != null && formal.type != null) {
+ if (formal != null && formal.type is! OmittedTypeBuilder) {
DartType formalType = formal.variable!.type;
if (!typeEnvironment.isSubtypeOf(formalType, builder.fieldType,
SubtypeCheckMode.withNullabilities)) {
@@ -7699,7 +7709,7 @@
}
TypeBuilder toFunctionType(
- TypeBuilder? returnType, NullabilityBuilder nullabilityBuilder,
+ TypeBuilder returnType, NullabilityBuilder nullabilityBuilder,
[List<TypeVariableBuilder>? typeParameters]) {
return new FunctionTypeBuilder(returnType, typeParameters, parameters,
nullabilityBuilder, uri, charOffset);
diff --git a/pkg/front_end/lib/src/fasta/kernel/hierarchy/members_node.dart b/pkg/front_end/lib/src/fasta/kernel/hierarchy/members_node.dart
index 49448b4..3b0f111 100644
--- a/pkg/front_end/lib/src/fasta/kernel/hierarchy/members_node.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/hierarchy/members_node.dart
@@ -18,6 +18,7 @@
import '../../builder/library_builder.dart';
import '../../builder/member_builder.dart';
import '../../builder/named_type_builder.dart';
+import '../../builder/omitted_type_builder.dart';
import '../../builder/type_alias_builder.dart';
import '../../builder/type_builder.dart';
import '../../builder/type_declaration_builder.dart';
@@ -90,10 +91,10 @@
Iterable<ClassMember> overriddenMembers) {
assert(!declaredMember.isGetter && !declaredMember.isSetter);
if (declaredMember.classBuilder == classBuilder &&
- (declaredMember.returnType == null ||
+ (declaredMember.returnType is OmittedTypeBuilder ||
declaredMember.formals != null &&
- declaredMember.formals!
- .any((parameter) => parameter.type == null))) {
+ declaredMember.formals!.any(
+ (parameter) => parameter.type is OmittedTypeBuilder))) {
Procedure declaredProcedure = declaredMember.member as Procedure;
FunctionNode declaredFunction = declaredProcedure.function;
List<TypeParameter> declaredTypeParameters =
@@ -120,7 +121,7 @@
bool cantInferReturnType = false;
List<FormalParameterBuilder>? cantInferParameterTypes;
- if (declaredMember.returnType == null) {
+ if (declaredMember.returnType is OmittedTypeBuilder) {
if (combinedMemberSignatureType == null) {
inferredReturnType = const InvalidType();
cantInferReturnType = true;
@@ -131,7 +132,7 @@
if (declaredMember.formals != null) {
for (int i = 0; i < declaredPositional.length; i++) {
FormalParameterBuilder declaredParameter = declaredMember.formals![i];
- if (declaredParameter.type != null) {
+ if (declaredParameter.type is! OmittedTypeBuilder) {
continue;
}
@@ -153,7 +154,7 @@
i < declaredMember.formals!.length;
i++) {
FormalParameterBuilder declaredParameter = declaredMember.formals![i];
- if (declaredParameter.type != null) {
+ if (declaredParameter.type is! OmittedTypeBuilder) {
continue;
}
@@ -188,14 +189,14 @@
classBuilder, cantInferParameterTypes.single, overriddenMembers);
}
- if (declaredMember.returnType == null) {
+ if (declaredMember.returnType is OmittedTypeBuilder) {
inferredReturnType ??= const DynamicType();
declaredFunction.returnType = inferredReturnType;
}
if (declaredMember.formals != null) {
for (FormalParameterBuilder declaredParameter
in declaredMember.formals!) {
- if (declaredParameter.type == null) {
+ if (declaredParameter.type is OmittedTypeBuilder) {
DartType inferredParameterType =
inferredParameterTypes[declaredParameter] ??
const DynamicType();
@@ -248,7 +249,7 @@
Iterable<ClassMember> overriddenMembers) {
assert(declaredMember.isGetter);
if (declaredMember.classBuilder == classBuilder &&
- declaredMember.returnType == null) {
+ declaredMember.returnType is OmittedTypeBuilder) {
DartType? inferredType;
overriddenMembers = toSet(classBuilder, overriddenMembers);
@@ -311,7 +312,8 @@
Iterable<ClassMember> overriddenMembers) {
assert(declaredMember.isSetter);
FormalParameterBuilder parameter = declaredMember.formals!.first;
- if (declaredMember.classBuilder == classBuilder && parameter.type == null) {
+ if (declaredMember.classBuilder == classBuilder &&
+ parameter.type is OmittedTypeBuilder) {
DartType? inferredType;
overriddenMembers = toSet(classBuilder, overriddenMembers);
@@ -412,7 +414,7 @@
SourceFieldBuilder fieldBuilder,
Iterable<ClassMember> overriddenMembers) {
if (fieldBuilder.classBuilder == classBuilder &&
- fieldBuilder.type == null) {
+ fieldBuilder.type is OmittedTypeBuilder) {
DartType? inferredType;
overriddenMembers = toSet(classBuilder, overriddenMembers);
diff --git a/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart b/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
index 66268af..13f1592 100644
--- a/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
@@ -15,6 +15,7 @@
import '../builder/library_builder.dart';
import '../builder/named_type_builder.dart';
import '../builder/nullability_builder.dart';
+import '../builder/omitted_type_builder.dart';
import '../builder/type_alias_builder.dart';
import '../builder/type_builder.dart';
import '../builder/type_declaration_builder.dart';
@@ -116,11 +117,11 @@
}
} else if (type is FunctionTypeBuilder) {
int result = Variance.unrelated;
- if (type.returnType != null) {
+ if (type.returnType is! OmittedTypeBuilder) {
result = Variance.meet(
result,
computeTypeVariableBuilderVariance(
- variable, type.returnType!, libraryBuilder));
+ variable, type.returnType, libraryBuilder));
}
if (type.typeVariables != null) {
for (TypeVariableBuilder typeVariable in type.typeVariables!) {
@@ -176,8 +177,8 @@
return const NullabilityBuilder.omitted();
}
-TypeBuilder? substituteRange(
- TypeBuilder? type,
+TypeBuilder substituteRange(
+ TypeBuilder type,
Map<TypeVariableBuilder, TypeBuilder> upperSubstitution,
Map<TypeVariableBuilder, TypeBuilder> lowerSubstitution,
List<TypeBuilder> unboundTypes,
@@ -227,7 +228,7 @@
lowerSubstitution,
unboundTypes,
unboundTypeVariables,
- variance: variance)!;
+ variance: variance);
if (substitutedArgument != type.arguments![i]) {
arguments ??= type.arguments!.toList();
arguments[i] = substitutedArgument;
@@ -241,7 +242,7 @@
lowerSubstitution,
unboundTypes,
unboundTypeVariables,
- variance: variance)!;
+ variance: variance);
if (substitutedArgument != type.arguments![i]) {
arguments ??= type.arguments!.toList();
arguments[i] = substitutedArgument;
@@ -256,7 +257,7 @@
lowerSubstitution,
unboundTypes,
unboundTypeVariables,
- variance: Variance.combine(variance, variable.variance))!;
+ variance: Variance.combine(variance, variable.variance));
if (substitutedArgument != type.arguments![i]) {
arguments ??= type.arguments!.toList();
arguments[i] = substitutedArgument;
@@ -294,9 +295,12 @@
if (type.typeVariables != null) {
for (int i = 0; i < variables!.length; i++) {
TypeVariableBuilder variable = type.typeVariables![i];
- TypeBuilder? bound = substituteRange(variable.bound, upperSubstitution,
- lowerSubstitution, unboundTypes, unboundTypeVariables,
- variance: Variance.invariant);
+ TypeBuilder? bound;
+ if (variable.bound != null) {
+ bound = substituteRange(variable.bound!, upperSubstitution,
+ lowerSubstitution, unboundTypes, unboundTypeVariables,
+ variance: Variance.invariant);
+ }
if (bound != variable.bound) {
TypeVariableBuilder newTypeVariableBuilder = variables[i] =
new TypeVariableBuilder(variable.name, variable.parent,
@@ -323,7 +327,7 @@
if (type.formals != null) {
for (int i = 0; i < formals!.length; i++) {
ParameterBuilder formal = type.formals![i];
- TypeBuilder? parameterType = substituteRange(
+ TypeBuilder parameterType = substituteRange(
formal.type,
functionTypeUpperSubstitution ?? upperSubstitution,
functionTypeLowerSubstitution ?? lowerSubstitution,
@@ -357,8 +361,8 @@
return type;
}
-TypeBuilder? substitute(
- TypeBuilder? type, Map<TypeVariableBuilder, TypeBuilder> substitution,
+TypeBuilder substitute(
+ TypeBuilder type, Map<TypeVariableBuilder, TypeBuilder> substitution,
{required List<TypeBuilder> unboundTypes,
required List<TypeVariableBuilder> unboundTypeVariables}) {
return substituteRange(
@@ -404,7 +408,7 @@
nullSubstitution,
unboundTypes,
unboundTypeVariables,
- variance: variable.variance)!;
+ variance: variable.variance);
}
}
@@ -419,7 +423,7 @@
TypeVariableBuilder variable = variables[j];
bounds[j] = substituteRange(bounds[j], substitution, nullSubstitution,
unboundTypes, unboundTypeVariables,
- variance: variable.variance)!;
+ variance: variable.variance);
}
}
diff --git a/pkg/front_end/lib/src/fasta/kernel/utils.dart b/pkg/front_end/lib/src/fasta/kernel/utils.dart
index 3443cf7..c1a644f 100644
--- a/pkg/front_end/lib/src/fasta/kernel/utils.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/utils.dart
@@ -19,6 +19,7 @@
import '../builder/fixed_type_builder.dart';
import '../builder/formal_parameter_builder.dart';
import '../builder/metadata_builder.dart';
+import '../builder/omitted_type_builder.dart';
import '../builder/type_builder.dart';
import '../builder/type_variable_builder.dart';
import '../combinator.dart';
@@ -232,8 +233,8 @@
final TypeBuilder dummyTypeBuilder =
new FixedTypeBuilder(dummyDartType, dummyUri, -1);
final FormalParameterBuilder dummyFormalParameterBuilder =
- new FormalParameterBuilder(
- null, FormalParameterKind.requiredPositional, 0, null, '', null, -1,
+ new FormalParameterBuilder(null, FormalParameterKind.requiredPositional, 0,
+ const OmittedTypeBuilder(), '', null, -1,
fileUri: dummyUri);
final TypeVariableBuilder dummyTypeVariableBuilder = new TypeVariableBuilder(
TypeVariableBuilder.noNameSentinel, null, -1, null,
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index 050fb51..81871e0 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -32,6 +32,7 @@
import '../builder/mixin_application_builder.dart';
import '../builder/named_type_builder.dart';
import '../builder/nullability_builder.dart';
+import '../builder/omitted_type_builder.dart';
import '../builder/type_builder.dart';
import '../builder/type_variable_builder.dart';
import '../combinator.dart' show CombinatorBuilder;
@@ -1884,7 +1885,7 @@
List<TypeVariableBuilder> unboundTypeVariables = [];
thisType = substitute(thisType, substitution,
unboundTypes: unboundTypes,
- unboundTypeVariables: unboundTypeVariables)!;
+ unboundTypeVariables: unboundTypeVariables);
for (NamedTypeBuilder unboundType in unboundTypes) {
extension.registerUnresolvedNamedType(unboundType);
}
@@ -2260,7 +2261,7 @@
metadata,
kind,
modifiers,
- type,
+ type ?? const OmittedTypeBuilder(),
name == null ? FormalParameterBuilder.noNameSentinel : name as String,
thisKeyword != null,
superKeyword != null,
@@ -2583,7 +2584,7 @@
List<TypeVariableBuilder>? typeVariables =
pop() as List<TypeVariableBuilder>?;
push(libraryBuilder.addFunctionType(
- returnType,
+ returnType ?? const OmittedTypeBuilder(),
typeVariables,
formals,
libraryBuilder.nullableBuilderIfTrue(questionMark != null),
@@ -2604,7 +2605,7 @@
reportErrorIfNullableType(question);
}
push(libraryBuilder.addFunctionType(
- returnType,
+ returnType ?? const OmittedTypeBuilder(),
typeVariables,
formals,
libraryBuilder.nullableBuilderIfTrue(question != null),
@@ -2642,8 +2643,13 @@
TypeParameterScopeKind.functionType, "#function_type",
hasMembers: false);
// TODO(cstefantsova): Make sure that RHS of typedefs can't have '?'.
- aliasedType = libraryBuilder.addFunctionType(returnType, null, formals,
- const NullabilityBuilder.omitted(), uri, charOffset);
+ aliasedType = libraryBuilder.addFunctionType(
+ returnType ?? const OmittedTypeBuilder(),
+ null,
+ formals,
+ const NullabilityBuilder.omitted(),
+ uri,
+ charOffset);
} else {
Object? type = pop();
typeVariables = pop() as List<TypeVariableBuilder>?;
diff --git a/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart b/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
index c0dadf6..4b94f07 100644
--- a/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
@@ -15,6 +15,7 @@
import '../builder/member_builder.dart';
import '../builder/metadata_builder.dart';
import '../builder/named_type_builder.dart';
+import '../builder/omitted_type_builder.dart';
import '../builder/type_alias_builder.dart';
import '../builder/type_builder.dart';
import '../builder/type_declaration_builder.dart';
@@ -106,7 +107,7 @@
DeclaredSourceConstructorBuilder(
List<MetadataBuilder>? metadata,
int modifiers,
- TypeBuilder? returnType,
+ TypeBuilder returnType,
String name,
List<TypeVariableBuilder>? typeVariables,
this.formals,
@@ -219,7 +220,7 @@
if (formals != null) {
bool needsInference = false;
for (FormalParameterBuilder formal in formals!) {
- if (formal.type == null &&
+ if (formal.type is OmittedTypeBuilder &&
(formal.isInitializingFormal || formal.isSuperInitializingFormal)) {
formal.variable!.type = const UnknownType();
needsInference = true;
@@ -241,7 +242,7 @@
if (_hasFormalsInferred) return;
if (formals != null) {
for (FormalParameterBuilder formal in formals!) {
- if (formal.type == null) {
+ if (formal.type is OmittedTypeBuilder) {
if (formal.isInitializingFormal) {
formal.finalizeInitializingFormal(classBuilder);
}
@@ -421,7 +422,7 @@
}
}
- if (formal.type == null) {
+ if (formal.type is OmittedTypeBuilder) {
DartType? type = correspondingSuperFormalType;
if (substitution.isNotEmpty && type != null) {
type = substitute(type, substitution);
diff --git a/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart b/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
index a8749da..4da1575 100644
--- a/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
@@ -21,6 +21,7 @@
import '../builder/metadata_builder.dart';
import '../builder/named_type_builder.dart';
import '../builder/nullability_builder.dart';
+import '../builder/omitted_type_builder.dart';
import '../builder/procedure_builder.dart';
import '../builder/type_builder.dart';
import '../builder/type_declaration_builder.dart';
@@ -309,7 +310,7 @@
new DeclaredSourceConstructorBuilder(
/* metadata = */ null,
constMask,
- /* returnType = */ null,
+ /* returnType = */ const OmittedTypeBuilder(),
"",
/* typeParameters = */ null,
<FormalParameterBuilder>[
@@ -466,7 +467,7 @@
}
SourceFieldBuilder fieldBuilder = new SourceFieldBuilder(
metadata,
- null,
+ const OmittedTypeBuilder(),
name,
constMask | staticMask | hasInitializerMask,
/* isTopLevel = */ false,
diff --git a/pkg/front_end/lib/src/fasta/source/source_field_builder.dart b/pkg/front_end/lib/src/fasta/source/source_field_builder.dart
index cdf803a..f9ca277 100644
--- a/pkg/front_end/lib/src/fasta/source/source_field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_field_builder.dart
@@ -16,6 +16,7 @@
import '../builder/field_builder.dart';
import '../builder/member_builder.dart';
import '../builder/metadata_builder.dart';
+import '../builder/omitted_type_builder.dart';
import '../builder/type_builder.dart';
import '../constant_context.dart' show ConstantContext;
import '../fasta_codes.dart' show messageInternalProblemAlreadyInitialized;
@@ -51,7 +52,7 @@
final List<MetadataBuilder>? metadata;
- final TypeBuilder? type;
+ final TypeBuilder type;
Token? _constInitializerToken;
@@ -326,7 +327,8 @@
}
bool get isEligibleForInference {
- return type == null && (hasInitializer || isClassInstanceMember);
+ return type is OmittedTypeBuilder &&
+ (hasInitializer || isClassInstanceMember);
}
@override
@@ -366,8 +368,8 @@
/// Builds the core AST structures for this field as needed for the outline.
void build() {
- if (type != null) {
- fieldType = type!.build(libraryBuilder, TypeUse.fieldType);
+ if (type is! OmittedTypeBuilder) {
+ fieldType = type.build(libraryBuilder, TypeUse.fieldType);
}
_fieldEncoding.build(libraryBuilder, this);
}
diff --git a/pkg/front_end/lib/src/fasta/source/source_function_builder.dart b/pkg/front_end/lib/src/fasta/source/source_function_builder.dart
index fa2a828..3b199e8 100644
--- a/pkg/front_end/lib/src/fasta/source/source_function_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_function_builder.dart
@@ -4,6 +4,7 @@
library fasta.procedure_builder;
+import 'package:front_end/src/fasta/builder/omitted_type_builder.dart';
import 'package:kernel/ast.dart';
import 'package:kernel/class_hierarchy.dart';
@@ -40,7 +41,7 @@
implements FunctionBuilder, SourceMemberBuilder {
List<MetadataBuilder>? get metadata;
- TypeBuilder? get returnType;
+ TypeBuilder get returnType;
List<TypeVariableBuilder>? get typeVariables;
@@ -134,7 +135,7 @@
final int modifiers;
@override
- final TypeBuilder? returnType;
+ final TypeBuilder returnType;
@override
final String name;
@@ -385,9 +386,9 @@
function.namedParameters.clear();
function.requiredParameterCount = 1;
}
- if (returnType != null) {
+ if (returnType is! OmittedTypeBuilder) {
function.returnType =
- returnType!.build(libraryBuilder, TypeUse.returnType);
+ returnType.build(libraryBuilder, TypeUse.returnType);
}
if (isExtensionInstanceMember) {
ExtensionBuilder extensionBuilder = parent as ExtensionBuilder;
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index ffad317..760a0cc 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -48,6 +48,7 @@
import '../builder/named_type_builder.dart';
import '../builder/never_type_declaration_builder.dart';
import '../builder/nullability_builder.dart';
+import '../builder/omitted_type_builder.dart';
import '../builder/prefix_builder.dart';
import '../builder/procedure_builder.dart';
import '../builder/type_alias_builder.dart';
@@ -786,8 +787,16 @@
new Token.eof(startToken.previous!.offset).setNext(startToken);
}
bool hasInitializer = info.initializerToken != null;
- addField(metadata, modifiers, isTopLevel, type, info.name,
- info.charOffset, info.charEndOffset, startToken, hasInitializer,
+ addField(
+ metadata,
+ modifiers,
+ isTopLevel,
+ type ?? const OmittedTypeBuilder(),
+ info.name,
+ info.charOffset,
+ info.charEndOffset,
+ startToken,
+ hasInitializer,
constInitializerToken:
potentiallyNeedInitializerInOutline ? startToken : null);
}
@@ -2382,7 +2391,7 @@
List<MetadataBuilder>? metadata,
int modifiers,
bool isTopLevel,
- TypeBuilder? type,
+ TypeBuilder type,
String name,
int charOffset,
int charEndOffset,
@@ -2496,7 +2505,7 @@
addBuilder(name, fieldBuilder, charOffset,
getterReference: fieldGetterReference,
setterReference: fieldSetterReference);
- if (type == null && fieldBuilder.next == null) {
+ if (type is OmittedTypeBuilder && fieldBuilder.next == null) {
// Only the first one (the last one in the linked list of next pointers)
// are added to the tree, had parent pointers and can infer correctly.
if (initializerToken == null && fieldBuilder.isStatic) {
@@ -2542,7 +2551,7 @@
new DeclaredSourceConstructorBuilder(
metadata,
modifiers & ~abstractMask,
- returnType,
+ returnType ?? const OmittedTypeBuilder(),
constructorName,
typeVariables,
formals,
@@ -2649,7 +2658,7 @@
SourceProcedureBuilder procedureBuilder = new SourceProcedureBuilder(
metadata,
modifiers,
- returnType,
+ returnType ?? const OmittedTypeBuilder(),
name,
typeVariables,
formals,
@@ -2898,7 +2907,7 @@
List<MetadataBuilder>? metadata,
String name,
List<TypeVariableBuilder>? typeVariables,
- TypeBuilder? type,
+ TypeBuilder type,
int charOffset) {
if (typeVariables != null) {
for (TypeVariableBuilder typeVariable in typeVariables) {
@@ -2918,7 +2927,7 @@
}
FunctionTypeBuilder addFunctionType(
- TypeBuilder? returnType,
+ TypeBuilder returnType,
List<TypeVariableBuilder>? typeVariables,
List<FormalParameterBuilder>? formals,
NullabilityBuilder nullabilityBuilder,
@@ -2948,7 +2957,7 @@
List<MetadataBuilder>? metadata,
FormalParameterKind kind,
int modifiers,
- TypeBuilder? type,
+ TypeBuilder type,
String name,
bool hasThis,
bool hasSuper,
@@ -3721,7 +3730,7 @@
formal.type);
}
}
- if (member.returnType != null) {
+ if (member.returnType is! OmittedTypeBuilder) {
issues.addAll(getInboundReferenceIssuesInType(member.returnType));
_recursivelyReportGenericFunctionTypesAsBoundsForType(
member.returnType);
@@ -3733,7 +3742,7 @@
assert(member is SourceFieldBuilder,
"Unexpected class member $member (${member.runtimeType}).");
TypeBuilder? fieldType = (member as SourceFieldBuilder).type;
- if (fieldType != null) {
+ if (fieldType is! OmittedTypeBuilder) {
List<NonSimplicityIssue> issues =
getInboundReferenceIssuesInType(fieldType);
reportIssues(issues);
@@ -3759,7 +3768,7 @@
_recursivelyReportGenericFunctionTypesAsBoundsForType(formal.type);
}
}
- if (declaration.returnType != null) {
+ if (declaration.returnType is! OmittedTypeBuilder) {
issues
.addAll(getInboundReferenceIssuesInType(declaration.returnType));
_recursivelyReportGenericFunctionTypesAsBoundsForType(
@@ -3788,7 +3797,7 @@
formal.type);
}
}
- if (member.returnType != null) {
+ if (member.returnType is! OmittedTypeBuilder) {
issues.addAll(getInboundReferenceIssuesInType(member.returnType));
_recursivelyReportGenericFunctionTypesAsBoundsForType(
member.returnType);
@@ -3797,7 +3806,7 @@
count += computeDefaultTypesForVariables(member.typeVariables,
inErrorRecovery: issues.isNotEmpty);
} else if (member is SourceFieldBuilder) {
- if (member.type != null) {
+ if (member.type is! OmittedTypeBuilder) {
_recursivelyReportGenericFunctionTypesAsBoundsForType(
member.type);
}
@@ -3807,7 +3816,7 @@
}
});
} else if (declaration is SourceFieldBuilder) {
- if (declaration.type != null) {
+ if (declaration.type is! OmittedTypeBuilder) {
List<NonSimplicityIssue> issues =
getInboundReferenceIssuesInType(declaration.type);
reportIssues(issues);
@@ -5321,7 +5330,7 @@
declaration.typeVariables!.isNotEmpty) {
typeVariables = declaration.typeVariables;
}
- internalDependents = <TypeBuilder>[declaration.type!];
+ internalDependents = <TypeBuilder>[declaration.type];
} else if (declaration is TypeVariableBuilder) {
typeVariables = <TypeVariableBuilder>[declaration];
}
@@ -5332,11 +5341,11 @@
if (root.formals != null && root.formals!.isNotEmpty) {
internalDependents = <TypeBuilder>[];
for (ParameterBuilder formal in root.formals!) {
- internalDependents.add(formal.type!);
+ internalDependents.add(formal.type);
}
}
- if (root.returnType != null) {
- (internalDependents ??= <TypeBuilder>[]).add(root.returnType!);
+ if (root.returnType is! OmittedTypeBuilder) {
+ (internalDependents ??= <TypeBuilder>[]).add(root.returnType);
}
}
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 cf387f5..3748d5e3 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -52,6 +52,7 @@
import '../builder/member_builder.dart';
import '../builder/modifier_builder.dart';
import '../builder/named_type_builder.dart';
+import '../builder/omitted_type_builder.dart';
import '../builder/prefix_builder.dart';
import '../builder/procedure_builder.dart';
import '../builder/type_alias_builder.dart';
@@ -1205,20 +1206,20 @@
}
}
ProcedureBuilder builder = new SourceProcedureBuilder(
- null,
- 0,
- null,
+ /* metadata = */ null,
+ /* modifier flags = */ 0,
+ const OmittedTypeBuilder(),
"debugExpr",
- null,
- null,
+ /* type variables = */ null,
+ /* formals = */ null,
ProcedureKind.Method,
libraryBuilder,
- 0,
- 0,
- -1,
- -1,
- null,
- null,
+ /* start char offset = */ 0,
+ /* char offset = */ 0,
+ /* open paren offset = */ -1,
+ /* end offset = */ -1,
+ /* procedure reference = */ null,
+ /* tear off reference = */ null,
AsyncMarker.Sync,
new NameScheme(
className: null,
diff --git a/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart b/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart
index 2c412dd..e24939d 100644
--- a/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart
@@ -11,6 +11,7 @@
import '../builder/formal_parameter_builder.dart';
import '../builder/member_builder.dart';
import '../builder/metadata_builder.dart';
+import '../builder/omitted_type_builder.dart';
import '../builder/procedure_builder.dart';
import '../builder/type_builder.dart';
import '../builder/type_variable_builder.dart';
@@ -60,7 +61,7 @@
SourceProcedureBuilder(
List<MetadataBuilder>? metadata,
int modifiers,
- TypeBuilder? returnType,
+ TypeBuilder returnType,
String name,
List<TypeVariableBuilder>? typeVariables,
List<FormalParameterBuilder>? formals,
@@ -132,10 +133,10 @@
bool get isEligibleForTopLevelInference {
if (isDeclarationInstanceMember) {
- if (returnType == null) return true;
+ if (returnType is OmittedTypeBuilder) return true;
if (formals != null) {
for (FormalParameterBuilder formal in formals!) {
- if (formal.type == null) return true;
+ if (formal.type is OmittedTypeBuilder) return true;
}
}
}
diff --git a/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart b/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
index 8cf8c31..56ee6cd 100644
--- a/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
@@ -31,7 +31,7 @@
class SourceTypeAliasBuilder extends TypeAliasBuilderImpl {
@override
- final TypeBuilder? type;
+ final TypeBuilder type;
final List<TypeVariableBuilder>? _typeVariables;
@@ -81,7 +81,7 @@
@override
bool get isNullAlias {
- TypeDeclarationBuilder? typeDeclarationBuilder = type?.declaration;
+ TypeDeclarationBuilder? typeDeclarationBuilder = type.declaration;
return typeDeclarationBuilder is ClassBuilder &&
typeDeclarationBuilder.isNullClass;
}
@@ -89,7 +89,7 @@
Typedef build() {
buildThisType();
- TypeBuilder? type = this.type;
+ TypeBuilder type = this.type;
if (type is FunctionTypeBuilder ||
type is NamedTypeBuilder ||
type is FixedTypeBuilder) {
@@ -120,7 +120,7 @@
// instance of InvalidType that isn't identical to `const InvalidType()`.
thisType = pendingTypeAliasMarker;
DartType builtType = const InvalidType();
- TypeBuilder? type = this.type;
+ TypeBuilder type = this.type;
// ignore: unnecessary_null_comparison
if (type != null) {
builtType = type.build(libraryBuilder, TypeUse.typedefAlias);
diff --git a/tools/VERSION b/tools/VERSION
index affbc14..50b2665 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 18
PATCH 0
-PRERELEASE 159
+PRERELEASE 160
PRERELEASE_PATCH 0
\ No newline at end of file