Skip to content

Commit 948b60f

Browse files
johnniwinthercommit-bot@chromium.org
authored andcommitted
[cfe] Add test for extension member parameters
Change-Id: I6ceb66bbef561b0c86e6f529e9d90a35dd82f628 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/109705 Reviewed-by: Dan Rubel <[email protected]>
1 parent 11755e5 commit 948b60f

File tree

3 files changed

+55
-15
lines changed

3 files changed

+55
-15
lines changed

pkg/front_end/test/extensions/data/instance_members.dart

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5+
// TODO(johnniwinther): Expand instance methods with parameter for `this`.
6+
57
class A1 {}
68

79
/*class: A2:
@@ -16,15 +18,24 @@ extension A2 on A1 {
1618
builder-name=method1,
1719
member-name=method1
1820
*/
19-
void method1() {}
21+
A1 method1() {
22+
// TODO(johnniwinther): Use `this` here instead.
23+
return null;
24+
}
2025

2126
/*member: A2.method2:
2227
builder-name=method2,
28+
builder-params=[o],
2329
builder-type-params=[T],
2430
member-name=method2,
31+
member-params=[o],
2532
member-type-params=[T]
2633
*/
27-
void method2<T>() {}
34+
A1 method2<T>(T o) {
35+
print(o);
36+
// TODO(johnniwinther): Use `this` here instead.
37+
return null;
38+
}
2839
}
2940

3041
class B1<T> {}
@@ -43,15 +54,24 @@ extension B2<T> on B1<T> {
4354
builder-name=method1,
4455
member-name=method1
4556
*/
46-
void method1() {}
57+
B2<T> method1() {
58+
// TODO(johnniwinther): Use `this` here instead.
59+
return null;
60+
}
4761

4862
/*member: B2.method2:
4963
builder-name=method2,
64+
builder-params=[o],
5065
builder-type-params=[S],
5166
member-name=method2,
67+
member-params=[o],
5268
member-type-params=[S]
5369
*/
54-
void method2<S>() {}
70+
B2<T> method2<S>(S o) {
71+
print(o);
72+
// TODO(johnniwinther): Use `this` here instead.
73+
return null;
74+
}
5575
}
5676

5777
main() {}

pkg/front_end/test/extensions/data/static_members.dart

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,21 @@ class A1 {}
1414
extension A2 on A1 {
1515
/*member: A2.method1:
1616
builder-name=method1,
17-
member-name=method1
17+
builder-params=[o],
18+
member-name=method1,
19+
member-params=[o]
1820
*/
19-
static void method1() {}
21+
static A1 method1(A1 o) => o;
2022

2123
/*member: A2.method2:
2224
builder-name=method2,
25+
builder-params=[o],
2326
builder-type-params=[T],
2427
member-name=method2,
28+
member-params=[o],
2529
member-type-params=[T]
2630
*/
27-
static void method2<T>() {}
31+
static T method2<T>(T o) => o;
2832
}
2933

3034
class B1<T> {}
@@ -41,17 +45,21 @@ class B1<T> {}
4145
extension B2<T> on B1<T> {
4246
/*member: B2.method1:
4347
builder-name=method1,
44-
member-name=method1
48+
builder-params=[o],
49+
member-name=method1,
50+
member-params=[o]
4551
*/
46-
static void method1() {}
52+
static B1 method1(B1 o) => o;
4753

4854
/*member: B2.method2:
4955
builder-name=method2,
56+
builder-params=[o],
5057
builder-type-params=[S],
5158
member-name=method2,
59+
member-params=[o],
5260
member-type-params=[S]
5361
*/
54-
static void method2<S>() {}
62+
static S method2<S>(S o) => o;
5563
}
5664

5765
main() {}

pkg/front_end/test/extensions/extensions_test.dart

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ class Tags {
6262
static const String builderSupertype = 'builder-supertype';
6363
static const String builderInterfaces = 'builder-interfaces';
6464
static const String builderOnTypes = 'builder-onTypes';
65+
static const String builderParameters = 'builder-params';
6566

6667
static const String clsName = 'cls-name';
6768
static const String clsTypeParameters = 'cls-type-params';
@@ -70,6 +71,7 @@ class Tags {
7071

7172
static const String memberName = 'member-name';
7273
static const String memberTypeParameters = 'member-type-params';
74+
static const String memberParameters = 'member-params';
7375
}
7476

7577
class ExtensionsDataExtractor extends CfeDataExtractor<Features> {
@@ -134,15 +136,25 @@ class ExtensionsDataExtractor extends CfeDataExtractor<Features> {
134136
MemberBuilder memberBuilder = lookupMemberBuilder(compilerResult, member);
135137
Features features = new Features();
136138
features[Tags.builderName] = memberBuilder.name;
137-
if (memberBuilder is ProcedureBuilder &&
138-
memberBuilder.typeVariables != null) {
139-
for (TypeVariableBuilder typeVariable in memberBuilder.typeVariables) {
140-
features.addElement(Tags.builderTypeParameters,
141-
typeVariableBuilderToText(typeVariable));
139+
if (memberBuilder is ProcedureBuilder) {
140+
if (memberBuilder.formals != null) {
141+
for (FormalParameterBuilder parameter in memberBuilder.formals) {
142+
features.addElement(Tags.builderParameters, parameter.name);
143+
}
144+
}
145+
if (memberBuilder.typeVariables != null) {
146+
for (TypeVariableBuilder typeVariable in memberBuilder.typeVariables) {
147+
features.addElement(Tags.builderTypeParameters,
148+
typeVariableBuilderToText(typeVariable));
149+
}
142150
}
143151
}
144152
features[Tags.memberName] = getMemberName(member);
145153
if (member.function != null) {
154+
for (VariableDeclaration parameter
155+
in member.function.positionalParameters) {
156+
features.addElement(Tags.memberParameters, parameter.name);
157+
}
146158
for (TypeParameter typeParameter in member.function.typeParameters) {
147159
features.addElement(
148160
Tags.memberTypeParameters, typeParameterToText(typeParameter));

0 commit comments

Comments
 (0)