@@ -4738,7 +4738,9 @@ class FieldFormalParameterElementImpl extends ParameterElementImpl
4738
4738
4739
4739
@override
4740
4740
DartType get type {
4741
- if (_unlinkedParam != null && _unlinkedParam.type == null ) {
4741
+ if (_unlinkedParam != null &&
4742
+ _unlinkedParam.type == null &&
4743
+ field != null ) {
4742
4744
_type ?? = field? .type ?? DynamicTypeImpl .instance;
4743
4745
}
4744
4746
return super .type;
@@ -8009,20 +8011,6 @@ class ParameterElementImpl extends VariableElementImpl
8009
8011
*/
8010
8012
final kernel.VariableDeclaration _kernel;
8011
8013
8012
- /**
8013
- * A list containing all of the parameters defined by this parameter element.
8014
- * There will only be parameters if this parameter is a function typed
8015
- * parameter.
8016
- */
8017
- List <ParameterElement > _parameters = ParameterElement .EMPTY_LIST ;
8018
-
8019
- /**
8020
- * A list containing all of the type parameters defined for this parameter
8021
- * element. There will only be parameters if this parameter is a function
8022
- * typed parameter.
8023
- */
8024
- List <TypeParameterElement > _typeParameters = TypeParameterElement .EMPTY_LIST ;
8025
-
8026
8014
/**
8027
8015
* The kind of this parameter.
8028
8016
*/
@@ -8354,19 +8342,7 @@ class ParameterElementImpl extends VariableElementImpl
8354
8342
8355
8343
@override
8356
8344
List <ParameterElement > get parameters {
8357
- _resynthesizeTypeAndParameters ();
8358
- return _parameters;
8359
- }
8360
-
8361
- /**
8362
- * Set the parameters defined by this executable element to the given
8363
- * [parameters] .
8364
- */
8365
- void set parameters (List <ParameterElement > parameters) {
8366
- for (ParameterElement parameter in parameters) {
8367
- (parameter as ParameterElementImpl ).enclosingElement = this ;
8368
- }
8369
- this ._parameters = parameters;
8345
+ return const < ParameterElement > [];
8370
8346
}
8371
8347
8372
8348
@override
@@ -8386,17 +8362,8 @@ class ParameterElementImpl extends VariableElementImpl
8386
8362
}
8387
8363
8388
8364
@override
8389
- List <TypeParameterElement > get typeParameters => _typeParameters;
8390
-
8391
- /**
8392
- * Set the type parameters defined by this parameter element to the given
8393
- * [typeParameters] .
8394
- */
8395
- void set typeParameters (List <TypeParameterElement > typeParameters) {
8396
- for (TypeParameterElement parameter in typeParameters) {
8397
- (parameter as TypeParameterElementImpl ).enclosingElement = this ;
8398
- }
8399
- this ._typeParameters = typeParameters;
8365
+ List <TypeParameterElement > get typeParameters {
8366
+ return const < TypeParameterElement > [];
8400
8367
}
8401
8368
8402
8369
@override
@@ -8450,17 +8417,6 @@ class ParameterElementImpl extends VariableElementImpl
8450
8417
FormalParameter computeNode () =>
8451
8418
getNodeMatching ((node) => node is FormalParameter );
8452
8419
8453
- @override
8454
- ElementImpl getChild (String identifier) {
8455
- for (ParameterElement parameter in _parameters) {
8456
- ParameterElementImpl parameterImpl = parameter;
8457
- if (parameterImpl.identifier == identifier) {
8458
- return parameterImpl;
8459
- }
8460
- }
8461
- return null ;
8462
- }
8463
-
8464
8420
/**
8465
8421
* Set the visible range for this element to the range starting at the given
8466
8422
* [offset] with the given [length] .
@@ -8482,61 +8438,27 @@ class ParameterElementImpl extends VariableElementImpl
8482
8438
* been build yet, build them and remember in the corresponding fields.
8483
8439
*/
8484
8440
void _resynthesizeTypeAndParameters () {
8441
+ // TODO(scheglov) Don't resynthesize parameters.
8485
8442
if (_kernel != null && _type == null ) {
8486
8443
kernel.DartType type = _kernel.type;
8487
8444
_type = enclosingUnit._kernelContext.getType (this , type);
8488
- if (type is kernel.FunctionType && type.typedefReference == null ) {
8489
- _parameters = new List <ParameterElement >(
8490
- type.positionalParameters.length + type.namedParameters.length);
8491
- int index = 0 ;
8492
- for (int i = 0 ; i < type.positionalParameters.length; i++ ) {
8493
- String name = i < type.positionalParameterNames.length
8494
- ? type.positionalParameterNames[i]
8495
- : null ;
8496
- _parameters[index++ ] = new ParameterElementImpl .forKernel (
8497
- enclosingElement,
8498
- new kernel.VariableDeclaration (name,
8499
- type: type.positionalParameters[i]),
8500
- i < type.requiredParameterCount
8501
- ? ParameterKind .REQUIRED
8502
- : ParameterKind .POSITIONAL );
8503
- }
8504
- for (int i = 0 ; i < type.namedParameters.length; i++ ) {
8505
- _parameters[index++ ] = new ParameterElementImpl .forKernel (
8506
- enclosingElement,
8507
- new kernel.VariableDeclaration (type.namedParameters[i].name,
8508
- type: type.namedParameters[i].type),
8509
- ParameterKind .NAMED );
8510
- }
8511
- } else {
8512
- _parameters = const < ParameterElement > [];
8513
- }
8514
8445
}
8515
8446
if (_unlinkedParam != null && _declaredType == null && _type == null ) {
8516
8447
if (_unlinkedParam.isFunctionTyped) {
8517
8448
CompilationUnitElementImpl enclosingUnit = this .enclosingUnit;
8518
- FunctionElementImpl parameterTypeElement =
8519
- new FunctionElementImpl_forFunctionTypedParameter (
8520
- enclosingUnit, this );
8521
- if (! isSynthetic) {
8522
- parameterTypeElement.enclosingElement = this ;
8523
- }
8524
- List <ParameterElement > subParameters = ParameterElementImpl
8525
- .resynthesizeList (_unlinkedParam.parameters, this ,
8526
- synthetic: isSynthetic);
8527
- if (isSynthetic) {
8528
- parameterTypeElement.parameters = subParameters;
8529
- } else {
8530
- _parameters = subParameters;
8531
- parameterTypeElement.shareParameters (subParameters);
8532
- }
8533
- parameterTypeElement.returnType = enclosingUnit.resynthesizerContext
8449
+
8450
+ var typeElement = new GenericFunctionTypeElementImpl .forOffset (- 1 );
8451
+ typeElement.enclosingElement = this ;
8452
+
8453
+ typeElement.parameters = ParameterElementImpl .resynthesizeList (
8454
+ _unlinkedParam.parameters, typeElement,
8455
+ synthetic: isSynthetic);
8456
+
8457
+ typeElement.returnType = enclosingUnit.resynthesizerContext
8534
8458
.resolveTypeRef (this , _unlinkedParam.type);
8535
- FunctionTypeImpl parameterType =
8536
- new FunctionTypeImpl .elementWithNameAndArgs (parameterTypeElement,
8537
- null , typeParameterContext.allTypeParameterTypes, false );
8538
- parameterTypeElement.type = parameterType;
8539
- _type = parameterType;
8459
+
8460
+ _type = new FunctionTypeImpl (typeElement);
8461
+ typeElement.type = _type;
8540
8462
} else {
8541
8463
_type = enclosingUnit.resynthesizerContext
8542
8464
.resolveLinkedType (this , _unlinkedParam.inferredTypeSlot);
@@ -9666,7 +9588,7 @@ abstract class TypeParameterizedElementMixin
9666
9588
* Find out how many type parameters are in scope in this context.
9667
9589
*/
9668
9590
int get typeParameterNestingLevel =>
9669
- _nestingLevel ?? = unlinkedTypeParams.length +
9591
+ _nestingLevel ?? = ( unlinkedTypeParams? .length ?? 0 ) +
9670
9592
(enclosingTypeParameterContext? .typeParameterNestingLevel ?? 0 );
9671
9593
9672
9594
@override
0 commit comments