compute method
Computes the changes for this producer using builder.
This method should not modify fixKind.
Implementation
@override
Future<void> compute(ChangeBuilder builder) async {
if (node is! ListLiteral) {
return;
}
if ((node as ListLiteral).elements.any(
(element) =>
!(element is InstanceCreationExpression &&
element.isComponentCreation),
)) {
return;
}
final eol = unitResult.content.endOfLine ?? builder.defaultEol;
final literalSrc = utils.getNodeText(node);
final newlineIdx = literalSrc.lastIndexOf(eol);
if (newlineIdx < 0 || newlineIdx == literalSrc.length - 1) {
return; // Lists need to be in multi-line format already.
}
final indentOld = utils.getLinePrefix(
node.offset + eol.length + newlineIdx,
);
final indentArg = '$indentOld${utils.oneIndent}';
final indentList = '$indentOld${utils.twoIndents}';
await builder.addDartFileEdit(file, (builder) {
builder.addReplacement(range.node(node), (builder) {
builder.write('[');
builder.write(eol);
builder.write(indentArg);
builder.addSimpleLinkedEdit('COMPONENT', 'component');
builder.write('(');
builder.write(eol);
builder.write(indentList);
// Linked editing not needed since arg is always a list.
builder.write('children: ');
builder.write(
utils.replaceSourceIndent(literalSrc, indentOld, indentList),
);
builder.write(',');
builder.write(eol);
builder.write(indentArg);
builder.write('),');
builder.write(eol);
builder.write(indentOld);
builder.write(']');
});
});
}