mirror of https://github.com/AMT-Cheif/drift.git
Copy list in transformChildren
This commit is contained in:
parent
1de5479d60
commit
b6a2fcd603
|
@ -36,7 +36,7 @@ class ExplicitAliasTransformer extends Transformer<bool> {
|
|||
// select statements.
|
||||
e.withClause = transformNullableChild(e.withClause, e, arg);
|
||||
e.base = transformChild(e.base, e, arg);
|
||||
transformChildren(e.additional, e, false);
|
||||
e.additional = transformChildren(e.additional, e, false);
|
||||
return e;
|
||||
}
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ abstract class OrderByBase extends AstNode {}
|
|||
abstract class OrderingTermBase extends AstNode {}
|
||||
|
||||
class OrderBy extends AstNode implements OrderByBase {
|
||||
final List<OrderingTermBase> terms;
|
||||
List<OrderingTermBase> terms;
|
||||
|
||||
OrderBy({this.terms = const []});
|
||||
|
||||
|
@ -21,7 +21,7 @@ class OrderBy extends AstNode implements OrderByBase {
|
|||
|
||||
@override
|
||||
void transformChildren<A>(Transformer<A> transformer, A arg) {
|
||||
transformer.transformChildren(terms, this, arg);
|
||||
terms = transformer.transformChildren(terms, this, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
|
@ -8,7 +8,7 @@ import '../visitor.dart';
|
|||
class Returning extends AstNode {
|
||||
/// The `RETURNING` token as found in the source.
|
||||
Token? returning;
|
||||
final List<ResultColumn> columns;
|
||||
List<ResultColumn> columns;
|
||||
|
||||
Returning(this.columns);
|
||||
|
||||
|
@ -22,6 +22,6 @@ class Returning extends AstNode {
|
|||
|
||||
@override
|
||||
void transformChildren<A>(Transformer<A> transformer, A arg) {
|
||||
transformer.transformChildren(columns, this, arg);
|
||||
columns = transformer.transformChildren(columns, this, arg);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ import '../node.dart';
|
|||
import '../statements/create_index.dart' show IndexedColumn;
|
||||
|
||||
class UpsertClause extends AstNode {
|
||||
final List<UpsertClauseEntry> entries;
|
||||
List<UpsertClauseEntry> entries;
|
||||
|
||||
UpsertClause(this.entries);
|
||||
|
||||
|
@ -17,12 +17,12 @@ class UpsertClause extends AstNode {
|
|||
|
||||
@override
|
||||
void transformChildren<A>(Transformer<A> transformer, A arg) {
|
||||
transformer.transformChildren(entries, this, arg);
|
||||
entries = transformer.transformChildren(entries, this, arg);
|
||||
}
|
||||
}
|
||||
|
||||
class UpsertClauseEntry extends AstNode implements HasWhereClause {
|
||||
final List<IndexedColumn>? onColumns;
|
||||
List<IndexedColumn>? onColumns;
|
||||
@override
|
||||
Expression? where;
|
||||
|
||||
|
@ -37,7 +37,9 @@ class UpsertClauseEntry extends AstNode implements HasWhereClause {
|
|||
|
||||
@override
|
||||
void transformChildren<A>(Transformer<A> transformer, A arg) {
|
||||
transformer.transformChildren(onColumns!, this, arg);
|
||||
if (onColumns != null) {
|
||||
onColumns = transformer.transformChildren(onColumns!, this, arg);
|
||||
}
|
||||
where = transformer.transformNullableChild(where, this, arg);
|
||||
action = transformer.transformChild(action, this, arg);
|
||||
}
|
||||
|
@ -68,7 +70,7 @@ class DoNothing extends UpsertAction {
|
|||
}
|
||||
|
||||
class DoUpdate extends UpsertAction implements HasWhereClause {
|
||||
final List<SetComponent> set;
|
||||
List<SetComponent> set;
|
||||
@override
|
||||
Expression? where;
|
||||
|
||||
|
@ -81,7 +83,7 @@ class DoUpdate extends UpsertAction implements HasWhereClause {
|
|||
|
||||
@override
|
||||
void transformChildren<A>(Transformer<A> transformer, A arg) {
|
||||
transformer.transformChildren(set, this, arg);
|
||||
set = transformer.transformChildren(set, this, arg);
|
||||
where = transformer.transformNullableChild(where, this, arg);
|
||||
}
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ class WithClause extends AstNode {
|
|||
final bool recursive;
|
||||
Token? recursiveToken;
|
||||
|
||||
final List<CommonTableExpression> ctes;
|
||||
List<CommonTableExpression> ctes;
|
||||
|
||||
WithClause({required this.recursive, required this.ctes});
|
||||
|
||||
|
@ -17,7 +17,7 @@ class WithClause extends AstNode {
|
|||
|
||||
@override
|
||||
void transformChildren<A>(Transformer<A> transformer, A arg) {
|
||||
transformer.transformChildren(ctes, this, arg);
|
||||
ctes = transformer.transformChildren(ctes, this, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
|
@ -93,7 +93,7 @@ class SelectStatementAsSource extends TableOrSubquery implements Renamable {
|
|||
/// https://www.sqlite.org/syntax/join-clause.html
|
||||
class JoinClause extends Queryable {
|
||||
TableOrSubquery primary;
|
||||
final List<Join> joins;
|
||||
List<Join> joins;
|
||||
|
||||
JoinClause({required this.primary, required this.joins});
|
||||
|
||||
|
@ -105,7 +105,7 @@ class JoinClause extends Queryable {
|
|||
@override
|
||||
void transformChildren<A>(Transformer<A> transformer, A arg) {
|
||||
primary = transformer.transformChild(primary, this, arg);
|
||||
transformer.transformChildren(joins, this, arg);
|
||||
joins = transformer.transformChildren(joins, this, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
|
@ -5,7 +5,7 @@ part of '../ast.dart';
|
|||
/// In sqlite, this is also called a "row value".
|
||||
class Tuple extends Expression {
|
||||
/// The expressions appearing in this tuple.
|
||||
final List<Expression> expressions;
|
||||
List<Expression> expressions;
|
||||
|
||||
/// Whether this tuple is used as an expression, e.g. a [row value][r v].
|
||||
///
|
||||
|
@ -23,7 +23,7 @@ class Tuple extends Expression {
|
|||
|
||||
@override
|
||||
void transformChildren<A>(Transformer<A> transformer, A arg) {
|
||||
transformer.transformChildren(expressions, this, arg);
|
||||
expressions = transformer.transformChildren(expressions, this, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
|
@ -77,7 +77,7 @@ class NamedWindowDeclaration with Referencable {
|
|||
|
||||
class WindowDefinition extends AstNode {
|
||||
final String? baseWindowName;
|
||||
final List<Expression> partitionBy;
|
||||
List<Expression> partitionBy;
|
||||
OrderByBase? orderBy;
|
||||
FrameSpec frameSpec;
|
||||
|
||||
|
@ -94,7 +94,7 @@ class WindowDefinition extends AstNode {
|
|||
|
||||
@override
|
||||
void transformChildren<A>(Transformer<A> transformer, A arg) {
|
||||
transformer.transformChildren(partitionBy, this, arg);
|
||||
partitionBy = transformer.transformChildren(partitionBy, this, arg);
|
||||
orderBy = transformer.transformNullableChild(orderBy, this, arg);
|
||||
frameSpec = transformer.transformChild(frameSpec, this, arg);
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ part of '../ast.dart';
|
|||
|
||||
class CaseExpression extends Expression {
|
||||
Expression? base;
|
||||
final List<WhenComponent> whens;
|
||||
List<WhenComponent> whens;
|
||||
Expression? elseExpr;
|
||||
|
||||
CaseExpression({this.base, required this.whens, this.elseExpr});
|
||||
|
@ -15,7 +15,7 @@ class CaseExpression extends Expression {
|
|||
@override
|
||||
void transformChildren<A>(Transformer<A> transformer, A arg) {
|
||||
base = transformer.transformNullableChild(base, this, arg);
|
||||
transformer.transformChildren(whens, this, arg);
|
||||
whens = transformer.transformChildren(whens, this, arg);
|
||||
elseExpr = transformer.transformNullableChild(elseExpr, this, arg);
|
||||
}
|
||||
|
||||
|
|
|
@ -66,7 +66,7 @@ class StarFunctionParameter extends FunctionParameters {
|
|||
|
||||
class ExprFunctionParameters extends FunctionParameters {
|
||||
final bool distinct;
|
||||
final List<Expression> parameters;
|
||||
List<Expression> parameters;
|
||||
|
||||
ExprFunctionParameters({this.parameters = const [], this.distinct = false});
|
||||
|
||||
|
@ -77,7 +77,7 @@ class ExprFunctionParameters extends FunctionParameters {
|
|||
|
||||
@override
|
||||
void transformChildren<A>(Transformer<A> transformer, A arg) {
|
||||
transformer.transformChildren(parameters, this, arg);
|
||||
parameters = transformer.transformChildren(parameters, this, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
|
@ -11,7 +11,7 @@ import 'moor_file.dart';
|
|||
class DeclaredStatement extends Statement implements PartOfMoorFile {
|
||||
final DeclaredStatementIdentifier identifier;
|
||||
CrudStatement statement;
|
||||
final List<StatementParameter> parameters;
|
||||
List<StatementParameter> parameters;
|
||||
|
||||
/// The desired result class name, if set.
|
||||
final String? as;
|
||||
|
@ -34,7 +34,7 @@ class DeclaredStatement extends Statement implements PartOfMoorFile {
|
|||
@override
|
||||
void transformChildren<A>(Transformer<A> transformer, A arg) {
|
||||
statement = transformer.transformChild(statement, this, arg);
|
||||
transformer.transformChildren(parameters, this, arg);
|
||||
parameters = transformer.transformChildren(parameters, this, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
|
@ -12,7 +12,7 @@ abstract class PartOfMoorFile implements Statement {}
|
|||
/// A moor file consists of [ImportStatement], followed by ddl statements,
|
||||
/// followed by [DeclaredStatement]s.
|
||||
class MoorFile extends AstNode {
|
||||
final List<PartOfMoorFile> statements;
|
||||
List<PartOfMoorFile> statements;
|
||||
|
||||
MoorFile(this.statements);
|
||||
|
||||
|
@ -23,7 +23,7 @@ class MoorFile extends AstNode {
|
|||
|
||||
@override
|
||||
void transformChildren<A>(Transformer<A> transformer, A arg) {
|
||||
transformer.transformChildren(statements, this, arg);
|
||||
statements = transformer.transformChildren(statements, this, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
|
@ -4,7 +4,7 @@ part of '../ast.dart';
|
|||
class ColumnDefinition extends AstNode {
|
||||
final String columnName;
|
||||
final String? typeName;
|
||||
final List<ColumnConstraint> constraints;
|
||||
List<ColumnConstraint> constraints;
|
||||
|
||||
/// The tokens there were involved in defining the type of this column.
|
||||
List<Token>? typeNames;
|
||||
|
@ -22,7 +22,7 @@ class ColumnDefinition extends AstNode {
|
|||
|
||||
@override
|
||||
void transformChildren<A>(Transformer<A> transformer, A arg) {
|
||||
transformer.transformChildren(constraints, this, arg);
|
||||
constraints = transformer.transformChildren(constraints, this, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
|
@ -4,7 +4,7 @@ enum ReferenceAction { setNull, setDefault, cascade, restrict, noAction }
|
|||
|
||||
class ForeignKeyClause extends AstNode {
|
||||
TableReference foreignTable;
|
||||
final List<Reference> columnNames;
|
||||
List<Reference> columnNames;
|
||||
final ReferenceAction? onDelete;
|
||||
final ReferenceAction? onUpdate;
|
||||
DeferrableClause? deferrable;
|
||||
|
@ -25,7 +25,7 @@ class ForeignKeyClause extends AstNode {
|
|||
@override
|
||||
void transformChildren<A>(Transformer<A> transformer, A arg) {
|
||||
foreignTable = transformer.transformChild(foreignTable, this, arg);
|
||||
transformer.transformChildren(columnNames, this, arg);
|
||||
columnNames = transformer.transformChildren(columnNames, this, arg);
|
||||
deferrable = transformer.transformChild(deferrable!, this, arg);
|
||||
}
|
||||
|
||||
|
@ -84,7 +84,7 @@ abstract class TableConstraint extends AstNode {
|
|||
|
||||
class KeyClause extends TableConstraint {
|
||||
final bool isPrimaryKey;
|
||||
final List<IndexedColumn> columns;
|
||||
List<IndexedColumn> columns;
|
||||
final ConflictClause? onConflict;
|
||||
|
||||
bool get isUnique => !isPrimaryKey;
|
||||
|
@ -108,7 +108,7 @@ class KeyClause extends TableConstraint {
|
|||
|
||||
@override
|
||||
void transformChildren<A>(Transformer<A> transformer, A arg) {
|
||||
transformer.transformChildren(columns, this, arg);
|
||||
columns = transformer.transformChildren(columns, this, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -133,7 +133,7 @@ class CheckTable extends TableConstraint {
|
|||
}
|
||||
|
||||
class ForeignKeyTableConstraint extends TableConstraint {
|
||||
final List<Reference> columns;
|
||||
List<Reference> columns;
|
||||
ForeignKeyClause clause;
|
||||
|
||||
ForeignKeyTableConstraint(String? name,
|
||||
|
@ -145,7 +145,7 @@ class ForeignKeyTableConstraint extends TableConstraint {
|
|||
|
||||
@override
|
||||
void transformChildren<A>(Transformer<A> transformer, A arg) {
|
||||
transformer.transformChildren(columns, this, arg);
|
||||
columns = transformer.transformChildren(columns, this, arg);
|
||||
clause = transformer.transformChild(clause, this, arg);
|
||||
}
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ import 'statement.dart';
|
|||
class Block extends AstNode {
|
||||
Token? begin;
|
||||
Token? end;
|
||||
final List<CrudStatement> statements;
|
||||
List<CrudStatement> statements;
|
||||
|
||||
Block(this.statements);
|
||||
|
||||
|
@ -18,7 +18,7 @@ class Block extends AstNode {
|
|||
|
||||
@override
|
||||
void transformChildren<A>(Transformer<A> transformer, A arg) {
|
||||
transformer.transformChildren(statements, this, arg);
|
||||
statements = transformer.transformChildren(statements, this, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
|
@ -12,7 +12,7 @@ class CreateIndexStatement extends Statement
|
|||
IdentifierToken? nameToken;
|
||||
|
||||
TableReference on;
|
||||
final List<IndexedColumn> columns;
|
||||
List<IndexedColumn> columns;
|
||||
@override
|
||||
Expression? where;
|
||||
|
||||
|
@ -35,7 +35,7 @@ class CreateIndexStatement extends Statement
|
|||
@override
|
||||
void transformChildren<A>(Transformer<A> transformer, A arg) {
|
||||
on = transformer.transformChild(on, this, arg);
|
||||
transformer.transformChildren(columns, this, arg);
|
||||
columns = transformer.transformChildren(columns, this, arg);
|
||||
where = transformer.transformNullableChild(where, this, arg);
|
||||
}
|
||||
|
||||
|
|
|
@ -26,8 +26,8 @@ abstract class TableInducingStatement extends Statement
|
|||
/// A "CREATE TABLE" statement, see https://www.sqlite.org/lang_createtable.html
|
||||
/// for the individual components.
|
||||
class CreateTableStatement extends TableInducingStatement {
|
||||
final List<ColumnDefinition> columns;
|
||||
final List<TableConstraint> tableConstraints;
|
||||
List<ColumnDefinition> columns;
|
||||
List<TableConstraint> tableConstraints;
|
||||
final bool withoutRowId;
|
||||
|
||||
Token? openingBracket;
|
||||
|
@ -49,8 +49,9 @@ class CreateTableStatement extends TableInducingStatement {
|
|||
|
||||
@override
|
||||
void transformChildren<A>(Transformer<A> transformer, A arg) {
|
||||
transformer.transformChildren(columns, this, arg);
|
||||
transformer.transformChildren(tableConstraints, this, arg);
|
||||
columns = transformer.transformChildren(columns, this, arg);
|
||||
tableConstraints =
|
||||
transformer.transformChildren(tableConstraints, this, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
|
@ -109,7 +109,7 @@ class InsertTarget extends TriggerTarget {
|
|||
|
||||
class UpdateTarget extends TriggerTarget {
|
||||
Token? updateToken;
|
||||
final List<Reference> columnNames;
|
||||
List<Reference> columnNames;
|
||||
|
||||
UpdateTarget(this.columnNames);
|
||||
|
||||
|
@ -128,6 +128,6 @@ class UpdateTarget extends TriggerTarget {
|
|||
|
||||
@override
|
||||
void transformChildren<A>(Transformer<A> transformer, A arg) {
|
||||
transformer.transformChildren(columnNames, this, arg);
|
||||
columnNames = transformer.transformChildren(columnNames, this, arg);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ class InsertStatement extends CrudStatement
|
|||
final InsertMode mode;
|
||||
@override
|
||||
TableReference table;
|
||||
final List<Reference> targetColumns;
|
||||
List<Reference> targetColumns;
|
||||
InsertSource source;
|
||||
UpsertClause? upsert;
|
||||
|
||||
|
@ -59,7 +59,7 @@ class InsertStatement extends CrudStatement
|
|||
void transformChildren<A>(Transformer<A> transformer, A arg) {
|
||||
withClause = transformer.transformNullableChild(withClause, this, arg);
|
||||
table = transformer.transformChild(table, this, arg);
|
||||
transformer.transformChildren(targetColumns, this, arg);
|
||||
targetColumns = transformer.transformChildren(targetColumns, this, arg);
|
||||
returning = transformer.transformNullableChild(returning, this, arg);
|
||||
}
|
||||
|
||||
|
@ -93,7 +93,7 @@ abstract class InsertSource extends AstNode {
|
|||
|
||||
/// Uses a list of values for an insert statement (`VALUES (a, b, c)`).
|
||||
class ValuesSource extends InsertSource {
|
||||
final List<Tuple> values;
|
||||
List<Tuple> values;
|
||||
|
||||
ValuesSource(this.values);
|
||||
|
||||
|
@ -107,7 +107,7 @@ class ValuesSource extends InsertSource {
|
|||
|
||||
@override
|
||||
void transformChildren<A>(Transformer<A> transformer, A arg) {
|
||||
transformer.transformChildren(values, this, arg);
|
||||
values = transformer.transformChildren(values, this, arg);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ class SelectStatement extends BaseSelectStatement
|
|||
HasPrimarySource,
|
||||
HasFrom {
|
||||
final bool distinct;
|
||||
final List<ResultColumn> columns;
|
||||
List<ResultColumn> columns;
|
||||
@override
|
||||
Queryable? from;
|
||||
|
||||
|
@ -60,7 +60,7 @@ class SelectStatement extends BaseSelectStatement
|
|||
@override
|
||||
void transformChildren<A>(Transformer<A> transformer, A arg) {
|
||||
withClause = transformer.transformNullableChild(withClause, this, arg);
|
||||
transformer.transformChildren(columns, this, arg);
|
||||
columns = transformer.transformChildren(columns, this, arg);
|
||||
from = transformer.transformNullableChild(from, this, arg);
|
||||
where = transformer.transformNullableChild(where, this, arg);
|
||||
groupBy = transformer.transformNullableChild(groupBy, this, arg);
|
||||
|
@ -86,7 +86,7 @@ class SelectStatement extends BaseSelectStatement
|
|||
|
||||
class CompoundSelectStatement extends BaseSelectStatement {
|
||||
SelectStatementNoCompound base;
|
||||
final List<CompoundSelectPart> additional;
|
||||
List<CompoundSelectPart> additional;
|
||||
|
||||
// the grammar under https://www.sqlite.org/syntax/compound-select-stmt.html
|
||||
// defines an order by and limit clause on this node, but we parse them as
|
||||
|
@ -112,14 +112,14 @@ class CompoundSelectStatement extends BaseSelectStatement {
|
|||
void transformChildren<A>(Transformer<A> transformer, A arg) {
|
||||
withClause = transformer.transformNullableChild(withClause, this, arg);
|
||||
base = transformer.transformChild(base, this, arg);
|
||||
transformer.transformChildren(additional, this, arg);
|
||||
additional = transformer.transformChildren(additional, this, arg);
|
||||
}
|
||||
}
|
||||
|
||||
/// A select statement of the form `VALUES (expr-list), ..., (expr-list-N)`.
|
||||
class ValuesSelectStatement extends BaseSelectStatement
|
||||
implements SelectStatementNoCompound {
|
||||
final List<Tuple> values;
|
||||
List<Tuple> values;
|
||||
|
||||
ValuesSelectStatement(this.values, {WithClause? withClause})
|
||||
: super._(withClause);
|
||||
|
@ -131,7 +131,7 @@ class ValuesSelectStatement extends BaseSelectStatement
|
|||
|
||||
@override
|
||||
void transformChildren<A>(Transformer<A> transformer, A arg) {
|
||||
transformer.transformChildren(values, this, arg);
|
||||
values = transformer.transformChildren(values, this, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -186,7 +186,7 @@ class ExpressionResultColumn extends ResultColumn
|
|||
|
||||
class GroupBy extends AstNode {
|
||||
/// The list of expressions that form the partition
|
||||
final List<Expression> by;
|
||||
List<Expression> by;
|
||||
Expression? having;
|
||||
|
||||
GroupBy({required this.by, this.having});
|
||||
|
@ -198,7 +198,7 @@ class GroupBy extends AstNode {
|
|||
|
||||
@override
|
||||
void transformChildren<A>(Transformer<A> transformer, A arg) {
|
||||
transformer.transformChildren(by, this, arg);
|
||||
by = transformer.transformChildren(by, this, arg);
|
||||
having = transformer.transformNullableChild(having, this, arg);
|
||||
}
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ class UpdateStatement extends CrudStatement
|
|||
final FailureMode? or;
|
||||
@override
|
||||
TableReference table;
|
||||
final List<SetComponent> set;
|
||||
List<SetComponent> set;
|
||||
@override
|
||||
Queryable? from;
|
||||
@override
|
||||
|
@ -61,7 +61,7 @@ class UpdateStatement extends CrudStatement
|
|||
void transformChildren<A>(Transformer<A> transformer, A arg) {
|
||||
withClause = transformer.transformNullableChild(withClause, this, arg);
|
||||
table = transformer.transformChild(table, this, arg);
|
||||
transformer.transformChildren(set, this, arg);
|
||||
set = transformer.transformChildren(set, this, arg);
|
||||
from = transformer.transformNullableChild(from, this, arg);
|
||||
where = transformer.transformChild(where!, this, arg);
|
||||
returning = transformer.transformNullableChild(returning, this, arg);
|
||||
|
|
|
@ -641,19 +641,18 @@ extension TransformerUtils<A> on Transformer<A> {
|
|||
return transformed as T;
|
||||
}
|
||||
|
||||
void transformChildren<T extends AstNode?>(
|
||||
List<T> transformChildren<T extends AstNode>(
|
||||
List<T> children, AstNode parent, A arg) {
|
||||
final newChildren = <T>[];
|
||||
|
||||
for (final child in children) {
|
||||
// ignore: unnecessary_cast, it's a frontend bug in Dart 2.12
|
||||
final transformed = transform(child as AstNode, arg) as T?;
|
||||
if (transformed != null) {
|
||||
newChildren.add(transformed..parent = parent);
|
||||
}
|
||||
}
|
||||
|
||||
children
|
||||
..clear()
|
||||
..addAll(newChildren);
|
||||
return newChildren;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue