From b8878964da47418beba581e27d49eaf00f62a1da Mon Sep 17 00:00:00 2001 From: Matej Drobnic Date: Mon, 5 Oct 2020 10:58:50 +0200 Subject: [PATCH 1/2] [pigeon] add null handling to FlutterApi.setup() Fixes https://github.com/flutter/flutter/issues/66994 --- packages/pigeon/lib/dart_generator.dart | 71 ++++++++++++++----------- 1 file changed, 40 insertions(+), 31 deletions(-) diff --git a/packages/pigeon/lib/dart_generator.dart b/packages/pigeon/lib/dart_generator.dart index e7ce4efcde84..c87dc2fd1931 100644 --- a/packages/pigeon/lib/dart_generator.dart +++ b/packages/pigeon/lib/dart_generator.dart @@ -88,42 +88,51 @@ void _writeFlutterApi(Indent indent, Api api, 'BasicMessageChannel(\'$channelName\', StandardMessageCodec());'); indent.dec(); indent.dec(); - final String messageHandlerSetter = + indent.write("if (api != null) "); + indent.scoped('{', '}', () { + final String messageHandlerSetter = isMockHandler ? 'setMockMessageHandler' : 'setMessageHandler'; - indent - .write('channel.$messageHandlerSetter((dynamic message) async '); - indent.scoped('{', '});', () { - final String argType = func.argType; - final String returnType = func.returnType; - final bool isAsync = func.isAsynchronous; - String call; - if (argType == 'void') { - call = 'api.${func.name}()'; - } else { - indent.writeln( - 'final Map mapMessage = message as Map;'); - indent.writeln( - 'final $argType input = $argType._fromMap(mapMessage);'); - call = 'api.${func.name}(input)'; - } - if (returnType == 'void') { - indent.writeln('$call;'); - if (isMockHandler) { - indent.writeln('return {};'); + indent + .write('channel.$messageHandlerSetter((dynamic message) async '); + indent.scoped('{', '});', () { + final String argType = func.argType; + final String returnType = func.returnType; + final bool isAsync = func.isAsynchronous; + String call; + if (argType == 'void') { + call = 'api.${func.name}()'; + } else { + indent.writeln( + 'final Map mapMessage = message as Map;'); + indent.writeln( + 'final $argType input = $argType._fromMap(mapMessage);'); + call = 'api.${func.name}(input)'; } - } else { - if (isAsync) { - indent.writeln('final $returnType output = await $call;'); + if (returnType == 'void') { + indent.writeln('$call;'); + if (isMockHandler) { + indent.writeln('return {};'); + } } else { - indent.writeln('final $returnType output = $call;'); + if (isAsync) { + indent.writeln('final $returnType output = await $call;'); + } else { + indent.writeln('final $returnType output = $call;'); + } + const String returnExpresion = 'output._toMap()'; + final String returnStatement = isMockHandler + ? 'return {\'${Keys.result}\': $returnExpresion};' + : 'return $returnExpresion;'; + indent.writeln(returnStatement); } - const String returnExpresion = 'output._toMap()'; - final String returnStatement = isMockHandler - ? 'return {\'${Keys.result}\': $returnExpresion};' - : 'return $returnExpresion;'; - indent.writeln(returnStatement); - } + }); }); + indent.write(" else "); + indent.scoped('{', '}', () { + final String messageHandlerSetter = + isMockHandler ? 'setMockMessageHandler' : 'setMessageHandler'; + indent.writeln('channel.$messageHandlerSetter(null);'); + }); }); } }); From a73e24ef461189c83a5328f978ae25ab8b1e0f53 Mon Sep 17 00:00:00 2001 From: Matej Drobnic Date: Mon, 5 Oct 2020 11:30:49 +0200 Subject: [PATCH 2/2] [pigeon] reformat dart_generator.dart --- packages/pigeon/lib/dart_generator.dart | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/pigeon/lib/dart_generator.dart b/packages/pigeon/lib/dart_generator.dart index c87dc2fd1931..881bde7dee6b 100644 --- a/packages/pigeon/lib/dart_generator.dart +++ b/packages/pigeon/lib/dart_generator.dart @@ -88,12 +88,12 @@ void _writeFlutterApi(Indent indent, Api api, 'BasicMessageChannel(\'$channelName\', StandardMessageCodec());'); indent.dec(); indent.dec(); - indent.write("if (api != null) "); + indent.write('if (api != null) '); indent.scoped('{', '}', () { final String messageHandlerSetter = - isMockHandler ? 'setMockMessageHandler' : 'setMessageHandler'; - indent - .write('channel.$messageHandlerSetter((dynamic message) async '); + isMockHandler ? 'setMockMessageHandler' : 'setMessageHandler'; + indent.write( + 'channel.$messageHandlerSetter((dynamic message) async '); indent.scoped('{', '});', () { final String argType = func.argType; final String returnType = func.returnType; @@ -125,14 +125,14 @@ void _writeFlutterApi(Indent indent, Api api, : 'return $returnExpresion;'; indent.writeln(returnStatement); } - }); + }); }); - indent.write(" else "); + indent.write(' else '); indent.scoped('{', '}', () { final String messageHandlerSetter = - isMockHandler ? 'setMockMessageHandler' : 'setMessageHandler'; + isMockHandler ? 'setMockMessageHandler' : 'setMessageHandler'; indent.writeln('channel.$messageHandlerSetter(null);'); - }); + }); }); } });