Skip to content

Commit 1e04ff8

Browse files
scheglovcommit-bot@chromium.org
authored andcommitted
Mutate Aling(...) and Padding(...) into Container().
[email protected] Change-Id: I5d15b93f3262cafe6915c5681c4baede87e7699a Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/109940 Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent dbeceb1 commit 1e04ff8

File tree

2 files changed

+132
-16
lines changed

2 files changed

+132
-16
lines changed

pkg/analysis_server/lib/src/services/flutter/property.dart

Lines changed: 65 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -243,22 +243,71 @@ class PropertyDescription {
243243
String parameterName,
244244
void writeArgumentValue(DartEditBuilder builder),
245245
) {
246-
builder.addInsertion(
247-
virtualContainer.widgetCreation.offset,
248-
(builder) {
249-
builder.writeReference(virtualContainer.containerElement);
250-
builder.write('(');
251-
252-
builder.write(parameterName);
253-
builder.write(': ');
254-
writeArgumentValue(builder);
255-
builder.write(', ');
256-
// TODO(scheglov) move parent creation attribute, sorted
257-
258-
builder.write('child: ');
259-
},
260-
);
261-
builder.addSimpleInsertion(virtualContainer.widgetCreation.end, ',)');
246+
if (virtualContainer._parentCreation != null) {
247+
// `new Padding(...)` -> `Container(...)`
248+
builder.addReplacement(
249+
range.startEnd(
250+
virtualContainer._parentCreation,
251+
virtualContainer._parentCreation.constructorName,
252+
),
253+
(builder) {
254+
builder.writeReference(virtualContainer.containerElement);
255+
},
256+
);
257+
258+
var existingArgument = virtualContainer._parentArgumentToMove;
259+
var existingName = existingArgument.name.label.name;
260+
261+
int parameterOffset;
262+
var leadingComma = false;
263+
var trailingComma = false;
264+
if (existingName.compareTo(parameterName) > 0) {
265+
// `Container(padding: ..., child: ...)`
266+
// ->
267+
// `Container(alignment: ..., padding: ..., child: ...)`
268+
parameterOffset = existingArgument.offset;
269+
trailingComma = true;
270+
} else {
271+
// `Container(alignment: ..., child: ...)`
272+
// ->
273+
// `Container(alignment: ..., padding: ..., child: ...)`
274+
parameterOffset = existingArgument.end;
275+
leadingComma = true;
276+
}
277+
278+
builder.addInsertion(
279+
parameterOffset,
280+
(builder) {
281+
if (leadingComma) {
282+
builder.write(', ');
283+
}
284+
285+
builder.write(parameterName);
286+
builder.write(': ');
287+
writeArgumentValue(builder);
288+
289+
if (trailingComma) {
290+
builder.write(', ');
291+
}
292+
},
293+
);
294+
} else {
295+
builder.addInsertion(
296+
virtualContainer.widgetCreation.offset,
297+
(builder) {
298+
builder.writeReference(virtualContainer.containerElement);
299+
builder.write('(');
300+
301+
builder.write(parameterName);
302+
builder.write(': ');
303+
writeArgumentValue(builder);
304+
builder.write(', ');
305+
306+
builder.write('child: ');
307+
},
308+
);
309+
builder.addSimpleInsertion(virtualContainer.widgetCreation.end, ',)');
310+
}
262311
}
263312

264313
FunctionBody _enclosingFunctionBody() {

pkg/analysis_server/test/src/services/flutter/container_properties_test.dart

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,39 @@ void main() {
347347
''');
348348
}
349349

350+
test_write_hasPadding_add() async {
351+
await resolveTestUnit('''
352+
import 'package:flutter/material.dart';
353+
354+
void main() {
355+
Padding(
356+
padding: EdgeInsets.only(left: 1, right: 3),
357+
child: Text(''),
358+
);
359+
}
360+
''');
361+
var alignmentProperty = await _alignmentProperty('Text(');
362+
363+
var result = await descriptions.setPropertyValue(
364+
alignmentProperty.id,
365+
protocol.FlutterWidgetPropertyValue(
366+
enumValue: _alignmentValue('bottomLeft'),
367+
),
368+
);
369+
370+
assertExpectedChange(result, r'''
371+
import 'package:flutter/material.dart';
372+
373+
void main() {
374+
Container(
375+
alignment: Alignment.bottomLeft,
376+
padding: EdgeInsets.only(left: 1, right: 3),
377+
child: Text(''),
378+
);
379+
}
380+
''');
381+
}
382+
350383
test_write_noContainer_add() async {
351384
await resolveTestUnit('''
352385
import 'package:flutter/material.dart';
@@ -778,6 +811,40 @@ void main() {
778811
''');
779812
}
780813

814+
test_write_hasAlign_add_only() async {
815+
await resolveTestUnit('''
816+
import 'package:flutter/material.dart';
817+
818+
void main() {
819+
Align(
820+
alignment: Alignment.centerRight,
821+
child: Text(''),
822+
);
823+
}
824+
''');
825+
var paddingProperty = await _paddingProperty('Text(');
826+
var leftProperty = getNestedProperty(paddingProperty, 'left');
827+
828+
var result = await descriptions.setPropertyValue(
829+
leftProperty.id,
830+
protocol.FlutterWidgetPropertyValue(
831+
doubleValue: 1,
832+
),
833+
);
834+
835+
assertExpectedChange(result, r'''
836+
import 'package:flutter/material.dart';
837+
838+
void main() {
839+
Container(
840+
alignment: Alignment.centerRight,
841+
padding: EdgeInsets.only(left: 1),
842+
child: Text(''),
843+
);
844+
}
845+
''');
846+
}
847+
781848
test_write_hasContainer_add_only() async {
782849
await resolveTestUnit('''
783850
import 'package:flutter/material.dart';

0 commit comments

Comments
 (0)