diff --git a/packages/pigeon/CHANGELOG.md b/packages/pigeon/CHANGELOG.md index f88b8b85a7c4..9709fc886dab 100644 --- a/packages/pigeon/CHANGELOG.md +++ b/packages/pigeon/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.1.0-experimental.5 + +* Fixed runtime exception in Android with values of ints less than 2^32. +* Incremented codegen version warning. + ## 0.1.0-experimental.4 * Fixed primitive types for Android Java. diff --git a/packages/pigeon/lib/generator_tools.dart b/packages/pigeon/lib/generator_tools.dart index d48f031fd41e..8251cfd6650d 100644 --- a/packages/pigeon/lib/generator_tools.dart +++ b/packages/pigeon/lib/generator_tools.dart @@ -7,7 +7,7 @@ import 'dart:io'; import 'ast.dart'; /// The current version of pigeon. -const String pigeonVersion = '0.1.0-experimental.3'; +const String pigeonVersion = '0.1.0-experimental.5'; /// Read all the content from [stdin] to a String. String readStdin() { diff --git a/packages/pigeon/lib/java_generator.dart b/packages/pigeon/lib/java_generator.dart index d0759644bbcb..785079239888 100644 --- a/packages/pigeon/lib/java_generator.dart +++ b/packages/pigeon/lib/java_generator.dart @@ -145,6 +145,17 @@ String _javaTypeForDartType(String datatype) { return _javaTypeForDartTypeMap[datatype]; } +String _mapGetter(Field field, List classes, String mapName) { + final HostDatatype hostDatatype = + getHostDatatype(field, classes, _javaTypeForDartType); + final String result = '$mapName.get("${field.name}")'; + if (field.dataType == 'int') { + return '($result instanceof Integer) ? (Integer)$result : (${hostDatatype.datatype})$result'; + } else { + return '(${hostDatatype.datatype})$result'; + } +} + /// Generates the ".java" file for the AST represented by [root] to [sink] with the /// provided [options]. void generateJava(JavaOptions options, Root root, StringSink sink) { @@ -197,10 +208,8 @@ void generateJava(JavaOptions options, Root root, StringSink sink) { indent.scoped('{', '}', () { indent.writeln('${klass.name} fromMapResult = new ${klass.name}();'); for (Field field in klass.fields) { - final HostDatatype hostDatatype = - getHostDatatype(field, root.classes, _javaTypeForDartType); indent.writeln( - 'fromMapResult.${field.name} = (${hostDatatype.datatype})map.get("${field.name}");'); + 'fromMapResult.${field.name} = ${_mapGetter(field, root.classes, 'map')};'); } indent.writeln('return fromMapResult;'); }); diff --git a/packages/pigeon/pubspec.yaml b/packages/pigeon/pubspec.yaml index 63cf186e7975..1ce025091fec 100644 --- a/packages/pigeon/pubspec.yaml +++ b/packages/pigeon/pubspec.yaml @@ -1,5 +1,5 @@ name: pigeon -version: 0.1.0-experimental.4 +version: 0.1.0-experimental.5 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: