From 843874ba187d5df6126d60f17b231abf9f50bf4f Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Wed, 29 Jul 2020 16:18:05 -0700 Subject: [PATCH 1/2] [Pigeon] Added an error message if a valid datatype is attempted to be used directly as a return type or argument type. --- packages/pigeon/CHANGELOG.md | 5 +++++ packages/pigeon/lib/pigeon_lib.dart | 15 +++++++++++++++ packages/pigeon/pubspec.yaml | 2 +- packages/pigeon/test/pigeon_lib_test.dart | 23 +++++++++++++++++++++++ 4 files changed, 44 insertions(+), 1 deletion(-) diff --git a/packages/pigeon/CHANGELOG.md b/packages/pigeon/CHANGELOG.md index 403788f838e8..89a443ecd65f 100644 --- a/packages/pigeon/CHANGELOG.md +++ b/packages/pigeon/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.1.3 + +* Added error message if supported datatypes are used as arguments or return + types directly, without an enclosing class. + ## 0.1.2+1 * Updated the Readme.md. diff --git a/packages/pigeon/lib/pigeon_lib.dart b/packages/pigeon/lib/pigeon_lib.dart index 6207757594d8..b04d12d9d143 100644 --- a/packages/pigeon/lib/pigeon_lib.dart +++ b/packages/pigeon/lib/pigeon_lib.dart @@ -317,6 +317,21 @@ options: } } } + for (Api api in root.apis) { + for (Method method in api.methods) { + if (_validTypes.contains(method.argType)) { + result.add(Error( + message: + 'Unsupported argument type: "${method.argType}" in API: "${api.name}" method: "${method.name}')); + } + if (_validTypes.contains(method.returnType)) { + result.add(Error( + message: + 'Unsupported return type: "${method.returnType}" in API: "${api.name}" method: "${method.name}')); + } + } + } + return result; } diff --git a/packages/pigeon/pubspec.yaml b/packages/pigeon/pubspec.yaml index 97dbc7247586..616b1a5e5af5 100644 --- a/packages/pigeon/pubspec.yaml +++ b/packages/pigeon/pubspec.yaml @@ -1,5 +1,5 @@ name: pigeon -version: 0.1.2+1 +version: 0.1.3 description: Code generator tool to make communication between Flutter and the host platform type-safe and easier. homepage: https://github.com/flutter/packages/tree/master/packages/pigeon dependencies: diff --git a/packages/pigeon/test/pigeon_lib_test.dart b/packages/pigeon/test/pigeon_lib_test.dart index 2d3b44913d00..6665c901c2bc 100644 --- a/packages/pigeon/test/pigeon_lib_test.dart +++ b/packages/pigeon/test/pigeon_lib_test.dart @@ -66,6 +66,17 @@ abstract class NestorApi { Nestor getit(); } +@HostApi() +abstract class InvalidArgTypeApi { + void doit(bool value); +} + +@HostApi() +abstract class InvalidReturnTypeApi { + bool doit(); +} + + void main() { test('parse args - input', () { final PigeonOptions opts = @@ -215,4 +226,16 @@ void main() { expect(classNames.contains('Nestor'), true); expect(classNames.contains('OnlyVisibleFromNesting'), true); }); + + test('invalid datatype for argument', () { + final Pigeon pigeon = Pigeon.setup(); + final ParseResults results = pigeon.parse([InvalidArgTypeApi]); + expect(results.errors.length, 1); + }); + + test('invalid datatype for argument', () { + final Pigeon pigeon = Pigeon.setup(); + final ParseResults results = pigeon.parse([InvalidReturnTypeApi]); + expect(results.errors.length, 1); + }); } From b160fb1c2fd74021478de895406e9d13411b5193 Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Thu, 30 Jul 2020 16:07:00 -0700 Subject: [PATCH 2/2] ran formatter --- packages/pigeon/test/pigeon_lib_test.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/pigeon/test/pigeon_lib_test.dart b/packages/pigeon/test/pigeon_lib_test.dart index 6665c901c2bc..0059687d3c45 100644 --- a/packages/pigeon/test/pigeon_lib_test.dart +++ b/packages/pigeon/test/pigeon_lib_test.dart @@ -76,7 +76,6 @@ abstract class InvalidReturnTypeApi { bool doit(); } - void main() { test('parse args - input', () { final PigeonOptions opts =