Issue 47915. Don't build DefaultParameterElementImpl for formal parameters that are not allowed to have default values.
Bug: https://github.com/dart-lang/sdk/issues/47915
Change-Id: I708775ca29bf9efdfdf798eb4b622f1308f2b00c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/300140
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 0b37565..e0fe94d 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -87,7 +87,7 @@
/// TODO(scheglov) Clean up the list of implicitly analyzed files.
class AnalysisDriver implements AnalysisDriverGeneric {
/// The version of data format, should be incremented on every format change.
- static const int DATA_VERSION = 267;
+ static const int DATA_VERSION = 269;
/// The number of exception contexts allowed to write. Once this field is
/// zero, we stop writing any new exception contexts in this process.
diff --git a/pkg/analyzer/lib/src/summary2/bundle_reader.dart b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
index 60dbffd..f6d0305 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
@@ -1158,6 +1158,7 @@
}
}
+ /// TODO(scheglov) Deduplicate parameter reading implementation.
List<ParameterElementImpl> _readParameters(
ElementImpl enclosingElement,
Reference enclosingReference,
@@ -1165,6 +1166,7 @@
var containerRef = enclosingReference.getChild('@parameter');
return _reader.readTypedList(() {
var name = _reader.readStringReference();
+ var isDefault = _reader.readBool();
var isInitializingFormal = _reader.readBool();
var isSuperFormal = _reader.readBool();
var reference = containerRef.getChild(name);
@@ -1173,7 +1175,7 @@
var kind = ResolutionReader._formalParameterKind(kindIndex);
ParameterElementImpl element;
- if (kind.isRequiredPositional) {
+ if (!isDefault) {
if (isInitializingFormal) {
element = FieldFormalParameterElementImpl(
name: name,
@@ -1864,12 +1866,13 @@
return readTypedList(() {
var kindIndex = _reader.readByte();
var kind = _formalParameterKind(kindIndex);
+ var isDefault = _reader.readBool();
var hasImplicitType = _reader.readBool();
var isInitializingFormal = _reader.readBool();
var typeParameters = _readTypeParameters(unitElement);
var type = readRequiredType();
var name = readStringReference();
- if (kind.isRequiredPositional) {
+ if (!isDefault) {
ParameterElementImpl element;
if (isInitializingFormal) {
element = FieldFormalParameterElementImpl(
diff --git a/pkg/analyzer/lib/src/summary2/bundle_writer.dart b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
index 89760a2..959513f 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
@@ -438,9 +438,11 @@
}
}
+ /// TODO(scheglov) Deduplicate parameter writing implementation.
void _writeParameterElement(ParameterElement element) {
element as ParameterElementImpl;
_sink._writeStringReference(element.name);
+ _sink.writeBool(element is ConstVariableElement);
_sink.writeBool(element.isInitializingFormal);
_sink.writeBool(element.isSuperFormal);
_sink._writeFormalParameterKind(element);
@@ -740,6 +742,7 @@
writeUInt30(parameters.length);
for (var parameter in parameters) {
_writeFormalParameterKind(parameter);
+ writeBool(parameter is ConstVariableElement);
writeBool(parameter.hasImplicitType);
writeBool(parameter.isInitializingFormal);
_writeTypeParameters(parameter.typeParameters, () {
diff --git a/pkg/analyzer/lib/src/summary2/element_builder.dart b/pkg/analyzer/lib/src/summary2/element_builder.dart
index 617d878..59b9179 100644
--- a/pkg/analyzer/lib/src/summary2/element_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/element_builder.dart
@@ -952,7 +952,8 @@
ParameterElementImpl element;
var parent = node.parent;
- if (parent is DefaultFormalParameter) {
+ if (parent is DefaultFormalParameter &&
+ _enclosingContext.hasDefaultFormalParameters) {
element = DefaultParameterElementImpl(
name: name,
nameOffset: nameOffset,
@@ -1155,7 +1156,11 @@
FormalParameterList? formalParameters,
TypeParameterList? typeParameters,
}) {
- var holder = _EnclosingContext(reference, element);
+ var holder = _EnclosingContext(
+ reference,
+ element,
+ hasDefaultFormalParameters: true,
+ );
_withEnclosing(holder, () {
if (formalParameters != null) {
formalParameters.accept(this);
@@ -1345,10 +1350,17 @@
final List<TypeParameterElementImpl> _typeParameters = [];
final bool hasConstConstructor;
+ /// Not all optional formal parameters can have default values.
+ /// For example, formal parameters of methods can, but formal parameters
+ /// of function types - not. This flag specifies if we should create
+ /// [ParameterElementImpl]s or [DefaultParameterElementImpl]s.
+ final bool hasDefaultFormalParameters;
+
_EnclosingContext(
this.reference,
this.element, {
this.hasConstConstructor = false,
+ this.hasDefaultFormalParameters = false,
});
List<ClassElementImpl> get classes {
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index b1c2f20..c71e55b 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -118,6 +118,7 @@
bool withConstructors = true;
bool withDisplayName = false;
bool withExportScope = false;
+ bool withFunctionTypeParameters = false;
bool withImports = true;
bool withMetadata = true;
bool withNonSynthetic = false;
@@ -769,6 +770,10 @@
buffer.write('optionalNamed ');
}
+ if (e is ConstVariableElement) {
+ buffer.write('default ');
+ }
+
_writeIf(e.isConst, 'const ');
_writeIf(e.isCovariant, 'covariant ');
_writeIf(e.isFinal, 'final ');
@@ -985,6 +990,14 @@
void _writeType(String name, DartType type) {
_createAstPrinter().writeType(type, name: name);
+
+ if (configuration.withFunctionTypeParameters) {
+ if (type is FunctionType) {
+ _withIndent(() {
+ _writeParameterElements(type.parameters);
+ });
+ }
+ }
}
void _writeTypeAliasElement(TypeAliasElement e) {
diff --git a/pkg/analyzer/test/src/summary/elements_test.dart b/pkg/analyzer/test/src/summary/elements_test.dart
index 9c0110d..3cda544 100644
--- a/pkg/analyzer/test/src/summary/elements_test.dart
+++ b/pkg/analyzer/test/src/summary/elements_test.dart
@@ -376,7 +376,7 @@
functions
f @51
parameters
- optionalNamed x @58
+ optionalNamed default x @58
type: int
constantInitializer
PrefixedIdentifier
@@ -423,7 +423,7 @@
functions
f @61
parameters
- optionalNamed x @68
+ optionalNamed default x @68
type: int
constantInitializer
PropertyAccess
@@ -1489,7 +1489,7 @@
constructors
@17
parameters
- optionalNamed final this.x @25
+ optionalNamed default final this.x @25
type: int
field: self::@class::C::@field::x
accessors
@@ -1517,7 +1517,7 @@
constructors
@17
parameters
- optionalNamed final this.x @25
+ optionalNamed default final this.x @25
type: int
constantInitializer
IntegerLiteral
@@ -1549,7 +1549,7 @@
constructors
@17
parameters
- optionalPositional final this.x @25
+ optionalPositional default final this.x @25
type: int
field: self::@class::C::@field::x
accessors
@@ -1577,7 +1577,7 @@
constructors
@17
parameters
- optionalPositional final this.x @25
+ optionalPositional default final this.x @25
type: int
constantInitializer
IntegerLiteral
@@ -1786,7 +1786,7 @@
constructors
const @34
parameters
- optionalPositional f @41
+ optionalPositional default f @41
type: int
constantInitializer
IntegerLiteral
@@ -2114,7 +2114,7 @@
parameters
requiredPositional a @24
type: dynamic
- optionalNamed b @32
+ optionalNamed default b @32
type: int
class C @45
supertype: A
@@ -2318,7 +2318,7 @@
parameters
requiredPositional a @61
type: dynamic
- optionalNamed b @69
+ optionalNamed default b @69
type: int
''');
}
@@ -2499,23 +2499,23 @@
constructors
@12
parameters
- requiredNamed a @28
+ requiredNamed default a @28
type: int
- requiredNamed b @47
+ requiredNamed default b @47
type: double
class B @61
supertype: A
constructors
@77
parameters
- optionalNamed o1 @87
+ optionalNamed default o1 @87
type: String
- optionalNamed final super.a @97
+ optionalNamed default final super.a @97
type: int
superConstructorParameter: self::@class::A::@constructor::new::@parameter::a
- optionalNamed o2 @107
+ optionalNamed default o2 @107
type: String
- optionalNamed final super.b @117
+ optionalNamed default final super.b @117
type: double
superConstructorParameter: self::@class::A::@constructor::new::@parameter::b
superConstructor: self::@class::A::@constructor::new
@@ -2540,14 +2540,14 @@
constructors
@12
parameters
- requiredNamed a @28
+ requiredNamed default a @28
type: int
class B @42
supertype: A
constructors
@58
parameters
- optionalNamed final super.b @67
+ optionalNamed default final super.b @67
type: dynamic
superConstructorParameter: <null>
superConstructor: self::@class::A::@constructor::new
@@ -2579,7 +2579,7 @@
constructors
@47
parameters
- optionalNamed final super.a @56
+ optionalNamed default final super.a @56
type: dynamic
superConstructorParameter: <null>
superConstructor: self::@class::A::@constructor::new
@@ -2613,14 +2613,14 @@
constructors
@57
parameters
- optionalPositional o1 @67
+ optionalPositional default o1 @67
type: String
- optionalPositional final super.a @77
+ optionalPositional default final super.a @77
type: int
superConstructorParameter: self::@class::A::@constructor::new::@parameter::a
- optionalPositional o2 @87
+ optionalPositional default o2 @87
type: String
- optionalPositional final super.b @97
+ optionalPositional default final super.b @97
type: double
superConstructorParameter: self::@class::A::@constructor::new::@parameter::b
superConstructor: self::@class::A::@constructor::new
@@ -2650,23 +2650,23 @@
constructors
@12
parameters
- requiredNamed a @28
+ requiredNamed default a @28
type: int
- requiredNamed b @47
+ requiredNamed default b @47
type: double
class B @61
supertype: A
constructors
@77
parameters
- requiredNamed o1 @101
+ requiredNamed default o1 @101
type: String
- requiredNamed final super.a @124
+ requiredNamed default final super.a @124
type: int
superConstructorParameter: self::@class::A::@constructor::new::@parameter::a
- requiredNamed o2 @147
+ requiredNamed default o2 @147
type: String
- requiredNamed final super.b @170
+ requiredNamed default final super.b @170
type: double
superConstructorParameter: self::@class::A::@constructor::new::@parameter::b
superConstructor: self::@class::A::@constructor::new
@@ -2860,7 +2860,7 @@
constructors
@12
parameters
- requiredNamed a @28
+ requiredNamed default a @28
type: int
class B @41
supertype: A
@@ -8281,7 +8281,7 @@
accessors
set x @19
parameters
- optionalNamed a @22
+ optionalNamed default a @22
type: dynamic
returnType: void
''');
@@ -8320,7 +8320,7 @@
accessors
set x @19
parameters
- optionalPositional a @22
+ optionalPositional default a @22
type: dynamic
returnType: void
''');
@@ -9429,9 +9429,9 @@
parameters
requiredPositional a @36
type: int
- optionalPositional b @45
+ optionalPositional default b @45
type: int?
- optionalPositional c @52
+ optionalPositional default c @52
type: int
constantInitializer
IntegerLiteral
@@ -9443,9 +9443,9 @@
parameters
requiredPositional a @72
type: int
- optionalNamed b @81
+ optionalNamed default b @81
type: int?
- optionalNamed c @88
+ optionalNamed default c @88
type: int
constantInitializer
IntegerLiteral
@@ -9482,9 +9482,9 @@
parameters
requiredPositional a @-1
type: int
- optionalPositional b @-1
+ optionalPositional default b @-1
type: int?
- optionalPositional c @-1
+ optionalPositional default c @-1
type: int
constantInitializer
IntegerLiteral
@@ -9520,9 +9520,9 @@
parameters
requiredPositional a @-1
type: int
- optionalNamed b @-1
+ optionalNamed default b @-1
type: int?
- optionalNamed c @-1
+ optionalNamed default c @-1
type: int
constantInitializer
IntegerLiteral
@@ -10212,7 +10212,7 @@
superConstructor: package:test/a.dart::@class::Base::@constructor::requiredArg
synthetic positionalArg @-1
parameters
- optionalPositional x @-1
+ optionalPositional default x @-1
type: bool
constantInitializer
BooleanLiteral
@@ -10238,7 +10238,7 @@
superConstructor: package:test/a.dart::@class::Base::@constructor::positionalArg
synthetic positionalArg2 @-1
parameters
- optionalPositional final x @-1
+ optionalPositional default final x @-1
type: bool
constantInitializer
BooleanLiteral
@@ -10264,7 +10264,7 @@
superConstructor: package:test/a.dart::@class::Base::@constructor::positionalArg2
synthetic namedArg @-1
parameters
- optionalNamed x @-1
+ optionalNamed default x @-1
type: int
constantInitializer
IntegerLiteral
@@ -10290,7 +10290,7 @@
superConstructor: package:test/a.dart::@class::Base::@constructor::namedArg
synthetic namedArg2 @-1
parameters
- optionalNamed final x @-1
+ optionalNamed default final x @-1
type: bool
constantInitializer
BooleanLiteral
@@ -12163,7 +12163,7 @@
codeOffset: 0
codeLength: 38
parameters
- optionalNamed a @10
+ optionalNamed default a @10
type: int
codeOffset: 6
codeLength: 9
@@ -12171,11 +12171,11 @@
IntegerLiteral
literal: 1 @14
staticType: int
- optionalNamed b @21
+ optionalNamed default b @21
type: int
codeOffset: 17
codeLength: 5
- optionalNamed c @28
+ optionalNamed default c @28
type: int
codeOffset: 24
codeLength: 9
@@ -14042,9 +14042,9 @@
type: int
requiredPositional c @45
type: int
- optionalNamed d @56
+ optionalNamed default d @56
type: String
- optionalNamed e @66
+ optionalNamed default e @66
type: double
topLevelVariables
static const V @79
@@ -15540,7 +15540,7 @@
constructors
const @29
parameters
- optionalNamed final this.x @37
+ optionalNamed default final this.x @37
type: dynamic
constantInitializer
SimpleIdentifier
@@ -15576,7 +15576,7 @@
constructors
const @29
parameters
- optionalNamed final this.x @37
+ optionalNamed default final this.x @37
type: dynamic
constantInitializer
BinaryExpression
@@ -15616,7 +15616,7 @@
constructors
const @29
parameters
- optionalPositional final this.x @37
+ optionalPositional default final this.x @37
type: dynamic
constantInitializer
BinaryExpression
@@ -15658,7 +15658,7 @@
periodOffset: 19
nameEnd: 30
parameters
- optionalPositional p @32
+ optionalPositional default p @32
type: dynamic
constantInitializer
BinaryExpression
@@ -15676,7 +15676,7 @@
periodOffset: 54
nameEnd: 60
parameters
- optionalNamed p @62
+ optionalNamed default p @62
type: dynamic
constantInitializer
BinaryExpression
@@ -15693,7 +15693,7 @@
methods
methodPositional @81
parameters
- optionalPositional p @99
+ optionalPositional default p @99
type: dynamic
constantInitializer
BinaryExpression
@@ -15710,12 +15710,12 @@
returnType: void
methodPositionalWithoutDefault @121
parameters
- optionalPositional p @153
+ optionalPositional default p @153
type: dynamic
returnType: void
methodNamed @167
parameters
- optionalNamed p @180
+ optionalNamed default p @180
type: dynamic
constantInitializer
BinaryExpression
@@ -15732,7 +15732,7 @@
returnType: void
methodNamedWithoutDefault @201
parameters
- optionalNamed p @228
+ optionalNamed default p @228
type: dynamic
returnType: void
''');
@@ -19132,7 +19132,7 @@
methods
abstract X @21
parameters
- optionalNamed a @32
+ optionalNamed default a @32
type: List<T>
constantInitializer
ListLiteral
@@ -19164,7 +19164,7 @@
methods
abstract X @36
parameters
- optionalNamed a @47
+ optionalNamed default a @47
type: List<T*>*
constantInitializer
ListLiteral
@@ -19202,7 +19202,7 @@
constructors
const @82
parameters
- optionalNamed final this.f @90
+ optionalNamed default final this.f @90
type: void Function(dynamic)
alias: self::@typeAlias::F
typeArguments
@@ -19271,7 +19271,7 @@
methods
foo @45
parameters
- optionalNamed a @50
+ optionalNamed default a @50
type: dynamic
constantInitializer
InstanceCreationExpression
@@ -19321,17 +19321,6 @@
parameters
optionalNamed a @11
type: dynamic
- constantInitializer
- IsExpression
- expression: IntegerLiteral
- literal: 0 @14
- staticType: int
- isOperator: is @16
- type: NamedType
- name: int @19
- element: dart:core::@class::int
- type: int
- staticType: bool
returnType: void
''');
}
@@ -19347,7 +19336,7 @@
functions
f @20
parameters
- optionalPositional compare @37
+ optionalPositional default compare @37
type: int* Function(dynamic, dynamic)*
alias: dart:core::@typeAlias::Comparator
typeArguments
@@ -19383,7 +19372,7 @@
functions
f @5
parameters
- optionalNamed x @28
+ optionalNamed default x @28
type: ({int f1, bool f2})
constantInitializer
RecordLiteral
@@ -19425,7 +19414,7 @@
functions
f @5
parameters
- optionalNamed x @28
+ optionalNamed default x @28
type: ({int f1, bool f2})
constantInitializer
RecordLiteral
@@ -19468,7 +19457,7 @@
functions
f @5
parameters
- optionalNamed x @20
+ optionalNamed default x @20
type: (int, bool)
constantInitializer
RecordLiteral
@@ -19496,7 +19485,7 @@
functions
f @5
parameters
- optionalNamed x @20
+ optionalNamed default x @20
type: (int, bool)
constantInitializer
RecordLiteral
@@ -19538,7 +19527,7 @@
returnType: void
static g @65
parameters
- optionalPositional p @75
+ optionalPositional default p @75
type: Object
constantInitializer
SimpleIdentifier
@@ -19576,7 +19565,7 @@
methods
foo @50
parameters
- optionalPositional b @70
+ optionalPositional default b @70
type: B<int, double>
constantInitializer
InstanceCreationExpression
@@ -19623,7 +19612,7 @@
constructors
const @49
parameters
- optionalPositional b @57
+ optionalPositional default b @57
type: B<T>
constantInitializer
InstanceCreationExpression
@@ -19680,7 +19669,7 @@
constructors
const @114
parameters
- optionalPositional a @122
+ optionalPositional default a @122
type: A<T>
constantInitializer
InstanceCreationExpression
@@ -19738,7 +19727,7 @@
constructors
const @129
parameters
- optionalPositional a @137
+ optionalPositional default a @137
type: A<T*>*
constantInitializer
InstanceCreationExpression
@@ -19785,7 +19774,7 @@
constructors
const @64
parameters
- optionalPositional b @72
+ optionalPositional default b @72
type: B<T*>*
constantInitializer
InstanceCreationExpression
@@ -19828,7 +19817,7 @@
covariant T @37
defaultType: dynamic
parameters
- optionalPositional b @46
+ optionalPositional default b @46
type: B<T>
constantInitializer
InstanceCreationExpression
@@ -19877,7 +19866,7 @@
covariant T @49
defaultType: dynamic
parameters
- optionalPositional b @58
+ optionalPositional default b @58
type: B<T>
constantInitializer
InstanceCreationExpression
@@ -19931,7 +19920,7 @@
covariant E2 @58
defaultType: dynamic
parameters
- optionalPositional b @73
+ optionalPositional default b @73
type: B<E1, E2>
constantInitializer
InstanceCreationExpression
@@ -19980,7 +19969,7 @@
methods
foo @48
parameters
- optionalPositional b @58
+ optionalPositional default b @58
type: B<T>
constantInitializer
InstanceCreationExpression
@@ -20324,9 +20313,9 @@
returnType: void
f @34
parameters
- optionalPositional b @41
+ optionalPositional default b @41
type: int
- optionalPositional c @51
+ optionalPositional default c @51
type: double
returnType: void
''');
@@ -21070,7 +21059,7 @@
constructors
const @37
parameters
- optionalNamed final this.x @45
+ optionalNamed default final this.x @45
type: int
constantInitializer
BinaryExpression
@@ -24144,7 +24133,7 @@
functions
f @5
parameters
- optionalNamed final this.a @17
+ optionalNamed default final this.a @17
type: int
constantInitializer
IntegerLiteral
@@ -24197,7 +24186,7 @@
functions
f @0
parameters
- optionalNamed x @3
+ optionalNamed default x @3
type: dynamic
returnType: dynamic
''');
@@ -24211,7 +24200,7 @@
functions
f @0
parameters
- optionalPositional x @3
+ optionalPositional default x @3
type: dynamic
returnType: dynamic
''');
@@ -27619,7 +27608,7 @@
functions
f @0
parameters
- optionalNamed g @8
+ optionalNamed default g @8
type: void Function(int, void Function())
parameters
requiredPositional x @14
@@ -28826,7 +28815,7 @@
functions
foo @34
parameters
- optionalPositional p @39
+ optionalPositional default p @39
type: dynamic
constantInitializer
SimpleIdentifier
@@ -28856,7 +28845,7 @@
functions
foo @17
parameters
- optionalPositional p @22
+ optionalPositional default p @22
type: dynamic
constantInitializer
SimpleIdentifier
@@ -28891,7 +28880,7 @@
functions
foo @0
parameters
- optionalPositional p @5
+ optionalPositional default p @5
type: dynamic
constantInitializer
SimpleIdentifier
@@ -32006,7 +31995,7 @@
constructors
@33
parameters
- optionalPositional final this.x @44
+ optionalPositional default final this.x @44
type: dynamic
metadata
Annotation
@@ -32226,7 +32215,7 @@
functions
f @16
parameters
- optionalPositional g @22
+ optionalPositional default g @22
type: dynamic Function()
metadata
Annotation
@@ -33842,7 +33831,7 @@
staticType: null
element: self::@getter::foo
parameters
- optionalNamed a @47
+ optionalNamed default a @47
type: int?
metadata
Annotation
@@ -34222,7 +34211,7 @@
functions
f @16
parameters
- optionalPositional x @22
+ optionalPositional default x @22
type: dynamic
metadata
Annotation
@@ -36047,7 +36036,7 @@
functions
f @5
parameters
- requiredNamed f @22
+ requiredNamed default f @22
type: void Function<U>(int)
typeParameters
covariant U @24
@@ -36816,7 +36805,7 @@
methods
m @17
parameters
- optionalNamed covariant a @32
+ optionalNamed default covariant a @32
type: A
returnType: void
''');
@@ -36838,7 +36827,7 @@
methods
m @17
parameters
- optionalPositional covariant a @32
+ optionalPositional default covariant a @32
type: A
returnType: void
''');
@@ -36929,7 +36918,7 @@
methods
m @17
parameters
- optionalNamed covariant a @32
+ optionalNamed default covariant a @32
type: A
returnType: void
class B @47
@@ -36940,7 +36929,7 @@
methods
m @68
parameters
- optionalNamed covariant a @73
+ optionalNamed default covariant a @73
type: B
returnType: void
''');
@@ -37072,7 +37061,7 @@
periodOffset: 13
nameEnd: 24
parameters
- optionalPositional x @26
+ optionalPositional default x @26
type: dynamic
constantInitializer
IntegerLiteral
@@ -37082,7 +37071,7 @@
periodOffset: 38
nameEnd: 44
parameters
- optionalNamed x @46
+ optionalNamed default x @46
type: dynamic
constantInitializer
IntegerLiteral
@@ -37115,7 +37104,7 @@
periodOffset: 22
nameEnd: 33
parameters
- optionalPositional final this.x @40
+ optionalPositional default final this.x @40
type: dynamic
constantInitializer
IntegerLiteral
@@ -37126,7 +37115,7 @@
periodOffset: 52
nameEnd: 58
parameters
- optionalNamed final this.x @65
+ optionalNamed default final this.x @65
type: dynamic
constantInitializer
IntegerLiteral
@@ -37163,7 +37152,7 @@
methods
static positional @24
parameters
- optionalPositional x @36
+ optionalPositional default x @36
type: dynamic
constantInitializer
IntegerLiteral
@@ -37172,7 +37161,7 @@
returnType: void
static named @61
parameters
- optionalNamed x @68
+ optionalNamed default x @68
type: dynamic
constantInitializer
IntegerLiteral
@@ -37196,7 +37185,7 @@
functions
positional @5
parameters
- optionalPositional x @17
+ optionalPositional default x @17
type: dynamic
constantInitializer
IntegerLiteral
@@ -37205,7 +37194,7 @@
returnType: void
named @33
parameters
- optionalNamed x @40
+ optionalNamed default x @40
type: dynamic
constantInitializer
IntegerLiteral
@@ -38146,7 +38135,7 @@
parameters
requiredPositional p1 @37
type: int
- optionalNamed p2 @67
+ optionalNamed default p2 @67
type: int?
sinceSdkVersion: 2.15.0
returnType: void
@@ -38171,7 +38160,7 @@
parameters
requiredPositional p1 @37
type: int
- optionalPositional p2 @67
+ optionalPositional default p2 @67
type: int?
sinceSdkVersion: 2.15.0
returnType: void
@@ -40782,6 +40771,40 @@
''');
}
+ test_typeAlias_formalParameters_optional() async {
+ var library = await buildLibrary(r'''
+typedef A = void Function({int p});
+
+void f(A a) {}
+''');
+ configuration.withFunctionTypeParameters = true;
+ checkElementText(library, r'''
+library
+ definingUnit
+ typeAliases
+ A @8
+ aliasedType: void Function({int p})
+ parameters
+ optionalNamed p @-1
+ type: int
+ aliasedElement: GenericFunctionTypeElement
+ parameters
+ optionalNamed p @31
+ type: int
+ returnType: void
+ functions
+ f @42
+ parameters
+ requiredPositional a @46
+ type: void Function({int p})
+ alias: self::@typeAlias::A
+ parameters
+ optionalNamed p @-1
+ type: int
+ returnType: void
+''');
+ }
+
test_typeAlias_parameter_typeParameters() async {
var library = await buildLibrary(r'''
typedef void F(T a<T, U>(U u));
diff --git a/pkg/analyzer/test/src/summary/top_level_inference_test.dart b/pkg/analyzer/test/src/summary/top_level_inference_test.dart
index a381512..eb1986a 100644
--- a/pkg/analyzer/test/src/summary/top_level_inference_test.dart
+++ b/pkg/analyzer/test/src/summary/top_level_inference_test.dart
@@ -3671,7 +3671,7 @@
constructors
@25
parameters
- optionalPositional final this.f @33
+ optionalPositional default final this.f @33
type: int
constantInitializer
SimpleStringLiteral
@@ -5487,7 +5487,7 @@
parameters
requiredPositional a @55
type: int
- optionalNamed b @59
+ optionalNamed default b @59
type: dynamic
returnType: void
''');
@@ -5525,7 +5525,7 @@
parameters
requiredPositional a @55
type: int
- optionalPositional b @59
+ optionalPositional default b @59
type: dynamic
returnType: void
''');
@@ -5954,7 +5954,7 @@
parameters
requiredPositional a @25
type: int
- optionalNamed b @36
+ optionalNamed default b @36
type: double
returnType: String
class B @51
@@ -5967,7 +5967,7 @@
parameters
requiredPositional a @69
type: int
- optionalNamed b @73
+ optionalNamed default b @73
type: double
returnType: String
''');
@@ -5994,7 +5994,7 @@
parameters
requiredPositional a @25
type: int
- optionalPositional b @36
+ optionalPositional default b @36
type: double
returnType: String
class B @51
@@ -6007,7 +6007,7 @@
parameters
requiredPositional a @69
type: int
- optionalPositional b @73
+ optionalPositional default b @73
type: double
returnType: String
''');