[cfe] Add ClassDeclaration and ConstructorDeclaration interfaces

This prepares for supporting constructors in inline classes.

Change-Id: I54e5c873f9352182fd197fe52177fc841fed426e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/277101
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
This commit is contained in:
Johnni Winther 2022-12-28 14:34:10 +00:00 committed by Commit Queue
parent f8307ed296
commit 851332b3be
98 changed files with 837 additions and 360 deletions

View file

@ -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<T> fullConstructorIterator<T extends MemberBuilder>();
/// [NameIterator] for all constructors declared in this class or any of its
/// augmentations.
///
/// Duplicates and augmenting constructors are _not_ included.
NameIterator<T> fullConstructorNameIterator<T extends MemberBuilder>();
/// [Iterator] for all members declared in this class or any of its
/// augmentations.
///
/// Duplicates and augmenting members are _not_ included.
Iterator<T> fullMemberIterator<T extends Builder>();
/// [NameIterator] for all members declared in this class or any of its
/// augmentations.
///
/// Duplicates and augmenting members are _not_ included.
NameIterator<T> fullMemberNameIterator<T extends Builder>();
}
abstract class ClassBuilder implements DeclarationBuilder, ClassMemberAccess {
/// The type variables declared on a class, extension or mixin declaration.
List<TypeVariableBuilder>? 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<T> fullConstructorIterator<T extends MemberBuilder>();
/// [NameIterator] for all constructors declared in this class or any of its
/// augmentations.
///
/// Duplicates and augmenting constructors are _not_ included.
NameIterator<T> fullConstructorNameIterator<T extends MemberBuilder>();
/// [Iterator] for all members declared in this class or any of its
/// augmentations.
///
/// Duplicates and augmenting members are _not_ included.
Iterator<T> fullMemberIterator<T extends Builder>();
/// [NameIterator] for all members declared in this class or any of its
/// augmentations.
///
/// Duplicates and augmenting members are _not_ included.
NameIterator<T> fullMemberNameIterator<T extends Builder>();
}
abstract class ClassBuilderImpl extends DeclarationBuilderImpl

View file

@ -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<FormalParameterBuilder>? 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<Object /* Expression | NamedExpression */ >?
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);

View file

@ -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<SourceFieldBuilder> uninitializedFields = [];
List<SourceFieldBuilder> nonFinalFields = [];
List<SourceFieldBuilder> lateFinalFields = [];
Iterator<SourceFieldBuilder> fieldIterator =
builder.fullMemberIterator<SourceFieldBuilder>();
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<DeclaredSourceConstructorBuilder, Set<SourceFieldBuilder>>
constructorInitializedFields = new Map.identity();
Set<SourceFieldBuilder>? initializedFields = null;
finishConstructorsInternal(builder);
}
Iterator<DeclaredSourceConstructorBuilder> constructorIterator =
builder.fullConstructorIterator<DeclaredSourceConstructorBuilder>();
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<SourceFieldBuilder> uninitializedFields = [];
List<SourceFieldBuilder> nonFinalFields = [];
List<SourceFieldBuilder> lateFinalFields = [];
Iterator<SourceFieldBuilder> fieldIterator =
builder.fullMemberIterator<SourceFieldBuilder>();
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<ConstructorDeclaration, Set<SourceFieldBuilder>>
constructorInitializedFields = new Map.identity();
Set<SourceFieldBuilder>? initializedFieldBuilders = null;
Iterator<ConstructorDeclaration> constructorIterator =
builder.fullConstructorIterator<ConstructorDeclaration>();
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<SourceFieldBuilder> fields =
constructorBuilder.takeInitializedFields() ?? const {};
constructorInitializedFields[constructorBuilder] = fields;
(initializedFields ??= new Set<SourceFieldBuilder>.identity())
constructor.takeInitializedFields() ?? const {};
constructorInitializedFields[constructor] = fields;
(initializedFieldBuilders ??= new Set<SourceFieldBuilder>.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<FieldBuilder> fieldBuilders) {
for (MapEntry<ConstructorDeclaration, Set<FieldBuilder>> entry
in constructorInitializedFields.entries) {
ConstructorDeclaration constructorBuilder = entry.key;
Set<FieldBuilder> 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<Field>? initializedFieldsKernel = null;
if (initializedFields != null) {
for (FieldBuilder fieldBuilder in initializedFields) {
(initializedFieldsKernel ??= new Set<Field>.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;
}
}
}

View file

@ -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;
}

View file

@ -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<Initializer> 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<SourceFieldBuilder>? takeInitializedFields();
}

View file

@ -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<SourceClassBuilder> {
implements Comparable<SourceClassBuilder>, ClassDeclaration {
final Class actualCls;
final List<ConstructorReferenceBuilder>? constructorReferences;
@ -398,6 +399,10 @@ class SourceClassBuilder extends ClassBuilderImpl
NameIterator<T> fullConstructorNameIterator<T extends MemberBuilder>() =>
new ClassConstructorNameIterator<T>(this, includeDuplicates: false);
@override
bool get hasGenerativeConstructor =>
fullConstructorNameIterator<SourceConstructorBuilder>().moveNext();
/// Looks up the constructor by [name] on the class built by this class
/// builder.
///

View file

@ -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<Initializer> 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<SourceFieldBuilder>? takeInitializedFields() {
Set<SourceFieldBuilder>? result = _initializedFields;
_initializedFields = null;
@ -1028,8 +1025,10 @@ class SourceInlineClassConstructorBuilder
late final Procedure _constructor;
late final Procedure? _constructorTearOff;
Set<SourceFieldBuilder>? _initializedFields;
@override
final List<Initializer> initializers = [];
List<Initializer> initializers = [];
SourceInlineClassConstructorBuilder(
List<MetadataBuilder>? 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<SourceFieldBuilder>? takeInitializedFields() {
Set<SourceFieldBuilder>? result = _initializedFields;
_initializedFields = null;
return result;
}
@override
bool get isEffectivelyExternal => isExternal;
@override
bool get isEffectivelyRedirecting => isRedirecting;
// TODO(johnniwinther): Generate initializers and return statement.
}

View file

@ -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<T> fullConstructorIterator<T extends MemberBuilder>() {
// TODO(johnniwinther): Implement fullConstructorIterator
throw new UnimplementedError();
}
@override
NameIterator<T> fullConstructorNameIterator<T extends MemberBuilder>() {
// TODO(johnniwinther): Implement fullConstructorNameIterator
throw new UnimplementedError();
}
@override
Iterator<T> fullMemberIterator<T extends Builder>() {
// TODO(johnniwinther): Implement fullMemberIterator
throw new UnimplementedError();
}
@override
NameIterator<T> fullMemberNameIterator<T extends Builder>() {
// TODO(johnniwinther): Implement fullMemberNameIterator
throw new UnimplementedError();
}
@override
bool get isMixinDeclaration => false;
@override
bool get hasGenerativeConstructor {
// TODO(johnniwinther): Implement hasGenerativeConstructor
throw new UnimplementedError();
}
}

View file

@ -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) {

View file

@ -74,7 +74,7 @@ import "dart:core" as core;
class E1 extends core::_Enum /*isEnum*/ {
static const field core::List<self::E1> 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<self::E5> 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)
;

View file

@ -74,7 +74,7 @@ import "dart:core" as core;
class E1 extends core::_Enum /*isEnum*/ {
static const field core::List<self::E1> 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<self::E5> 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)
;

View file

@ -74,7 +74,7 @@ import "dart:core" as core;
class E1 extends core::_Enum /*isEnum*/ {
static const field core::List<self::E1> 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<self::E5> 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)
;

View file

@ -74,7 +74,7 @@ import "dart:core" as core;
class E1 extends core::_Enum /*isEnum*/ {
static const field core::List<self::E1> 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<self::E5> 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)
;

View file

@ -74,7 +74,7 @@ import "dart:core" as core;
class E1 extends core::_Enum /*isEnum*/ {
static const field core::List<self::E1> 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<self::E5> 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)
;

View file

@ -168,7 +168,7 @@ extension Extension<T extends core::Object? = dynamic> 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<T extends core::Object? = dynamic>(lowered final core::int #this) → core::int
return 0;
static method Extension|set#duplicateInstanceSetter<T extends core::Object? = dynamic>(lowered final core::int #this, core::int value) → void {}

View file

@ -168,7 +168,7 @@ extension Extension<T extends core::Object? = dynamic> 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<T extends core::Object? = dynamic>(lowered final core::int #this) → core::int
return 0;
static method Extension|set#duplicateInstanceSetter<T extends core::Object? = dynamic>(lowered final core::int #this, core::int value) → void {}

View file

@ -168,7 +168,7 @@ extension Extension<T extends core::Object? = dynamic> 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<T extends core::Object? = dynamic>(lowered final core::int #this) → core::int
return 0;
static method Extension|set#duplicateInstanceSetter<T extends core::Object? = dynamic>(lowered final core::int #this, core::int value) → void {}

View file

@ -168,7 +168,7 @@ extension Extension<T extends core::Object? = dynamic> 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<T extends core::Object? = dynamic>(lowered final core::int #this) → core::int
return 0;
static method Extension|set#duplicateInstanceSetter<T extends core::Object? = dynamic>(lowered final core::int #this, core::int value) → void {}

View file

@ -168,7 +168,7 @@ extension Extension<T extends core::Object? = dynamic> 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<T extends core::Object? = dynamic>(lowered final core::int #this) → core::int
return 0;
static method Extension|set#duplicateInstanceSetter<T extends core::Object? = dynamic>(lowered final core::int #this, core::int value) → void {}

View file

@ -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'.

View file

@ -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'.

View file

@ -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'.

View file

@ -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'.

View file

@ -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'.

View file

@ -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";

View file

@ -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";

View file

@ -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";

View file

@ -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";

View file

@ -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";

View file

@ -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";
}

View file

@ -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";
}

View file

@ -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";
}

View file

@ -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";
}

View file

@ -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";
}

View file

@ -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::•()
;

View file

@ -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::•()
;

View file

@ -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::•()
;

View file

@ -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::•()
;

View file

@ -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::•()
;

View file

@ -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;
^"{<invalid>}.+(1);

View file

@ -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;
^"{<invalid>}.+(1);

View file

@ -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;
^"{<invalid>}.+(1);

View file

@ -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;
^"{<invalid>}.+(1);

View file

@ -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;
^"{<invalid>}.+(1);

View file

@ -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 '';
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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 '';
}

View file

@ -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;
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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::•()
;

View file

@ -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::•()
;

View file

@ -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::•()
;

View file

@ -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::•()
;

View file

@ -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::•()
;

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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::•()
;

View file

@ -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::•()
;

View file

@ -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::•()
;

View file

@ -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::•()
;

View file

@ -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::•()
;

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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;
^";

View file

@ -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;
^";

View file

@ -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;
^";

View file

@ -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;
^";

View file

@ -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;
^";

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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::•()
;

View file

@ -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::•()
;

View file

@ -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::•()
;

View file

@ -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::•()
;

View file

@ -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::•()
;

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

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

View file

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

View file

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

View file

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

View file

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