@@ -135,6 +135,7 @@ class SourceEnumBuilder extends SourceClassBuilder {
135135
136136 @override
137137 void buildScopes (LibraryBuilder coreLibrary) {
138+ _createTypeBuilders (coreLibrary);
138139 super .buildScopes (coreLibrary);
139140 _createSynthesizedMembers (coreLibrary);
140141
@@ -149,7 +150,20 @@ class SourceEnumBuilder extends SourceClassBuilder {
149150 }
150151 }
151152
152- void _createSynthesizedMembers (LibraryBuilder coreLibrary) {
153+ @override
154+ Map <String , SyntheticDeclaration >? createSyntheticDeclarations () {
155+ _enumValuesFieldDeclaration =
156+ new _EnumValuesFieldDeclaration (this , listType);
157+ return {
158+ 'values' : new EnumValuesDeclaration (
159+ name: 'values' ,
160+ uriOffset: new UriOffset (fileUri, fileOffset),
161+ field: _enumValuesFieldDeclaration,
162+ getter: _enumValuesFieldDeclaration),
163+ };
164+ }
165+
166+ void _createTypeBuilders (LibraryBuilder coreLibrary) {
153167 // TODO(ahe): These types shouldn't be looked up in scope, they come
154168 // directly from dart:core.
155169 objectType = new NamedTypeBuilderImpl (
@@ -167,7 +181,9 @@ class SourceEnumBuilder extends SourceClassBuilder {
167181 arguments: < TypeBuilder > [selfType],
168182 instanceTypeParameterAccess:
169183 InstanceTypeParameterAccessState .Unexpected );
184+ }
170185
186+ void _createSynthesizedMembers (LibraryBuilder coreLibrary) {
171187 // metadata class E extends _Enum {
172188 // const E(int index, String name) : super(index, name);
173189 // static const E id0 = const E(0, 'id0');
@@ -183,36 +199,12 @@ class SourceEnumBuilder extends SourceClassBuilder {
183199 ? new LibraryName (indexedClass! .library.reference)
184200 : libraryBuilder.libraryName;
185201
186- NameScheme staticFieldNameScheme = new NameScheme (
187- isInstanceMember: false ,
188- containerName: new ClassName (name),
189- containerType: ContainerType .Class ,
190- libraryName: libraryName);
191-
192202 Reference ? toStringReference;
193203 if (indexedClass != null ) {
194204 toStringReference = indexedClass! .lookupGetterReference (
195205 new Name ("_enumToString" , coreLibrary.library));
196206 }
197207
198- PropertyReferences valuesReferences = new PropertyReferences (
199- "values" , staticFieldNameScheme, indexedClass,
200- fieldIsLateWithLowering: false );
201-
202- NamedBuilder ? customValuesDeclaration =
203- nameSpace.lookupLocalMember ("values" )? .getable;
204- if (customValuesDeclaration != null ) {
205- // Retrieve the earliest declaration for error reporting.
206- while (customValuesDeclaration? .next != null ) {
207- customValuesDeclaration = customValuesDeclaration? .next;
208- }
209- libraryBuilder.addProblem (
210- messageEnumContainsValuesDeclaration,
211- customValuesDeclaration! .fileOffset,
212- customValuesDeclaration.fullNameForErrors.length,
213- fileUri);
214- }
215-
216208 for (String restrictedInstanceMemberName in const [
217209 "index" ,
218210 "hashCode" ,
@@ -244,36 +236,6 @@ class SourceEnumBuilder extends SourceClassBuilder {
244236 }
245237 }
246238
247- _enumValuesFieldDeclaration =
248- new _EnumValuesFieldDeclaration (this , listType);
249-
250- SourcePropertyBuilder valuesBuilder = new SourcePropertyBuilder (
251- fileUri: fileUri,
252- fileOffset: fileOffset,
253- name: "values" ,
254- libraryBuilder: libraryBuilder,
255- declarationBuilder: this ,
256- nameScheme: staticFieldNameScheme,
257- fieldDeclaration: _enumValuesFieldDeclaration,
258- getterDeclaration: _enumValuesFieldDeclaration,
259- getterAugmentations: const [],
260- setterDeclaration: null ,
261- setterAugmentations: const [],
262- references: valuesReferences,
263- isStatic: true );
264- _enumValuesFieldDeclaration.builder = valuesBuilder;
265-
266- if (customValuesDeclaration != null ) {
267- customValuesDeclaration.next = valuesBuilder;
268- nameSpaceBuilder.checkTypeParameterConflict (libraryBuilder,
269- valuesBuilder.name, valuesBuilder, valuesBuilder.fileUri);
270- addMemberInternal (valuesBuilder, addToNameSpace: false );
271- } else {
272- addMemberInternal (valuesBuilder, addToNameSpace: true );
273- nameSpaceBuilder.checkTypeParameterConflict (libraryBuilder,
274- valuesBuilder.name, valuesBuilder, valuesBuilder.fileUri);
275- }
276-
277239 // The default constructor is added if no generative or unnamed factory
278240 // constructors are declared.
279241 bool needsSynthesizedDefaultConstructor = true ;
@@ -354,7 +316,6 @@ class SourceEnumBuilder extends SourceClassBuilder {
354316 unboundNominalParameters: const [],
355317 encodingStrategy: encodingStrategy);
356318
357- constructorBuilder.registerInitializedField (valuesBuilder);
358319 addConstructorInternal (constructorBuilder, addToNameSpace: true );
359320 nameSpaceBuilder.checkTypeParameterConflict (
360321 libraryBuilder,
@@ -387,11 +348,6 @@ class SourceEnumBuilder extends SourceClassBuilder {
387348 toStringBuilder.name, toStringBuilder, toStringBuilder.fileUri);
388349
389350 selfType.bind (libraryBuilder, this );
390-
391- if (name == "values" ) {
392- libraryBuilder.addProblem (
393- messageEnumWithNameValues, this .fileOffset, name.length, fileUri);
394- }
395351 }
396352
397353 @override
@@ -643,8 +599,9 @@ class _EnumValuesFieldDeclaration
643599 }
644600
645601 @override
646- // Coverage-ignore(suite): Not run.
647- void createFieldEncoding (SourcePropertyBuilder builder) {}
602+ void createFieldEncoding (SourcePropertyBuilder builder) {
603+ this .builder = builder;
604+ }
648605
649606 @override
650607 Initializer buildErroneousInitializer (Expression effect, Expression value,
@@ -705,12 +662,12 @@ class _EnumValuesFieldDeclaration
705662 isFinal: false ,
706663 isConst: true ,
707664 isStatic: true ,
708- fileUri: builder .fileUri,
665+ fileUri: uriOffset .fileUri,
709666 fieldReference: references.fieldReference,
710667 getterReference: references.getterReference,
711668 isEnumElement: false )
712- ..fileOffset = builder .fileOffset
713- ..fileEndOffset = builder .fileOffset;
669+ ..fileOffset = uriOffset .fileOffset
670+ ..fileEndOffset = uriOffset .fileOffset;
714671 nameScheme
715672 .getFieldMemberName (FieldNameType .Field , name, isSynthesized: false )
716673 .attachMember (_field! );
@@ -764,7 +721,6 @@ class _EnumValuesFieldDeclaration
764721 bool get isFinal => false ;
765722
766723 @override
767- // Coverage-ignore(suite): Not run.
768724 bool get isLate => false ;
769725
770726 @override
@@ -838,7 +794,6 @@ class _EnumValuesFieldDeclaration
838794 }
839795
840796 @override
841- // Coverage-ignore(suite): Not run.
842797 void createGetterEncoding (
843798 ProblemReporting problemReporting,
844799 SourcePropertyBuilder builder,
@@ -981,6 +936,7 @@ class _EnumValuesClassMember implements ClassMember {
981936 bool get isStatic => true ;
982937
983938 @override
939+ // Coverage-ignore(suite): Not run.
984940 bool get isSynthesized => true ;
985941
986942 @override
0 commit comments