mirror of https://github.com/AMT-Cheif/drift.git
Allow referencing enum value for default
This commit is contained in:
parent
0e395bbef3
commit
bdfa8124fe
|
@ -1,4 +1,5 @@
|
||||||
import 'package:analyzer/dart/ast/ast.dart' as dart;
|
import 'package:analyzer/dart/ast/ast.dart' as dart;
|
||||||
|
import 'package:analyzer/dart/element/element.dart';
|
||||||
import 'package:collection/collection.dart';
|
import 'package:collection/collection.dart';
|
||||||
import 'package:drift/drift.dart' show DriftSqlType;
|
import 'package:drift/drift.dart' show DriftSqlType;
|
||||||
import 'package:drift_dev/src/analysis/driver/driver.dart';
|
import 'package:drift_dev/src/analysis/driver/driver.dart';
|
||||||
|
@ -141,6 +142,35 @@ class DriftTableResolver extends LocalElementResolver<DiscoveredDriftTable> {
|
||||||
} else if (constraint is GeneratedAs) {
|
} else if (constraint is GeneratedAs) {
|
||||||
constraints.add(ColumnGeneratedAs.fromParser(constraint));
|
constraints.add(ColumnGeneratedAs.fromParser(constraint));
|
||||||
} else if (constraint is Default) {
|
} else if (constraint is Default) {
|
||||||
|
final element = converter?.dartType.element;
|
||||||
|
if (element is EnumElement) {
|
||||||
|
final expression = constraint.expression;
|
||||||
|
if (type == DriftSqlType.int) {
|
||||||
|
if (expression is NumericLiteral) {
|
||||||
|
final values = element
|
||||||
|
.getField('values')
|
||||||
|
?.computeConstantValue()
|
||||||
|
?.toListValue() ??
|
||||||
|
const [];
|
||||||
|
if (!expression.isInt ||
|
||||||
|
expression.value < 0 ||
|
||||||
|
expression.value > values.length) {
|
||||||
|
reportError(DriftAnalysisError.inDriftFile(constraint,
|
||||||
|
'${expression.value} is not a valid index value for ${element.name}.'));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (expression is StringLiteral &&
|
||||||
|
element.getField(expression.value)?.enclosingElement !=
|
||||||
|
element) {
|
||||||
|
reportError(DriftAnalysisError.inDriftFile(constraint,
|
||||||
|
'${expression.value} is not a valid enum value for ${element.name}.'));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
defaultArgument = AnnotatedDartCode.build((b) => b
|
defaultArgument = AnnotatedDartCode.build((b) => b
|
||||||
..addText('const ')
|
..addText('const ')
|
||||||
..addSymbol('CustomExpression', AnnotatedDartCode.drift)
|
..addSymbol('CustomExpression', AnnotatedDartCode.drift)
|
||||||
|
|
Loading…
Reference in New Issue