Support SetOrMapLiteral directly

This commit is contained in:
Simon Binder 2019-03-19 13:07:15 +01:00
parent 74ee36bc98
commit 0cfebf59dc
No known key found for this signature in database
GPG Key ID: B807FDF954BA00CF
1 changed files with 19 additions and 8 deletions

View File

@ -85,19 +85,31 @@ class TableParser extends ParserBase {
return null; return null;
} }
final expression = (body as ExpressionFunctionBody).expression; final expression = (body as ExpressionFunctionBody).expression;
// set expressions {x, y} are sometimes parsed as map literals whose values
// are an empty identifier {x: , y: }, but sometimes as proper set literal.
// this is probably due to backwards compatibility.
// todo should we support MapLiteral2 to support the experiments discussed there?
final parsedPrimaryKey = <SpecifiedColumn>{}; final parsedPrimaryKey = <SpecifiedColumn>{};
if (expression is MapLiteral) { // todo no longer support SetLiteral / MapLiteral when we can afford
// dropping support for older analyzer versions
if (expression is SetOrMapLiteral) {
for (var entry in expression.elements2) {
if (entry is Identifier) {
final column = columns.singleWhere(
(column) => column.dartGetterName == entry.name);
parsedPrimaryKey.add(column);
} else {
// Don't add an error, these features aren't on a stable dart release
// yet.
print('Unexpected entry in expression.elements2: $entry');
}
}
// ignore: deprecated_member_use
} else if (expression is MapLiteral) {
for (var entry in expression.entries) { for (var entry in expression.entries) {
final key = entry.key as Identifier; final key = entry.key as Identifier;
final column = final column =
columns.singleWhere((column) => column.dartGetterName == key.name); columns.singleWhere((column) => column.dartGetterName == key.name);
parsedPrimaryKey.add(column); parsedPrimaryKey.add(column);
} }
// ignore: deprecated_member_use
} else if (expression is SetLiteral) { } else if (expression is SetLiteral) {
for (var entry in expression.elements) { for (var entry in expression.elements) {
final column = columns.singleWhere( final column = columns.singleWhere(
@ -108,7 +120,6 @@ class TableParser extends ParserBase {
generator.errors.add(MoorError( generator.errors.add(MoorError(
affectedElement: primaryKeyGetter, affectedElement: primaryKeyGetter,
message: 'This must return a set literal!')); message: 'This must return a set literal!'));
return null;
} }
return parsedPrimaryKey; return parsedPrimaryKey;