File tree Expand file tree Collapse file tree 5 files changed +343
-4
lines changed 
test/src/summary/elements Expand file tree Collapse file tree 5 files changed +343
-4
lines changed Original file line number Diff line number Diff line change @@ -4609,6 +4609,11 @@ abstract class InstanceFragmentImpl extends FragmentImpl
46094609    _setters.add (fragment);
46104610    fragment.enclosingFragment =  this ;
46114611  }
4612+ 
4613+   void  addTypeParameter (TypeParameterFragmentImpl  typeParameter) {
4614+     _typeParameters.add (typeParameter);
4615+     typeParameter.enclosingFragment =  this ;
4616+   }
46124617}
46134618
46144619abstract  class  InterfaceElementImpl  extends  InstanceElementImpl 
@@ -10127,7 +10132,8 @@ class TypeParameterFragmentImpl extends FragmentImpl
1012710132  MetadataImpl  get  metadata2 =>  metadata;
1012810133
1012910134  @override 
10130-   int  get  offset =>  nameOffset ??  firstTokenOffset! ;
10135+   int  get  offset => 
10136+       nameOffset ??  firstTokenOffset ??  enclosingFragment? .offset ??  - 1 ;
1013110137
1013210138  void  addFragment (TypeParameterFragmentImpl  fragment) {
1013310139    fragment.element =  element;
Original file line number Diff line number Diff line change @@ -195,6 +195,26 @@ class ElementBuilder {
195195      lastFragment.addFragment (fragment);
196196
197197      var  lastTypeParameterFragments =  lastFragment.typeParameters;
198+ 
199+       // Trim extra type parameters. 
200+       if  (lastTypeParameterFragments.length <  fragment.typeParameters.length) {
201+         fragment.typeParameters.length =  lastTypeParameterFragments.length;
202+       }
203+ 
204+       // Synthesize missing type parameters. 
205+       if  (lastTypeParameterFragments.length >  fragment.typeParameters.length) {
206+         for  (
207+           var  i =  fragment.typeParameters.length;
208+           i <  lastTypeParameterFragments.length;
209+           i++ 
210+         ) {
211+           fragment.addTypeParameter (
212+             TypeParameterFragmentImpl (name:  lastTypeParameterFragments[i].name)
213+               ..isSynthetic =  true ,
214+           );
215+         }
216+       }
217+ 
198218      for  (var  i =  0 ; i <  lastTypeParameterFragments.length; i++ ) {
199219        lastTypeParameterFragments[i].addFragment (fragment.typeParameters[i]);
200220      }
Original file line number Diff line number Diff line change @@ -569,7 +569,9 @@ class ReferenceResolver extends ThrowingAstVisitor<void> {
569569    if  (bound !=  null ) {
570570      bound.accept (this );
571571      var  fragment =  node.declaredFragment! ;
572-       fragment.element.bound =  bound.type;
572+       if  (fragment.previousFragment ==  null ) {
573+         fragment.element.bound =  bound.type;
574+       }
573575      nodesToBuildType.addDeclaration (node);
574576    }
575577  }
Original file line number Diff line number Diff line change @@ -396,7 +396,9 @@ class TypesBuilder {
396396
397397  void  _typeParameter (TypeParameterImpl  node) {
398398    var  fragment =  node.declaredFragment! ;
399-     fragment.element.bound =  node.bound? .type;
399+     if  (fragment.previousFragment ==  null ) {
400+       fragment.element.bound =  node.bound? .type;
401+     }
400402  }
401403
402404  List <TypeParameterFragmentImpl > _typeParameters (TypeParameterListImpl ?  node) {
    
 
   
 
     
   
   
          
     
  
    
     
 
    
      
     
 
     
    You can’t perform that action at this time.
  
 
    
  
     
    
      
        
     
 
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments