@@ -4926,12 +4926,11 @@ class ExportElementImpl extends UriReferencedElementImpl
49264926}
49274927
49284928/// A concrete implementation of an [ExtensionElement] .
4929- class ExtensionElementImpl extends ElementImpl implements ExtensionElement {
4929+ class ExtensionElementImpl extends ElementImpl
4930+ with TypeParameterizedElementMixin
4931+ implements ExtensionElement {
49304932 /// The unlinked representation of the extension in the summary.
4931- final /* UnlinkedExtension */ _unlinkedExtension;
4932-
4933- /// A list containing all of the type parameters declared by this extension.
4934- List <TypeParameterElement > _typeParameters;
4933+ final UnlinkedExtension _unlinkedExtension;
49354934
49364935 /// The type being extended.
49374936 DartType _extendedType;
@@ -4991,6 +4990,9 @@ class ExtensionElementImpl extends ElementImpl implements ExtensionElement {
49914990 _accessors = accessors;
49924991 }
49934992
4993+ @override
4994+ TypeParameterizedElementMixin get enclosingTypeParameterContext => null ;
4995+
49944996 @override
49954997 DartType get extendedType {
49964998 if (_extendedType != null ) {
@@ -5014,6 +5016,9 @@ class ExtensionElementImpl extends ElementImpl implements ExtensionElement {
50145016 _extendedType = extendedType;
50155017 }
50165018
5019+ @override
5020+ bool get isSimplyBounded => true ;
5021+
50175022 @override
50185023 ElementKind get kind => ElementKind .EXTENSION ;
50195024
@@ -5024,49 +5029,47 @@ class ExtensionElementImpl extends ElementImpl implements ExtensionElement {
50245029 }
50255030
50265031 if (linkedNode != null ) {
5027- // TODO(brianwilkerson) Implement this.
5028- // var context = enclosingUnit.linkedContext;
5029- // var containerRef = reference.getChild('@method');
5030- // return _methods = context
5031- // .getMethods(linkedNode)
5032- // .where((node) => node.propertyKeyword == null)
5033- // .map((node) {
5034- // var name = node.name.name;
5035- // var reference = containerRef.getChild(name);
5036- // if (reference.hasElementFor(node)) {
5037- // return reference.element as MethodElement;
5038- // }
5039- // return MethodElementImpl.forLinkedNode(this, reference, node);
5040- // }).toList();
5032+ var context = enclosingUnit.linkedContext;
5033+ var containerRef = reference.getChild ('@method' );
5034+ return _methods = context
5035+ .getMethods (linkedNode)
5036+ .where ((node) => node.propertyKeyword == null )
5037+ .map ((node) {
5038+ var name = node.name.name;
5039+ var reference = containerRef.getChild (name);
5040+ if (reference.hasElementFor (node)) {
5041+ return reference.element as MethodElement ;
5042+ }
5043+ return MethodElementImpl .forLinkedNode (this , reference, node);
5044+ }).toList ();
50415045 } else if (_unlinkedExtension != null ) {
5042- // TODO(brianwilkerson) Implement this.
5043- // var unlinkedExecutables = _unlinkedExtension.executables;
5044- //
5045- // var length = unlinkedExecutables.length;
5046- // if (length == 0) {
5047- // return _methods = const <MethodElement>[];
5048- // }
5049- //
5050- // var count = 0;
5051- // for (var i = 0; i < length; i++) {
5052- // var e = unlinkedExecutables[i];
5053- // if (e.kind == UnlinkedExecutableKind.functionOrMethod) {
5054- // count++;
5055- // }
5056- // }
5057- // if (count == 0) {
5058- // return _methods = const <MethodElement>[];
5059- // }
5060- //
5061- // var methods = new List<MethodElement>(count);
5062- // var index = 0;
5063- // for (var i = 0; i < length; i++) {
5064- // var e = unlinkedExecutables[i];
5065- // if (e.kind == UnlinkedExecutableKind.functionOrMethod) {
5066- // methods[index++] = new MethodElementImpl.forSerialized(e, this);
5067- // }
5068- // }
5069- // return _methods = methods;
5046+ var unlinkedExecutables = _unlinkedExtension.executables;
5047+
5048+ var length = unlinkedExecutables.length;
5049+ if (length == 0 ) {
5050+ return _methods = const < MethodElement > [];
5051+ }
5052+
5053+ var count = 0 ;
5054+ for (var i = 0 ; i < length; i++ ) {
5055+ var e = unlinkedExecutables[i];
5056+ if (e.kind == UnlinkedExecutableKind .functionOrMethod) {
5057+ count++ ;
5058+ }
5059+ }
5060+ if (count == 0 ) {
5061+ return _methods = const < MethodElement > [];
5062+ }
5063+
5064+ var methods = new List <MethodElement >(count);
5065+ var index = 0 ;
5066+ for (var i = 0 ; i < length; i++ ) {
5067+ var e = unlinkedExecutables[i];
5068+ if (e.kind == UnlinkedExecutableKind .functionOrMethod) {
5069+ methods[index++ ] = new MethodElementImpl .forSerialized (e, this );
5070+ }
5071+ }
5072+ return _methods = methods;
50705073 }
50715074 return _methods = const < MethodElement > [];
50725075 }
@@ -5104,52 +5107,20 @@ class ExtensionElementImpl extends ElementImpl implements ExtensionElement {
51045107 return offset;
51055108 }
51065109
5107- @override
5108- List <TypeParameterElement > get typeParameters {
5109- if (_typeParameters != null ) {
5110- return _typeParameters;
5111- }
5112-
5113- if (linkedNode != null ) {
5114- var typeParameters = linkedContext.getTypeParameters2 (linkedNode);
5115- if (typeParameters == null ) {
5116- return _typeParameters = const [];
5117- }
5118- var containerRef = reference.getChild ('@typeParameter' );
5119- return _typeParameters =
5120- typeParameters.typeParameters.map <TypeParameterElement >((node) {
5121- var reference = containerRef.getChild (node.name.name);
5122- if (reference.hasElementFor (node)) {
5123- return reference.element as TypeParameterElement ;
5124- }
5125- return TypeParameterElementImpl .forLinkedNode (this , reference, node);
5126- }).toList ();
5127- } else if (_unlinkedExtension != null ) {
5128- List <UnlinkedTypeParam > unlinkedParams =
5129- _unlinkedExtension? .typeParameters;
5130- if (unlinkedParams != null ) {
5131- int numTypeParameters = unlinkedParams.length;
5132- _typeParameters = new List <TypeParameterElement >(numTypeParameters);
5133- for (int i = 0 ; i < numTypeParameters; i++ ) {
5134- _typeParameters[i] = new TypeParameterElementImpl .forSerialized (
5135- unlinkedParams[i], this );
5136- }
5137- }
5138- }
5139-
5140- return _typeParameters ?? const < TypeParameterElement > [];
5141- }
5142-
51435110 /// Set the type parameters defined by this extension to the given
51445111 /// [typeParameters] .
51455112 void set typeParameters (List <TypeParameterElement > typeParameters) {
51465113 _assertNotResynthesized (_unlinkedExtension);
51475114 for (TypeParameterElement typeParameter in typeParameters) {
51485115 (typeParameter as TypeParameterElementImpl ).enclosingElement = this ;
51495116 }
5150- this ._typeParameters = typeParameters;
5117+ this ._typeParameterElements = typeParameters;
51515118 }
51525119
5120+ @override
5121+ List <UnlinkedTypeParam > get unlinkedTypeParams =>
5122+ _unlinkedExtension? .typeParameters;
5123+
51535124 @override
51545125 T accept <T >(ElementVisitor <T > visitor) {
51555126 return visitor.visitExtensionElement (this );
@@ -7499,16 +7470,16 @@ class MethodElementImpl extends ExecutableElementImpl implements MethodElement {
74997470 /// given [offset] .
75007471 MethodElementImpl (String name, int offset) : super (name, offset);
75017472
7502- MethodElementImpl .forLinkedNode (ClassElementImpl enclosingClass,
7473+ MethodElementImpl .forLinkedNode (TypeParameterizedElementMixin enclosingClass,
75037474 Reference reference, MethodDeclaration linkedNode)
75047475 : super .forLinkedNode (enclosingClass, reference, linkedNode);
75057476
75067477 /// Initialize a newly created method element to have the given [name] .
75077478 MethodElementImpl .forNode (Identifier name) : super .forNode (name);
75087479
75097480 /// Initialize using the given serialized information.
7510- MethodElementImpl .forSerialized (
7511- UnlinkedExecutable serializedExecutable, ClassElementImpl enclosingClass)
7481+ MethodElementImpl .forSerialized (UnlinkedExecutable serializedExecutable,
7482+ TypeParameterizedElementMixin enclosingClass)
75127483 : super .forSerialized (serializedExecutable, enclosingClass);
75137484
75147485 @override
@@ -7520,12 +7491,9 @@ class MethodElementImpl extends ExecutableElementImpl implements MethodElement {
75207491 return displayName;
75217492 }
75227493
7523- @override
7524- ClassElement get enclosingElement => super .enclosingElement as ClassElement ;
7525-
75267494 @override
75277495 TypeParameterizedElementMixin get enclosingTypeParameterContext =>
7528- super .enclosingElement as ClassElementImpl ;
7496+ super .enclosingElement as TypeParameterizedElementMixin ;
75297497
75307498 /// Set whether this class is abstract.
75317499 void set isAbstract (bool isAbstract) {
0 commit comments