Skip to content

Commit c41258e

Browse files
authored
started handling null correctly for setup methods in java (#155)
1 parent ed004de commit c41258e

File tree

8 files changed

+51
-36
lines changed

8 files changed

+51
-36
lines changed

packages/pigeon/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.1.0-experimental.11
2+
3+
* Fixed setting an api to null in Java.
4+
15
## 0.1.0-experimental.10
26

37
* Added support for void argument functions.

packages/pigeon/e2e_tests/test_objc/ios/Runner/dartle.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Autogenerated from Pigeon (v0.1.0-experimental.10), do not edit directly.
1+
// Autogenerated from Pigeon (v0.1.0-experimental.11), do not edit directly.
22
// See also: https://pub.dev/packages/pigeon
33
#import <Foundation/Foundation.h>
44
@protocol FlutterBinaryMessenger;

packages/pigeon/e2e_tests/test_objc/ios/Runner/dartle.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Autogenerated from Pigeon (v0.1.0-experimental.10), do not edit directly.
1+
// Autogenerated from Pigeon (v0.1.0-experimental.11), do not edit directly.
22
// See also: https://pub.dev/packages/pigeon
33
#import "dartle.h"
44
#import <Flutter/Flutter.h>

packages/pigeon/e2e_tests/test_objc/lib/dartle.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Autogenerated from Pigeon (v0.1.0-experimental.10), do not edit directly.
1+
// Autogenerated from Pigeon (v0.1.0-experimental.11), do not edit directly.
22
// See also: https://pub.dev/packages/pigeon
33
// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import
44
import 'dart:async';

packages/pigeon/lib/generator_tools.dart

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import 'dart:mirrors';
88
import 'ast.dart';
99

1010
/// The current version of pigeon.
11-
const String pigeonVersion = '0.1.0-experimental.10';
11+
const String pigeonVersion = '0.1.0-experimental.11';
1212

1313
/// Read all the content from [stdin] to a String.
1414
String readStdin() {
@@ -64,11 +64,15 @@ class Indent {
6464
/// Scoped increase of the ident level. For the execution of [func] the
6565
/// indentation will be incremented.
6666
void scoped(String begin, String end, Function func) {
67-
_sink.write(begin + newline);
67+
if (begin != null) {
68+
_sink.write(begin + newline);
69+
}
6870
inc();
6971
func();
7072
dec();
71-
_sink.write(str() + end + newline);
73+
if (end != null) {
74+
_sink.write(str() + end + newline);
75+
}
7276
}
7377

7478
/// Add [str] with indentation and a newline.

packages/pigeon/lib/java_generator.dart

Lines changed: 35 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -53,44 +53,50 @@ void _writeHostApi(Indent indent, Api api) {
5353
'new BasicMessageChannel<Object>(binaryMessenger, "$channelName", new StandardMessageCodec());');
5454
indent.dec();
5555
indent.dec();
56-
indent.write(
57-
'channel.setMessageHandler(new BasicMessageChannel.MessageHandler<Object>() ');
58-
indent.scoped('{', '});', () {
56+
indent.write('if (api != null) ');
57+
indent.scoped('{', '} else {', () {
5958
indent.write(
60-
'public void onMessage(Object message, BasicMessageChannel.Reply<Object> reply) ');
61-
indent.scoped('{', '}', () {
62-
final String argType = method.argType;
63-
final String returnType = method.returnType;
64-
String methodArgument;
65-
if (argType == 'void') {
66-
methodArgument = '';
67-
} else {
68-
indent.writeln(
69-
'$argType input = $argType.fromMap((HashMap)message);');
70-
methodArgument = 'input';
71-
}
72-
indent.writeln(
73-
'HashMap<String, HashMap> wrapped = new HashMap<String, HashMap>();');
74-
indent.write('try ');
59+
'channel.setMessageHandler(new BasicMessageChannel.MessageHandler<Object>() ');
60+
indent.scoped('{', '});', () {
61+
indent.write(
62+
'public void onMessage(Object message, BasicMessageChannel.Reply<Object> reply) ');
7563
indent.scoped('{', '}', () {
76-
final String call = 'api.${method.name}($methodArgument)';
77-
if (method.returnType == 'void') {
78-
indent.writeln('$call;');
79-
indent.writeln('wrapped.put("${Keys.result}", null);');
64+
final String argType = method.argType;
65+
final String returnType = method.returnType;
66+
String methodArgument;
67+
if (argType == 'void') {
68+
methodArgument = '';
8069
} else {
81-
indent.writeln('$returnType output = $call;');
8270
indent.writeln(
83-
'wrapped.put("${Keys.result}", output.toMap());');
71+
'$argType input = $argType.fromMap((HashMap)message);');
72+
methodArgument = 'input';
8473
}
85-
});
86-
indent.write('catch (Exception exception) ');
87-
indent.scoped('{', '}', () {
8874
indent.writeln(
89-
'wrapped.put("${Keys.error}", wrapError(exception));');
75+
'HashMap<String, HashMap> wrapped = new HashMap<String, HashMap>();');
76+
indent.write('try ');
77+
indent.scoped('{', '}', () {
78+
final String call = 'api.${method.name}($methodArgument)';
79+
if (method.returnType == 'void') {
80+
indent.writeln('$call;');
81+
indent.writeln('wrapped.put("${Keys.result}", null);');
82+
} else {
83+
indent.writeln('$returnType output = $call;');
84+
indent.writeln(
85+
'wrapped.put("${Keys.result}", output.toMap());');
86+
}
87+
});
88+
indent.write('catch (Exception exception) ');
89+
indent.scoped('{', '}', () {
90+
indent.writeln(
91+
'wrapped.put("${Keys.error}", wrapError(exception));');
92+
});
93+
indent.writeln('reply.reply(wrapped);');
9094
});
91-
indent.writeln('reply.reply(wrapped);');
9295
});
9396
});
97+
indent.scoped(null, '}', () {
98+
indent.writeln('channel.setMessageHandler(null);');
99+
});
94100
});
95101
}
96102
});

packages/pigeon/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: pigeon
2-
version: 0.1.0-experimental.10
2+
version: 0.1.0-experimental.11
33
description: Code generator tool to make communication between Flutter and the host platform type-safe and easier.
44
homepage: https://github.com/flutter/packages/tree/master/packages/pigeon
55
dependencies:

packages/pigeon/test/java_generator_test.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ void main() {
6969
final String code = sink.toString();
7070
expect(code, contains('public interface Api'));
7171
expect(code, matches('Output.*doSomething.*Input'));
72+
expect(code, contains('channel.setMessageHandler(null)'));
7273
});
7374

7475
test('all the simple datatypes header', () {

0 commit comments

Comments
 (0)