[pigeon] added error for static fields (#392)

This commit is contained in:
gaaclarke
2021-06-29 09:45:56 -07:00
committed by GitHub
parent 68d6408e0c
commit 8388832a7a
3 changed files with 29 additions and 1 deletions

View File

@ -1,6 +1,7 @@
## NEXT
* [front-end] Added a more explicit error if generic fields are used.
* [front-end] Added a more explicit error for static fields.
## 0.3.0

View File

@ -683,7 +683,12 @@ class _RootBuilder extends dart_ast_visitor.RecursiveAstVisitor<Object?> {
Object? visitFieldDeclaration(dart_ast.FieldDeclaration node) {
if (_currentClass != null) {
final dart_ast.TypeAnnotation? type = node.fields.type;
if (type is dart_ast.NamedType) {
if (node.isStatic) {
_errors.add(Error(
message:
'Pigeon doesn\'t support static fields ("${node.toString()}"), consider using enums.',
lineNumber: _calculateLineNumber(source, node.offset)));
} else if (type is dart_ast.NamedType) {
_currentClass!.fields.add(Field(
name: node.fields.variables[0].name.name,
dataType: type.toString(),

View File

@ -416,4 +416,26 @@ void main() {
expect(parseResult.errors[0].message, contains('Generic fields'));
expect(parseResult.errors[0].lineNumber, isNotNull);
});
test('error with static field', () {
final Pigeon dartle = Pigeon.setup();
const String code = '''
class WithStaticField {
static int? x;
int? y;
}
@HostApi()
abstract class WithStaticFieldApi {
void doit(WithStaticField withTemplate);
}
''';
_withTempFile('compilationError.dart', (File file) {
file.writeAsStringSync(code);
final ParseResults parseResult = dartle.parseFile(file.path);
expect(parseResult.errors.length, equals(1));
expect(parseResult.errors[0].message, contains('static field'));
expect(parseResult.errors[0].lineNumber, isNotNull);
});
});
}