diff --git a/packages/pigeon/CHANGELOG.md b/packages/pigeon/CHANGELOG.md
index 1df17cc..14ee437 100644
--- a/packages/pigeon/CHANGELOG.md
+++ b/packages/pigeon/CHANGELOG.md
@@ -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.
diff --git a/packages/pigeon/e2e_tests/test_objc/android/app/src/main/java/io/flutter/plugins/Pigeon.java b/packages/pigeon/e2e_tests/test_objc/android/app/src/main/java/io/flutter/plugins/Pigeon.java
new file mode 100644
index 0000000..a6962f7
--- /dev/null
+++ b/packages/pigeon/e2e_tests/test_objc/android/app/src/main/java/io/flutter/plugins/Pigeon.java
@@ -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;
+  }
+}
diff --git a/packages/pigeon/e2e_tests/test_objc/ios/Runner/dartle.h b/packages/pigeon/e2e_tests/test_objc/ios/Runner/dartle.h
index 8ef38d7..3844745 100644
--- a/packages/pigeon/e2e_tests/test_objc/ios/Runner/dartle.h
+++ b/packages/pigeon/e2e_tests/test_objc/ios/Runner/dartle.h
@@ -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;
diff --git a/packages/pigeon/e2e_tests/test_objc/ios/Runner/dartle.m b/packages/pigeon/e2e_tests/test_objc/ios/Runner/dartle.m
index 2865b26..7b52efa 100644
--- a/packages/pigeon/e2e_tests/test_objc/ios/Runner/dartle.m
+++ b/packages/pigeon/e2e_tests/test_objc/ios/Runner/dartle.m
@@ -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>
diff --git a/packages/pigeon/e2e_tests/test_objc/lib/dartle.dart b/packages/pigeon/e2e_tests/test_objc/lib/dartle.dart
index 5c76d82..9f0db48 100644
--- a/packages/pigeon/e2e_tests/test_objc/lib/dartle.dart
+++ b/packages/pigeon/e2e_tests/test_objc/lib/dartle.dart
@@ -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';
diff --git a/packages/pigeon/lib/generator_tools.dart b/packages/pigeon/lib/generator_tools.dart
index 18c8590..c65c2f2 100644
--- a/packages/pigeon/lib/generator_tools.dart
+++ b/packages/pigeon/lib/generator_tools.dart
@@ -8,7 +8,7 @@
 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() {
diff --git a/packages/pigeon/lib/java_generator.dart b/packages/pigeon/lib/java_generator.dart
index 0015bf3..176dc2d 100644
--- a/packages/pigeon/lib/java_generator.dart
+++ b/packages/pigeon/lib/java_generator.dart
@@ -40,7 +40,7 @@
     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 @@
           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 @@
       '/** 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 @@
         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 @@
   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 @@
     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 @@
         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 @@
         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 @@
     }
 
     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);
diff --git a/packages/pigeon/mock_handler_tester/test/message.dart b/packages/pigeon/mock_handler_tester/test/message.dart
index 5c76d82..9f0db48 100644
--- a/packages/pigeon/mock_handler_tester/test/message.dart
+++ b/packages/pigeon/mock_handler_tester/test/message.dart
@@ -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';
diff --git a/packages/pigeon/pubspec.yaml b/packages/pigeon/pubspec.yaml
index 537ac2f..b78d923 100644
--- a/packages/pigeon/pubspec.yaml
+++ b/packages/pigeon/pubspec.yaml
@@ -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:
diff --git a/packages/pigeon/run_tests.sh b/packages/pigeon/run_tests.sh
index 9a81105..3bfbaf7 100755
--- a/packages/pigeon/run_tests.sh
+++ b/packages/pigeon/run_tests.sh
@@ -74,11 +74,13 @@
 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
