@@ -1107,51 +1107,77 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
11071107 var name = nameToken.lexeme;
11081108 var fragmentName = _buildFragmentName (nameToken);
11091109
1110- var element = MixinElementImpl (name, nameToken.offset);
1111- element .name2 = fragmentName;
1112- element .isAugmentation = node.augmentKeyword != null ;
1113- element .isBase = node.baseKeyword != null ;
1114- element .metadata = _buildAnnotations (node.metadata);
1115- _setCodeRange (element , node);
1116- _setDocumentation (element , node);
1110+ var fragment = MixinElementImpl (name, nameToken.offset);
1111+ fragment .name2 = fragmentName;
1112+ fragment .isAugmentation = node.augmentKeyword != null ;
1113+ fragment .isBase = node.baseKeyword != null ;
1114+ fragment .metadata = _buildAnnotations (node.metadata);
1115+ _setCodeRange (fragment , node);
1116+ _setDocumentation (fragment , node);
11171117
1118- node.declaredElement = element ;
1119- _linker.elementNodes[element ] = node;
1118+ node.declaredElement = fragment ;
1119+ _linker.elementNodes[fragment ] = node;
11201120
11211121 var refName = fragmentName? .name ?? '${_nextUnnamedId ++}' ;
1122- var reference = _enclosingContext.addMixin (refName, element );
1123- if (! element .isAugmentation) {
1122+ var reference = _enclosingContext.addMixin (refName, fragment );
1123+ if (! fragment .isAugmentation) {
11241124 _libraryBuilder.declare (name, reference);
11251125 }
11261126
1127- var holder = _EnclosingContext (reference, element );
1127+ var holder = _EnclosingContext (reference, fragment );
11281128 _withEnclosing (holder, () {
11291129 node.typeParameters? .accept (this );
11301130 _visitPropertyFirst <FieldDeclaration >(node.members);
11311131 });
1132- element .typeParameters = holder.typeParameters;
1133- element .accessors = holder.propertyAccessors;
1134- element .fields = holder.fields;
1135- element .methods = holder.methods;
1132+ fragment .typeParameters = holder.typeParameters;
1133+ fragment .accessors = holder.propertyAccessors;
1134+ fragment .fields = holder.fields;
1135+ fragment .methods = holder.methods;
11361136
11371137 node.onClause? .accept (this );
11381138 node.implementsClause? .accept (this );
11391139
1140- _libraryBuilder.updateAugmentationTarget (name, element);
1140+ // TODO(scheglov): remove it eventually
1141+ _libraryBuilder.updateAugmentationTarget0 (name, fragment);
11411142
1142- if (element.augmentationTarget != null ) {
1143- switch (_libraryBuilder.getElementBuilder (name)) {
1144- case MixinElementBuilder builder:
1145- builder.augment (element);
1146- }
1143+ var elementBuilder = _libraryBuilder.getElementBuilder (name);
1144+ elementBuilder? .setPreviousFor (fragment);
1145+
1146+ // If the fragment is an augmentation, and the corresponding builder
1147+ // has correct type, add the fragment to the builder. Otherwise, create
1148+ // a new builder.
1149+ if (fragment.isAugmentation && elementBuilder is MixinElementBuilder ) {
1150+ elementBuilder.augment (fragment);
11471151 } else {
1152+ var libraryRef = _libraryBuilder.reference;
1153+ var containerRef = libraryRef.getChild ('@mixin' );
1154+ var elementReference = containerRef.addChild (refName);
1155+ var element = NotAugmentedMixinElementImpl (elementReference, fragment);
1156+
11481157 _libraryBuilder.putElementBuilder (
11491158 name,
11501159 MixinElementBuilder (
1151- firstFragment: element,
1160+ firstFragment: fragment,
1161+ element: element,
11521162 ),
11531163 );
11541164 }
1165+
1166+ // _libraryBuilder.updateAugmentationTarget(name, element);
1167+ //
1168+ // if (element.augmentationTarget != null) {
1169+ // switch (_libraryBuilder.getElementBuilder(name)) {
1170+ // case MixinElementBuilder builder:
1171+ // builder.augment(element);
1172+ // }
1173+ // } else {
1174+ // _libraryBuilder.putElementBuilder(
1175+ // name,
1176+ // MixinElementBuilder(
1177+ // firstFragment: element,
1178+ // ),
1179+ // );
1180+ // }
11551181 }
11561182
11571183 @override
0 commit comments