diff --git a/pkg/front_end/lib/src/fasta/builder/class_builder.dart b/pkg/front_end/lib/src/fasta/builder/class_builder.dart index fafac484ce7..d7fba0e6c4e 100644 --- a/pkg/front_end/lib/src/fasta/builder/class_builder.dart +++ b/pkg/front_end/lib/src/fasta/builder/class_builder.dart @@ -42,7 +42,33 @@ import 'type_variable_builder.dart'; const Uri? noUri = null; -abstract class ClassBuilder implements DeclarationBuilder { +abstract class ClassMemberAccess { + /// [Iterator] for all members declared in this class or any of its + /// augmentations. + /// + /// Duplicates and augmenting constructor are _not_ included. + Iterator fullConstructorIterator(); + + /// [NameIterator] for all constructors declared in this class or any of its + /// augmentations. + /// + /// Duplicates and augmenting constructors are _not_ included. + NameIterator fullConstructorNameIterator(); + + /// [Iterator] for all members declared in this class or any of its + /// augmentations. + /// + /// Duplicates and augmenting members are _not_ included. + Iterator fullMemberIterator(); + + /// [NameIterator] for all members declared in this class or any of its + /// augmentations. + /// + /// Duplicates and augmenting members are _not_ included. + NameIterator fullMemberNameIterator(); +} + +abstract class ClassBuilder implements DeclarationBuilder, ClassMemberAccess { /// The type variables declared on a class, extension or mixin declaration. List? get typeVariables; @@ -128,33 +154,6 @@ abstract class ClassBuilder implements DeclarationBuilder { /// class. Member? lookupInstanceMember(ClassHierarchy hierarchy, Name name, {bool isSetter = false, bool isSuper = false}); - - // TODO(johnniwinther): Support filtering on the returns builder types in - // these: - - /// [Iterator] for all members declared in this class or any of its - /// augmentations. - /// - /// Duplicates and augmenting constructor are _not_ included. - Iterator fullConstructorIterator(); - - /// [NameIterator] for all constructors declared in this class or any of its - /// augmentations. - /// - /// Duplicates and augmenting constructors are _not_ included. - NameIterator fullConstructorNameIterator(); - - /// [Iterator] for all members declared in this class or any of its - /// augmentations. - /// - /// Duplicates and augmenting members are _not_ included. - Iterator fullMemberIterator(); - - /// [NameIterator] for all members declared in this class or any of its - /// augmentations. - /// - /// Duplicates and augmenting members are _not_ included. - NameIterator fullMemberNameIterator(); } abstract class ClassBuilderImpl extends DeclarationBuilderImpl 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 585a1e4bb71..da41e18aee5 100644 --- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart +++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart @@ -89,9 +89,9 @@ import '../modifier.dart' import '../names.dart' show emptyName, minusName, plusName; import '../problems.dart' show internalProblem, unhandled, unsupported; import '../scope.dart'; +import '../source/constructor_declaration.dart'; import '../source/diet_parser.dart'; import '../source/source_class_builder.dart'; -import '../source/source_constructor_builder.dart'; import '../source/source_enum_builder.dart'; import '../source/source_factory_builder.dart'; import '../source/source_field_builder.dart'; @@ -961,25 +961,34 @@ class BodyBuilder extends StackListenerImpl Identifier identifier = pop() as Identifier; String name = identifier.name; Builder declaration; + int fileOffset = identifier.charOffset; if (declarationBuilder != null) { declaration = declarationBuilder!.lookupLocalMember(name, required: true)!; } else { declaration = libraryBuilder.lookupLocalMember(name, required: true)!; } + while (declaration.next != null) { + // If we have duplicates, we try to find the right declaration. + if (declaration.fileUri == uri && + declaration.charOffset == fileOffset) { + break; + } + declaration = declaration.next!; + } + if (declaration.fileUri != uri || declaration.charOffset != fileOffset) { + // If we don't have the right declaration, skip the initializer. + continue; + } SourceFieldBuilder fieldBuilder; - if (declaration.isField && declaration.next == null) { + if (declaration.isField) { fieldBuilder = declaration as SourceFieldBuilder; } else { continue; } fields.add(fieldBuilder); if (initializer != null) { - if (fieldBuilder.isDuplicate) { - // Duplicate definition. The field might not be the correct one, - // so we skip inference of the initializer. - // Error reporting and recovery is handled elsewhere. - } else if (fieldBuilder.hasBodyBeenBuilt) { + if (fieldBuilder.hasBodyBeenBuilt) { // The initializer was already compiled (e.g., if it appear in the // outline, like constant field initializers) so we do not need to // perform type inference or transformations. @@ -1082,7 +1091,7 @@ class BodyBuilder extends StackListenerImpl void prepareInitializers() { SourceFunctionBuilder member = this.member as SourceFunctionBuilder; scope = member.computeFormalParameterInitializerScope(scope); - if (member is DeclaredSourceConstructorBuilder) { + if (member is ConstructorDeclaration) { member.prepareInitializers(); if (member.formals != null) { for (FormalParameterBuilder formal in member.formals!) { @@ -1290,7 +1299,7 @@ class BodyBuilder extends StackListenerImpl } } } - if (builder is AbstractSourceConstructorBuilder) { + if (builder is ConstructorDeclaration) { finishConstructor(builder, asyncModifier, body, superParametersAsArguments: superParametersAsArguments); } else if (builder is SourceProcedureBuilder) { @@ -1829,8 +1838,8 @@ class BodyBuilder extends StackListenerImpl handleNoInitializers(); } if (doFinishConstructor) { - AbstractSourceConstructorBuilder constructorBuilder = - member as AbstractSourceConstructorBuilder; + ConstructorDeclaration constructorBuilder = + member as ConstructorDeclaration; List? formals = constructorBuilder.formals; finishConstructor(constructorBuilder, AsyncMarker.Sync, null, superParametersAsArguments: formals != null @@ -1879,7 +1888,7 @@ class BodyBuilder extends StackListenerImpl return arguments; } - void finishConstructor(AbstractSourceConstructorBuilder builder, + void finishConstructor(ConstructorDeclaration builder, AsyncMarker asyncModifier, Statement? body, {required List? superParametersAsArguments}) { @@ -1984,7 +1993,7 @@ class BodyBuilder extends StackListenerImpl if (initializers.last is SuperInitializer) { SuperInitializer superInitializer = initializers.last as SuperInitializer; - if (builder.declarationBuilder.isEnum) { + if (builder.classDeclaration.isEnum) { initializers[initializers.length - 1] = buildInvalidInitializer( buildProblem(fasta.messageEnumConstructorSuperInitializer, superInitializer.fileOffset, noLength)) @@ -7932,8 +7941,8 @@ class BodyBuilder extends StackListenerImpl ]); } } - DeclaredSourceConstructorBuilder constructorBuilder = - member as DeclaredSourceConstructorBuilder; + ConstructorDeclaration constructorBuilder = + member as ConstructorDeclaration; constructorBuilder.registerInitializedField(builder); return builder.buildInitializer(assignmentOffset, expression, isSynthetic: formal != null); diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart index 3d164cdd7b7..4285b763a3f 100644 --- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart +++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart @@ -63,6 +63,8 @@ import '../messages.dart' templateSuperclassHasNoDefaultConstructor; import '../problems.dart' show unhandled; import '../scope.dart' show AmbiguousBuilder; +import '../source/class_declaration.dart'; +import '../source/constructor_declaration.dart'; import '../source/source_class_builder.dart' show SourceClassBuilder; import '../source/source_constructor_builder.dart'; import '../source/source_field_builder.dart'; @@ -1259,34 +1261,6 @@ class KernelTarget extends TargetImplementation { if (builder.isPatch) return; Class cls = builder.cls; - /// Quotes below are from [Dart Programming Language Specification, 4th - /// Edition](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-408.pdf): - List uninitializedFields = []; - List nonFinalFields = []; - List lateFinalFields = []; - - Iterator fieldIterator = - builder.fullMemberIterator(); - while (fieldIterator.moveNext()) { - SourceFieldBuilder fieldBuilder = fieldIterator.current; - if (fieldBuilder.isAbstract || fieldBuilder.isExternal) { - // Skip abstract and external fields. These are abstract/external - // getters/setters and have no initialization. - continue; - } - if (fieldBuilder.isDeclarationInstanceMember && !fieldBuilder.isFinal) { - nonFinalFields.add(fieldBuilder); - } - if (fieldBuilder.isDeclarationInstanceMember && - fieldBuilder.isLate && - fieldBuilder.isFinal) { - lateFinalFields.add(fieldBuilder); - } - if (!fieldBuilder.hasInitializer) { - uninitializedFields.add(fieldBuilder); - } - } - Constructor? superTarget; for (Constructor constructor in cls.constructors) { if (constructor.isExternal) { @@ -1336,63 +1310,95 @@ class KernelTarget extends TargetImplementation { constructor.function.body = new EmptyStatement() ..parent = constructor.function; } - - if (constructor.isConst && nonFinalFields.isNotEmpty) { - builder.addProblem(messageConstConstructorNonFinalField, - constructor.fileOffset, noLength, - context: nonFinalFields - .map((field) => messageConstConstructorNonFinalFieldCause - .withLocation(field.fileUri, field.charOffset, noLength)) - .toList()); - nonFinalFields.clear(); - } - SourceLibraryBuilder library = builder.libraryBuilder; - if (library.isNonNullableByDefault) { - if (constructor.isConst && lateFinalFields.isNotEmpty) { - for (FieldBuilder field in lateFinalFields) { - builder.addProblem(messageConstConstructorLateFinalFieldError, - field.charOffset, noLength, - context: [ - messageConstConstructorLateFinalFieldCause.withLocation( - constructor.fileUri, constructor.fileOffset, noLength) - ]); - } - lateFinalFields.clear(); - } - } } } - Map> - constructorInitializedFields = new Map.identity(); - Set? initializedFields = null; + finishConstructorsInternal(builder); + } - Iterator constructorIterator = - builder.fullConstructorIterator(); + void finishConstructorsInternal(ClassDeclaration builder) { + SourceLibraryBuilder libraryBuilder = builder.libraryBuilder; + + /// Quotes below are from [Dart Programming Language Specification, 4th + /// Edition](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-408.pdf): + List uninitializedFields = []; + List nonFinalFields = []; + List lateFinalFields = []; + + Iterator fieldIterator = + builder.fullMemberIterator(); + while (fieldIterator.moveNext()) { + SourceFieldBuilder fieldBuilder = fieldIterator.current; + if (fieldBuilder.isAbstract || fieldBuilder.isExternal) { + // Skip abstract and external fields. These are abstract/external + // getters/setters and have no initialization. + continue; + } + if (fieldBuilder.isDeclarationInstanceMember && !fieldBuilder.isFinal) { + nonFinalFields.add(fieldBuilder); + } + if (fieldBuilder.isDeclarationInstanceMember && + fieldBuilder.isLate && + fieldBuilder.isFinal) { + lateFinalFields.add(fieldBuilder); + } + if (!fieldBuilder.hasInitializer) { + uninitializedFields.add(fieldBuilder); + } + } + + Map> + constructorInitializedFields = new Map.identity(); + Set? initializedFieldBuilders = null; + + Iterator constructorIterator = + builder.fullConstructorIterator(); while (constructorIterator.moveNext()) { - DeclaredSourceConstructorBuilder constructorBuilder = - constructorIterator.current; - if (constructorBuilder.isEffectivelyExternal) continue; - if (constructorBuilder.isEffectivelyRedirecting) continue; + ConstructorDeclaration constructor = constructorIterator.current; + if (constructor.isEffectivelyRedirecting) continue; + if (constructor.isConst && nonFinalFields.isNotEmpty) { + builder.addProblem(messageConstConstructorNonFinalField, + constructor.charOffset, noLength, + context: nonFinalFields + .map((field) => messageConstConstructorNonFinalFieldCause + .withLocation(field.fileUri, field.charOffset, noLength)) + .toList()); + nonFinalFields.clear(); + } + if (libraryBuilder.isNonNullableByDefault) { + if (constructor.isConst && lateFinalFields.isNotEmpty) { + for (FieldBuilder field in lateFinalFields) { + builder.addProblem(messageConstConstructorLateFinalFieldError, + field.charOffset, noLength, + context: [ + messageConstConstructorLateFinalFieldCause.withLocation( + constructor.fileUri!, constructor.charOffset, noLength) + ]); + } + lateFinalFields.clear(); + } + } + if (constructor.isEffectivelyExternal) continue; Set fields = - constructorBuilder.takeInitializedFields() ?? const {}; - constructorInitializedFields[constructorBuilder] = fields; - (initializedFields ??= new Set.identity()) + constructor.takeInitializedFields() ?? const {}; + constructorInitializedFields[constructor] = fields; + (initializedFieldBuilders ??= new Set.identity()) .addAll(fields); } // Run through all fields that aren't initialized by any constructor, and // set their initializer to `null`. for (SourceFieldBuilder fieldBuilder in uninitializedFields) { - if (initializedFields == null || - !initializedFields.contains(fieldBuilder)) { + if (initializedFieldBuilders == null || + !initializedFieldBuilders.contains(fieldBuilder)) { bool uninitializedFinalOrNonNullableFieldIsError = - cls.enclosingLibrary.isNonNullableByDefault || - (cls.constructors.isNotEmpty || cls.isMixinDeclaration); + libraryBuilder.isNonNullableByDefault || + builder.hasGenerativeConstructor || + builder.isMixinDeclaration; if (!fieldBuilder.isLate) { if (fieldBuilder.isFinal && uninitializedFinalOrNonNullableFieldIsError) { - String uri = '${fieldBuilder.libraryBuilder.importUri}'; + String uri = '${libraryBuilder.importUri}'; String file = fieldBuilder.fileUri.pathSegments.last; if (uri == 'dart:html' || uri == 'dart:svg' || @@ -1401,7 +1407,7 @@ class KernelTarget extends TargetImplementation { // TODO(johnniwinther): Use external getters instead of final // fields. See https://github.com/dart-lang/sdk/issues/33762 } else { - builder.libraryBuilder.addProblem( + libraryBuilder.addProblem( templateFinalFieldNotInitialized .withArguments(fieldBuilder.name), fieldBuilder.charOffset, @@ -1411,37 +1417,38 @@ class KernelTarget extends TargetImplementation { } else if (fieldBuilder.fieldType is! InvalidType && fieldBuilder.fieldType.isPotentiallyNonNullable && uninitializedFinalOrNonNullableFieldIsError) { - SourceLibraryBuilder library = builder.libraryBuilder; - if (library.isNonNullableByDefault) { - library.addProblem( + if (libraryBuilder.isNonNullableByDefault) { + libraryBuilder.addProblem( templateFieldNonNullableWithoutInitializerError.withArguments( fieldBuilder.name, fieldBuilder.fieldType, - library.isNonNullableByDefault), + libraryBuilder.isNonNullableByDefault), fieldBuilder.charOffset, fieldBuilder.name.length, fieldBuilder.fileUri); } } + fieldBuilder.field.initializer = new NullLiteral() + ..parent = fieldBuilder.field; } } } // Run through all fields that are initialized by some constructor, and // make sure that all other constructors also initialize them. - constructorInitializedFields.forEach( - (DeclaredSourceConstructorBuilder constructorBuilder, - Set fieldBuilders) { + for (MapEntry> entry + in constructorInitializedFields.entries) { + ConstructorDeclaration constructorBuilder = entry.key; + Set fieldBuilders = entry.value; for (SourceFieldBuilder fieldBuilder - in initializedFields!.difference(fieldBuilders)) { + in initializedFieldBuilders!.difference(fieldBuilders)) { if (!fieldBuilder.hasInitializer && !fieldBuilder.isLate) { FieldInitializer initializer = new FieldInitializer(fieldBuilder.field, new NullLiteral()) ..isSynthetic = true; - initializer.parent = constructorBuilder.constructor; - constructorBuilder.constructor.initializers.insert(0, initializer); + constructorBuilder.prependInitializer(initializer); if (fieldBuilder.isFinal) { - builder.libraryBuilder.addProblem( + libraryBuilder.addProblem( templateFinalFieldNotInitializedByConstructor .withArguments(fieldBuilder.name), constructorBuilder.charOffset, @@ -1456,12 +1463,11 @@ class KernelTarget extends TargetImplementation { } else if (fieldBuilder.field.type is! InvalidType && !fieldBuilder.isLate && fieldBuilder.field.type.isPotentiallyNonNullable) { - SourceLibraryBuilder library = builder.libraryBuilder; - if (library.isNonNullableByDefault) { - library.addProblem( + if (libraryBuilder.isNonNullableByDefault) { + libraryBuilder.addProblem( templateFieldNonNullableNotInitializedByConstructorError .withArguments(fieldBuilder.name, fieldBuilder.field.type, - library.isNonNullableByDefault), + libraryBuilder.isNonNullableByDefault), constructorBuilder.charOffset, noLength, constructorBuilder.fileUri, @@ -1475,23 +1481,6 @@ class KernelTarget extends TargetImplementation { } } } - }); - - Set? initializedFieldsKernel = null; - if (initializedFields != null) { - for (FieldBuilder fieldBuilder in initializedFields) { - (initializedFieldsKernel ??= new Set.identity()) - .add(fieldBuilder.field); - } - } - - for (Field field in cls.fields) { - if (field.initializer == null && - !field.isLate && - (initializedFieldsKernel == null || - !initializedFieldsKernel.contains(field))) { - field.initializer = new NullLiteral()..parent = field; - } } } diff --git a/pkg/front_end/lib/src/fasta/source/class_declaration.dart b/pkg/front_end/lib/src/fasta/source/class_declaration.dart new file mode 100644 index 00000000000..200c78c463e --- /dev/null +++ b/pkg/front_end/lib/src/fasta/source/class_declaration.dart @@ -0,0 +1,21 @@ +// 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 '../builder/class_builder.dart'; +import '../builder/declaration_builder.dart'; +import 'source_library_builder.dart'; + +/// Common interface for builders for a class declarations in source code, such +/// as a regular class declaration and an inline class declaration. +abstract class ClassDeclaration + implements DeclarationBuilder, ClassMemberAccess { + @override + SourceLibraryBuilder get libraryBuilder; + + bool get isMixinDeclaration; + + /// Returns `true` if this class declaration has a generative constructor, + /// either explicitly or implicitly through a no-name default constructor. + bool get hasGenerativeConstructor; +} diff --git a/pkg/front_end/lib/src/fasta/source/constructor_declaration.dart b/pkg/front_end/lib/src/fasta/source/constructor_declaration.dart new file mode 100644 index 00000000000..2830d2988f4 --- /dev/null +++ b/pkg/front_end/lib/src/fasta/source/constructor_declaration.dart @@ -0,0 +1,57 @@ +// 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 '../kernel/expression_generator_helper.dart'; +import '../type_inference/inference_results.dart'; +import 'class_declaration.dart'; +import 'source_field_builder.dart'; +import 'source_function_builder.dart'; + +/// Common interface for builders for generative constructor declarations in +/// source code, such as a generative constructor in a regular class or a +/// generative constructor in an inline class. +abstract class ConstructorDeclaration implements SourceFunctionBuilder { + /// Returns the enclosing [ClassDeclaration]. + ClassDeclaration get classDeclaration; + + /// Returns `true` if this constructor, including its augmentations, is + /// external. + /// + /// An augmented constructor is considered external if all of the origin + /// and augmentation constructors are external. + bool get isEffectivelyExternal; + + /// Returns `true` if this constructor or any of its augmentations are + /// redirecting. + /// + /// An augmented constructor is considered redirecting if any of the origin + /// or augmentation constructors is redirecting. Since it is an error if more + /// than one is redirecting, only one can be redirecting in the without + /// errors. + bool get isEffectivelyRedirecting; + + void addInitializer(Initializer initializer, ExpressionGeneratorHelper helper, + {required InitializerInferenceResult? inferenceResult}); + + List get initializers; + + void prepareInitializers(); + + void prependInitializer(Initializer initializer); + + /// Registers field as being initialized by this constructor. + /// + /// The field can be initialized either via an initializing formal or via an + /// entry in the constructor initializer list. + void registerInitializedField(SourceFieldBuilder fieldBuilder); + + /// Returns the fields registered as initialized by this constructor. + /// + /// Returns the set of fields previously registered via + /// [registerInitializedField] and passes on the ownership of the collection + /// to the caller. + Set? takeInitializedFields(); +} diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart index e7f2d0faa5f..9739d762ebf 100644 --- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart +++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart @@ -40,6 +40,7 @@ import '../builder/type_variable_builder.dart'; import '../builder/void_type_declaration_builder.dart'; import '../dill/dill_member_builder.dart'; import '../fasta_codes.dart'; +import '../identifiers.dart'; import '../kernel/hierarchy/hierarchy_builder.dart'; import '../kernel/hierarchy/hierarchy_node.dart'; import '../kernel/kernel_helper.dart'; @@ -47,12 +48,12 @@ import '../kernel/redirecting_factory_body.dart' show RedirectingFactoryBody, redirectingName; import '../kernel/type_algorithms.dart' show computeTypeVariableBuilderVariance; import '../kernel/utils.dart' show compareProcedures; -import '../identifiers.dart'; import '../names.dart' show equalsName; import '../problems.dart' show unexpected, unhandled, unimplemented; import '../scope.dart'; import '../type_inference/type_schema.dart'; import '../util/helpers.dart'; +import 'class_declaration.dart'; import 'source_constructor_builder.dart'; import 'source_factory_builder.dart'; import 'source_field_builder.dart'; @@ -93,7 +94,7 @@ Class initializeClass( } class SourceClassBuilder extends ClassBuilderImpl - implements Comparable { + implements Comparable, ClassDeclaration { final Class actualCls; final List? constructorReferences; @@ -398,6 +399,10 @@ class SourceClassBuilder extends ClassBuilderImpl NameIterator fullConstructorNameIterator() => new ClassConstructorNameIterator(this, includeDuplicates: false); + @override + bool get hasGenerativeConstructor => + fullConstructorNameIterator().moveNext(); + /// Looks up the constructor by [name] on the class built by this class /// builder. /// 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 3e0dd65f01a..fdc0ef26262 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 @@ -53,6 +53,8 @@ import '../source/source_member_builder.dart'; import '../type_inference/inference_results.dart'; import '../type_inference/type_schema.dart'; import '../util/helpers.dart' show DelayedActionPerformer; +import 'class_declaration.dart'; +import 'constructor_declaration.dart'; import 'name_scheme.dart'; import 'source_field_builder.dart'; import 'source_function_builder.dart'; @@ -78,7 +80,7 @@ abstract class SourceConstructorBuilder abstract class AbstractSourceConstructorBuilder extends SourceFunctionBuilderImpl - implements SourceConstructorBuilder, Inferable { + implements SourceConstructorBuilder, Inferable, ConstructorDeclaration { @override final OmittedTypeBuilder returnType; @@ -166,6 +168,7 @@ abstract class AbstractSourceConstructorBuilder } } + @override List get initializers; @override @@ -193,6 +196,7 @@ abstract class AbstractSourceConstructorBuilder RedirectingInitializer? redirectingInitializer; + @override void addInitializer(Initializer initializer, ExpressionGeneratorHelper helper, {required InitializerInferenceResult? inferenceResult}) { if (initializer is SuperInitializer) { @@ -390,6 +394,9 @@ class DeclaredSourceConstructorBuilder // TODO(johnniwinther): Use [NameScheme] for constructor tear-off names. } + @override + ClassDeclaration get classDeclaration => classBuilder; + @override SourceClassBuilder get classBuilder => super.classBuilder as SourceClassBuilder; @@ -423,11 +430,7 @@ class DeclaredSourceConstructorBuilder @override bool get isClassInstanceMember => false; - /// Returns `true` if this constructor, including its augmentations, is - /// external. - /// - /// An augmented constructor is considered external if all of the origin - /// and augmentation constructors are external. + @override bool get isEffectivelyExternal { bool isExternal = this.isExternal; if (isExternal) { @@ -441,13 +444,7 @@ class DeclaredSourceConstructorBuilder return isExternal; } - /// Returns `true` if this constructor or any of its augmentations are - /// redirecting. - /// - /// An augmented constructor is considered redirecting if any of the origin - /// or augmentation constructors is redirecting. Since it is an error if more - /// than one is redirecting, only one can be redirecting in the without - /// errors. + @override bool get isEffectivelyRedirecting { bool isRedirecting = this.isRedirecting; if (!isRedirecting) { @@ -849,6 +846,7 @@ class DeclaredSourceConstructorBuilder } } + @override void prepareInitializers() { // For const constructors we parse initializers already at the outlining // stage, there is no easy way to make body building stage skip initializer @@ -864,10 +862,13 @@ class DeclaredSourceConstructorBuilder superInitializer = null; } - /// Registers field as being initialized by this constructor. - /// - /// The field can be initialized either via an initializing formal or via an - /// entry in the constructor initializer list. + @override + void prependInitializer(Initializer initializer) { + initializer.parent = constructor; + constructor.initializers.insert(0, initializer); + } + + @override void registerInitializedField(SourceFieldBuilder fieldBuilder) { if (isPatch) { origin.registerInitializedField(fieldBuilder); @@ -876,11 +877,7 @@ class DeclaredSourceConstructorBuilder } } - /// Returns the fields registered as initialized by this constructor. - /// - /// Returns the set of fields previously registered via - /// [registerInitializedField] and passes on the ownership of the collection - /// to the caller. + @override Set? takeInitializedFields() { Set? result = _initializedFields; _initializedFields = null; @@ -1028,8 +1025,10 @@ class SourceInlineClassConstructorBuilder late final Procedure _constructor; late final Procedure? _constructorTearOff; + Set? _initializedFields; + @override - final List initializers = []; + List initializers = []; SourceInlineClassConstructorBuilder( List? metadata, @@ -1082,6 +1081,9 @@ class SourceInlineClassConstructorBuilder } } + @override + ClassDeclaration get classDeclaration => inlineClassBuilder; + SourceInlineClassBuilder get inlineClassBuilder => parent as SourceInlineClassBuilder; @@ -1170,5 +1172,44 @@ class SourceInlineClassConstructorBuilder _buildFormals(_constructor); } - // TODO(johnniwinther): Generate initializers and return statement. + @override + void prepareInitializers() { + // For const constructors we parse initializers already at the outlining + // stage, there is no easy way to make body building stage skip initializer + // parsing, so we simply clear parsed initializers and rebuild them + // again. + // For when doing an experimental incremental compilation they are also + // potentially done more than once (because it rebuilds the bodies of an old + // compile), and so we also clear them. + // Note: this method clears both initializers from the target Kernel node + // and internal state associated with parsing initializers. + initializers = []; + redirectingInitializer = null; + superInitializer = null; + } + + @override + void prependInitializer(Initializer initializer) { + initializers.insert(0, initializer); + } + + @override + void registerInitializedField(SourceFieldBuilder fieldBuilder) { + (_initializedFields ??= {}).add(fieldBuilder); + } + + @override + Set? takeInitializedFields() { + Set? result = _initializedFields; + _initializedFields = null; + return result; + } + + @override + bool get isEffectivelyExternal => isExternal; + + @override + bool get isEffectivelyRedirecting => isRedirecting; + +// TODO(johnniwinther): Generate initializers and return statement. } diff --git a/pkg/front_end/lib/src/fasta/source/source_inline_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_inline_class_builder.dart index aa7bac80fee..b11f3054bec 100644 --- a/pkg/front_end/lib/src/fasta/source/source_inline_class_builder.dart +++ b/pkg/front_end/lib/src/fasta/source/source_inline_class_builder.dart @@ -2,14 +2,15 @@ // 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:front_end/src/fasta/source/source_builder_mixins.dart'; import 'package:kernel/ast.dart'; import '../../base/common.dart'; import '../builder/builder.dart'; import '../builder/inline_class_builder.dart'; import '../builder/library_builder.dart'; +import '../builder/member_builder.dart'; import '../builder/metadata_builder.dart'; +import '../builder/name_iterator.dart'; import '../builder/type_builder.dart'; import '../builder/type_variable_builder.dart'; import '../fasta_codes.dart' @@ -19,12 +20,15 @@ import '../fasta_codes.dart' noLength; import '../problems.dart'; import '../scope.dart'; +import 'class_declaration.dart'; +import 'source_builder_mixins.dart'; import 'source_field_builder.dart'; import 'source_library_builder.dart'; import 'source_member_builder.dart'; class SourceInlineClassBuilder extends InlineClassBuilderImpl - with SourceDeclarationBuilderMixin { + with SourceDeclarationBuilderMixin + implements ClassDeclaration { final InlineClass _inlineClass; SourceInlineClassBuilder? _origin; @@ -197,4 +201,37 @@ class SourceInlineClassBuilder extends InlineClassBuilderImpl // TODO(johnniwinther): Implement representationType. @override DartType get declaredRepresentationType => throw new UnimplementedError(); + + @override + Iterator fullConstructorIterator() { + // TODO(johnniwinther): Implement fullConstructorIterator + throw new UnimplementedError(); + } + + @override + NameIterator fullConstructorNameIterator() { + // TODO(johnniwinther): Implement fullConstructorNameIterator + throw new UnimplementedError(); + } + + @override + Iterator fullMemberIterator() { + // TODO(johnniwinther): Implement fullMemberIterator + throw new UnimplementedError(); + } + + @override + NameIterator fullMemberNameIterator() { + // TODO(johnniwinther): Implement fullMemberNameIterator + throw new UnimplementedError(); + } + + @override + bool get isMixinDeclaration => false; + + @override + bool get hasGenerativeConstructor { + // TODO(johnniwinther): Implement hasGenerativeConstructor + throw new UnimplementedError(); + } } 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 88c458d65da..74c880d2bee 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 @@ -107,6 +107,7 @@ import '../operator.dart'; import '../problems.dart' show unexpected, unhandled; import '../scope.dart'; import '../util/helpers.dart'; +import 'constructor_declaration.dart'; import 'name_scheme.dart'; import 'source_class_builder.dart' show SourceClassBuilder; import 'source_constructor_builder.dart'; @@ -3990,9 +3991,9 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { inErrorRecovery: inErrorRecovery); formals = member.formals; } else { - assert(member is AbstractSourceConstructorBuilder, + assert(member is ConstructorDeclaration, "Unexpected constructor member (${member.runtimeType})."); - formals = (member as AbstractSourceConstructorBuilder).formals; + formals = (member as ConstructorDeclaration).formals; } if (formals != null && formals.isNotEmpty) { for (FormalParameterBuilder formal in formals) { diff --git a/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.strong.expect index 8295f463df7..124c4c63e59 100644 --- a/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.strong.expect +++ b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.strong.expect @@ -74,7 +74,7 @@ import "dart:core" as core; class E1 extends core::_Enum /*isEnum*/ { static const field core::List values = #C1; - final field core::int element = null; + final field core::int element = 42; const constructor •(core::int #index, core::String #name) → self::E1 : super core::_Enum::•(#index, #name) ; @@ -110,7 +110,7 @@ class E4 extends core::_Enum /*isEnum*/ { } class E5 extends core::_Enum /*isEnum*/ { static const field core::List values = #C8; - static field core::int element = null; + static field core::int element = 42; const constructor •(core::int #index, core::String #name) → self::E5 : super core::_Enum::•(#index, #name) ; diff --git a/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.strong.transformed.expect index 683d541927a..2c30dad69dd 100644 --- a/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.strong.transformed.expect @@ -74,7 +74,7 @@ import "dart:core" as core; class E1 extends core::_Enum /*isEnum*/ { static const field core::List values = #C1; - final field core::int element = null; + final field core::int element = 42; const constructor •(core::int #index, core::String #name) → self::E1 : super core::_Enum::•(#index, #name) ; @@ -110,7 +110,7 @@ class E4 extends core::_Enum /*isEnum*/ { } class E5 extends core::_Enum /*isEnum*/ { static const field core::List values = #C8; - static field core::int element = null; + static field core::int element = 42; const constructor •(core::int #index, core::String #name) → self::E5 : super core::_Enum::•(#index, #name) ; diff --git a/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.expect index 6d35a18d09e..ceac1b1c5a7 100644 --- a/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.expect +++ b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.expect @@ -74,7 +74,7 @@ import "dart:core" as core; class E1 extends core::_Enum /*isEnum*/ { static const field core::List values = #C1; - final field core::int element = null; + final field core::int element = 42; const constructor •(core::int #index, core::String #name) → self::E1 : super core::_Enum::•(#index, #name) ; @@ -110,7 +110,7 @@ class E4 extends core::_Enum /*isEnum*/ { } class E5 extends core::_Enum /*isEnum*/ { static const field core::List values = #C8; - static field core::int element = null; + static field core::int element = 42; const constructor •(core::int #index, core::String #name) → self::E5 : super core::_Enum::•(#index, #name) ; diff --git a/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.modular.expect index 6d35a18d09e..ceac1b1c5a7 100644 --- a/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.modular.expect +++ b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.modular.expect @@ -74,7 +74,7 @@ import "dart:core" as core; class E1 extends core::_Enum /*isEnum*/ { static const field core::List values = #C1; - final field core::int element = null; + final field core::int element = 42; const constructor •(core::int #index, core::String #name) → self::E1 : super core::_Enum::•(#index, #name) ; @@ -110,7 +110,7 @@ class E4 extends core::_Enum /*isEnum*/ { } class E5 extends core::_Enum /*isEnum*/ { static const field core::List values = #C8; - static field core::int element = null; + static field core::int element = 42; const constructor •(core::int #index, core::String #name) → self::E5 : super core::_Enum::•(#index, #name) ; diff --git a/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.transformed.expect index 948886aa856..92bd3a3bdb2 100644 --- a/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.transformed.expect +++ b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.transformed.expect @@ -74,7 +74,7 @@ import "dart:core" as core; class E1 extends core::_Enum /*isEnum*/ { static const field core::List values = #C1; - final field core::int element = null; + final field core::int element = 42; const constructor •(core::int #index, core::String #name) → self::E1 : super core::_Enum::•(#index, #name) ; @@ -110,7 +110,7 @@ class E4 extends core::_Enum /*isEnum*/ { } class E5 extends core::_Enum /*isEnum*/ { static const field core::List values = #C8; - static field core::int element = null; + static field core::int element = 42; const constructor •(core::int #index, core::String #name) → self::E5 : super core::_Enum::•(#index, #name) ; diff --git a/pkg/front_end/testcases/extensions/extension_member_conflict.dart.strong.expect b/pkg/front_end/testcases/extensions/extension_member_conflict.dart.strong.expect index d2335e5b838..9f106c0c144 100644 --- a/pkg/front_end/testcases/extensions/extension_member_conflict.dart.strong.expect +++ b/pkg/front_end/testcases/extensions/extension_member_conflict.dart.strong.expect @@ -168,7 +168,7 @@ extension Extension on core::int { set instanceSetterAndStaticGetter = self::Extension|set#instanceSetterAndStaticGetter; set instanceSetterAndStaticField = self::Extension|set#instanceSetterAndStaticField; } -static field core::int Extension|duplicateStaticField; +static field core::int Extension|duplicateStaticField = 0; static method Extension|get#duplicateInstanceGetter(lowered final core::int #this) → core::int return 0; static method Extension|set#duplicateInstanceSetter(lowered final core::int #this, core::int value) → void {} diff --git a/pkg/front_end/testcases/extensions/extension_member_conflict.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/extension_member_conflict.dart.strong.transformed.expect index d2335e5b838..9f106c0c144 100644 --- a/pkg/front_end/testcases/extensions/extension_member_conflict.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/extensions/extension_member_conflict.dart.strong.transformed.expect @@ -168,7 +168,7 @@ extension Extension on core::int { set instanceSetterAndStaticGetter = self::Extension|set#instanceSetterAndStaticGetter; set instanceSetterAndStaticField = self::Extension|set#instanceSetterAndStaticField; } -static field core::int Extension|duplicateStaticField; +static field core::int Extension|duplicateStaticField = 0; static method Extension|get#duplicateInstanceGetter(lowered final core::int #this) → core::int return 0; static method Extension|set#duplicateInstanceSetter(lowered final core::int #this, core::int value) → void {} diff --git a/pkg/front_end/testcases/extensions/extension_member_conflict.dart.weak.expect b/pkg/front_end/testcases/extensions/extension_member_conflict.dart.weak.expect index d2335e5b838..9f106c0c144 100644 --- a/pkg/front_end/testcases/extensions/extension_member_conflict.dart.weak.expect +++ b/pkg/front_end/testcases/extensions/extension_member_conflict.dart.weak.expect @@ -168,7 +168,7 @@ extension Extension on core::int { set instanceSetterAndStaticGetter = self::Extension|set#instanceSetterAndStaticGetter; set instanceSetterAndStaticField = self::Extension|set#instanceSetterAndStaticField; } -static field core::int Extension|duplicateStaticField; +static field core::int Extension|duplicateStaticField = 0; static method Extension|get#duplicateInstanceGetter(lowered final core::int #this) → core::int return 0; static method Extension|set#duplicateInstanceSetter(lowered final core::int #this, core::int value) → void {} diff --git a/pkg/front_end/testcases/extensions/extension_member_conflict.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/extension_member_conflict.dart.weak.modular.expect index d2335e5b838..9f106c0c144 100644 --- a/pkg/front_end/testcases/extensions/extension_member_conflict.dart.weak.modular.expect +++ b/pkg/front_end/testcases/extensions/extension_member_conflict.dart.weak.modular.expect @@ -168,7 +168,7 @@ extension Extension on core::int { set instanceSetterAndStaticGetter = self::Extension|set#instanceSetterAndStaticGetter; set instanceSetterAndStaticField = self::Extension|set#instanceSetterAndStaticField; } -static field core::int Extension|duplicateStaticField; +static field core::int Extension|duplicateStaticField = 0; static method Extension|get#duplicateInstanceGetter(lowered final core::int #this) → core::int return 0; static method Extension|set#duplicateInstanceSetter(lowered final core::int #this, core::int value) → void {} diff --git a/pkg/front_end/testcases/extensions/extension_member_conflict.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/extension_member_conflict.dart.weak.transformed.expect index d2335e5b838..9f106c0c144 100644 --- a/pkg/front_end/testcases/extensions/extension_member_conflict.dart.weak.transformed.expect +++ b/pkg/front_end/testcases/extensions/extension_member_conflict.dart.weak.transformed.expect @@ -168,7 +168,7 @@ extension Extension on core::int { set instanceSetterAndStaticGetter = self::Extension|set#instanceSetterAndStaticGetter; set instanceSetterAndStaticField = self::Extension|set#instanceSetterAndStaticField; } -static field core::int Extension|duplicateStaticField; +static field core::int Extension|duplicateStaticField = 0; static method Extension|get#duplicateInstanceGetter(lowered final core::int #this) → core::int return 0; static method Extension|set#duplicateInstanceSetter(lowered final core::int #this, core::int value) → void {} diff --git a/pkg/front_end/testcases/extensions/issue44844.dart.strong.expect b/pkg/front_end/testcases/extensions/issue44844.dart.strong.expect index 94590c75ea4..e6dc4a4743c 100644 --- a/pkg/front_end/testcases/extensions/issue44844.dart.strong.expect +++ b/pkg/front_end/testcases/extensions/issue44844.dart.strong.expect @@ -20,7 +20,7 @@ import "dart:core" as core; extension /* unnamed */ _extension#0 on core::int { static field foo = self::_extension#0|foo; } -static field core::int _extension#0|foo; +static field core::int _extension#0|foo = 2; static method test() → void { invalid-expression "pkg/front_end/testcases/extensions/issue44844.dart:11:5: Error: The method 'foo' isn't defined for the class 'int'. Try correcting the name to the name of an existing method, or defining a method named 'foo'. diff --git a/pkg/front_end/testcases/extensions/issue44844.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/issue44844.dart.strong.transformed.expect index 94590c75ea4..e6dc4a4743c 100644 --- a/pkg/front_end/testcases/extensions/issue44844.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/extensions/issue44844.dart.strong.transformed.expect @@ -20,7 +20,7 @@ import "dart:core" as core; extension /* unnamed */ _extension#0 on core::int { static field foo = self::_extension#0|foo; } -static field core::int _extension#0|foo; +static field core::int _extension#0|foo = 2; static method test() → void { invalid-expression "pkg/front_end/testcases/extensions/issue44844.dart:11:5: Error: The method 'foo' isn't defined for the class 'int'. Try correcting the name to the name of an existing method, or defining a method named 'foo'. diff --git a/pkg/front_end/testcases/extensions/issue44844.dart.weak.expect b/pkg/front_end/testcases/extensions/issue44844.dart.weak.expect index 94590c75ea4..e6dc4a4743c 100644 --- a/pkg/front_end/testcases/extensions/issue44844.dart.weak.expect +++ b/pkg/front_end/testcases/extensions/issue44844.dart.weak.expect @@ -20,7 +20,7 @@ import "dart:core" as core; extension /* unnamed */ _extension#0 on core::int { static field foo = self::_extension#0|foo; } -static field core::int _extension#0|foo; +static field core::int _extension#0|foo = 2; static method test() → void { invalid-expression "pkg/front_end/testcases/extensions/issue44844.dart:11:5: Error: The method 'foo' isn't defined for the class 'int'. Try correcting the name to the name of an existing method, or defining a method named 'foo'. diff --git a/pkg/front_end/testcases/extensions/issue44844.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue44844.dart.weak.modular.expect index 94590c75ea4..e6dc4a4743c 100644 --- a/pkg/front_end/testcases/extensions/issue44844.dart.weak.modular.expect +++ b/pkg/front_end/testcases/extensions/issue44844.dart.weak.modular.expect @@ -20,7 +20,7 @@ import "dart:core" as core; extension /* unnamed */ _extension#0 on core::int { static field foo = self::_extension#0|foo; } -static field core::int _extension#0|foo; +static field core::int _extension#0|foo = 2; static method test() → void { invalid-expression "pkg/front_end/testcases/extensions/issue44844.dart:11:5: Error: The method 'foo' isn't defined for the class 'int'. Try correcting the name to the name of an existing method, or defining a method named 'foo'. diff --git a/pkg/front_end/testcases/extensions/issue44844.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue44844.dart.weak.transformed.expect index 94590c75ea4..e6dc4a4743c 100644 --- a/pkg/front_end/testcases/extensions/issue44844.dart.weak.transformed.expect +++ b/pkg/front_end/testcases/extensions/issue44844.dart.weak.transformed.expect @@ -20,7 +20,7 @@ import "dart:core" as core; extension /* unnamed */ _extension#0 on core::int { static field foo = self::_extension#0|foo; } -static field core::int _extension#0|foo; +static field core::int _extension#0|foo = 2; static method test() → void { invalid-expression "pkg/front_end/testcases/extensions/issue44844.dart:11:5: Error: The method 'foo' isn't defined for the class 'int'. Try correcting the name to the name of an existing method, or defining a method named 'foo'. diff --git a/pkg/front_end/testcases/general/bug31124.dart.strong.expect b/pkg/front_end/testcases/general/bug31124.dart.strong.expect index ffdb4018af3..2189b31a5d3 100644 --- a/pkg/front_end/testcases/general/bug31124.dart.strong.expect +++ b/pkg/front_end/testcases/general/bug31124.dart.strong.expect @@ -17,4 +17,4 @@ library /*isNonNullableByDefault*/; import self as self; import "dart:core" as core; -static field () → core::String a; +static field () → core::String a = () → core::String => "b"; diff --git a/pkg/front_end/testcases/general/bug31124.dart.strong.transformed.expect b/pkg/front_end/testcases/general/bug31124.dart.strong.transformed.expect index ffdb4018af3..2189b31a5d3 100644 --- a/pkg/front_end/testcases/general/bug31124.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/general/bug31124.dart.strong.transformed.expect @@ -17,4 +17,4 @@ library /*isNonNullableByDefault*/; import self as self; import "dart:core" as core; -static field () → core::String a; +static field () → core::String a = () → core::String => "b"; diff --git a/pkg/front_end/testcases/general/bug31124.dart.weak.expect b/pkg/front_end/testcases/general/bug31124.dart.weak.expect index ffdb4018af3..2189b31a5d3 100644 --- a/pkg/front_end/testcases/general/bug31124.dart.weak.expect +++ b/pkg/front_end/testcases/general/bug31124.dart.weak.expect @@ -17,4 +17,4 @@ library /*isNonNullableByDefault*/; import self as self; import "dart:core" as core; -static field () → core::String a; +static field () → core::String a = () → core::String => "b"; diff --git a/pkg/front_end/testcases/general/bug31124.dart.weak.modular.expect b/pkg/front_end/testcases/general/bug31124.dart.weak.modular.expect index ffdb4018af3..2189b31a5d3 100644 --- a/pkg/front_end/testcases/general/bug31124.dart.weak.modular.expect +++ b/pkg/front_end/testcases/general/bug31124.dart.weak.modular.expect @@ -17,4 +17,4 @@ library /*isNonNullableByDefault*/; import self as self; import "dart:core" as core; -static field () → core::String a; +static field () → core::String a = () → core::String => "b"; diff --git a/pkg/front_end/testcases/general/bug31124.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug31124.dart.weak.transformed.expect index ffdb4018af3..2189b31a5d3 100644 --- a/pkg/front_end/testcases/general/bug31124.dart.weak.transformed.expect +++ b/pkg/front_end/testcases/general/bug31124.dart.weak.transformed.expect @@ -17,4 +17,4 @@ library /*isNonNullableByDefault*/; import self as self; import "dart:core" as core; -static field () → core::String a; +static field () → core::String a = () → core::String => "b"; diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart.strong.expect b/pkg/front_end/testcases/general/duplicated_declarations.dart.strong.expect index d99e77050e2..25d5cf7c1b4 100644 --- a/pkg/front_end/testcases/general/duplicated_declarations.dart.strong.expect +++ b/pkg/front_end/testcases/general/duplicated_declarations.dart.strong.expect @@ -373,7 +373,7 @@ class C#3#0 extends core::Object { // from org-dartlang-testcase:///duplicated_d ; } class C#2#0 extends core::Object { // from org-dartlang-testcase:///duplicated_declarations_part.dart - field core::String field = null; + field core::String field = "1st"; constructor •(dynamic a) → self::C#2#0 : super core::Object::•() ; @@ -394,7 +394,7 @@ class C#1#0 extends core::Object { ; } class C extends core::Object { - field core::String field = null; + field core::String field = "1st"; constructor •(dynamic a) → self::C : super core::Object::•() ; @@ -488,7 +488,7 @@ class AnotherEnum extends core::_Enum /*isEnum*/ { method _enumToString() → core::String return "AnotherEnum.${this.{core::_Enum::_name}{core::String}}"; } -static field core::String field; +static field core::String field = "1st"; static method main() → dynamic { "1st"; } diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart.strong.transformed.expect b/pkg/front_end/testcases/general/duplicated_declarations.dart.strong.transformed.expect index d99e77050e2..25d5cf7c1b4 100644 --- a/pkg/front_end/testcases/general/duplicated_declarations.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/general/duplicated_declarations.dart.strong.transformed.expect @@ -373,7 +373,7 @@ class C#3#0 extends core::Object { // from org-dartlang-testcase:///duplicated_d ; } class C#2#0 extends core::Object { // from org-dartlang-testcase:///duplicated_declarations_part.dart - field core::String field = null; + field core::String field = "1st"; constructor •(dynamic a) → self::C#2#0 : super core::Object::•() ; @@ -394,7 +394,7 @@ class C#1#0 extends core::Object { ; } class C extends core::Object { - field core::String field = null; + field core::String field = "1st"; constructor •(dynamic a) → self::C : super core::Object::•() ; @@ -488,7 +488,7 @@ class AnotherEnum extends core::_Enum /*isEnum*/ { method _enumToString() → core::String return "AnotherEnum.${this.{core::_Enum::_name}{core::String}}"; } -static field core::String field; +static field core::String field = "1st"; static method main() → dynamic { "1st"; } diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect index 0c9adafa79d..cf7c9cb2acb 100644 --- a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect +++ b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect @@ -373,7 +373,7 @@ class C#3#0 extends core::Object { // from org-dartlang-testcase:///duplicated_d ; } class C#2#0 extends core::Object { // from org-dartlang-testcase:///duplicated_declarations_part.dart - field core::String field = null; + field core::String field = "1st"; constructor •(dynamic a) → self::C#2#0 : super core::Object::•() ; @@ -394,7 +394,7 @@ class C#1#0 extends core::Object { ; } class C extends core::Object { - field core::String field = null; + field core::String field = "1st"; constructor •(dynamic a) → self::C : super core::Object::•() ; @@ -488,7 +488,7 @@ class AnotherEnum extends core::_Enum /*isEnum*/ { method _enumToString() → core::String return "AnotherEnum.${this.{core::_Enum::_name}{core::String}}"; } -static field core::String field; +static field core::String field = "1st"; static method main() → dynamic { "1st"; } diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.modular.expect b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.modular.expect index 0c9adafa79d..cf7c9cb2acb 100644 --- a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.modular.expect +++ b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.modular.expect @@ -373,7 +373,7 @@ class C#3#0 extends core::Object { // from org-dartlang-testcase:///duplicated_d ; } class C#2#0 extends core::Object { // from org-dartlang-testcase:///duplicated_declarations_part.dart - field core::String field = null; + field core::String field = "1st"; constructor •(dynamic a) → self::C#2#0 : super core::Object::•() ; @@ -394,7 +394,7 @@ class C#1#0 extends core::Object { ; } class C extends core::Object { - field core::String field = null; + field core::String field = "1st"; constructor •(dynamic a) → self::C : super core::Object::•() ; @@ -488,7 +488,7 @@ class AnotherEnum extends core::_Enum /*isEnum*/ { method _enumToString() → core::String return "AnotherEnum.${this.{core::_Enum::_name}{core::String}}"; } -static field core::String field; +static field core::String field = "1st"; static method main() → dynamic { "1st"; } diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.transformed.expect b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.transformed.expect index 0c9adafa79d..cf7c9cb2acb 100644 --- a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.transformed.expect +++ b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.transformed.expect @@ -373,7 +373,7 @@ class C#3#0 extends core::Object { // from org-dartlang-testcase:///duplicated_d ; } class C#2#0 extends core::Object { // from org-dartlang-testcase:///duplicated_declarations_part.dart - field core::String field = null; + field core::String field = "1st"; constructor •(dynamic a) → self::C#2#0 : super core::Object::•() ; @@ -394,7 +394,7 @@ class C#1#0 extends core::Object { ; } class C extends core::Object { - field core::String field = null; + field core::String field = "1st"; constructor •(dynamic a) → self::C : super core::Object::•() ; @@ -488,7 +488,7 @@ class AnotherEnum extends core::_Enum /*isEnum*/ { method _enumToString() → core::String return "AnotherEnum.${this.{core::_Enum::_name}{core::String}}"; } -static field core::String field; +static field core::String field = "1st"; static method main() → dynamic { "1st"; } diff --git a/pkg/front_end/testcases/general/issue38961.dart.strong.expect b/pkg/front_end/testcases/general/issue38961.dart.strong.expect index 5a863b3301a..02e3d864f5d 100644 --- a/pkg/front_end/testcases/general/issue38961.dart.strong.expect +++ b/pkg/front_end/testcases/general/issue38961.dart.strong.expect @@ -21,7 +21,9 @@ import self as self; import "dart:core" as core; class C extends core::Object { - field dynamic x = null; + field dynamic x = invalid-expression "pkg/front_end/testcases/general/issue38961.dart:6:15: Error: Can't access 'this' in a field initializer. + dynamic x = this; + ^^^^"; synthetic constructor •() → self::C : super core::Object::•() ; diff --git a/pkg/front_end/testcases/general/issue38961.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue38961.dart.strong.transformed.expect index 5a863b3301a..02e3d864f5d 100644 --- a/pkg/front_end/testcases/general/issue38961.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/general/issue38961.dart.strong.transformed.expect @@ -21,7 +21,9 @@ import self as self; import "dart:core" as core; class C extends core::Object { - field dynamic x = null; + field dynamic x = invalid-expression "pkg/front_end/testcases/general/issue38961.dart:6:15: Error: Can't access 'this' in a field initializer. + dynamic x = this; + ^^^^"; synthetic constructor •() → self::C : super core::Object::•() ; diff --git a/pkg/front_end/testcases/general/issue38961.dart.weak.expect b/pkg/front_end/testcases/general/issue38961.dart.weak.expect index 5a863b3301a..02e3d864f5d 100644 --- a/pkg/front_end/testcases/general/issue38961.dart.weak.expect +++ b/pkg/front_end/testcases/general/issue38961.dart.weak.expect @@ -21,7 +21,9 @@ import self as self; import "dart:core" as core; class C extends core::Object { - field dynamic x = null; + field dynamic x = invalid-expression "pkg/front_end/testcases/general/issue38961.dart:6:15: Error: Can't access 'this' in a field initializer. + dynamic x = this; + ^^^^"; synthetic constructor •() → self::C : super core::Object::•() ; diff --git a/pkg/front_end/testcases/general/issue38961.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue38961.dart.weak.modular.expect index 5a863b3301a..02e3d864f5d 100644 --- a/pkg/front_end/testcases/general/issue38961.dart.weak.modular.expect +++ b/pkg/front_end/testcases/general/issue38961.dart.weak.modular.expect @@ -21,7 +21,9 @@ import self as self; import "dart:core" as core; class C extends core::Object { - field dynamic x = null; + field dynamic x = invalid-expression "pkg/front_end/testcases/general/issue38961.dart:6:15: Error: Can't access 'this' in a field initializer. + dynamic x = this; + ^^^^"; synthetic constructor •() → self::C : super core::Object::•() ; diff --git a/pkg/front_end/testcases/general/issue38961.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue38961.dart.weak.transformed.expect index 5a863b3301a..02e3d864f5d 100644 --- a/pkg/front_end/testcases/general/issue38961.dart.weak.transformed.expect +++ b/pkg/front_end/testcases/general/issue38961.dart.weak.transformed.expect @@ -21,7 +21,9 @@ import self as self; import "dart:core" as core; class C extends core::Object { - field dynamic x = null; + field dynamic x = invalid-expression "pkg/front_end/testcases/general/issue38961.dart:6:15: Error: Can't access 'this' in a field initializer. + dynamic x = this; + ^^^^"; synthetic constructor •() → self::C : super core::Object::•() ; diff --git a/pkg/front_end/testcases/general/issue41252.dart.strong.expect b/pkg/front_end/testcases/general/issue41252.dart.strong.expect index 6d313f35105..7f96326ae98 100644 --- a/pkg/front_end/testcases/general/issue41252.dart.strong.expect +++ b/pkg/front_end/testcases/general/issue41252.dart.strong.expect @@ -17,7 +17,7 @@ import self as self; import "dart:core" as core; class A extends core::Object { - static final field core::int X = null; + static final field core::int X = 0; static final field core::int foo = invalid-expression "pkg/front_end/testcases/general/issue41252.dart:9:26: Error: Can't use 'X' because it is declared more than once. static final int foo = X + 1; ^"{}.+(1); diff --git a/pkg/front_end/testcases/general/issue41252.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue41252.dart.strong.transformed.expect index 6d313f35105..7f96326ae98 100644 --- a/pkg/front_end/testcases/general/issue41252.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/general/issue41252.dart.strong.transformed.expect @@ -17,7 +17,7 @@ import self as self; import "dart:core" as core; class A extends core::Object { - static final field core::int X = null; + static final field core::int X = 0; static final field core::int foo = invalid-expression "pkg/front_end/testcases/general/issue41252.dart:9:26: Error: Can't use 'X' because it is declared more than once. static final int foo = X + 1; ^"{}.+(1); diff --git a/pkg/front_end/testcases/general/issue41252.dart.weak.expect b/pkg/front_end/testcases/general/issue41252.dart.weak.expect index 6d313f35105..7f96326ae98 100644 --- a/pkg/front_end/testcases/general/issue41252.dart.weak.expect +++ b/pkg/front_end/testcases/general/issue41252.dart.weak.expect @@ -17,7 +17,7 @@ import self as self; import "dart:core" as core; class A extends core::Object { - static final field core::int X = null; + static final field core::int X = 0; static final field core::int foo = invalid-expression "pkg/front_end/testcases/general/issue41252.dart:9:26: Error: Can't use 'X' because it is declared more than once. static final int foo = X + 1; ^"{}.+(1); diff --git a/pkg/front_end/testcases/general/issue41252.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue41252.dart.weak.modular.expect index 6d313f35105..7f96326ae98 100644 --- a/pkg/front_end/testcases/general/issue41252.dart.weak.modular.expect +++ b/pkg/front_end/testcases/general/issue41252.dart.weak.modular.expect @@ -17,7 +17,7 @@ import self as self; import "dart:core" as core; class A extends core::Object { - static final field core::int X = null; + static final field core::int X = 0; static final field core::int foo = invalid-expression "pkg/front_end/testcases/general/issue41252.dart:9:26: Error: Can't use 'X' because it is declared more than once. static final int foo = X + 1; ^"{}.+(1); diff --git a/pkg/front_end/testcases/general/issue41252.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue41252.dart.weak.transformed.expect index 6d313f35105..7f96326ae98 100644 --- a/pkg/front_end/testcases/general/issue41252.dart.weak.transformed.expect +++ b/pkg/front_end/testcases/general/issue41252.dart.weak.transformed.expect @@ -17,7 +17,7 @@ import self as self; import "dart:core" as core; class A extends core::Object { - static final field core::int X = null; + static final field core::int X = 0; static final field core::int foo = invalid-expression "pkg/front_end/testcases/general/issue41252.dart:9:26: Error: Can't use 'X' because it is declared more than once. static final int foo = X + 1; ^"{}.+(1); diff --git a/pkg/front_end/testcases/general/uninitialized_static_field.dart b/pkg/front_end/testcases/general/uninitialized_static_field.dart new file mode 100644 index 00000000000..74938d94492 --- /dev/null +++ b/pkg/front_end/testcases/general/uninitialized_static_field.dart @@ -0,0 +1,17 @@ +// Copyright (c) 2016, 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. + +// @dart = 2.9 + +class C { + static var field; + static final finalField; +} + +class D { + static var field; + static final finalField; + + factory D() => throw ''; +} diff --git a/pkg/front_end/testcases/general/uninitialized_static_field.dart.strong.expect b/pkg/front_end/testcases/general/uninitialized_static_field.dart.strong.expect new file mode 100644 index 00000000000..8fb99d63efa --- /dev/null +++ b/pkg/front_end/testcases/general/uninitialized_static_field.dart.strong.expect @@ -0,0 +1,49 @@ +library; +// +// Problems in library: +// +// pkg/front_end/testcases/general/uninitialized_static_field.dart:5:1: Error: Library doesn't support null safety. +// // @dart = 2.9 +// ^^^^^^^^^^^^^^ +// +// pkg/front_end/testcases/general/uninitialized_static_field.dart:9:16: Error: Final field 'finalField' is not initialized. +// Try to initialize the field in the declaration or in every constructor. +// static final finalField; +// ^^^^^^^^^^ +// +import self as self; +import "dart:core" as core; + +class C extends core::Object { + static field dynamic field = null; + static final field dynamic finalField = null; + synthetic constructor •() → self::C* + : super core::Object::•() + ; + abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod + abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode + abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf + abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf + abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue + abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse + abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::== + abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode + abstract member-signature method toString() → core::String*; -> core::Object::toString + abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType +} +class D extends core::Object { + static field dynamic field = null; + static final field dynamic finalField = null; + static factory •() → self::D* + return throw ""; + abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod + abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode + abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf + abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf + abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue + abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse + abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::== + abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode + abstract member-signature method toString() → core::String*; -> core::Object::toString + abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType +} diff --git a/pkg/front_end/testcases/general/uninitialized_static_field.dart.strong.transformed.expect b/pkg/front_end/testcases/general/uninitialized_static_field.dart.strong.transformed.expect new file mode 100644 index 00000000000..8fb99d63efa --- /dev/null +++ b/pkg/front_end/testcases/general/uninitialized_static_field.dart.strong.transformed.expect @@ -0,0 +1,49 @@ +library; +// +// Problems in library: +// +// pkg/front_end/testcases/general/uninitialized_static_field.dart:5:1: Error: Library doesn't support null safety. +// // @dart = 2.9 +// ^^^^^^^^^^^^^^ +// +// pkg/front_end/testcases/general/uninitialized_static_field.dart:9:16: Error: Final field 'finalField' is not initialized. +// Try to initialize the field in the declaration or in every constructor. +// static final finalField; +// ^^^^^^^^^^ +// +import self as self; +import "dart:core" as core; + +class C extends core::Object { + static field dynamic field = null; + static final field dynamic finalField = null; + synthetic constructor •() → self::C* + : super core::Object::•() + ; + abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod + abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode + abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf + abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf + abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue + abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse + abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::== + abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode + abstract member-signature method toString() → core::String*; -> core::Object::toString + abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType +} +class D extends core::Object { + static field dynamic field = null; + static final field dynamic finalField = null; + static factory •() → self::D* + return throw ""; + abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod + abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode + abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf + abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf + abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue + abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse + abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::== + abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode + abstract member-signature method toString() → core::String*; -> core::Object::toString + abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType +} diff --git a/pkg/front_end/testcases/general/uninitialized_static_field.dart.textual_outline.expect b/pkg/front_end/testcases/general/uninitialized_static_field.dart.textual_outline.expect new file mode 100644 index 00000000000..fb84a246f89 --- /dev/null +++ b/pkg/front_end/testcases/general/uninitialized_static_field.dart.textual_outline.expect @@ -0,0 +1,11 @@ +// @dart = 2.9 +class C { + static var field; + static final finalField; +} + +class D { + static var field; + static final finalField; + factory D() => throw ''; +} diff --git a/pkg/front_end/testcases/general/uninitialized_static_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/uninitialized_static_field.dart.textual_outline_modelled.expect new file mode 100644 index 00000000000..18138874705 --- /dev/null +++ b/pkg/front_end/testcases/general/uninitialized_static_field.dart.textual_outline_modelled.expect @@ -0,0 +1,11 @@ +// @dart = 2.9 +class C { + static final finalField; + static var field; +} + +class D { + factory D() => throw ''; + static final finalField; + static var field; +} diff --git a/pkg/front_end/testcases/general/uninitialized_static_field.dart.weak.expect b/pkg/front_end/testcases/general/uninitialized_static_field.dart.weak.expect new file mode 100644 index 00000000000..6055de8db94 --- /dev/null +++ b/pkg/front_end/testcases/general/uninitialized_static_field.dart.weak.expect @@ -0,0 +1,45 @@ +library; +// +// Problems in library: +// +// pkg/front_end/testcases/general/uninitialized_static_field.dart:9:16: Error: Final field 'finalField' is not initialized. +// Try to initialize the field in the declaration or in every constructor. +// static final finalField; +// ^^^^^^^^^^ +// +import self as self; +import "dart:core" as core; + +class C extends core::Object { + static field dynamic field = null; + static final field dynamic finalField = null; + synthetic constructor •() → self::C* + : super core::Object::•() + ; + abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod + abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode + abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf + abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf + abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue + abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse + abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::== + abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode + abstract member-signature method toString() → core::String*; -> core::Object::toString + abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType +} +class D extends core::Object { + static field dynamic field = null; + static final field dynamic finalField = null; + static factory •() → self::D* + return throw ""; + abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod + abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode + abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf + abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf + abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue + abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse + abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::== + abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode + abstract member-signature method toString() → core::String*; -> core::Object::toString + abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType +} diff --git a/pkg/front_end/testcases/general/uninitialized_static_field.dart.weak.modular.expect b/pkg/front_end/testcases/general/uninitialized_static_field.dart.weak.modular.expect new file mode 100644 index 00000000000..6055de8db94 --- /dev/null +++ b/pkg/front_end/testcases/general/uninitialized_static_field.dart.weak.modular.expect @@ -0,0 +1,45 @@ +library; +// +// Problems in library: +// +// pkg/front_end/testcases/general/uninitialized_static_field.dart:9:16: Error: Final field 'finalField' is not initialized. +// Try to initialize the field in the declaration or in every constructor. +// static final finalField; +// ^^^^^^^^^^ +// +import self as self; +import "dart:core" as core; + +class C extends core::Object { + static field dynamic field = null; + static final field dynamic finalField = null; + synthetic constructor •() → self::C* + : super core::Object::•() + ; + abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod + abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode + abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf + abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf + abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue + abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse + abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::== + abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode + abstract member-signature method toString() → core::String*; -> core::Object::toString + abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType +} +class D extends core::Object { + static field dynamic field = null; + static final field dynamic finalField = null; + static factory •() → self::D* + return throw ""; + abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod + abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode + abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf + abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf + abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue + abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse + abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::== + abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode + abstract member-signature method toString() → core::String*; -> core::Object::toString + abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType +} diff --git a/pkg/front_end/testcases/general/uninitialized_static_field.dart.weak.outline.expect b/pkg/front_end/testcases/general/uninitialized_static_field.dart.weak.outline.expect new file mode 100644 index 00000000000..d9662c08a4f --- /dev/null +++ b/pkg/front_end/testcases/general/uninitialized_static_field.dart.weak.outline.expect @@ -0,0 +1,36 @@ +library; +import self as self; +import "dart:core" as core; + +class C extends core::Object { + static field dynamic field; + static final field dynamic finalField; + synthetic constructor •() → self::C* + ; + abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod + abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode + abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf + abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf + abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue + abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse + abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::== + abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode + abstract member-signature method toString() → core::String*; -> core::Object::toString + abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType +} +class D extends core::Object { + static field dynamic field; + static final field dynamic finalField; + static factory •() → self::D* + ; + abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod + abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode + abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf + abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf + abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue + abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse + abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::== + abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode + abstract member-signature method toString() → core::String*; -> core::Object::toString + abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType +} diff --git a/pkg/front_end/testcases/general/uninitialized_static_field.dart.weak.transformed.expect b/pkg/front_end/testcases/general/uninitialized_static_field.dart.weak.transformed.expect new file mode 100644 index 00000000000..6055de8db94 --- /dev/null +++ b/pkg/front_end/testcases/general/uninitialized_static_field.dart.weak.transformed.expect @@ -0,0 +1,45 @@ +library; +// +// Problems in library: +// +// pkg/front_end/testcases/general/uninitialized_static_field.dart:9:16: Error: Final field 'finalField' is not initialized. +// Try to initialize the field in the declaration or in every constructor. +// static final finalField; +// ^^^^^^^^^^ +// +import self as self; +import "dart:core" as core; + +class C extends core::Object { + static field dynamic field = null; + static final field dynamic finalField = null; + synthetic constructor •() → self::C* + : super core::Object::•() + ; + abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod + abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode + abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf + abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf + abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue + abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse + abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::== + abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode + abstract member-signature method toString() → core::String*; -> core::Object::toString + abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType +} +class D extends core::Object { + static field dynamic field = null; + static final field dynamic finalField = null; + static factory •() → self::D* + return throw ""; + abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod + abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode + abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf + abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf + abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue + abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse + abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::== + abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode + abstract member-signature method toString() → core::String*; -> core::Object::toString + abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType +} diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.strong.expect b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.strong.expect index 620a5a83c8c..16976cd18c8 100644 --- a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.strong.expect +++ b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.strong.expect @@ -108,14 +108,14 @@ import self as self; import "dart:core" as core; class Class extends core::Object { - field core::int instanceField = null; + field core::int instanceField = 1; field core::int instanceFieldAndSetter1 = 1; field core::int instanceFieldAndSetter2 = 1; late final [setter] field core::int instanceLateFinalFieldAndSetter1; late final [setter] field core::int instanceLateFinalFieldAndSetter2; - final field core::int instanceDuplicateFieldAndSetter = null; + final field core::int instanceDuplicateFieldAndSetter = 1; final field core::int instanceFieldAndDuplicateSetter = 1; - final field core::int instanceDuplicateFieldAndDuplicateSetter = null; + final field core::int instanceDuplicateFieldAndDuplicateSetter = 1; synthetic constructor •() → self::Class : super core::Object::•() ; diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.strong.transformed.expect index 620a5a83c8c..16976cd18c8 100644 --- a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.strong.transformed.expect @@ -108,14 +108,14 @@ import self as self; import "dart:core" as core; class Class extends core::Object { - field core::int instanceField = null; + field core::int instanceField = 1; field core::int instanceFieldAndSetter1 = 1; field core::int instanceFieldAndSetter2 = 1; late final [setter] field core::int instanceLateFinalFieldAndSetter1; late final [setter] field core::int instanceLateFinalFieldAndSetter2; - final field core::int instanceDuplicateFieldAndSetter = null; + final field core::int instanceDuplicateFieldAndSetter = 1; final field core::int instanceFieldAndDuplicateSetter = 1; - final field core::int instanceDuplicateFieldAndDuplicateSetter = null; + final field core::int instanceDuplicateFieldAndDuplicateSetter = 1; synthetic constructor •() → self::Class : super core::Object::•() ; diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.expect b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.expect index 620a5a83c8c..16976cd18c8 100644 --- a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.expect +++ b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.expect @@ -108,14 +108,14 @@ import self as self; import "dart:core" as core; class Class extends core::Object { - field core::int instanceField = null; + field core::int instanceField = 1; field core::int instanceFieldAndSetter1 = 1; field core::int instanceFieldAndSetter2 = 1; late final [setter] field core::int instanceLateFinalFieldAndSetter1; late final [setter] field core::int instanceLateFinalFieldAndSetter2; - final field core::int instanceDuplicateFieldAndSetter = null; + final field core::int instanceDuplicateFieldAndSetter = 1; final field core::int instanceFieldAndDuplicateSetter = 1; - final field core::int instanceDuplicateFieldAndDuplicateSetter = null; + final field core::int instanceDuplicateFieldAndDuplicateSetter = 1; synthetic constructor •() → self::Class : super core::Object::•() ; diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.modular.expect index 620a5a83c8c..16976cd18c8 100644 --- a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.modular.expect +++ b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.modular.expect @@ -108,14 +108,14 @@ import self as self; import "dart:core" as core; class Class extends core::Object { - field core::int instanceField = null; + field core::int instanceField = 1; field core::int instanceFieldAndSetter1 = 1; field core::int instanceFieldAndSetter2 = 1; late final [setter] field core::int instanceLateFinalFieldAndSetter1; late final [setter] field core::int instanceLateFinalFieldAndSetter2; - final field core::int instanceDuplicateFieldAndSetter = null; + final field core::int instanceDuplicateFieldAndSetter = 1; final field core::int instanceFieldAndDuplicateSetter = 1; - final field core::int instanceDuplicateFieldAndDuplicateSetter = null; + final field core::int instanceDuplicateFieldAndDuplicateSetter = 1; synthetic constructor •() → self::Class : super core::Object::•() ; diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.transformed.expect index 620a5a83c8c..16976cd18c8 100644 --- a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.transformed.expect +++ b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.transformed.expect @@ -108,14 +108,14 @@ import self as self; import "dart:core" as core; class Class extends core::Object { - field core::int instanceField = null; + field core::int instanceField = 1; field core::int instanceFieldAndSetter1 = 1; field core::int instanceFieldAndSetter2 = 1; late final [setter] field core::int instanceLateFinalFieldAndSetter1; late final [setter] field core::int instanceLateFinalFieldAndSetter2; - final field core::int instanceDuplicateFieldAndSetter = null; + final field core::int instanceDuplicateFieldAndSetter = 1; final field core::int instanceFieldAndDuplicateSetter = 1; - final field core::int instanceDuplicateFieldAndDuplicateSetter = null; + final field core::int instanceDuplicateFieldAndDuplicateSetter = 1; synthetic constructor •() → self::Class : super core::Object::•() ; diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.strong.expect b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.strong.expect index 92b80e8d10a..feeb55419b6 100644 --- a/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.strong.expect +++ b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.strong.expect @@ -283,14 +283,14 @@ extension Extension on core::int { set instanceMethodAndSetter2 = self::Extension|set#instanceMethodAndSetter2; } static field dynamic result; -static field core::int Extension|instanceField; +static field core::int Extension|instanceField = 1; static field core::int Extension|instanceFieldAndSetter1 = 1; static field core::int Extension|instanceFieldAndSetter2 = 1; late static final [setter] field core::int Extension|instanceLateFinalFieldAndSetter1; late static final [setter] field core::int Extension|instanceLateFinalFieldAndSetter2; -static final field core::int Extension|instanceDuplicateFieldAndSetter; +static final field core::int Extension|instanceDuplicateFieldAndSetter = 1; static final field core::int Extension|instanceFieldAndDuplicateSetter = 1; -static final field core::int Extension|instanceDuplicateFieldAndDuplicateSetter; +static final field core::int Extension|instanceDuplicateFieldAndDuplicateSetter = 1; static method Extension|instanceMethod(lowered final core::int #this) → core::int return 1; static method Extension|get#instanceMethod(lowered final core::int #this) → () → core::int diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.strong.transformed.expect index 92b80e8d10a..feeb55419b6 100644 --- a/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.strong.transformed.expect @@ -283,14 +283,14 @@ extension Extension on core::int { set instanceMethodAndSetter2 = self::Extension|set#instanceMethodAndSetter2; } static field dynamic result; -static field core::int Extension|instanceField; +static field core::int Extension|instanceField = 1; static field core::int Extension|instanceFieldAndSetter1 = 1; static field core::int Extension|instanceFieldAndSetter2 = 1; late static final [setter] field core::int Extension|instanceLateFinalFieldAndSetter1; late static final [setter] field core::int Extension|instanceLateFinalFieldAndSetter2; -static final field core::int Extension|instanceDuplicateFieldAndSetter; +static final field core::int Extension|instanceDuplicateFieldAndSetter = 1; static final field core::int Extension|instanceFieldAndDuplicateSetter = 1; -static final field core::int Extension|instanceDuplicateFieldAndDuplicateSetter; +static final field core::int Extension|instanceDuplicateFieldAndDuplicateSetter = 1; static method Extension|instanceMethod(lowered final core::int #this) → core::int return 1; static method Extension|get#instanceMethod(lowered final core::int #this) → () → core::int diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.expect b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.expect index 92b80e8d10a..feeb55419b6 100644 --- a/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.expect +++ b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.expect @@ -283,14 +283,14 @@ extension Extension on core::int { set instanceMethodAndSetter2 = self::Extension|set#instanceMethodAndSetter2; } static field dynamic result; -static field core::int Extension|instanceField; +static field core::int Extension|instanceField = 1; static field core::int Extension|instanceFieldAndSetter1 = 1; static field core::int Extension|instanceFieldAndSetter2 = 1; late static final [setter] field core::int Extension|instanceLateFinalFieldAndSetter1; late static final [setter] field core::int Extension|instanceLateFinalFieldAndSetter2; -static final field core::int Extension|instanceDuplicateFieldAndSetter; +static final field core::int Extension|instanceDuplicateFieldAndSetter = 1; static final field core::int Extension|instanceFieldAndDuplicateSetter = 1; -static final field core::int Extension|instanceDuplicateFieldAndDuplicateSetter; +static final field core::int Extension|instanceDuplicateFieldAndDuplicateSetter = 1; static method Extension|instanceMethod(lowered final core::int #this) → core::int return 1; static method Extension|get#instanceMethod(lowered final core::int #this) → () → core::int diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.modular.expect index 92b80e8d10a..feeb55419b6 100644 --- a/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.modular.expect +++ b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.modular.expect @@ -283,14 +283,14 @@ extension Extension on core::int { set instanceMethodAndSetter2 = self::Extension|set#instanceMethodAndSetter2; } static field dynamic result; -static field core::int Extension|instanceField; +static field core::int Extension|instanceField = 1; static field core::int Extension|instanceFieldAndSetter1 = 1; static field core::int Extension|instanceFieldAndSetter2 = 1; late static final [setter] field core::int Extension|instanceLateFinalFieldAndSetter1; late static final [setter] field core::int Extension|instanceLateFinalFieldAndSetter2; -static final field core::int Extension|instanceDuplicateFieldAndSetter; +static final field core::int Extension|instanceDuplicateFieldAndSetter = 1; static final field core::int Extension|instanceFieldAndDuplicateSetter = 1; -static final field core::int Extension|instanceDuplicateFieldAndDuplicateSetter; +static final field core::int Extension|instanceDuplicateFieldAndDuplicateSetter = 1; static method Extension|instanceMethod(lowered final core::int #this) → core::int return 1; static method Extension|get#instanceMethod(lowered final core::int #this) → () → core::int diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.transformed.expect index 92b80e8d10a..feeb55419b6 100644 --- a/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.transformed.expect +++ b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.transformed.expect @@ -283,14 +283,14 @@ extension Extension on core::int { set instanceMethodAndSetter2 = self::Extension|set#instanceMethodAndSetter2; } static field dynamic result; -static field core::int Extension|instanceField; +static field core::int Extension|instanceField = 1; static field core::int Extension|instanceFieldAndSetter1 = 1; static field core::int Extension|instanceFieldAndSetter2 = 1; late static final [setter] field core::int Extension|instanceLateFinalFieldAndSetter1; late static final [setter] field core::int Extension|instanceLateFinalFieldAndSetter2; -static final field core::int Extension|instanceDuplicateFieldAndSetter; +static final field core::int Extension|instanceDuplicateFieldAndSetter = 1; static final field core::int Extension|instanceFieldAndDuplicateSetter = 1; -static final field core::int Extension|instanceDuplicateFieldAndDuplicateSetter; +static final field core::int Extension|instanceDuplicateFieldAndDuplicateSetter = 1; static method Extension|instanceMethod(lowered final core::int #this) → core::int return 1; static method Extension|get#instanceMethod(lowered final core::int #this) → () → core::int diff --git a/pkg/front_end/testcases/nnbd/duplicates_static.dart.strong.expect b/pkg/front_end/testcases/nnbd/duplicates_static.dart.strong.expect index d4870827279..c2e6f21fa52 100644 --- a/pkg/front_end/testcases/nnbd/duplicates_static.dart.strong.expect +++ b/pkg/front_end/testcases/nnbd/duplicates_static.dart.strong.expect @@ -176,14 +176,14 @@ import self as self; import "dart:core" as core; class Class extends core::Object { - static field core::int staticField = null; + static field core::int staticField = 1; static field core::int staticFieldAndSetter1 = 1; static field core::int staticFieldAndSetter2 = 1; late static final [setter] field core::int staticLateFinalFieldAndSetter1; late static final [setter] field core::int staticLateFinalFieldAndSetter2; - static final field core::int staticDuplicateFieldAndSetter = null; + static final field core::int staticDuplicateFieldAndSetter = 1; static final field core::int staticFieldAndDuplicateSetter = 1; - static final field core::int staticDuplicateFieldAndDuplicateSetter = null; + static final field core::int staticDuplicateFieldAndDuplicateSetter = 1; synthetic constructor •() → self::Class : super core::Object::•() ; diff --git a/pkg/front_end/testcases/nnbd/duplicates_static.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_static.dart.strong.transformed.expect index d4870827279..c2e6f21fa52 100644 --- a/pkg/front_end/testcases/nnbd/duplicates_static.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/nnbd/duplicates_static.dart.strong.transformed.expect @@ -176,14 +176,14 @@ import self as self; import "dart:core" as core; class Class extends core::Object { - static field core::int staticField = null; + static field core::int staticField = 1; static field core::int staticFieldAndSetter1 = 1; static field core::int staticFieldAndSetter2 = 1; late static final [setter] field core::int staticLateFinalFieldAndSetter1; late static final [setter] field core::int staticLateFinalFieldAndSetter2; - static final field core::int staticDuplicateFieldAndSetter = null; + static final field core::int staticDuplicateFieldAndSetter = 1; static final field core::int staticFieldAndDuplicateSetter = 1; - static final field core::int staticDuplicateFieldAndDuplicateSetter = null; + static final field core::int staticDuplicateFieldAndDuplicateSetter = 1; synthetic constructor •() → self::Class : super core::Object::•() ; diff --git a/pkg/front_end/testcases/nnbd/duplicates_static.dart.weak.expect b/pkg/front_end/testcases/nnbd/duplicates_static.dart.weak.expect index d4870827279..c2e6f21fa52 100644 --- a/pkg/front_end/testcases/nnbd/duplicates_static.dart.weak.expect +++ b/pkg/front_end/testcases/nnbd/duplicates_static.dart.weak.expect @@ -176,14 +176,14 @@ import self as self; import "dart:core" as core; class Class extends core::Object { - static field core::int staticField = null; + static field core::int staticField = 1; static field core::int staticFieldAndSetter1 = 1; static field core::int staticFieldAndSetter2 = 1; late static final [setter] field core::int staticLateFinalFieldAndSetter1; late static final [setter] field core::int staticLateFinalFieldAndSetter2; - static final field core::int staticDuplicateFieldAndSetter = null; + static final field core::int staticDuplicateFieldAndSetter = 1; static final field core::int staticFieldAndDuplicateSetter = 1; - static final field core::int staticDuplicateFieldAndDuplicateSetter = null; + static final field core::int staticDuplicateFieldAndDuplicateSetter = 1; synthetic constructor •() → self::Class : super core::Object::•() ; diff --git a/pkg/front_end/testcases/nnbd/duplicates_static.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/duplicates_static.dart.weak.modular.expect index d4870827279..c2e6f21fa52 100644 --- a/pkg/front_end/testcases/nnbd/duplicates_static.dart.weak.modular.expect +++ b/pkg/front_end/testcases/nnbd/duplicates_static.dart.weak.modular.expect @@ -176,14 +176,14 @@ import self as self; import "dart:core" as core; class Class extends core::Object { - static field core::int staticField = null; + static field core::int staticField = 1; static field core::int staticFieldAndSetter1 = 1; static field core::int staticFieldAndSetter2 = 1; late static final [setter] field core::int staticLateFinalFieldAndSetter1; late static final [setter] field core::int staticLateFinalFieldAndSetter2; - static final field core::int staticDuplicateFieldAndSetter = null; + static final field core::int staticDuplicateFieldAndSetter = 1; static final field core::int staticFieldAndDuplicateSetter = 1; - static final field core::int staticDuplicateFieldAndDuplicateSetter = null; + static final field core::int staticDuplicateFieldAndDuplicateSetter = 1; synthetic constructor •() → self::Class : super core::Object::•() ; diff --git a/pkg/front_end/testcases/nnbd/duplicates_static.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_static.dart.weak.transformed.expect index d4870827279..c2e6f21fa52 100644 --- a/pkg/front_end/testcases/nnbd/duplicates_static.dart.weak.transformed.expect +++ b/pkg/front_end/testcases/nnbd/duplicates_static.dart.weak.transformed.expect @@ -176,14 +176,14 @@ import self as self; import "dart:core" as core; class Class extends core::Object { - static field core::int staticField = null; + static field core::int staticField = 1; static field core::int staticFieldAndSetter1 = 1; static field core::int staticFieldAndSetter2 = 1; late static final [setter] field core::int staticLateFinalFieldAndSetter1; late static final [setter] field core::int staticLateFinalFieldAndSetter2; - static final field core::int staticDuplicateFieldAndSetter = null; + static final field core::int staticDuplicateFieldAndSetter = 1; static final field core::int staticFieldAndDuplicateSetter = 1; - static final field core::int staticDuplicateFieldAndDuplicateSetter = null; + static final field core::int staticDuplicateFieldAndDuplicateSetter = 1; synthetic constructor •() → self::Class : super core::Object::•() ; diff --git a/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.strong.expect b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.strong.expect index 925247ab695..8001b791892 100644 --- a/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.strong.expect +++ b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.strong.expect @@ -198,14 +198,14 @@ extension Extension on core::int { static set staticMethodAndSetter2 = set self::Extension|staticMethodAndSetter2; } static field dynamic result; -static field core::int Extension|staticField; +static field core::int Extension|staticField = 1; static field core::int Extension|staticFieldAndSetter1 = 1; static field core::int Extension|staticFieldAndSetter2 = 1; late static final [setter] field core::int Extension|staticLateFinalFieldAndSetter1; late static final [setter] field core::int Extension|staticLateFinalFieldAndSetter2; -static final field core::int Extension|staticDuplicateFieldAndSetter; +static final field core::int Extension|staticDuplicateFieldAndSetter = 1; static final field core::int Extension|staticFieldAndDuplicateSetter = 1; -static final field core::int Extension|staticDuplicateFieldAndDuplicateSetter; +static final field core::int Extension|staticDuplicateFieldAndDuplicateSetter = 1; static method Extension|staticMethod() → core::int return 1; static get Extension|staticGetter() → core::int diff --git a/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.strong.transformed.expect index 925247ab695..8001b791892 100644 --- a/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.strong.transformed.expect @@ -198,14 +198,14 @@ extension Extension on core::int { static set staticMethodAndSetter2 = set self::Extension|staticMethodAndSetter2; } static field dynamic result; -static field core::int Extension|staticField; +static field core::int Extension|staticField = 1; static field core::int Extension|staticFieldAndSetter1 = 1; static field core::int Extension|staticFieldAndSetter2 = 1; late static final [setter] field core::int Extension|staticLateFinalFieldAndSetter1; late static final [setter] field core::int Extension|staticLateFinalFieldAndSetter2; -static final field core::int Extension|staticDuplicateFieldAndSetter; +static final field core::int Extension|staticDuplicateFieldAndSetter = 1; static final field core::int Extension|staticFieldAndDuplicateSetter = 1; -static final field core::int Extension|staticDuplicateFieldAndDuplicateSetter; +static final field core::int Extension|staticDuplicateFieldAndDuplicateSetter = 1; static method Extension|staticMethod() → core::int return 1; static get Extension|staticGetter() → core::int diff --git a/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.weak.expect b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.weak.expect index 925247ab695..8001b791892 100644 --- a/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.weak.expect +++ b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.weak.expect @@ -198,14 +198,14 @@ extension Extension on core::int { static set staticMethodAndSetter2 = set self::Extension|staticMethodAndSetter2; } static field dynamic result; -static field core::int Extension|staticField; +static field core::int Extension|staticField = 1; static field core::int Extension|staticFieldAndSetter1 = 1; static field core::int Extension|staticFieldAndSetter2 = 1; late static final [setter] field core::int Extension|staticLateFinalFieldAndSetter1; late static final [setter] field core::int Extension|staticLateFinalFieldAndSetter2; -static final field core::int Extension|staticDuplicateFieldAndSetter; +static final field core::int Extension|staticDuplicateFieldAndSetter = 1; static final field core::int Extension|staticFieldAndDuplicateSetter = 1; -static final field core::int Extension|staticDuplicateFieldAndDuplicateSetter; +static final field core::int Extension|staticDuplicateFieldAndDuplicateSetter = 1; static method Extension|staticMethod() → core::int return 1; static get Extension|staticGetter() → core::int diff --git a/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.weak.modular.expect index 925247ab695..8001b791892 100644 --- a/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.weak.modular.expect +++ b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.weak.modular.expect @@ -198,14 +198,14 @@ extension Extension on core::int { static set staticMethodAndSetter2 = set self::Extension|staticMethodAndSetter2; } static field dynamic result; -static field core::int Extension|staticField; +static field core::int Extension|staticField = 1; static field core::int Extension|staticFieldAndSetter1 = 1; static field core::int Extension|staticFieldAndSetter2 = 1; late static final [setter] field core::int Extension|staticLateFinalFieldAndSetter1; late static final [setter] field core::int Extension|staticLateFinalFieldAndSetter2; -static final field core::int Extension|staticDuplicateFieldAndSetter; +static final field core::int Extension|staticDuplicateFieldAndSetter = 1; static final field core::int Extension|staticFieldAndDuplicateSetter = 1; -static final field core::int Extension|staticDuplicateFieldAndDuplicateSetter; +static final field core::int Extension|staticDuplicateFieldAndDuplicateSetter = 1; static method Extension|staticMethod() → core::int return 1; static get Extension|staticGetter() → core::int diff --git a/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.weak.transformed.expect index 925247ab695..8001b791892 100644 --- a/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.weak.transformed.expect +++ b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.weak.transformed.expect @@ -198,14 +198,14 @@ extension Extension on core::int { static set staticMethodAndSetter2 = set self::Extension|staticMethodAndSetter2; } static field dynamic result; -static field core::int Extension|staticField; +static field core::int Extension|staticField = 1; static field core::int Extension|staticFieldAndSetter1 = 1; static field core::int Extension|staticFieldAndSetter2 = 1; late static final [setter] field core::int Extension|staticLateFinalFieldAndSetter1; late static final [setter] field core::int Extension|staticLateFinalFieldAndSetter2; -static final field core::int Extension|staticDuplicateFieldAndSetter; +static final field core::int Extension|staticDuplicateFieldAndSetter = 1; static final field core::int Extension|staticFieldAndDuplicateSetter = 1; -static final field core::int Extension|staticDuplicateFieldAndDuplicateSetter; +static final field core::int Extension|staticDuplicateFieldAndDuplicateSetter = 1; static method Extension|staticMethod() → core::int return 1; static get Extension|staticGetter() → core::int diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.expect b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.expect index 4af67cef35e..4beea98e295 100644 --- a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.expect +++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.expect @@ -232,14 +232,14 @@ import self as self; import "dart:core" as core; static field dynamic result; -static field core::int topLevelField; +static field core::int topLevelField = 1; static field core::int topLevelFieldAndSetter1 = 1; static field core::int topLevelFieldAndSetter2 = 1; late static final [setter] field core::int topLevelLateFinalFieldAndSetter1; late static final [setter] field core::int topLevelLateFinalFieldAndSetter2; -static final field core::int topLevelDuplicateFieldAndSetter; +static final field core::int topLevelDuplicateFieldAndSetter = 1; static final field core::int topLevelFieldAndDuplicateSetter = 1; -static final field core::int topLevelDuplicateFieldAndDuplicateSetter; +static final field core::int topLevelDuplicateFieldAndDuplicateSetter = 1; static field invalid-type field = invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:82:13: Error: Can't use 'topLevelMethod' because it is declared more than once. var field = topLevelMethod; ^"; diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.transformed.expect index 4af67cef35e..4beea98e295 100644 --- a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.transformed.expect @@ -232,14 +232,14 @@ import self as self; import "dart:core" as core; static field dynamic result; -static field core::int topLevelField; +static field core::int topLevelField = 1; static field core::int topLevelFieldAndSetter1 = 1; static field core::int topLevelFieldAndSetter2 = 1; late static final [setter] field core::int topLevelLateFinalFieldAndSetter1; late static final [setter] field core::int topLevelLateFinalFieldAndSetter2; -static final field core::int topLevelDuplicateFieldAndSetter; +static final field core::int topLevelDuplicateFieldAndSetter = 1; static final field core::int topLevelFieldAndDuplicateSetter = 1; -static final field core::int topLevelDuplicateFieldAndDuplicateSetter; +static final field core::int topLevelDuplicateFieldAndDuplicateSetter = 1; static field invalid-type field = invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:82:13: Error: Can't use 'topLevelMethod' because it is declared more than once. var field = topLevelMethod; ^"; diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.expect b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.expect index 4af67cef35e..4beea98e295 100644 --- a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.expect +++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.expect @@ -232,14 +232,14 @@ import self as self; import "dart:core" as core; static field dynamic result; -static field core::int topLevelField; +static field core::int topLevelField = 1; static field core::int topLevelFieldAndSetter1 = 1; static field core::int topLevelFieldAndSetter2 = 1; late static final [setter] field core::int topLevelLateFinalFieldAndSetter1; late static final [setter] field core::int topLevelLateFinalFieldAndSetter2; -static final field core::int topLevelDuplicateFieldAndSetter; +static final field core::int topLevelDuplicateFieldAndSetter = 1; static final field core::int topLevelFieldAndDuplicateSetter = 1; -static final field core::int topLevelDuplicateFieldAndDuplicateSetter; +static final field core::int topLevelDuplicateFieldAndDuplicateSetter = 1; static field invalid-type field = invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:82:13: Error: Can't use 'topLevelMethod' because it is declared more than once. var field = topLevelMethod; ^"; diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.modular.expect index 4af67cef35e..4beea98e295 100644 --- a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.modular.expect +++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.modular.expect @@ -232,14 +232,14 @@ import self as self; import "dart:core" as core; static field dynamic result; -static field core::int topLevelField; +static field core::int topLevelField = 1; static field core::int topLevelFieldAndSetter1 = 1; static field core::int topLevelFieldAndSetter2 = 1; late static final [setter] field core::int topLevelLateFinalFieldAndSetter1; late static final [setter] field core::int topLevelLateFinalFieldAndSetter2; -static final field core::int topLevelDuplicateFieldAndSetter; +static final field core::int topLevelDuplicateFieldAndSetter = 1; static final field core::int topLevelFieldAndDuplicateSetter = 1; -static final field core::int topLevelDuplicateFieldAndDuplicateSetter; +static final field core::int topLevelDuplicateFieldAndDuplicateSetter = 1; static field invalid-type field = invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:82:13: Error: Can't use 'topLevelMethod' because it is declared more than once. var field = topLevelMethod; ^"; diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.transformed.expect index 4af67cef35e..4beea98e295 100644 --- a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.transformed.expect +++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.transformed.expect @@ -232,14 +232,14 @@ import self as self; import "dart:core" as core; static field dynamic result; -static field core::int topLevelField; +static field core::int topLevelField = 1; static field core::int topLevelFieldAndSetter1 = 1; static field core::int topLevelFieldAndSetter2 = 1; late static final [setter] field core::int topLevelLateFinalFieldAndSetter1; late static final [setter] field core::int topLevelLateFinalFieldAndSetter2; -static final field core::int topLevelDuplicateFieldAndSetter; +static final field core::int topLevelDuplicateFieldAndSetter = 1; static final field core::int topLevelFieldAndDuplicateSetter = 1; -static final field core::int topLevelDuplicateFieldAndDuplicateSetter; +static final field core::int topLevelDuplicateFieldAndDuplicateSetter = 1; static field invalid-type field = invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:82:13: Error: Can't use 'topLevelMethod' because it is declared more than once. var field = topLevelMethod; ^"; diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.expect b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.expect index cd87fdb866d..c1a98ee7d12 100644 --- a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.expect +++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.expect @@ -1068,17 +1068,17 @@ extension Extension on core::int? { static field core::int? topLevelFieldAndSetter; static field core::int? topLevelFieldAndDuplicateSetter; static field core::int? duplicateTopLevelFieldAndSetter1; -static final field core::int? duplicateTopLevelFieldAndSetter2; +static final field core::int? duplicateTopLevelFieldAndSetter2 = null; late static final [setter] field core::int? topLevelLateFinalFieldAndSetter; late static final [setter] field core::int? topLevelLateFinalFieldAndDuplicateSetter; static field core::int? Extension|extensionInstanceFieldAndSetter; static field core::int? Extension|extensionInstanceFieldAndDuplicateSetter; static field core::int? Extension|duplicateExtensionInstanceFieldAndSetter1; -static final field core::int? Extension|duplicateExtensionInstanceFieldAndSetter2; +static final field core::int? Extension|duplicateExtensionInstanceFieldAndSetter2 = null; static field core::int? Extension|extensionStaticFieldAndSetter; static field core::int? Extension|extensionStaticFieldAndDuplicateSetter; static field core::int? Extension|duplicateExtensionStaticFieldAndSetter1; -static final field core::int? Extension|duplicateExtensionStaticFieldAndSetter2; +static final field core::int? Extension|duplicateExtensionStaticFieldAndSetter2 = null; late static final [setter] field core::int? Extension|extensionStaticLateFinalFieldAndSetter; late static final [setter] field core::int? Extension|extensionStaticLateFinalFieldAndDuplicateSetter; static field core::int? Extension|extensionStaticFieldAndInstanceSetter; @@ -1086,9 +1086,9 @@ static field core::int? Extension|extensionStaticFieldAndInstanceDuplicateSetter static field core::int? Extension|extensionInstanceFieldAndStaticSetter; static field core::int? Extension|extensionInstanceFieldAndStaticDuplicateSetter; static field core::int? Extension|duplicateExtensionInstanceFieldAndStaticSetter1; -static final field core::int? Extension|duplicateExtensionInstanceFieldAndStaticSetter2; +static final field core::int? Extension|duplicateExtensionInstanceFieldAndStaticSetter2 = null; static field core::int? Extension|duplicateExtensionStaticFieldAndInstanceSetter1; -static final field core::int? Extension|duplicateExtensionStaticFieldAndInstanceSetter2; +static final field core::int? Extension|duplicateExtensionStaticFieldAndInstanceSetter2 = null; static const field dynamic _exports# = #C1 /*isLegacy*/; static method test() → dynamic { self::topLevelFieldAndSetter = self::topLevelFieldAndSetter; diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.transformed.expect index cd87fdb866d..c1a98ee7d12 100644 --- a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.transformed.expect @@ -1068,17 +1068,17 @@ extension Extension on core::int? { static field core::int? topLevelFieldAndSetter; static field core::int? topLevelFieldAndDuplicateSetter; static field core::int? duplicateTopLevelFieldAndSetter1; -static final field core::int? duplicateTopLevelFieldAndSetter2; +static final field core::int? duplicateTopLevelFieldAndSetter2 = null; late static final [setter] field core::int? topLevelLateFinalFieldAndSetter; late static final [setter] field core::int? topLevelLateFinalFieldAndDuplicateSetter; static field core::int? Extension|extensionInstanceFieldAndSetter; static field core::int? Extension|extensionInstanceFieldAndDuplicateSetter; static field core::int? Extension|duplicateExtensionInstanceFieldAndSetter1; -static final field core::int? Extension|duplicateExtensionInstanceFieldAndSetter2; +static final field core::int? Extension|duplicateExtensionInstanceFieldAndSetter2 = null; static field core::int? Extension|extensionStaticFieldAndSetter; static field core::int? Extension|extensionStaticFieldAndDuplicateSetter; static field core::int? Extension|duplicateExtensionStaticFieldAndSetter1; -static final field core::int? Extension|duplicateExtensionStaticFieldAndSetter2; +static final field core::int? Extension|duplicateExtensionStaticFieldAndSetter2 = null; late static final [setter] field core::int? Extension|extensionStaticLateFinalFieldAndSetter; late static final [setter] field core::int? Extension|extensionStaticLateFinalFieldAndDuplicateSetter; static field core::int? Extension|extensionStaticFieldAndInstanceSetter; @@ -1086,9 +1086,9 @@ static field core::int? Extension|extensionStaticFieldAndInstanceDuplicateSetter static field core::int? Extension|extensionInstanceFieldAndStaticSetter; static field core::int? Extension|extensionInstanceFieldAndStaticDuplicateSetter; static field core::int? Extension|duplicateExtensionInstanceFieldAndStaticSetter1; -static final field core::int? Extension|duplicateExtensionInstanceFieldAndStaticSetter2; +static final field core::int? Extension|duplicateExtensionInstanceFieldAndStaticSetter2 = null; static field core::int? Extension|duplicateExtensionStaticFieldAndInstanceSetter1; -static final field core::int? Extension|duplicateExtensionStaticFieldAndInstanceSetter2; +static final field core::int? Extension|duplicateExtensionStaticFieldAndInstanceSetter2 = null; static const field dynamic _exports# = #C1 /*isLegacy*/; static method test() → dynamic { self::topLevelFieldAndSetter = self::topLevelFieldAndSetter; diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.expect b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.expect index cd87fdb866d..c1a98ee7d12 100644 --- a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.expect +++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.expect @@ -1068,17 +1068,17 @@ extension Extension on core::int? { static field core::int? topLevelFieldAndSetter; static field core::int? topLevelFieldAndDuplicateSetter; static field core::int? duplicateTopLevelFieldAndSetter1; -static final field core::int? duplicateTopLevelFieldAndSetter2; +static final field core::int? duplicateTopLevelFieldAndSetter2 = null; late static final [setter] field core::int? topLevelLateFinalFieldAndSetter; late static final [setter] field core::int? topLevelLateFinalFieldAndDuplicateSetter; static field core::int? Extension|extensionInstanceFieldAndSetter; static field core::int? Extension|extensionInstanceFieldAndDuplicateSetter; static field core::int? Extension|duplicateExtensionInstanceFieldAndSetter1; -static final field core::int? Extension|duplicateExtensionInstanceFieldAndSetter2; +static final field core::int? Extension|duplicateExtensionInstanceFieldAndSetter2 = null; static field core::int? Extension|extensionStaticFieldAndSetter; static field core::int? Extension|extensionStaticFieldAndDuplicateSetter; static field core::int? Extension|duplicateExtensionStaticFieldAndSetter1; -static final field core::int? Extension|duplicateExtensionStaticFieldAndSetter2; +static final field core::int? Extension|duplicateExtensionStaticFieldAndSetter2 = null; late static final [setter] field core::int? Extension|extensionStaticLateFinalFieldAndSetter; late static final [setter] field core::int? Extension|extensionStaticLateFinalFieldAndDuplicateSetter; static field core::int? Extension|extensionStaticFieldAndInstanceSetter; @@ -1086,9 +1086,9 @@ static field core::int? Extension|extensionStaticFieldAndInstanceDuplicateSetter static field core::int? Extension|extensionInstanceFieldAndStaticSetter; static field core::int? Extension|extensionInstanceFieldAndStaticDuplicateSetter; static field core::int? Extension|duplicateExtensionInstanceFieldAndStaticSetter1; -static final field core::int? Extension|duplicateExtensionInstanceFieldAndStaticSetter2; +static final field core::int? Extension|duplicateExtensionInstanceFieldAndStaticSetter2 = null; static field core::int? Extension|duplicateExtensionStaticFieldAndInstanceSetter1; -static final field core::int? Extension|duplicateExtensionStaticFieldAndInstanceSetter2; +static final field core::int? Extension|duplicateExtensionStaticFieldAndInstanceSetter2 = null; static const field dynamic _exports# = #C1 /*isLegacy*/; static method test() → dynamic { self::topLevelFieldAndSetter = self::topLevelFieldAndSetter; diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.modular.expect index cd87fdb866d..c1a98ee7d12 100644 --- a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.modular.expect +++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.modular.expect @@ -1068,17 +1068,17 @@ extension Extension on core::int? { static field core::int? topLevelFieldAndSetter; static field core::int? topLevelFieldAndDuplicateSetter; static field core::int? duplicateTopLevelFieldAndSetter1; -static final field core::int? duplicateTopLevelFieldAndSetter2; +static final field core::int? duplicateTopLevelFieldAndSetter2 = null; late static final [setter] field core::int? topLevelLateFinalFieldAndSetter; late static final [setter] field core::int? topLevelLateFinalFieldAndDuplicateSetter; static field core::int? Extension|extensionInstanceFieldAndSetter; static field core::int? Extension|extensionInstanceFieldAndDuplicateSetter; static field core::int? Extension|duplicateExtensionInstanceFieldAndSetter1; -static final field core::int? Extension|duplicateExtensionInstanceFieldAndSetter2; +static final field core::int? Extension|duplicateExtensionInstanceFieldAndSetter2 = null; static field core::int? Extension|extensionStaticFieldAndSetter; static field core::int? Extension|extensionStaticFieldAndDuplicateSetter; static field core::int? Extension|duplicateExtensionStaticFieldAndSetter1; -static final field core::int? Extension|duplicateExtensionStaticFieldAndSetter2; +static final field core::int? Extension|duplicateExtensionStaticFieldAndSetter2 = null; late static final [setter] field core::int? Extension|extensionStaticLateFinalFieldAndSetter; late static final [setter] field core::int? Extension|extensionStaticLateFinalFieldAndDuplicateSetter; static field core::int? Extension|extensionStaticFieldAndInstanceSetter; @@ -1086,9 +1086,9 @@ static field core::int? Extension|extensionStaticFieldAndInstanceDuplicateSetter static field core::int? Extension|extensionInstanceFieldAndStaticSetter; static field core::int? Extension|extensionInstanceFieldAndStaticDuplicateSetter; static field core::int? Extension|duplicateExtensionInstanceFieldAndStaticSetter1; -static final field core::int? Extension|duplicateExtensionInstanceFieldAndStaticSetter2; +static final field core::int? Extension|duplicateExtensionInstanceFieldAndStaticSetter2 = null; static field core::int? Extension|duplicateExtensionStaticFieldAndInstanceSetter1; -static final field core::int? Extension|duplicateExtensionStaticFieldAndInstanceSetter2; +static final field core::int? Extension|duplicateExtensionStaticFieldAndInstanceSetter2 = null; static const field dynamic _exports# = #C1 /*isLegacy*/; static method test() → dynamic { self::topLevelFieldAndSetter = self::topLevelFieldAndSetter; diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.transformed.expect index cd87fdb866d..c1a98ee7d12 100644 --- a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.transformed.expect +++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.transformed.expect @@ -1068,17 +1068,17 @@ extension Extension on core::int? { static field core::int? topLevelFieldAndSetter; static field core::int? topLevelFieldAndDuplicateSetter; static field core::int? duplicateTopLevelFieldAndSetter1; -static final field core::int? duplicateTopLevelFieldAndSetter2; +static final field core::int? duplicateTopLevelFieldAndSetter2 = null; late static final [setter] field core::int? topLevelLateFinalFieldAndSetter; late static final [setter] field core::int? topLevelLateFinalFieldAndDuplicateSetter; static field core::int? Extension|extensionInstanceFieldAndSetter; static field core::int? Extension|extensionInstanceFieldAndDuplicateSetter; static field core::int? Extension|duplicateExtensionInstanceFieldAndSetter1; -static final field core::int? Extension|duplicateExtensionInstanceFieldAndSetter2; +static final field core::int? Extension|duplicateExtensionInstanceFieldAndSetter2 = null; static field core::int? Extension|extensionStaticFieldAndSetter; static field core::int? Extension|extensionStaticFieldAndDuplicateSetter; static field core::int? Extension|duplicateExtensionStaticFieldAndSetter1; -static final field core::int? Extension|duplicateExtensionStaticFieldAndSetter2; +static final field core::int? Extension|duplicateExtensionStaticFieldAndSetter2 = null; late static final [setter] field core::int? Extension|extensionStaticLateFinalFieldAndSetter; late static final [setter] field core::int? Extension|extensionStaticLateFinalFieldAndDuplicateSetter; static field core::int? Extension|extensionStaticFieldAndInstanceSetter; @@ -1086,9 +1086,9 @@ static field core::int? Extension|extensionStaticFieldAndInstanceDuplicateSetter static field core::int? Extension|extensionInstanceFieldAndStaticSetter; static field core::int? Extension|extensionInstanceFieldAndStaticDuplicateSetter; static field core::int? Extension|duplicateExtensionInstanceFieldAndStaticSetter1; -static final field core::int? Extension|duplicateExtensionInstanceFieldAndStaticSetter2; +static final field core::int? Extension|duplicateExtensionInstanceFieldAndStaticSetter2 = null; static field core::int? Extension|duplicateExtensionStaticFieldAndInstanceSetter1; -static final field core::int? Extension|duplicateExtensionStaticFieldAndInstanceSetter2; +static final field core::int? Extension|duplicateExtensionStaticFieldAndInstanceSetter2 = null; static const field dynamic _exports# = #C1 /*isLegacy*/; static method test() → dynamic { self::topLevelFieldAndSetter = self::topLevelFieldAndSetter; diff --git a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.expect b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.expect index 196d69898d1..379173bf8ce 100644 --- a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.expect +++ b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.expect @@ -278,17 +278,17 @@ import "dart:core" as core; class Class extends core::Object { field core::int? methodAndField2 = null; - final field core::int? methodAndFinalField2 = null; + final field core::int? methodAndFinalField2 = 0; field core::int? methodAndFieldAndSetter2 = null; field core::int? methodAndFieldAndSetter4 = null; - final field core::int? methodAndFinalFieldAndSetter2 = null; - final field core::int? methodAndFinalFieldAndSetter4 = null; + final field core::int? methodAndFinalFieldAndSetter2 = 0; + final field core::int? methodAndFinalFieldAndSetter4 = 0; field core::int? fieldAndSetter1 = null; field core::int? fieldAndSetter2 = null; field core::int? fieldAndFinalFieldAndSetter1 = null; - final field core::int? fieldAndFinalFieldAndSetter2 = null; + final field core::int? fieldAndFinalFieldAndSetter2 = 0; field core::int? fieldAndFinalFieldAndSetter3 = null; - final field core::int? fieldAndFinalFieldAndSetter4 = null; + final field core::int? fieldAndFinalFieldAndSetter4 = 0; synthetic constructor •() → self::Class : super core::Object::•() ; diff --git a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.transformed.expect index 196d69898d1..379173bf8ce 100644 --- a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.transformed.expect @@ -278,17 +278,17 @@ import "dart:core" as core; class Class extends core::Object { field core::int? methodAndField2 = null; - final field core::int? methodAndFinalField2 = null; + final field core::int? methodAndFinalField2 = 0; field core::int? methodAndFieldAndSetter2 = null; field core::int? methodAndFieldAndSetter4 = null; - final field core::int? methodAndFinalFieldAndSetter2 = null; - final field core::int? methodAndFinalFieldAndSetter4 = null; + final field core::int? methodAndFinalFieldAndSetter2 = 0; + final field core::int? methodAndFinalFieldAndSetter4 = 0; field core::int? fieldAndSetter1 = null; field core::int? fieldAndSetter2 = null; field core::int? fieldAndFinalFieldAndSetter1 = null; - final field core::int? fieldAndFinalFieldAndSetter2 = null; + final field core::int? fieldAndFinalFieldAndSetter2 = 0; field core::int? fieldAndFinalFieldAndSetter3 = null; - final field core::int? fieldAndFinalFieldAndSetter4 = null; + final field core::int? fieldAndFinalFieldAndSetter4 = 0; synthetic constructor •() → self::Class : super core::Object::•() ; diff --git a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.expect b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.expect index 196d69898d1..379173bf8ce 100644 --- a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.expect +++ b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.expect @@ -278,17 +278,17 @@ import "dart:core" as core; class Class extends core::Object { field core::int? methodAndField2 = null; - final field core::int? methodAndFinalField2 = null; + final field core::int? methodAndFinalField2 = 0; field core::int? methodAndFieldAndSetter2 = null; field core::int? methodAndFieldAndSetter4 = null; - final field core::int? methodAndFinalFieldAndSetter2 = null; - final field core::int? methodAndFinalFieldAndSetter4 = null; + final field core::int? methodAndFinalFieldAndSetter2 = 0; + final field core::int? methodAndFinalFieldAndSetter4 = 0; field core::int? fieldAndSetter1 = null; field core::int? fieldAndSetter2 = null; field core::int? fieldAndFinalFieldAndSetter1 = null; - final field core::int? fieldAndFinalFieldAndSetter2 = null; + final field core::int? fieldAndFinalFieldAndSetter2 = 0; field core::int? fieldAndFinalFieldAndSetter3 = null; - final field core::int? fieldAndFinalFieldAndSetter4 = null; + final field core::int? fieldAndFinalFieldAndSetter4 = 0; synthetic constructor •() → self::Class : super core::Object::•() ; diff --git a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.modular.expect index 196d69898d1..379173bf8ce 100644 --- a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.modular.expect +++ b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.modular.expect @@ -278,17 +278,17 @@ import "dart:core" as core; class Class extends core::Object { field core::int? methodAndField2 = null; - final field core::int? methodAndFinalField2 = null; + final field core::int? methodAndFinalField2 = 0; field core::int? methodAndFieldAndSetter2 = null; field core::int? methodAndFieldAndSetter4 = null; - final field core::int? methodAndFinalFieldAndSetter2 = null; - final field core::int? methodAndFinalFieldAndSetter4 = null; + final field core::int? methodAndFinalFieldAndSetter2 = 0; + final field core::int? methodAndFinalFieldAndSetter4 = 0; field core::int? fieldAndSetter1 = null; field core::int? fieldAndSetter2 = null; field core::int? fieldAndFinalFieldAndSetter1 = null; - final field core::int? fieldAndFinalFieldAndSetter2 = null; + final field core::int? fieldAndFinalFieldAndSetter2 = 0; field core::int? fieldAndFinalFieldAndSetter3 = null; - final field core::int? fieldAndFinalFieldAndSetter4 = null; + final field core::int? fieldAndFinalFieldAndSetter4 = 0; synthetic constructor •() → self::Class : super core::Object::•() ; diff --git a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.transformed.expect index 196d69898d1..379173bf8ce 100644 --- a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.transformed.expect +++ b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.transformed.expect @@ -278,17 +278,17 @@ import "dart:core" as core; class Class extends core::Object { field core::int? methodAndField2 = null; - final field core::int? methodAndFinalField2 = null; + final field core::int? methodAndFinalField2 = 0; field core::int? methodAndFieldAndSetter2 = null; field core::int? methodAndFieldAndSetter4 = null; - final field core::int? methodAndFinalFieldAndSetter2 = null; - final field core::int? methodAndFinalFieldAndSetter4 = null; + final field core::int? methodAndFinalFieldAndSetter2 = 0; + final field core::int? methodAndFinalFieldAndSetter4 = 0; field core::int? fieldAndSetter1 = null; field core::int? fieldAndSetter2 = null; field core::int? fieldAndFinalFieldAndSetter1 = null; - final field core::int? fieldAndFinalFieldAndSetter2 = null; + final field core::int? fieldAndFinalFieldAndSetter2 = 0; field core::int? fieldAndFinalFieldAndSetter3 = null; - final field core::int? fieldAndFinalFieldAndSetter4 = null; + final field core::int? fieldAndFinalFieldAndSetter4 = 0; synthetic constructor •() → self::Class : super core::Object::•() ; diff --git a/pkg/front_end/testcases/regress/issue_36647_2.dart.strong.expect b/pkg/front_end/testcases/regress/issue_36647_2.dart.strong.expect index 94480a31f22..767b32a2b03 100644 --- a/pkg/front_end/testcases/regress/issue_36647_2.dart.strong.expect +++ b/pkg/front_end/testcases/regress/issue_36647_2.dart.strong.expect @@ -38,7 +38,7 @@ import self as iss; import "dart:core" as core; typedef bar = () → core::bool; -static field core::int foo; +static field core::int foo = 42; static method baz() → core::int { return 42; } diff --git a/pkg/front_end/testcases/regress/issue_36647_2.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_36647_2.dart.strong.transformed.expect index 94480a31f22..767b32a2b03 100644 --- a/pkg/front_end/testcases/regress/issue_36647_2.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/regress/issue_36647_2.dart.strong.transformed.expect @@ -38,7 +38,7 @@ import self as iss; import "dart:core" as core; typedef bar = () → core::bool; -static field core::int foo; +static field core::int foo = 42; static method baz() → core::int { return 42; } diff --git a/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.expect b/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.expect index 94480a31f22..767b32a2b03 100644 --- a/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.expect +++ b/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.expect @@ -38,7 +38,7 @@ import self as iss; import "dart:core" as core; typedef bar = () → core::bool; -static field core::int foo; +static field core::int foo = 42; static method baz() → core::int { return 42; } diff --git a/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.modular.expect index 94480a31f22..767b32a2b03 100644 --- a/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.modular.expect +++ b/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.modular.expect @@ -38,7 +38,7 @@ import self as iss; import "dart:core" as core; typedef bar = () → core::bool; -static field core::int foo; +static field core::int foo = 42; static method baz() → core::int { return 42; } diff --git a/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.transformed.expect index 94480a31f22..767b32a2b03 100644 --- a/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.transformed.expect +++ b/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.transformed.expect @@ -38,7 +38,7 @@ import self as iss; import "dart:core" as core; typedef bar = () → core::bool; -static field core::int foo; +static field core::int foo = 42; static method baz() → core::int { return 42; } diff --git a/pkg/front_end/testcases/regress/issue_36793.dart.strong.expect b/pkg/front_end/testcases/regress/issue_36793.dart.strong.expect index 4cb770522de..0441a0a3dfb 100644 --- a/pkg/front_end/testcases/regress/issue_36793.dart.strong.expect +++ b/pkg/front_end/testcases/regress/issue_36793.dart.strong.expect @@ -14,7 +14,7 @@ import "dart:core" as core; static const field core::int y = #C1; @#C1 -static field core::int x; +static field core::int x = 1; static method main() → dynamic { core::print(#C1); } diff --git a/pkg/front_end/testcases/regress/issue_36793.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_36793.dart.strong.transformed.expect index 4cb770522de..0441a0a3dfb 100644 --- a/pkg/front_end/testcases/regress/issue_36793.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/regress/issue_36793.dart.strong.transformed.expect @@ -14,7 +14,7 @@ import "dart:core" as core; static const field core::int y = #C1; @#C1 -static field core::int x; +static field core::int x = 1; static method main() → dynamic { core::print(#C1); } diff --git a/pkg/front_end/testcases/regress/issue_36793.dart.weak.expect b/pkg/front_end/testcases/regress/issue_36793.dart.weak.expect index 4cb770522de..0441a0a3dfb 100644 --- a/pkg/front_end/testcases/regress/issue_36793.dart.weak.expect +++ b/pkg/front_end/testcases/regress/issue_36793.dart.weak.expect @@ -14,7 +14,7 @@ import "dart:core" as core; static const field core::int y = #C1; @#C1 -static field core::int x; +static field core::int x = 1; static method main() → dynamic { core::print(#C1); } diff --git a/pkg/front_end/testcases/regress/issue_36793.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_36793.dart.weak.modular.expect index 4cb770522de..0441a0a3dfb 100644 --- a/pkg/front_end/testcases/regress/issue_36793.dart.weak.modular.expect +++ b/pkg/front_end/testcases/regress/issue_36793.dart.weak.modular.expect @@ -14,7 +14,7 @@ import "dart:core" as core; static const field core::int y = #C1; @#C1 -static field core::int x; +static field core::int x = 1; static method main() → dynamic { core::print(#C1); } diff --git a/pkg/front_end/testcases/regress/issue_36793.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_36793.dart.weak.transformed.expect index 4cb770522de..0441a0a3dfb 100644 --- a/pkg/front_end/testcases/regress/issue_36793.dart.weak.transformed.expect +++ b/pkg/front_end/testcases/regress/issue_36793.dart.weak.transformed.expect @@ -14,7 +14,7 @@ import "dart:core" as core; static const field core::int y = #C1; @#C1 -static field core::int x; +static field core::int x = 1; static method main() → dynamic { core::print(#C1); }