From 8388832a7a618aed0e02882c396830f5f8697b67 Mon Sep 17 00:00:00 2001 From: gaaclarke <30870216+gaaclarke@users.noreply.github.com> Date: Tue, 29 Jun 2021 09:45:56 -0700 Subject: [PATCH] [pigeon] added error for static fields (#392) --- packages/pigeon/CHANGELOG.md | 1 + packages/pigeon/lib/pigeon_lib.dart | 7 ++++++- packages/pigeon/test/pigeon_lib_test.dart | 22 ++++++++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/packages/pigeon/CHANGELOG.md b/packages/pigeon/CHANGELOG.md index 6ee537e228..ac7625e21f 100644 --- a/packages/pigeon/CHANGELOG.md +++ b/packages/pigeon/CHANGELOG.md @@ -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 diff --git a/packages/pigeon/lib/pigeon_lib.dart b/packages/pigeon/lib/pigeon_lib.dart index 2eddaf1948..b4dc9a18f3 100644 --- a/packages/pigeon/lib/pigeon_lib.dart +++ b/packages/pigeon/lib/pigeon_lib.dart @@ -683,7 +683,12 @@ class _RootBuilder extends dart_ast_visitor.RecursiveAstVisitor { 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(), diff --git a/packages/pigeon/test/pigeon_lib_test.dart b/packages/pigeon/test/pigeon_lib_test.dart index a2ca32c2f4..8a09b6b692 100644 --- a/packages/pigeon/test/pigeon_lib_test.dart +++ b/packages/pigeon/test/pigeon_lib_test.dart @@ -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); + }); + }); }