Skip to content

Commit b166e15

Browse files
FMorschelCommit Queue
authored andcommitted
[DAS] Fixes add extension override fix without target
Fixes: #60561 Change-Id: I146c61644023fe9abf7c312aee25001b9ee74710 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/423120 Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Samuel Rawlins <[email protected]> Reviewed-by: Samuel Rawlins <[email protected]> Auto-Submit: Felipe Morschel <[email protected]>
1 parent ff74ea2 commit b166e15

File tree

2 files changed

+52
-7
lines changed

2 files changed

+52
-7
lines changed

pkg/analysis_server/lib/src/services/correction/dart/add_extension_override.dart

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,7 @@ class AddExtensionOverride extends MultiCorrectionProducer {
2323
target = parent.target;
2424
} else if (parent is PropertyAccess) {
2525
target = parent.target;
26-
} else {
27-
return const [];
2826
}
29-
if (target == null) return const [];
3027
var dartFixContext = context.dartFixContext;
3128
if (dartFixContext == null) return const [];
3229

@@ -51,7 +48,7 @@ class AddExtensionOverride extends MultiCorrectionProducer {
5148
/// the [AddExtensionOverride] producer.
5249
class _AddOverride extends ResolvedCorrectionProducer {
5350
/// The expression around which to add the override.
54-
final Expression _expression;
51+
final Expression? _expression;
5552

5653
/// The extension name to be inserted.
5754
final String _name;
@@ -72,15 +69,23 @@ class _AddOverride extends ResolvedCorrectionProducer {
7269
@override
7370
Future<void> compute(ChangeBuilder builder) async {
7471
var needsParentheses = _expression is! ParenthesizedExpression;
72+
var offset = _expression?.offset ?? node.offset;
73+
var endOffset = _expression?.end ?? node.offset;
7574
await builder.addDartFileEdit(file, (builder) {
76-
builder.addInsertion(_expression.offset, (builder) {
75+
builder.addInsertion(offset, (builder) {
7776
builder.write(_name);
7877
if (needsParentheses) {
7978
builder.write('(');
8079
}
80+
if (_expression == null) {
81+
builder.write('this');
82+
}
83+
if (offset == endOffset && needsParentheses) {
84+
builder.write(').');
85+
}
8186
});
82-
if (needsParentheses) {
83-
builder.addSimpleInsertion(_expression.end, ')');
87+
if (needsParentheses && offset != endOffset) {
88+
builder.addSimpleInsertion(endOffset, ')');
8489
}
8590
});
8691
}

pkg/analysis_server/test/src/services/correction/fix/add_extension_override_test.dart

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,46 @@ f() {
118118
);
119119
}
120120

121+
Future<void> test_noTarget() async {
122+
await resolveTestCode('''
123+
abstract class A {
124+
void m() {
125+
value;
126+
}
127+
}
128+
129+
extension E on A {
130+
int value() => 0;
131+
}
132+
133+
extension E2 on A {
134+
int get value => 0;
135+
}
136+
''');
137+
await assertHasFix(
138+
'''
139+
abstract class A {
140+
void m() {
141+
E2(this).value;
142+
}
143+
}
144+
145+
extension E on A {
146+
int value() => 0;
147+
}
148+
149+
extension E2 on A {
150+
int get value => 0;
151+
}
152+
''',
153+
matchFixMessage: "Add an extension override for 'E2'",
154+
errorFilter:
155+
(error) =>
156+
error.errorCode ==
157+
CompileTimeErrorCode.AMBIGUOUS_EXTENSION_MEMBER_ACCESS_TWO,
158+
);
159+
}
160+
121161
Future<void> test_parentheses() async {
122162
await resolveTestCode('''
123163
extension E on int {

0 commit comments

Comments
 (0)