[pigeon] removed warnings from generated java code (#171)

This commit is contained in:
gaaclarke
2020-06-17 14:25:07 -07:00
committed by GitHub
parent f5f574e39d
commit 9d90dd3688
10 changed files with 289 additions and 59 deletions

View File

@ -1,3 +1,7 @@
## 0.1.2
* Removed static analysis warnings from generated Java code.
## 0.1.1
* Fixed issue where nested types didn't work if they weren't present in the Api.

View File

@ -0,0 +1,232 @@
// Autogenerated from Pigeon (v0.1.2), do not edit directly.
// See also: https://pub.dev/packages/pigeon
package dev.flutter.aaclarke.pigeon;
import io.flutter.plugin.common.BasicMessageChannel;
import io.flutter.plugin.common.BinaryMessenger;
import io.flutter.plugin.common.StandardMessageCodec;
import java.util.HashMap;
/** Generated class from Pigeon. */
@SuppressWarnings("unused")
public class Pigeon {
/** Generated class from Pigeon that represents data sent in messages. */
public static class SearchReply {
private String result;
public String getResult() {
return result;
}
public void setResult(String setterArg) {
this.result = setterArg;
}
private String error;
public String getError() {
return error;
}
public void setError(String setterArg) {
this.error = setterArg;
}
HashMap toMap() {
HashMap<String, Object> toMapResult = new HashMap<>();
toMapResult.put("result", result);
toMapResult.put("error", error);
return toMapResult;
}
static SearchReply fromMap(HashMap map) {
SearchReply fromMapResult = new SearchReply();
Object result = map.get("result");
fromMapResult.result = (String) result;
Object error = map.get("error");
fromMapResult.error = (String) error;
return fromMapResult;
}
}
/** Generated class from Pigeon that represents data sent in messages. */
public static class SearchRequest {
private String query;
public String getQuery() {
return query;
}
public void setQuery(String setterArg) {
this.query = setterArg;
}
private Long anInt;
public Long getAnInt() {
return anInt;
}
public void setAnInt(Long setterArg) {
this.anInt = setterArg;
}
private Boolean aBool;
public Boolean getABool() {
return aBool;
}
public void setABool(Boolean setterArg) {
this.aBool = setterArg;
}
HashMap toMap() {
HashMap<String, Object> toMapResult = new HashMap<>();
toMapResult.put("query", query);
toMapResult.put("anInt", anInt);
toMapResult.put("aBool", aBool);
return toMapResult;
}
static SearchRequest fromMap(HashMap map) {
SearchRequest fromMapResult = new SearchRequest();
Object query = map.get("query");
fromMapResult.query = (String) query;
Object anInt = map.get("anInt");
fromMapResult.anInt =
(anInt == null) ? null : ((anInt instanceof Integer) ? (Integer) anInt : (Long) anInt);
Object aBool = map.get("aBool");
fromMapResult.aBool = (Boolean) aBool;
return fromMapResult;
}
}
/** Generated class from Pigeon that represents data sent in messages. */
public static class Nested {
private SearchRequest request;
public SearchRequest getRequest() {
return request;
}
public void setRequest(SearchRequest setterArg) {
this.request = setterArg;
}
HashMap toMap() {
HashMap<String, Object> toMapResult = new HashMap<>();
toMapResult.put("request", request);
return toMapResult;
}
static Nested fromMap(HashMap map) {
Nested fromMapResult = new Nested();
Object request = map.get("request");
fromMapResult.request = (SearchRequest) request;
return fromMapResult;
}
}
/** Generated class from Pigeon that represents Flutter messages that can be called from Java. */
public static class FlutterSearchApi {
private final BinaryMessenger binaryMessenger;
public FlutterSearchApi(BinaryMessenger argBinaryMessenger) {
this.binaryMessenger = argBinaryMessenger;
}
public interface Reply<T> {
void reply(T reply);
}
public void search(SearchRequest argInput, Reply<SearchReply> callback) {
BasicMessageChannel<Object> channel =
new BasicMessageChannel<>(
binaryMessenger,
"dev.flutter.pigeon.FlutterSearchApi.search",
new StandardMessageCodec());
HashMap inputMap = argInput.toMap();
channel.send(
inputMap,
channelReply -> {
HashMap outputMap = (HashMap) channelReply;
@SuppressWarnings("ConstantConditions")
SearchReply output = SearchReply.fromMap(outputMap);
callback.reply(output);
});
}
}
/** Generated interface from Pigeon that represents a handler of messages from Flutter. */
public interface NestedApi {
SearchReply search(Nested arg);
/** Sets up an instance of `NestedApi` to handle messages through the `binaryMessenger` */
static void setup(BinaryMessenger binaryMessenger, NestedApi api) {
{
BasicMessageChannel<Object> channel =
new BasicMessageChannel<>(
binaryMessenger, "dev.flutter.pigeon.NestedApi.search", new StandardMessageCodec());
if (api != null) {
channel.setMessageHandler(
(message, reply) -> {
HashMap<String, HashMap> wrapped = new HashMap<>();
try {
@SuppressWarnings("ConstantConditions")
Nested input = Nested.fromMap((HashMap) message);
SearchReply output = api.search(input);
wrapped.put("result", output.toMap());
} catch (Exception exception) {
wrapped.put("error", wrapError(exception));
}
reply.reply(wrapped);
});
} else {
channel.setMessageHandler(null);
}
}
}
}
/** Generated interface from Pigeon that represents a handler of messages from Flutter. */
public interface Api {
SearchReply search(SearchRequest arg);
/** Sets up an instance of `Api` to handle messages through the `binaryMessenger` */
static void setup(BinaryMessenger binaryMessenger, Api api) {
{
BasicMessageChannel<Object> channel =
new BasicMessageChannel<>(
binaryMessenger, "dev.flutter.pigeon.Api.search", new StandardMessageCodec());
if (api != null) {
channel.setMessageHandler(
(message, reply) -> {
HashMap<String, HashMap> wrapped = new HashMap<>();
try {
@SuppressWarnings("ConstantConditions")
SearchRequest input = SearchRequest.fromMap((HashMap) message);
SearchReply output = api.search(input);
wrapped.put("result", output.toMap());
} catch (Exception exception) {
wrapped.put("error", wrapError(exception));
}
reply.reply(wrapped);
});
} else {
channel.setMessageHandler(null);
}
}
}
}
private static HashMap wrapError(Exception exception) {
HashMap<String, Object> errorMap = new HashMap<>();
errorMap.put("message", exception.toString());
errorMap.put("code", null);
errorMap.put("details", null);
return errorMap;
}
}

View File

@ -1,4 +1,4 @@
// Autogenerated from Pigeon (v0.1.0), do not edit directly.
// Autogenerated from Pigeon (v0.1.2), do not edit directly.
// See also: https://pub.dev/packages/pigeon
#import <Foundation/Foundation.h>
@protocol FlutterBinaryMessenger;

View File

@ -1,4 +1,4 @@
// Autogenerated from Pigeon (v0.1.0), do not edit directly.
// Autogenerated from Pigeon (v0.1.2), do not edit directly.
// See also: https://pub.dev/packages/pigeon
#import "dartle.h"
#import <Flutter/Flutter.h>

View File

@ -1,4 +1,4 @@
// Autogenerated from Pigeon (v0.1.0), do not edit directly.
// Autogenerated from Pigeon (v0.1.2), do not edit directly.
// See also: https://pub.dev/packages/pigeon
// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import
import 'dart:async';

View File

@ -8,7 +8,7 @@ import 'dart:mirrors';
import 'ast.dart';
/// The current version of pigeon.
const String pigeonVersion = '0.1.0';
const String pigeonVersion = '0.1.2';
/// Read all the content from [stdin] to a String.
String readStdin() {

View File

@ -40,7 +40,7 @@ void _writeHostApi(Indent indent, Api api) {
indent.writeln(
'/** Sets up an instance of `${api.name}` to handle messages through the `binaryMessenger` */');
indent.write(
'public static void setup(BinaryMessenger binaryMessenger, ${api.name} api) ');
'static void setup(BinaryMessenger binaryMessenger, ${api.name} api) ');
indent.scoped('{', '}', () {
for (Method method in api.methods) {
final String channelName = makeChannelName(api, method);
@ -50,48 +50,44 @@ void _writeHostApi(Indent indent, Api api) {
indent.inc();
indent.inc();
indent.writeln(
'new BasicMessageChannel<Object>(binaryMessenger, "$channelName", new StandardMessageCodec());');
'new BasicMessageChannel<>(binaryMessenger, "$channelName", new StandardMessageCodec());');
indent.dec();
indent.dec();
indent.write('if (api != null) ');
indent.scoped('{', '} else {', () {
indent.write(
'channel.setMessageHandler(new BasicMessageChannel.MessageHandler<Object>() ');
indent.write('channel.setMessageHandler((message, reply) -> ');
indent.scoped('{', '});', () {
indent.write(
'public void onMessage(Object message, BasicMessageChannel.Reply<Object> reply) ');
final String argType = method.argType;
final String returnType = method.returnType;
indent.writeln(
'HashMap<String, HashMap> wrapped = new HashMap<>();');
indent.write('try ');
indent.scoped('{', '}', () {
final String argType = method.argType;
final String returnType = method.returnType;
String methodArgument;
if (argType == 'void') {
methodArgument = '';
} else {
indent.writeln('@SuppressWarnings("ConstantConditions")');
indent.writeln(
'$argType input = $argType.fromMap((HashMap)message);');
methodArgument = 'input';
}
indent.writeln(
'HashMap<String, HashMap> wrapped = new HashMap<String, HashMap>();');
indent.write('try ');
indent.scoped('{', '}', () {
final String call = 'api.${method.name}($methodArgument)';
if (method.returnType == 'void') {
indent.writeln('$call;');
indent.writeln('wrapped.put("${Keys.result}", null);');
} else {
indent.writeln('$returnType output = $call;');
indent.writeln(
'wrapped.put("${Keys.result}", output.toMap());');
}
});
indent.write('catch (Exception exception) ');
indent.scoped('{', '}', () {
final String call = 'api.${method.name}($methodArgument)';
if (method.returnType == 'void') {
indent.writeln('$call;');
indent.writeln('wrapped.put("${Keys.result}", null);');
} else {
indent.writeln('$returnType output = $call;');
indent.writeln(
'wrapped.put("${Keys.error}", wrapError(exception));');
});
indent.writeln('reply.reply(wrapped);');
'wrapped.put("${Keys.result}", output.toMap());');
}
});
indent.write('catch (Exception exception) ');
indent.scoped('{', '}', () {
indent.writeln(
'wrapped.put("${Keys.error}", wrapError(exception));');
});
indent.writeln('reply.reply(wrapped);');
});
});
indent.scoped(null, '}', () {
@ -109,7 +105,7 @@ void _writeFlutterApi(Indent indent, Api api) {
'/** Generated class from Pigeon that represents Flutter messages that can be called from Java.*/');
indent.write('public static class ${api.name} ');
indent.scoped('{', '}', () {
indent.writeln('private BinaryMessenger binaryMessenger;');
indent.writeln('private final BinaryMessenger binaryMessenger;');
indent.write('public ${api.name}(BinaryMessenger argBinaryMessenger)');
indent.scoped('{', '}', () {
indent.writeln('this.binaryMessenger = argBinaryMessenger;');
@ -136,26 +132,23 @@ void _writeFlutterApi(Indent indent, Api api) {
indent.inc();
indent.inc();
indent.writeln(
'new BasicMessageChannel<Object>(binaryMessenger, "$channelName", new StandardMessageCodec());');
'new BasicMessageChannel<>(binaryMessenger, "$channelName", new StandardMessageCodec());');
indent.dec();
indent.dec();
if (func.argType != 'void') {
indent.writeln('HashMap inputMap = argInput.toMap();');
}
indent.write(
'channel.send($sendArgument, new BasicMessageChannel.Reply<Object>() ');
indent.write('channel.send($sendArgument, channelReply -> ');
indent.scoped('{', '});', () {
indent.write('public void reply(Object channelReply) ');
indent.scoped('{', '}', () {
if (func.returnType == 'void') {
indent.writeln('callback.reply(null);');
} else {
indent.writeln('HashMap outputMap = (HashMap)channelReply;');
indent.writeln(
'${func.returnType} output = ${func.returnType}.fromMap(outputMap);');
indent.writeln('callback.reply(output);');
}
});
if (func.returnType == 'void') {
indent.writeln('callback.reply(null);');
} else {
indent.writeln('HashMap outputMap = (HashMap)channelReply;');
indent.writeln('@SuppressWarnings("ConstantConditions")');
indent.writeln(
'${func.returnType} output = ${func.returnType}.fromMap(outputMap);');
indent.writeln('callback.reply(output);');
}
});
});
}
@ -178,14 +171,13 @@ String _javaTypeForDartType(String datatype) {
return _javaTypeForDartTypeMap[datatype];
}
String _mapGetter(Field field, List<Class> classes, String mapName) {
String _castObject(Field field, List<Class> classes, String varName) {
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';
return '($varName == null) ? null : (($varName instanceof Integer) ? (Integer)$varName : (${hostDatatype.datatype})$varName)';
} else {
return '(${hostDatatype.datatype})$result';
return '(${hostDatatype.datatype})$varName';
}
}
@ -200,16 +192,15 @@ void generateJava(JavaOptions options, Root root, StringSink sink) {
indent.writeln('package ${options.package};');
}
indent.addln('');
indent.writeln('import java.util.HashMap;');
indent.addln('');
indent.writeln('import io.flutter.plugin.common.BasicMessageChannel;');
indent.writeln('import io.flutter.plugin.common.BinaryMessenger;');
indent.writeln('import io.flutter.plugin.common.StandardMessageCodec;');
indent.writeln('import java.util.HashMap;');
indent.addln('');
assert(options.className != null);
indent.writeln('/** Generated class from Pigeon. */');
indent.writeln('@SuppressWarnings("unused")');
indent.write('public class ${options.className} ');
indent.scoped('{', '}', () {
for (Class klass in root.classes) {
@ -231,7 +222,7 @@ void generateJava(JavaOptions options, Root root, StringSink sink) {
indent.write('HashMap toMap() ');
indent.scoped('{', '}', () {
indent.writeln(
'HashMap<String, Object> toMapResult = new HashMap<String, Object>();');
'HashMap<String, Object> toMapResult = new HashMap<>();');
for (Field field in klass.fields) {
indent.writeln('toMapResult.put("${field.name}", ${field.name});');
}
@ -241,8 +232,9 @@ void generateJava(JavaOptions options, Root root, StringSink sink) {
indent.scoped('{', '}', () {
indent.writeln('${klass.name} fromMapResult = new ${klass.name}();');
for (Field field in klass.fields) {
indent.writeln('Object ${field.name} = map.get("${field.name}");');
indent.writeln(
'fromMapResult.${field.name} = ${_mapGetter(field, root.classes, 'map')};');
'fromMapResult.${field.name} = ${_castObject(field, root.classes, field.name)};');
}
indent.writeln('return fromMapResult;');
});
@ -259,7 +251,7 @@ void generateJava(JavaOptions options, Root root, StringSink sink) {
}
indent.format('''private static HashMap wrapError(Exception exception) {
\tHashMap<String, Object> errorMap = new HashMap<String, Object>();
\tHashMap<String, Object> errorMap = new HashMap<>();
\terrorMap.put("${Keys.errorMessage}", exception.toString());
\terrorMap.put("${Keys.errorCode}", null);
\terrorMap.put("${Keys.errorDetails}", null);

View File

@ -1,4 +1,4 @@
// Autogenerated from Pigeon (v0.1.0), do not edit directly.
// Autogenerated from Pigeon (v0.1.2), do not edit directly.
// See also: https://pub.dev/packages/pigeon
// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import
import 'dart:async';

View File

@ -1,5 +1,5 @@
name: pigeon
version: 0.1.1
version: 0.1.2
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:

View File

@ -74,11 +74,13 @@ popd
DARTLE_H="e2e_tests/test_objc/ios/Runner/dartle.h"
DARTLE_M="e2e_tests/test_objc/ios/Runner/dartle.m"
DARTLE_DART="e2e_tests/test_objc/lib/dartle.dart"
PIGEON_JAVA="e2e_tests/test_objc/android/app/src/main/java/io/flutter/plugins/Pigeon.java"
pub run pigeon \
--input pigeons/message.dart \
--dart_out $DARTLE_DART \
--objc_header_out $DARTLE_H \
--objc_source_out $DARTLE_M
--objc_source_out $DARTLE_M \
--java_out $PIGEON_JAVA
dartfmt -w $DARTLE_DART
pushd $PWD