Un-ignores all core tests gen files (#2965)

diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/.gitignore b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/.gitignore
index 082790e..47fe72c 100644
--- a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/.gitignore
+++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/.gitignore
@@ -3,3 +3,4 @@
 # such as a flag to suppress version stamp generation.
 *.java
 !AlternateLanguageTestPlugin.java
+!CoreTests.java
\ No newline at end of file
diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java
new file mode 100644
index 0000000..9c02562
--- /dev/null
+++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java
@@ -0,0 +1,1605 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// Autogenerated from Pigeon (v4.2.12), do not edit directly.
+// See also: https://pub.dev/packages/pigeon
+
+package com.example.alternate_language_test_plugin;
+
+import android.util.Log;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import io.flutter.plugin.common.BasicMessageChannel;
+import io.flutter.plugin.common.BinaryMessenger;
+import io.flutter.plugin.common.MessageCodec;
+import io.flutter.plugin.common.StandardMessageCodec;
+import java.io.ByteArrayOutputStream;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+/** Generated class from Pigeon. */
+@SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression"})
+public class CoreTests {
+
+  public enum AnEnum {
+    ONE(0),
+    TWO(1),
+    THREE(2);
+
+    private final int index;
+
+    private AnEnum(final int index) {
+      this.index = index;
+    }
+  }
+
+  /** Generated class from Pigeon that represents data sent in messages. */
+  public static class AllTypes {
+    private @NonNull Boolean aBool;
+
+    public @NonNull Boolean getABool() {
+      return aBool;
+    }
+
+    public void setABool(@NonNull Boolean setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"aBool\" is null.");
+      }
+      this.aBool = setterArg;
+    }
+
+    private @NonNull Long anInt;
+
+    public @NonNull Long getAnInt() {
+      return anInt;
+    }
+
+    public void setAnInt(@NonNull Long setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"anInt\" is null.");
+      }
+      this.anInt = setterArg;
+    }
+
+    private @NonNull Double aDouble;
+
+    public @NonNull Double getADouble() {
+      return aDouble;
+    }
+
+    public void setADouble(@NonNull Double setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"aDouble\" is null.");
+      }
+      this.aDouble = setterArg;
+    }
+
+    private @NonNull String aString;
+
+    public @NonNull String getAString() {
+      return aString;
+    }
+
+    public void setAString(@NonNull String setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"aString\" is null.");
+      }
+      this.aString = setterArg;
+    }
+
+    private @NonNull byte[] aByteArray;
+
+    public @NonNull byte[] getAByteArray() {
+      return aByteArray;
+    }
+
+    public void setAByteArray(@NonNull byte[] setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"aByteArray\" is null.");
+      }
+      this.aByteArray = setterArg;
+    }
+
+    private @NonNull int[] a4ByteArray;
+
+    public @NonNull int[] getA4ByteArray() {
+      return a4ByteArray;
+    }
+
+    public void setA4ByteArray(@NonNull int[] setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"a4ByteArray\" is null.");
+      }
+      this.a4ByteArray = setterArg;
+    }
+
+    private @NonNull long[] a8ByteArray;
+
+    public @NonNull long[] getA8ByteArray() {
+      return a8ByteArray;
+    }
+
+    public void setA8ByteArray(@NonNull long[] setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"a8ByteArray\" is null.");
+      }
+      this.a8ByteArray = setterArg;
+    }
+
+    private @NonNull double[] aFloatArray;
+
+    public @NonNull double[] getAFloatArray() {
+      return aFloatArray;
+    }
+
+    public void setAFloatArray(@NonNull double[] setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"aFloatArray\" is null.");
+      }
+      this.aFloatArray = setterArg;
+    }
+
+    private @NonNull List<Object> aList;
+
+    public @NonNull List<Object> getAList() {
+      return aList;
+    }
+
+    public void setAList(@NonNull List<Object> setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"aList\" is null.");
+      }
+      this.aList = setterArg;
+    }
+
+    private @NonNull Map<Object, Object> aMap;
+
+    public @NonNull Map<Object, Object> getAMap() {
+      return aMap;
+    }
+
+    public void setAMap(@NonNull Map<Object, Object> setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"aMap\" is null.");
+      }
+      this.aMap = setterArg;
+    }
+
+    private @NonNull AnEnum anEnum;
+
+    public @NonNull AnEnum getAnEnum() {
+      return anEnum;
+    }
+
+    public void setAnEnum(@NonNull AnEnum setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"anEnum\" is null.");
+      }
+      this.anEnum = setterArg;
+    }
+
+    /** Constructor is private to enforce null safety; use Builder. */
+    private AllTypes() {}
+
+    public static final class Builder {
+      private @Nullable Boolean aBool;
+
+      public @NonNull Builder setABool(@NonNull Boolean setterArg) {
+        this.aBool = setterArg;
+        return this;
+      }
+
+      private @Nullable Long anInt;
+
+      public @NonNull Builder setAnInt(@NonNull Long setterArg) {
+        this.anInt = setterArg;
+        return this;
+      }
+
+      private @Nullable Double aDouble;
+
+      public @NonNull Builder setADouble(@NonNull Double setterArg) {
+        this.aDouble = setterArg;
+        return this;
+      }
+
+      private @Nullable String aString;
+
+      public @NonNull Builder setAString(@NonNull String setterArg) {
+        this.aString = setterArg;
+        return this;
+      }
+
+      private @Nullable byte[] aByteArray;
+
+      public @NonNull Builder setAByteArray(@NonNull byte[] setterArg) {
+        this.aByteArray = setterArg;
+        return this;
+      }
+
+      private @Nullable int[] a4ByteArray;
+
+      public @NonNull Builder setA4ByteArray(@NonNull int[] setterArg) {
+        this.a4ByteArray = setterArg;
+        return this;
+      }
+
+      private @Nullable long[] a8ByteArray;
+
+      public @NonNull Builder setA8ByteArray(@NonNull long[] setterArg) {
+        this.a8ByteArray = setterArg;
+        return this;
+      }
+
+      private @Nullable double[] aFloatArray;
+
+      public @NonNull Builder setAFloatArray(@NonNull double[] setterArg) {
+        this.aFloatArray = setterArg;
+        return this;
+      }
+
+      private @Nullable List<Object> aList;
+
+      public @NonNull Builder setAList(@NonNull List<Object> setterArg) {
+        this.aList = setterArg;
+        return this;
+      }
+
+      private @Nullable Map<Object, Object> aMap;
+
+      public @NonNull Builder setAMap(@NonNull Map<Object, Object> setterArg) {
+        this.aMap = setterArg;
+        return this;
+      }
+
+      private @Nullable AnEnum anEnum;
+
+      public @NonNull Builder setAnEnum(@NonNull AnEnum setterArg) {
+        this.anEnum = setterArg;
+        return this;
+      }
+
+      public @NonNull AllTypes build() {
+        AllTypes pigeonReturn = new AllTypes();
+        pigeonReturn.setABool(aBool);
+        pigeonReturn.setAnInt(anInt);
+        pigeonReturn.setADouble(aDouble);
+        pigeonReturn.setAString(aString);
+        pigeonReturn.setAByteArray(aByteArray);
+        pigeonReturn.setA4ByteArray(a4ByteArray);
+        pigeonReturn.setA8ByteArray(a8ByteArray);
+        pigeonReturn.setAFloatArray(aFloatArray);
+        pigeonReturn.setAList(aList);
+        pigeonReturn.setAMap(aMap);
+        pigeonReturn.setAnEnum(anEnum);
+        return pigeonReturn;
+      }
+    }
+
+    @NonNull
+    ArrayList<Object> toList() {
+      ArrayList<Object> toListResult = new ArrayList<Object>(11);
+      toListResult.add(aBool);
+      toListResult.add(anInt);
+      toListResult.add(aDouble);
+      toListResult.add(aString);
+      toListResult.add(aByteArray);
+      toListResult.add(a4ByteArray);
+      toListResult.add(a8ByteArray);
+      toListResult.add(aFloatArray);
+      toListResult.add(aList);
+      toListResult.add(aMap);
+      toListResult.add(anEnum == null ? null : anEnum.index);
+      return toListResult;
+    }
+
+    static @NonNull AllTypes fromList(@NonNull ArrayList<Object> list) {
+      AllTypes pigeonResult = new AllTypes();
+      Object aBool = list.get(0);
+      pigeonResult.setABool((Boolean) aBool);
+      Object anInt = list.get(1);
+      pigeonResult.setAnInt(
+          (anInt == null) ? null : ((anInt instanceof Integer) ? (Integer) anInt : (Long) anInt));
+      Object aDouble = list.get(2);
+      pigeonResult.setADouble((Double) aDouble);
+      Object aString = list.get(3);
+      pigeonResult.setAString((String) aString);
+      Object aByteArray = list.get(4);
+      pigeonResult.setAByteArray((byte[]) aByteArray);
+      Object a4ByteArray = list.get(5);
+      pigeonResult.setA4ByteArray((int[]) a4ByteArray);
+      Object a8ByteArray = list.get(6);
+      pigeonResult.setA8ByteArray((long[]) a8ByteArray);
+      Object aFloatArray = list.get(7);
+      pigeonResult.setAFloatArray((double[]) aFloatArray);
+      Object aList = list.get(8);
+      pigeonResult.setAList((List<Object>) aList);
+      Object aMap = list.get(9);
+      pigeonResult.setAMap((Map<Object, Object>) aMap);
+      Object anEnum = list.get(10);
+      pigeonResult.setAnEnum(anEnum == null ? null : AnEnum.values()[(int) anEnum]);
+      return pigeonResult;
+    }
+  }
+
+  /** Generated class from Pigeon that represents data sent in messages. */
+  public static class AllNullableTypes {
+    private @Nullable Boolean aNullableBool;
+
+    public @Nullable Boolean getANullableBool() {
+      return aNullableBool;
+    }
+
+    public void setANullableBool(@Nullable Boolean setterArg) {
+      this.aNullableBool = setterArg;
+    }
+
+    private @Nullable Long aNullableInt;
+
+    public @Nullable Long getANullableInt() {
+      return aNullableInt;
+    }
+
+    public void setANullableInt(@Nullable Long setterArg) {
+      this.aNullableInt = setterArg;
+    }
+
+    private @Nullable Double aNullableDouble;
+
+    public @Nullable Double getANullableDouble() {
+      return aNullableDouble;
+    }
+
+    public void setANullableDouble(@Nullable Double setterArg) {
+      this.aNullableDouble = setterArg;
+    }
+
+    private @Nullable String aNullableString;
+
+    public @Nullable String getANullableString() {
+      return aNullableString;
+    }
+
+    public void setANullableString(@Nullable String setterArg) {
+      this.aNullableString = setterArg;
+    }
+
+    private @Nullable byte[] aNullableByteArray;
+
+    public @Nullable byte[] getANullableByteArray() {
+      return aNullableByteArray;
+    }
+
+    public void setANullableByteArray(@Nullable byte[] setterArg) {
+      this.aNullableByteArray = setterArg;
+    }
+
+    private @Nullable int[] aNullable4ByteArray;
+
+    public @Nullable int[] getANullable4ByteArray() {
+      return aNullable4ByteArray;
+    }
+
+    public void setANullable4ByteArray(@Nullable int[] setterArg) {
+      this.aNullable4ByteArray = setterArg;
+    }
+
+    private @Nullable long[] aNullable8ByteArray;
+
+    public @Nullable long[] getANullable8ByteArray() {
+      return aNullable8ByteArray;
+    }
+
+    public void setANullable8ByteArray(@Nullable long[] setterArg) {
+      this.aNullable8ByteArray = setterArg;
+    }
+
+    private @Nullable double[] aNullableFloatArray;
+
+    public @Nullable double[] getANullableFloatArray() {
+      return aNullableFloatArray;
+    }
+
+    public void setANullableFloatArray(@Nullable double[] setterArg) {
+      this.aNullableFloatArray = setterArg;
+    }
+
+    private @Nullable List<Object> aNullableList;
+
+    public @Nullable List<Object> getANullableList() {
+      return aNullableList;
+    }
+
+    public void setANullableList(@Nullable List<Object> setterArg) {
+      this.aNullableList = setterArg;
+    }
+
+    private @Nullable Map<Object, Object> aNullableMap;
+
+    public @Nullable Map<Object, Object> getANullableMap() {
+      return aNullableMap;
+    }
+
+    public void setANullableMap(@Nullable Map<Object, Object> setterArg) {
+      this.aNullableMap = setterArg;
+    }
+
+    private @Nullable List<List<Boolean>> nullableNestedList;
+
+    public @Nullable List<List<Boolean>> getNullableNestedList() {
+      return nullableNestedList;
+    }
+
+    public void setNullableNestedList(@Nullable List<List<Boolean>> setterArg) {
+      this.nullableNestedList = setterArg;
+    }
+
+    private @Nullable Map<String, String> nullableMapWithAnnotations;
+
+    public @Nullable Map<String, String> getNullableMapWithAnnotations() {
+      return nullableMapWithAnnotations;
+    }
+
+    public void setNullableMapWithAnnotations(@Nullable Map<String, String> setterArg) {
+      this.nullableMapWithAnnotations = setterArg;
+    }
+
+    private @Nullable Map<String, Object> nullableMapWithObject;
+
+    public @Nullable Map<String, Object> getNullableMapWithObject() {
+      return nullableMapWithObject;
+    }
+
+    public void setNullableMapWithObject(@Nullable Map<String, Object> setterArg) {
+      this.nullableMapWithObject = setterArg;
+    }
+
+    private @Nullable AnEnum aNullableEnum;
+
+    public @Nullable AnEnum getANullableEnum() {
+      return aNullableEnum;
+    }
+
+    public void setANullableEnum(@Nullable AnEnum setterArg) {
+      this.aNullableEnum = setterArg;
+    }
+
+    public static final class Builder {
+      private @Nullable Boolean aNullableBool;
+
+      public @NonNull Builder setANullableBool(@Nullable Boolean setterArg) {
+        this.aNullableBool = setterArg;
+        return this;
+      }
+
+      private @Nullable Long aNullableInt;
+
+      public @NonNull Builder setANullableInt(@Nullable Long setterArg) {
+        this.aNullableInt = setterArg;
+        return this;
+      }
+
+      private @Nullable Double aNullableDouble;
+
+      public @NonNull Builder setANullableDouble(@Nullable Double setterArg) {
+        this.aNullableDouble = setterArg;
+        return this;
+      }
+
+      private @Nullable String aNullableString;
+
+      public @NonNull Builder setANullableString(@Nullable String setterArg) {
+        this.aNullableString = setterArg;
+        return this;
+      }
+
+      private @Nullable byte[] aNullableByteArray;
+
+      public @NonNull Builder setANullableByteArray(@Nullable byte[] setterArg) {
+        this.aNullableByteArray = setterArg;
+        return this;
+      }
+
+      private @Nullable int[] aNullable4ByteArray;
+
+      public @NonNull Builder setANullable4ByteArray(@Nullable int[] setterArg) {
+        this.aNullable4ByteArray = setterArg;
+        return this;
+      }
+
+      private @Nullable long[] aNullable8ByteArray;
+
+      public @NonNull Builder setANullable8ByteArray(@Nullable long[] setterArg) {
+        this.aNullable8ByteArray = setterArg;
+        return this;
+      }
+
+      private @Nullable double[] aNullableFloatArray;
+
+      public @NonNull Builder setANullableFloatArray(@Nullable double[] setterArg) {
+        this.aNullableFloatArray = setterArg;
+        return this;
+      }
+
+      private @Nullable List<Object> aNullableList;
+
+      public @NonNull Builder setANullableList(@Nullable List<Object> setterArg) {
+        this.aNullableList = setterArg;
+        return this;
+      }
+
+      private @Nullable Map<Object, Object> aNullableMap;
+
+      public @NonNull Builder setANullableMap(@Nullable Map<Object, Object> setterArg) {
+        this.aNullableMap = setterArg;
+        return this;
+      }
+
+      private @Nullable List<List<Boolean>> nullableNestedList;
+
+      public @NonNull Builder setNullableNestedList(@Nullable List<List<Boolean>> setterArg) {
+        this.nullableNestedList = setterArg;
+        return this;
+      }
+
+      private @Nullable Map<String, String> nullableMapWithAnnotations;
+
+      public @NonNull Builder setNullableMapWithAnnotations(
+          @Nullable Map<String, String> setterArg) {
+        this.nullableMapWithAnnotations = setterArg;
+        return this;
+      }
+
+      private @Nullable Map<String, Object> nullableMapWithObject;
+
+      public @NonNull Builder setNullableMapWithObject(@Nullable Map<String, Object> setterArg) {
+        this.nullableMapWithObject = setterArg;
+        return this;
+      }
+
+      private @Nullable AnEnum aNullableEnum;
+
+      public @NonNull Builder setANullableEnum(@Nullable AnEnum setterArg) {
+        this.aNullableEnum = setterArg;
+        return this;
+      }
+
+      public @NonNull AllNullableTypes build() {
+        AllNullableTypes pigeonReturn = new AllNullableTypes();
+        pigeonReturn.setANullableBool(aNullableBool);
+        pigeonReturn.setANullableInt(aNullableInt);
+        pigeonReturn.setANullableDouble(aNullableDouble);
+        pigeonReturn.setANullableString(aNullableString);
+        pigeonReturn.setANullableByteArray(aNullableByteArray);
+        pigeonReturn.setANullable4ByteArray(aNullable4ByteArray);
+        pigeonReturn.setANullable8ByteArray(aNullable8ByteArray);
+        pigeonReturn.setANullableFloatArray(aNullableFloatArray);
+        pigeonReturn.setANullableList(aNullableList);
+        pigeonReturn.setANullableMap(aNullableMap);
+        pigeonReturn.setNullableNestedList(nullableNestedList);
+        pigeonReturn.setNullableMapWithAnnotations(nullableMapWithAnnotations);
+        pigeonReturn.setNullableMapWithObject(nullableMapWithObject);
+        pigeonReturn.setANullableEnum(aNullableEnum);
+        return pigeonReturn;
+      }
+    }
+
+    @NonNull
+    ArrayList<Object> toList() {
+      ArrayList<Object> toListResult = new ArrayList<Object>(14);
+      toListResult.add(aNullableBool);
+      toListResult.add(aNullableInt);
+      toListResult.add(aNullableDouble);
+      toListResult.add(aNullableString);
+      toListResult.add(aNullableByteArray);
+      toListResult.add(aNullable4ByteArray);
+      toListResult.add(aNullable8ByteArray);
+      toListResult.add(aNullableFloatArray);
+      toListResult.add(aNullableList);
+      toListResult.add(aNullableMap);
+      toListResult.add(nullableNestedList);
+      toListResult.add(nullableMapWithAnnotations);
+      toListResult.add(nullableMapWithObject);
+      toListResult.add(aNullableEnum == null ? null : aNullableEnum.index);
+      return toListResult;
+    }
+
+    static @NonNull AllNullableTypes fromList(@NonNull ArrayList<Object> list) {
+      AllNullableTypes pigeonResult = new AllNullableTypes();
+      Object aNullableBool = list.get(0);
+      pigeonResult.setANullableBool((Boolean) aNullableBool);
+      Object aNullableInt = list.get(1);
+      pigeonResult.setANullableInt(
+          (aNullableInt == null)
+              ? null
+              : ((aNullableInt instanceof Integer) ? (Integer) aNullableInt : (Long) aNullableInt));
+      Object aNullableDouble = list.get(2);
+      pigeonResult.setANullableDouble((Double) aNullableDouble);
+      Object aNullableString = list.get(3);
+      pigeonResult.setANullableString((String) aNullableString);
+      Object aNullableByteArray = list.get(4);
+      pigeonResult.setANullableByteArray((byte[]) aNullableByteArray);
+      Object aNullable4ByteArray = list.get(5);
+      pigeonResult.setANullable4ByteArray((int[]) aNullable4ByteArray);
+      Object aNullable8ByteArray = list.get(6);
+      pigeonResult.setANullable8ByteArray((long[]) aNullable8ByteArray);
+      Object aNullableFloatArray = list.get(7);
+      pigeonResult.setANullableFloatArray((double[]) aNullableFloatArray);
+      Object aNullableList = list.get(8);
+      pigeonResult.setANullableList((List<Object>) aNullableList);
+      Object aNullableMap = list.get(9);
+      pigeonResult.setANullableMap((Map<Object, Object>) aNullableMap);
+      Object nullableNestedList = list.get(10);
+      pigeonResult.setNullableNestedList((List<List<Boolean>>) nullableNestedList);
+      Object nullableMapWithAnnotations = list.get(11);
+      pigeonResult.setNullableMapWithAnnotations((Map<String, String>) nullableMapWithAnnotations);
+      Object nullableMapWithObject = list.get(12);
+      pigeonResult.setNullableMapWithObject((Map<String, Object>) nullableMapWithObject);
+      Object aNullableEnum = list.get(13);
+      pigeonResult.setANullableEnum(
+          aNullableEnum == null ? null : AnEnum.values()[(int) aNullableEnum]);
+      return pigeonResult;
+    }
+  }
+
+  /** Generated class from Pigeon that represents data sent in messages. */
+  public static class AllNullableTypesWrapper {
+    private @NonNull AllNullableTypes values;
+
+    public @NonNull AllNullableTypes getValues() {
+      return values;
+    }
+
+    public void setValues(@NonNull AllNullableTypes setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"values\" is null.");
+      }
+      this.values = setterArg;
+    }
+
+    /** Constructor is private to enforce null safety; use Builder. */
+    private AllNullableTypesWrapper() {}
+
+    public static final class Builder {
+      private @Nullable AllNullableTypes values;
+
+      public @NonNull Builder setValues(@NonNull AllNullableTypes setterArg) {
+        this.values = setterArg;
+        return this;
+      }
+
+      public @NonNull AllNullableTypesWrapper build() {
+        AllNullableTypesWrapper pigeonReturn = new AllNullableTypesWrapper();
+        pigeonReturn.setValues(values);
+        return pigeonReturn;
+      }
+    }
+
+    @NonNull
+    ArrayList<Object> toList() {
+      ArrayList<Object> toListResult = new ArrayList<Object>(1);
+      toListResult.add((values == null) ? null : values.toList());
+      return toListResult;
+    }
+
+    static @NonNull AllNullableTypesWrapper fromList(@NonNull ArrayList<Object> list) {
+      AllNullableTypesWrapper pigeonResult = new AllNullableTypesWrapper();
+      Object values = list.get(0);
+      pigeonResult.setValues(
+          (values == null) ? null : AllNullableTypes.fromList((ArrayList<Object>) values));
+      return pigeonResult;
+    }
+  }
+
+  public interface Result<T> {
+    void success(T result);
+
+    void error(Throwable error);
+  }
+
+  private static class HostIntegrationCoreApiCodec extends StandardMessageCodec {
+    public static final HostIntegrationCoreApiCodec INSTANCE = new HostIntegrationCoreApiCodec();
+
+    private HostIntegrationCoreApiCodec() {}
+
+    @Override
+    protected Object readValueOfType(byte type, @NonNull ByteBuffer buffer) {
+      switch (type) {
+        case (byte) 128:
+          return AllNullableTypes.fromList((ArrayList<Object>) readValue(buffer));
+
+        case (byte) 129:
+          return AllNullableTypes.fromList((ArrayList<Object>) readValue(buffer));
+
+        case (byte) 130:
+          return AllNullableTypesWrapper.fromList((ArrayList<Object>) readValue(buffer));
+
+        case (byte) 131:
+          return AllTypes.fromList((ArrayList<Object>) readValue(buffer));
+
+        default:
+          return super.readValueOfType(type, buffer);
+      }
+    }
+
+    @Override
+    protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) {
+      if (value instanceof AllNullableTypes) {
+        stream.write(128);
+        writeValue(stream, ((AllNullableTypes) value).toList());
+      } else if (value instanceof AllNullableTypes) {
+        stream.write(129);
+        writeValue(stream, ((AllNullableTypes) value).toList());
+      } else if (value instanceof AllNullableTypesWrapper) {
+        stream.write(130);
+        writeValue(stream, ((AllNullableTypesWrapper) value).toList());
+      } else if (value instanceof AllTypes) {
+        stream.write(131);
+        writeValue(stream, ((AllTypes) value).toList());
+      } else {
+        super.writeValue(stream, value);
+      }
+    }
+  }
+
+  /**
+   * The core interface that each host language plugin must implement in platform_test integration
+   * tests.
+   *
+   * <p>Generated interface from Pigeon that represents a handler of messages from Flutter.
+   */
+  public interface HostIntegrationCoreApi {
+    /**
+     * A no-op function taking no arguments and returning no value, to sanity test basic calling.
+     */
+    void noop();
+    /** Returns the passed object, to test serialization and deserialization. */
+    @NonNull
+    AllTypes echoAllTypes(@NonNull AllTypes everything);
+    /** Returns the passed object, to test serialization and deserialization. */
+    @Nullable
+    AllNullableTypes echoAllNullableTypes(@Nullable AllNullableTypes everything);
+    /** Returns an error, to test error handling. */
+    void throwError();
+    /** Returns passed in int. */
+    @NonNull
+    Long echoInt(@NonNull Long anInt);
+    /** Returns passed in double. */
+    @NonNull
+    Double echoDouble(@NonNull Double aDouble);
+    /** Returns the passed in boolean. */
+    @NonNull
+    Boolean echoBool(@NonNull Boolean aBool);
+    /** Returns the passed in string. */
+    @NonNull
+    String echoString(@NonNull String aString);
+    /** Returns the passed in Uint8List. */
+    @NonNull
+    byte[] echoUint8List(@NonNull byte[] aUint8List);
+    /**
+     * Returns the inner `aString` value from the wrapped object, to test sending of nested objects.
+     */
+    @Nullable
+    String extractNestedNullableString(@NonNull AllNullableTypesWrapper wrapper);
+    /**
+     * Returns the inner `aString` value from the wrapped object, to test sending of nested objects.
+     */
+    @NonNull
+    AllNullableTypesWrapper createNestedNullableString(@Nullable String nullableString);
+    /** Returns passed in arguments of multiple types. */
+    @NonNull
+    AllNullableTypes sendMultipleNullableTypes(
+        @Nullable Boolean aNullableBool,
+        @Nullable Long aNullableInt,
+        @Nullable String aNullableString);
+    /** Returns passed in int. */
+    @Nullable
+    Long echoNullableInt(@Nullable Long aNullableInt);
+    /** Returns passed in double. */
+    @Nullable
+    Double echoNullableDouble(@Nullable Double aNullableDouble);
+    /** Returns the passed in boolean. */
+    @Nullable
+    Boolean echoNullableBool(@Nullable Boolean aNullableBool);
+    /** Returns the passed in string. */
+    @Nullable
+    String echoNullableString(@Nullable String aNullableString);
+    /** Returns the passed in Uint8List. */
+    @Nullable
+    byte[] echoNullableUint8List(@Nullable byte[] aNullableUint8List);
+    /**
+     * A no-op function taking no arguments and returning no value, to sanity test basic
+     * asynchronous calling.
+     */
+    void noopAsync(Result<Void> result);
+    /** Returns the passed string asynchronously. */
+    void echoAsyncString(@NonNull String aString, Result<String> result);
+
+    void callFlutterNoop(Result<Void> result);
+
+    void callFlutterEchoString(@NonNull String aString, Result<String> result);
+
+    /** The codec used by HostIntegrationCoreApi. */
+    static MessageCodec<Object> getCodec() {
+      return HostIntegrationCoreApiCodec.INSTANCE;
+    }
+    /**
+     * Sets up an instance of `HostIntegrationCoreApi` to handle messages through the
+     * `binaryMessenger`.
+     */
+    static void setup(BinaryMessenger binaryMessenger, HostIntegrationCoreApi api) {
+      {
+        BasicMessageChannel<Object> channel =
+            new BasicMessageChannel<>(
+                binaryMessenger, "dev.flutter.pigeon.HostIntegrationCoreApi.noop", getCodec());
+        if (api != null) {
+          channel.setMessageHandler(
+              (message, reply) -> {
+                ArrayList wrapped = new ArrayList<>();
+                try {
+                  api.noop();
+                  wrapped.add(0, null);
+                } catch (Error | RuntimeException exception) {
+                  ArrayList<Object> wrappedError = wrapError(exception);
+                  wrapped = wrappedError;
+                }
+                reply.reply(wrapped);
+              });
+        } else {
+          channel.setMessageHandler(null);
+        }
+      }
+      {
+        BasicMessageChannel<Object> channel =
+            new BasicMessageChannel<>(
+                binaryMessenger,
+                "dev.flutter.pigeon.HostIntegrationCoreApi.echoAllTypes",
+                getCodec());
+        if (api != null) {
+          channel.setMessageHandler(
+              (message, reply) -> {
+                ArrayList wrapped = new ArrayList<>();
+                try {
+                  ArrayList<Object> args = (ArrayList<Object>) message;
+                  assert args != null;
+                  AllTypes everythingArg = (AllTypes) args.get(0);
+                  if (everythingArg == null) {
+                    throw new NullPointerException("everythingArg unexpectedly null.");
+                  }
+                  AllTypes output = api.echoAllTypes(everythingArg);
+                  wrapped.add(0, output);
+                } catch (Error | RuntimeException exception) {
+                  ArrayList<Object> wrappedError = wrapError(exception);
+                  wrapped = wrappedError;
+                }
+                reply.reply(wrapped);
+              });
+        } else {
+          channel.setMessageHandler(null);
+        }
+      }
+      {
+        BasicMessageChannel<Object> channel =
+            new BasicMessageChannel<>(
+                binaryMessenger,
+                "dev.flutter.pigeon.HostIntegrationCoreApi.echoAllNullableTypes",
+                getCodec());
+        if (api != null) {
+          channel.setMessageHandler(
+              (message, reply) -> {
+                ArrayList wrapped = new ArrayList<>();
+                try {
+                  ArrayList<Object> args = (ArrayList<Object>) message;
+                  assert args != null;
+                  AllNullableTypes everythingArg = (AllNullableTypes) args.get(0);
+                  AllNullableTypes output = api.echoAllNullableTypes(everythingArg);
+                  wrapped.add(0, output);
+                } catch (Error | RuntimeException exception) {
+                  ArrayList<Object> wrappedError = wrapError(exception);
+                  wrapped = wrappedError;
+                }
+                reply.reply(wrapped);
+              });
+        } else {
+          channel.setMessageHandler(null);
+        }
+      }
+      {
+        BasicMessageChannel<Object> channel =
+            new BasicMessageChannel<>(
+                binaryMessenger,
+                "dev.flutter.pigeon.HostIntegrationCoreApi.throwError",
+                getCodec());
+        if (api != null) {
+          channel.setMessageHandler(
+              (message, reply) -> {
+                ArrayList wrapped = new ArrayList<>();
+                try {
+                  api.throwError();
+                  wrapped.add(0, null);
+                } catch (Error | RuntimeException exception) {
+                  ArrayList<Object> wrappedError = wrapError(exception);
+                  wrapped = wrappedError;
+                }
+                reply.reply(wrapped);
+              });
+        } else {
+          channel.setMessageHandler(null);
+        }
+      }
+      {
+        BasicMessageChannel<Object> channel =
+            new BasicMessageChannel<>(
+                binaryMessenger, "dev.flutter.pigeon.HostIntegrationCoreApi.echoInt", getCodec());
+        if (api != null) {
+          channel.setMessageHandler(
+              (message, reply) -> {
+                ArrayList wrapped = new ArrayList<>();
+                try {
+                  ArrayList<Object> args = (ArrayList<Object>) message;
+                  assert args != null;
+                  Number anIntArg = (Number) args.get(0);
+                  if (anIntArg == null) {
+                    throw new NullPointerException("anIntArg unexpectedly null.");
+                  }
+                  Long output = api.echoInt((anIntArg == null) ? null : anIntArg.longValue());
+                  wrapped.add(0, output);
+                } catch (Error | RuntimeException exception) {
+                  ArrayList<Object> wrappedError = wrapError(exception);
+                  wrapped = wrappedError;
+                }
+                reply.reply(wrapped);
+              });
+        } else {
+          channel.setMessageHandler(null);
+        }
+      }
+      {
+        BasicMessageChannel<Object> channel =
+            new BasicMessageChannel<>(
+                binaryMessenger,
+                "dev.flutter.pigeon.HostIntegrationCoreApi.echoDouble",
+                getCodec());
+        if (api != null) {
+          channel.setMessageHandler(
+              (message, reply) -> {
+                ArrayList wrapped = new ArrayList<>();
+                try {
+                  ArrayList<Object> args = (ArrayList<Object>) message;
+                  assert args != null;
+                  Double aDoubleArg = (Double) args.get(0);
+                  if (aDoubleArg == null) {
+                    throw new NullPointerException("aDoubleArg unexpectedly null.");
+                  }
+                  Double output = api.echoDouble(aDoubleArg);
+                  wrapped.add(0, output);
+                } catch (Error | RuntimeException exception) {
+                  ArrayList<Object> wrappedError = wrapError(exception);
+                  wrapped = wrappedError;
+                }
+                reply.reply(wrapped);
+              });
+        } else {
+          channel.setMessageHandler(null);
+        }
+      }
+      {
+        BasicMessageChannel<Object> channel =
+            new BasicMessageChannel<>(
+                binaryMessenger, "dev.flutter.pigeon.HostIntegrationCoreApi.echoBool", getCodec());
+        if (api != null) {
+          channel.setMessageHandler(
+              (message, reply) -> {
+                ArrayList wrapped = new ArrayList<>();
+                try {
+                  ArrayList<Object> args = (ArrayList<Object>) message;
+                  assert args != null;
+                  Boolean aBoolArg = (Boolean) args.get(0);
+                  if (aBoolArg == null) {
+                    throw new NullPointerException("aBoolArg unexpectedly null.");
+                  }
+                  Boolean output = api.echoBool(aBoolArg);
+                  wrapped.add(0, output);
+                } catch (Error | RuntimeException exception) {
+                  ArrayList<Object> wrappedError = wrapError(exception);
+                  wrapped = wrappedError;
+                }
+                reply.reply(wrapped);
+              });
+        } else {
+          channel.setMessageHandler(null);
+        }
+      }
+      {
+        BasicMessageChannel<Object> channel =
+            new BasicMessageChannel<>(
+                binaryMessenger,
+                "dev.flutter.pigeon.HostIntegrationCoreApi.echoString",
+                getCodec());
+        if (api != null) {
+          channel.setMessageHandler(
+              (message, reply) -> {
+                ArrayList wrapped = new ArrayList<>();
+                try {
+                  ArrayList<Object> args = (ArrayList<Object>) message;
+                  assert args != null;
+                  String aStringArg = (String) args.get(0);
+                  if (aStringArg == null) {
+                    throw new NullPointerException("aStringArg unexpectedly null.");
+                  }
+                  String output = api.echoString(aStringArg);
+                  wrapped.add(0, output);
+                } catch (Error | RuntimeException exception) {
+                  ArrayList<Object> wrappedError = wrapError(exception);
+                  wrapped = wrappedError;
+                }
+                reply.reply(wrapped);
+              });
+        } else {
+          channel.setMessageHandler(null);
+        }
+      }
+      {
+        BasicMessageChannel<Object> channel =
+            new BasicMessageChannel<>(
+                binaryMessenger,
+                "dev.flutter.pigeon.HostIntegrationCoreApi.echoUint8List",
+                getCodec());
+        if (api != null) {
+          channel.setMessageHandler(
+              (message, reply) -> {
+                ArrayList wrapped = new ArrayList<>();
+                try {
+                  ArrayList<Object> args = (ArrayList<Object>) message;
+                  assert args != null;
+                  byte[] aUint8ListArg = (byte[]) args.get(0);
+                  if (aUint8ListArg == null) {
+                    throw new NullPointerException("aUint8ListArg unexpectedly null.");
+                  }
+                  byte[] output = api.echoUint8List(aUint8ListArg);
+                  wrapped.add(0, output);
+                } catch (Error | RuntimeException exception) {
+                  ArrayList<Object> wrappedError = wrapError(exception);
+                  wrapped = wrappedError;
+                }
+                reply.reply(wrapped);
+              });
+        } else {
+          channel.setMessageHandler(null);
+        }
+      }
+      {
+        BasicMessageChannel<Object> channel =
+            new BasicMessageChannel<>(
+                binaryMessenger,
+                "dev.flutter.pigeon.HostIntegrationCoreApi.extractNestedNullableString",
+                getCodec());
+        if (api != null) {
+          channel.setMessageHandler(
+              (message, reply) -> {
+                ArrayList wrapped = new ArrayList<>();
+                try {
+                  ArrayList<Object> args = (ArrayList<Object>) message;
+                  assert args != null;
+                  AllNullableTypesWrapper wrapperArg = (AllNullableTypesWrapper) args.get(0);
+                  if (wrapperArg == null) {
+                    throw new NullPointerException("wrapperArg unexpectedly null.");
+                  }
+                  String output = api.extractNestedNullableString(wrapperArg);
+                  wrapped.add(0, output);
+                } catch (Error | RuntimeException exception) {
+                  ArrayList<Object> wrappedError = wrapError(exception);
+                  wrapped = wrappedError;
+                }
+                reply.reply(wrapped);
+              });
+        } else {
+          channel.setMessageHandler(null);
+        }
+      }
+      {
+        BasicMessageChannel<Object> channel =
+            new BasicMessageChannel<>(
+                binaryMessenger,
+                "dev.flutter.pigeon.HostIntegrationCoreApi.createNestedNullableString",
+                getCodec());
+        if (api != null) {
+          channel.setMessageHandler(
+              (message, reply) -> {
+                ArrayList wrapped = new ArrayList<>();
+                try {
+                  ArrayList<Object> args = (ArrayList<Object>) message;
+                  assert args != null;
+                  String nullableStringArg = (String) args.get(0);
+                  AllNullableTypesWrapper output =
+                      api.createNestedNullableString(nullableStringArg);
+                  wrapped.add(0, output);
+                } catch (Error | RuntimeException exception) {
+                  ArrayList<Object> wrappedError = wrapError(exception);
+                  wrapped = wrappedError;
+                }
+                reply.reply(wrapped);
+              });
+        } else {
+          channel.setMessageHandler(null);
+        }
+      }
+      {
+        BasicMessageChannel<Object> channel =
+            new BasicMessageChannel<>(
+                binaryMessenger,
+                "dev.flutter.pigeon.HostIntegrationCoreApi.sendMultipleNullableTypes",
+                getCodec());
+        if (api != null) {
+          channel.setMessageHandler(
+              (message, reply) -> {
+                ArrayList wrapped = new ArrayList<>();
+                try {
+                  ArrayList<Object> args = (ArrayList<Object>) message;
+                  assert args != null;
+                  Boolean aNullableBoolArg = (Boolean) args.get(0);
+                  Number aNullableIntArg = (Number) args.get(1);
+                  String aNullableStringArg = (String) args.get(2);
+                  AllNullableTypes output =
+                      api.sendMultipleNullableTypes(
+                          aNullableBoolArg,
+                          (aNullableIntArg == null) ? null : aNullableIntArg.longValue(),
+                          aNullableStringArg);
+                  wrapped.add(0, output);
+                } catch (Error | RuntimeException exception) {
+                  ArrayList<Object> wrappedError = wrapError(exception);
+                  wrapped = wrappedError;
+                }
+                reply.reply(wrapped);
+              });
+        } else {
+          channel.setMessageHandler(null);
+        }
+      }
+      {
+        BasicMessageChannel<Object> channel =
+            new BasicMessageChannel<>(
+                binaryMessenger,
+                "dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableInt",
+                getCodec());
+        if (api != null) {
+          channel.setMessageHandler(
+              (message, reply) -> {
+                ArrayList wrapped = new ArrayList<>();
+                try {
+                  ArrayList<Object> args = (ArrayList<Object>) message;
+                  assert args != null;
+                  Number aNullableIntArg = (Number) args.get(0);
+                  Long output =
+                      api.echoNullableInt(
+                          (aNullableIntArg == null) ? null : aNullableIntArg.longValue());
+                  wrapped.add(0, output);
+                } catch (Error | RuntimeException exception) {
+                  ArrayList<Object> wrappedError = wrapError(exception);
+                  wrapped = wrappedError;
+                }
+                reply.reply(wrapped);
+              });
+        } else {
+          channel.setMessageHandler(null);
+        }
+      }
+      {
+        BasicMessageChannel<Object> channel =
+            new BasicMessageChannel<>(
+                binaryMessenger,
+                "dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableDouble",
+                getCodec());
+        if (api != null) {
+          channel.setMessageHandler(
+              (message, reply) -> {
+                ArrayList wrapped = new ArrayList<>();
+                try {
+                  ArrayList<Object> args = (ArrayList<Object>) message;
+                  assert args != null;
+                  Double aNullableDoubleArg = (Double) args.get(0);
+                  Double output = api.echoNullableDouble(aNullableDoubleArg);
+                  wrapped.add(0, output);
+                } catch (Error | RuntimeException exception) {
+                  ArrayList<Object> wrappedError = wrapError(exception);
+                  wrapped = wrappedError;
+                }
+                reply.reply(wrapped);
+              });
+        } else {
+          channel.setMessageHandler(null);
+        }
+      }
+      {
+        BasicMessageChannel<Object> channel =
+            new BasicMessageChannel<>(
+                binaryMessenger,
+                "dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableBool",
+                getCodec());
+        if (api != null) {
+          channel.setMessageHandler(
+              (message, reply) -> {
+                ArrayList wrapped = new ArrayList<>();
+                try {
+                  ArrayList<Object> args = (ArrayList<Object>) message;
+                  assert args != null;
+                  Boolean aNullableBoolArg = (Boolean) args.get(0);
+                  Boolean output = api.echoNullableBool(aNullableBoolArg);
+                  wrapped.add(0, output);
+                } catch (Error | RuntimeException exception) {
+                  ArrayList<Object> wrappedError = wrapError(exception);
+                  wrapped = wrappedError;
+                }
+                reply.reply(wrapped);
+              });
+        } else {
+          channel.setMessageHandler(null);
+        }
+      }
+      {
+        BasicMessageChannel<Object> channel =
+            new BasicMessageChannel<>(
+                binaryMessenger,
+                "dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableString",
+                getCodec());
+        if (api != null) {
+          channel.setMessageHandler(
+              (message, reply) -> {
+                ArrayList wrapped = new ArrayList<>();
+                try {
+                  ArrayList<Object> args = (ArrayList<Object>) message;
+                  assert args != null;
+                  String aNullableStringArg = (String) args.get(0);
+                  String output = api.echoNullableString(aNullableStringArg);
+                  wrapped.add(0, output);
+                } catch (Error | RuntimeException exception) {
+                  ArrayList<Object> wrappedError = wrapError(exception);
+                  wrapped = wrappedError;
+                }
+                reply.reply(wrapped);
+              });
+        } else {
+          channel.setMessageHandler(null);
+        }
+      }
+      {
+        BasicMessageChannel<Object> channel =
+            new BasicMessageChannel<>(
+                binaryMessenger,
+                "dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableUint8List",
+                getCodec());
+        if (api != null) {
+          channel.setMessageHandler(
+              (message, reply) -> {
+                ArrayList wrapped = new ArrayList<>();
+                try {
+                  ArrayList<Object> args = (ArrayList<Object>) message;
+                  assert args != null;
+                  byte[] aNullableUint8ListArg = (byte[]) args.get(0);
+                  byte[] output = api.echoNullableUint8List(aNullableUint8ListArg);
+                  wrapped.add(0, output);
+                } catch (Error | RuntimeException exception) {
+                  ArrayList<Object> wrappedError = wrapError(exception);
+                  wrapped = wrappedError;
+                }
+                reply.reply(wrapped);
+              });
+        } else {
+          channel.setMessageHandler(null);
+        }
+      }
+      {
+        BasicMessageChannel<Object> channel =
+            new BasicMessageChannel<>(
+                binaryMessenger, "dev.flutter.pigeon.HostIntegrationCoreApi.noopAsync", getCodec());
+        if (api != null) {
+          channel.setMessageHandler(
+              (message, reply) -> {
+                ArrayList wrapped = new ArrayList<>();
+                try {
+                  Result<Void> resultCallback =
+                      new Result<Void>() {
+                        public void success(Void result) {
+                          wrapped.add(0, null);
+                          reply.reply(wrapped);
+                        }
+
+                        public void error(Throwable error) {
+                          ArrayList<Object> wrappedError = wrapError(error);
+                          reply.reply(wrappedError);
+                        }
+                      };
+
+                  api.noopAsync(resultCallback);
+                } catch (Error | RuntimeException exception) {
+                  ArrayList<Object> wrappedError = wrapError(exception);
+                  reply.reply(wrappedError);
+                }
+              });
+        } else {
+          channel.setMessageHandler(null);
+        }
+      }
+      {
+        BasicMessageChannel<Object> channel =
+            new BasicMessageChannel<>(
+                binaryMessenger,
+                "dev.flutter.pigeon.HostIntegrationCoreApi.echoAsyncString",
+                getCodec());
+        if (api != null) {
+          channel.setMessageHandler(
+              (message, reply) -> {
+                ArrayList wrapped = new ArrayList<>();
+                try {
+                  ArrayList<Object> args = (ArrayList<Object>) message;
+                  assert args != null;
+                  String aStringArg = (String) args.get(0);
+                  if (aStringArg == null) {
+                    throw new NullPointerException("aStringArg unexpectedly null.");
+                  }
+                  Result<String> resultCallback =
+                      new Result<String>() {
+                        public void success(String result) {
+                          wrapped.add(0, result);
+                          reply.reply(wrapped);
+                        }
+
+                        public void error(Throwable error) {
+                          ArrayList<Object> wrappedError = wrapError(error);
+                          reply.reply(wrappedError);
+                        }
+                      };
+
+                  api.echoAsyncString(aStringArg, resultCallback);
+                } catch (Error | RuntimeException exception) {
+                  ArrayList<Object> wrappedError = wrapError(exception);
+                  reply.reply(wrappedError);
+                }
+              });
+        } else {
+          channel.setMessageHandler(null);
+        }
+      }
+      {
+        BasicMessageChannel<Object> channel =
+            new BasicMessageChannel<>(
+                binaryMessenger,
+                "dev.flutter.pigeon.HostIntegrationCoreApi.callFlutterNoop",
+                getCodec());
+        if (api != null) {
+          channel.setMessageHandler(
+              (message, reply) -> {
+                ArrayList wrapped = new ArrayList<>();
+                try {
+                  Result<Void> resultCallback =
+                      new Result<Void>() {
+                        public void success(Void result) {
+                          wrapped.add(0, null);
+                          reply.reply(wrapped);
+                        }
+
+                        public void error(Throwable error) {
+                          ArrayList<Object> wrappedError = wrapError(error);
+                          reply.reply(wrappedError);
+                        }
+                      };
+
+                  api.callFlutterNoop(resultCallback);
+                } catch (Error | RuntimeException exception) {
+                  ArrayList<Object> wrappedError = wrapError(exception);
+                  reply.reply(wrappedError);
+                }
+              });
+        } else {
+          channel.setMessageHandler(null);
+        }
+      }
+      {
+        BasicMessageChannel<Object> channel =
+            new BasicMessageChannel<>(
+                binaryMessenger,
+                "dev.flutter.pigeon.HostIntegrationCoreApi.callFlutterEchoString",
+                getCodec());
+        if (api != null) {
+          channel.setMessageHandler(
+              (message, reply) -> {
+                ArrayList wrapped = new ArrayList<>();
+                try {
+                  ArrayList<Object> args = (ArrayList<Object>) message;
+                  assert args != null;
+                  String aStringArg = (String) args.get(0);
+                  if (aStringArg == null) {
+                    throw new NullPointerException("aStringArg unexpectedly null.");
+                  }
+                  Result<String> resultCallback =
+                      new Result<String>() {
+                        public void success(String result) {
+                          wrapped.add(0, result);
+                          reply.reply(wrapped);
+                        }
+
+                        public void error(Throwable error) {
+                          ArrayList<Object> wrappedError = wrapError(error);
+                          reply.reply(wrappedError);
+                        }
+                      };
+
+                  api.callFlutterEchoString(aStringArg, resultCallback);
+                } catch (Error | RuntimeException exception) {
+                  ArrayList<Object> wrappedError = wrapError(exception);
+                  reply.reply(wrappedError);
+                }
+              });
+        } else {
+          channel.setMessageHandler(null);
+        }
+      }
+    }
+  }
+
+  private static class FlutterIntegrationCoreApiCodec extends StandardMessageCodec {
+    public static final FlutterIntegrationCoreApiCodec INSTANCE =
+        new FlutterIntegrationCoreApiCodec();
+
+    private FlutterIntegrationCoreApiCodec() {}
+
+    @Override
+    protected Object readValueOfType(byte type, @NonNull ByteBuffer buffer) {
+      switch (type) {
+        case (byte) 128:
+          return AllNullableTypes.fromList((ArrayList<Object>) readValue(buffer));
+
+        case (byte) 129:
+          return AllTypes.fromList((ArrayList<Object>) readValue(buffer));
+
+        default:
+          return super.readValueOfType(type, buffer);
+      }
+    }
+
+    @Override
+    protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) {
+      if (value instanceof AllNullableTypes) {
+        stream.write(128);
+        writeValue(stream, ((AllNullableTypes) value).toList());
+      } else if (value instanceof AllTypes) {
+        stream.write(129);
+        writeValue(stream, ((AllTypes) value).toList());
+      } else {
+        super.writeValue(stream, value);
+      }
+    }
+  }
+
+  /**
+   * The core interface that the Dart platform_test code implements for host integration tests to
+   * call into.
+   *
+   * <p>Generated class from Pigeon that represents Flutter messages that can be called from Java.
+   */
+  public static class FlutterIntegrationCoreApi {
+    private final BinaryMessenger binaryMessenger;
+
+    public FlutterIntegrationCoreApi(BinaryMessenger argBinaryMessenger) {
+      this.binaryMessenger = argBinaryMessenger;
+    }
+
+    public interface Reply<T> {
+      void reply(T reply);
+    }
+    /** The codec used by FlutterIntegrationCoreApi. */
+    static MessageCodec<Object> getCodec() {
+      return FlutterIntegrationCoreApiCodec.INSTANCE;
+    }
+    /**
+     * A no-op function taking no arguments and returning no value, to sanity test basic calling.
+     */
+    public void noop(Reply<Void> callback) {
+      BasicMessageChannel<Object> channel =
+          new BasicMessageChannel<>(
+              binaryMessenger, "dev.flutter.pigeon.FlutterIntegrationCoreApi.noop", getCodec());
+      channel.send(
+          null,
+          channelReply -> {
+            callback.reply(null);
+          });
+    }
+    /** Returns the passed object, to test serialization and deserialization. */
+    public void echoAllTypes(@NonNull AllTypes everythingArg, Reply<AllTypes> callback) {
+      BasicMessageChannel<Object> channel =
+          new BasicMessageChannel<>(
+              binaryMessenger,
+              "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoAllTypes",
+              getCodec());
+      channel.send(
+          new ArrayList<Object>(Collections.singletonList(everythingArg)),
+          channelReply -> {
+            @SuppressWarnings("ConstantConditions")
+            AllTypes output = (AllTypes) channelReply;
+            callback.reply(output);
+          });
+    }
+    /** Returns the passed object, to test serialization and deserialization. */
+    public void echoAllNullableTypes(
+        @NonNull AllNullableTypes everythingArg, Reply<AllNullableTypes> callback) {
+      BasicMessageChannel<Object> channel =
+          new BasicMessageChannel<>(
+              binaryMessenger,
+              "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoAllNullableTypes",
+              getCodec());
+      channel.send(
+          new ArrayList<Object>(Collections.singletonList(everythingArg)),
+          channelReply -> {
+            @SuppressWarnings("ConstantConditions")
+            AllNullableTypes output = (AllNullableTypes) channelReply;
+            callback.reply(output);
+          });
+    }
+    /** Returns the passed string, to test serialization and deserialization. */
+    public void echoString(@NonNull String aStringArg, Reply<String> callback) {
+      BasicMessageChannel<Object> channel =
+          new BasicMessageChannel<>(
+              binaryMessenger,
+              "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoString",
+              getCodec());
+      channel.send(
+          new ArrayList<Object>(Collections.singletonList(aStringArg)),
+          channelReply -> {
+            @SuppressWarnings("ConstantConditions")
+            String output = (String) channelReply;
+            callback.reply(output);
+          });
+    }
+  }
+  /**
+   * An API that can be implemented for minimal, compile-only tests.
+   *
+   * <p>Generated interface from Pigeon that represents a handler of messages from Flutter.
+   */
+  public interface HostTrivialApi {
+    void noop();
+
+    /** The codec used by HostTrivialApi. */
+    static MessageCodec<Object> getCodec() {
+      return new StandardMessageCodec();
+    }
+    /** Sets up an instance of `HostTrivialApi` to handle messages through the `binaryMessenger`. */
+    static void setup(BinaryMessenger binaryMessenger, HostTrivialApi api) {
+      {
+        BasicMessageChannel<Object> channel =
+            new BasicMessageChannel<>(
+                binaryMessenger, "dev.flutter.pigeon.HostTrivialApi.noop", getCodec());
+        if (api != null) {
+          channel.setMessageHandler(
+              (message, reply) -> {
+                ArrayList wrapped = new ArrayList<>();
+                try {
+                  api.noop();
+                  wrapped.add(0, null);
+                } catch (Error | RuntimeException exception) {
+                  ArrayList<Object> wrappedError = wrapError(exception);
+                  wrapped = wrappedError;
+                }
+                reply.reply(wrapped);
+              });
+        } else {
+          channel.setMessageHandler(null);
+        }
+      }
+    }
+  }
+
+  @NonNull
+  private static ArrayList<Object> wrapError(@NonNull Throwable exception) {
+    ArrayList<Object> errorList = new ArrayList<>(3);
+    errorList.add(exception.toString());
+    errorList.add(exception.getClass().getSimpleName());
+    errorList.add(
+        "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception));
+    return errorList;
+  }
+}
diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/.gitignore b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/.gitignore
index 7ebd556..a00d32b 100644
--- a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/.gitignore
+++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/.gitignore
@@ -3,3 +3,4 @@
 # such as a flag to suppress version stamp generation.
 *.gen.h
 *.gen.m
+!CoreTests.gen.*
\ No newline at end of file
diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h
new file mode 100644
index 0000000..80a40d5
--- /dev/null
+++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h
@@ -0,0 +1,214 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// Autogenerated from Pigeon (v4.2.12), do not edit directly.
+// See also: https://pub.dev/packages/pigeon
+#import <Foundation/Foundation.h>
+@protocol FlutterBinaryMessenger;
+@protocol FlutterMessageCodec;
+@class FlutterError;
+@class FlutterStandardTypedData;
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef NS_ENUM(NSUInteger, AnEnum) {
+  AnEnumOne = 0,
+  AnEnumTwo = 1,
+  AnEnumThree = 2,
+};
+
+@class AllTypes;
+@class AllNullableTypes;
+@class AllNullableTypesWrapper;
+
+@interface AllTypes : NSObject
+/// `init` unavailable to enforce nonnull fields, see the `make` class method.
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)makeWithABool:(NSNumber *)aBool
+                        anInt:(NSNumber *)anInt
+                      aDouble:(NSNumber *)aDouble
+                      aString:(NSString *)aString
+                   aByteArray:(FlutterStandardTypedData *)aByteArray
+                  a4ByteArray:(FlutterStandardTypedData *)a4ByteArray
+                  a8ByteArray:(FlutterStandardTypedData *)a8ByteArray
+                  aFloatArray:(FlutterStandardTypedData *)aFloatArray
+                        aList:(NSArray *)aList
+                         aMap:(NSDictionary *)aMap
+                       anEnum:(AnEnum)anEnum;
+@property(nonatomic, strong) NSNumber *aBool;
+@property(nonatomic, strong) NSNumber *anInt;
+@property(nonatomic, strong) NSNumber *aDouble;
+@property(nonatomic, copy) NSString *aString;
+@property(nonatomic, strong) FlutterStandardTypedData *aByteArray;
+@property(nonatomic, strong) FlutterStandardTypedData *a4ByteArray;
+@property(nonatomic, strong) FlutterStandardTypedData *a8ByteArray;
+@property(nonatomic, strong) FlutterStandardTypedData *aFloatArray;
+@property(nonatomic, strong) NSArray *aList;
+@property(nonatomic, strong) NSDictionary *aMap;
+@property(nonatomic, assign) AnEnum anEnum;
+@end
+
+@interface AllNullableTypes : NSObject
++ (instancetype)makeWithANullableBool:(nullable NSNumber *)aNullableBool
+                         aNullableInt:(nullable NSNumber *)aNullableInt
+                      aNullableDouble:(nullable NSNumber *)aNullableDouble
+                      aNullableString:(nullable NSString *)aNullableString
+                   aNullableByteArray:(nullable FlutterStandardTypedData *)aNullableByteArray
+                  aNullable4ByteArray:(nullable FlutterStandardTypedData *)aNullable4ByteArray
+                  aNullable8ByteArray:(nullable FlutterStandardTypedData *)aNullable8ByteArray
+                  aNullableFloatArray:(nullable FlutterStandardTypedData *)aNullableFloatArray
+                        aNullableList:(nullable NSArray *)aNullableList
+                         aNullableMap:(nullable NSDictionary *)aNullableMap
+                   nullableNestedList:(nullable NSArray<NSArray<NSNumber *> *> *)nullableNestedList
+           nullableMapWithAnnotations:
+               (nullable NSDictionary<NSString *, NSString *> *)nullableMapWithAnnotations
+                nullableMapWithObject:(nullable NSDictionary<NSString *, id> *)nullableMapWithObject
+                        aNullableEnum:(AnEnum)aNullableEnum;
+@property(nonatomic, strong, nullable) NSNumber *aNullableBool;
+@property(nonatomic, strong, nullable) NSNumber *aNullableInt;
+@property(nonatomic, strong, nullable) NSNumber *aNullableDouble;
+@property(nonatomic, copy, nullable) NSString *aNullableString;
+@property(nonatomic, strong, nullable) FlutterStandardTypedData *aNullableByteArray;
+@property(nonatomic, strong, nullable) FlutterStandardTypedData *aNullable4ByteArray;
+@property(nonatomic, strong, nullable) FlutterStandardTypedData *aNullable8ByteArray;
+@property(nonatomic, strong, nullable) FlutterStandardTypedData *aNullableFloatArray;
+@property(nonatomic, strong, nullable) NSArray *aNullableList;
+@property(nonatomic, strong, nullable) NSDictionary *aNullableMap;
+@property(nonatomic, strong, nullable) NSArray<NSArray<NSNumber *> *> *nullableNestedList;
+@property(nonatomic, strong, nullable)
+    NSDictionary<NSString *, NSString *> *nullableMapWithAnnotations;
+@property(nonatomic, strong, nullable) NSDictionary<NSString *, id> *nullableMapWithObject;
+@property(nonatomic, assign) AnEnum aNullableEnum;
+@end
+
+@interface AllNullableTypesWrapper : NSObject
+/// `init` unavailable to enforce nonnull fields, see the `make` class method.
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)makeWithValues:(AllNullableTypes *)values;
+@property(nonatomic, strong) AllNullableTypes *values;
+@end
+
+/// The codec used by HostIntegrationCoreApi.
+NSObject<FlutterMessageCodec> *HostIntegrationCoreApiGetCodec(void);
+
+/// The core interface that each host language plugin must implement in
+/// platform_test integration tests.
+@protocol HostIntegrationCoreApi
+/// A no-op function taking no arguments and returning no value, to sanity
+/// test basic calling.
+- (void)noopWithError:(FlutterError *_Nullable *_Nonnull)error;
+/// Returns the passed object, to test serialization and deserialization.
+///
+/// @return `nil` only when `error != nil`.
+- (nullable AllTypes *)echoAllTypes:(AllTypes *)everything
+                              error:(FlutterError *_Nullable *_Nonnull)error;
+/// Returns the passed object, to test serialization and deserialization.
+- (nullable AllNullableTypes *)echoAllNullableTypes:(nullable AllNullableTypes *)everything
+                                              error:(FlutterError *_Nullable *_Nonnull)error;
+/// Returns an error, to test error handling.
+- (void)throwErrorWithError:(FlutterError *_Nullable *_Nonnull)error;
+/// Returns passed in int.
+///
+/// @return `nil` only when `error != nil`.
+- (nullable NSNumber *)echoInt:(NSNumber *)anInt error:(FlutterError *_Nullable *_Nonnull)error;
+/// Returns passed in double.
+///
+/// @return `nil` only when `error != nil`.
+- (nullable NSNumber *)echoDouble:(NSNumber *)aDouble
+                            error:(FlutterError *_Nullable *_Nonnull)error;
+/// Returns the passed in boolean.
+///
+/// @return `nil` only when `error != nil`.
+- (nullable NSNumber *)echoBool:(NSNumber *)aBool error:(FlutterError *_Nullable *_Nonnull)error;
+/// Returns the passed in string.
+///
+/// @return `nil` only when `error != nil`.
+- (nullable NSString *)echoString:(NSString *)aString
+                            error:(FlutterError *_Nullable *_Nonnull)error;
+/// Returns the passed in Uint8List.
+///
+/// @return `nil` only when `error != nil`.
+- (nullable FlutterStandardTypedData *)echoUint8List:(FlutterStandardTypedData *)aUint8List
+                                               error:(FlutterError *_Nullable *_Nonnull)error;
+/// Returns the inner `aString` value from the wrapped object, to test
+/// sending of nested objects.
+- (nullable NSString *)extractNestedNullableStringFrom:(AllNullableTypesWrapper *)wrapper
+                                                 error:(FlutterError *_Nullable *_Nonnull)error;
+/// Returns the inner `aString` value from the wrapped object, to test
+/// sending of nested objects.
+///
+/// @return `nil` only when `error != nil`.
+- (nullable AllNullableTypesWrapper *)
+    createNestedObjectWithNullableString:(nullable NSString *)nullableString
+                                   error:(FlutterError *_Nullable *_Nonnull)error;
+/// Returns passed in arguments of multiple types.
+///
+/// @return `nil` only when `error != nil`.
+- (nullable AllNullableTypes *)sendMultipleNullableTypesABool:(nullable NSNumber *)aNullableBool
+                                                        anInt:(nullable NSNumber *)aNullableInt
+                                                      aString:(nullable NSString *)aNullableString
+                                                        error:(FlutterError *_Nullable *_Nonnull)
+                                                                  error;
+/// Returns passed in int.
+- (nullable NSNumber *)echoNullableInt:(nullable NSNumber *)aNullableInt
+                                 error:(FlutterError *_Nullable *_Nonnull)error;
+/// Returns passed in double.
+- (nullable NSNumber *)echoNullableDouble:(nullable NSNumber *)aNullableDouble
+                                    error:(FlutterError *_Nullable *_Nonnull)error;
+/// Returns the passed in boolean.
+- (nullable NSNumber *)echoNullableBool:(nullable NSNumber *)aNullableBool
+                                  error:(FlutterError *_Nullable *_Nonnull)error;
+/// Returns the passed in string.
+- (nullable NSString *)echoNullableString:(nullable NSString *)aNullableString
+                                    error:(FlutterError *_Nullable *_Nonnull)error;
+/// Returns the passed in Uint8List.
+- (nullable FlutterStandardTypedData *)
+    echoNullableUint8List:(nullable FlutterStandardTypedData *)aNullableUint8List
+                    error:(FlutterError *_Nullable *_Nonnull)error;
+/// A no-op function taking no arguments and returning no value, to sanity
+/// test basic asynchronous calling.
+- (void)noopAsyncWithCompletion:(void (^)(FlutterError *_Nullable))completion;
+/// Returns the passed string asynchronously.
+- (void)echoAsyncString:(NSString *)aString
+             completion:(void (^)(NSString *_Nullable, FlutterError *_Nullable))completion;
+- (void)callFlutterNoopWithCompletion:(void (^)(FlutterError *_Nullable))completion;
+- (void)callFlutterEchoString:(NSString *)aString
+                   completion:(void (^)(NSString *_Nullable, FlutterError *_Nullable))completion;
+@end
+
+extern void HostIntegrationCoreApiSetup(id<FlutterBinaryMessenger> binaryMessenger,
+                                        NSObject<HostIntegrationCoreApi> *_Nullable api);
+
+/// The codec used by FlutterIntegrationCoreApi.
+NSObject<FlutterMessageCodec> *FlutterIntegrationCoreApiGetCodec(void);
+
+/// The core interface that the Dart platform_test code implements for host
+/// integration tests to call into.
+@interface FlutterIntegrationCoreApi : NSObject
+- (instancetype)initWithBinaryMessenger:(id<FlutterBinaryMessenger>)binaryMessenger;
+/// A no-op function taking no arguments and returning no value, to sanity
+/// test basic calling.
+- (void)noopWithCompletion:(void (^)(NSError *_Nullable))completion;
+/// Returns the passed object, to test serialization and deserialization.
+- (void)echoAllTypes:(AllTypes *)everything
+          completion:(void (^)(AllTypes *_Nullable, NSError *_Nullable))completion;
+/// Returns the passed object, to test serialization and deserialization.
+- (void)echoAllNullableTypes:(AllNullableTypes *)everything
+                  completion:(void (^)(AllNullableTypes *_Nullable, NSError *_Nullable))completion;
+/// Returns the passed string, to test serialization and deserialization.
+- (void)echoString:(NSString *)aString
+        completion:(void (^)(NSString *_Nullable, NSError *_Nullable))completion;
+@end
+/// The codec used by HostTrivialApi.
+NSObject<FlutterMessageCodec> *HostTrivialApiGetCodec(void);
+
+/// An API that can be implemented for minimal, compile-only tests.
+@protocol HostTrivialApi
+- (void)noopWithError:(FlutterError *_Nullable *_Nonnull)error;
+@end
+
+extern void HostTrivialApiSetup(id<FlutterBinaryMessenger> binaryMessenger,
+                                NSObject<HostTrivialApi> *_Nullable api);
+
+NS_ASSUME_NONNULL_END
diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m
new file mode 100644
index 0000000..adb33d0
--- /dev/null
+++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m
@@ -0,0 +1,885 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// Autogenerated from Pigeon (v4.2.12), do not edit directly.
+// See also: https://pub.dev/packages/pigeon
+#import "CoreTests.gen.h"
+#import <Flutter/Flutter.h>
+
+#if !__has_feature(objc_arc)
+#error File requires ARC to be enabled.
+#endif
+
+static NSArray *wrapResult(id result, FlutterError *error) {
+  if (error) {
+    return @[
+      error.code ?: [NSNull null], error.message ?: [NSNull null], error.details ?: [NSNull null]
+    ];
+  }
+  return @[ result ?: [NSNull null] ];
+}
+static id GetNullableObject(NSDictionary *dict, id key) {
+  id result = dict[key];
+  return (result == [NSNull null]) ? nil : result;
+}
+static id GetNullableObjectAtIndex(NSArray *array, NSInteger key) {
+  id result = array[key];
+  return (result == [NSNull null]) ? nil : result;
+}
+
+@interface AllTypes ()
++ (AllTypes *)fromList:(NSArray *)list;
++ (nullable AllTypes *)nullableFromList:(NSArray *)list;
+- (NSArray *)toList;
+@end
+@interface AllNullableTypes ()
++ (AllNullableTypes *)fromList:(NSArray *)list;
++ (nullable AllNullableTypes *)nullableFromList:(NSArray *)list;
+- (NSArray *)toList;
+@end
+@interface AllNullableTypesWrapper ()
++ (AllNullableTypesWrapper *)fromList:(NSArray *)list;
++ (nullable AllNullableTypesWrapper *)nullableFromList:(NSArray *)list;
+- (NSArray *)toList;
+@end
+
+@implementation AllTypes
++ (instancetype)makeWithABool:(NSNumber *)aBool
+                        anInt:(NSNumber *)anInt
+                      aDouble:(NSNumber *)aDouble
+                      aString:(NSString *)aString
+                   aByteArray:(FlutterStandardTypedData *)aByteArray
+                  a4ByteArray:(FlutterStandardTypedData *)a4ByteArray
+                  a8ByteArray:(FlutterStandardTypedData *)a8ByteArray
+                  aFloatArray:(FlutterStandardTypedData *)aFloatArray
+                        aList:(NSArray *)aList
+                         aMap:(NSDictionary *)aMap
+                       anEnum:(AnEnum)anEnum {
+  AllTypes *pigeonResult = [[AllTypes alloc] init];
+  pigeonResult.aBool = aBool;
+  pigeonResult.anInt = anInt;
+  pigeonResult.aDouble = aDouble;
+  pigeonResult.aString = aString;
+  pigeonResult.aByteArray = aByteArray;
+  pigeonResult.a4ByteArray = a4ByteArray;
+  pigeonResult.a8ByteArray = a8ByteArray;
+  pigeonResult.aFloatArray = aFloatArray;
+  pigeonResult.aList = aList;
+  pigeonResult.aMap = aMap;
+  pigeonResult.anEnum = anEnum;
+  return pigeonResult;
+}
++ (AllTypes *)fromList:(NSArray *)list {
+  AllTypes *pigeonResult = [[AllTypes alloc] init];
+  pigeonResult.aBool = GetNullableObjectAtIndex(list, 0);
+  NSAssert(pigeonResult.aBool != nil, @"");
+  pigeonResult.anInt = GetNullableObjectAtIndex(list, 1);
+  NSAssert(pigeonResult.anInt != nil, @"");
+  pigeonResult.aDouble = GetNullableObjectAtIndex(list, 2);
+  NSAssert(pigeonResult.aDouble != nil, @"");
+  pigeonResult.aString = GetNullableObjectAtIndex(list, 3);
+  NSAssert(pigeonResult.aString != nil, @"");
+  pigeonResult.aByteArray = GetNullableObjectAtIndex(list, 4);
+  NSAssert(pigeonResult.aByteArray != nil, @"");
+  pigeonResult.a4ByteArray = GetNullableObjectAtIndex(list, 5);
+  NSAssert(pigeonResult.a4ByteArray != nil, @"");
+  pigeonResult.a8ByteArray = GetNullableObjectAtIndex(list, 6);
+  NSAssert(pigeonResult.a8ByteArray != nil, @"");
+  pigeonResult.aFloatArray = GetNullableObjectAtIndex(list, 7);
+  NSAssert(pigeonResult.aFloatArray != nil, @"");
+  pigeonResult.aList = GetNullableObjectAtIndex(list, 8);
+  NSAssert(pigeonResult.aList != nil, @"");
+  pigeonResult.aMap = GetNullableObjectAtIndex(list, 9);
+  NSAssert(pigeonResult.aMap != nil, @"");
+  pigeonResult.anEnum = [GetNullableObjectAtIndex(list, 10) integerValue];
+  return pigeonResult;
+}
++ (nullable AllTypes *)nullableFromList:(NSArray *)list {
+  return (list) ? [AllTypes fromList:list] : nil;
+}
+- (NSArray *)toList {
+  return @[
+    (self.aBool ?: [NSNull null]),
+    (self.anInt ?: [NSNull null]),
+    (self.aDouble ?: [NSNull null]),
+    (self.aString ?: [NSNull null]),
+    (self.aByteArray ?: [NSNull null]),
+    (self.a4ByteArray ?: [NSNull null]),
+    (self.a8ByteArray ?: [NSNull null]),
+    (self.aFloatArray ?: [NSNull null]),
+    (self.aList ?: [NSNull null]),
+    (self.aMap ?: [NSNull null]),
+    @(self.anEnum),
+  ];
+}
+@end
+
+@implementation AllNullableTypes
++ (instancetype)makeWithANullableBool:(nullable NSNumber *)aNullableBool
+                         aNullableInt:(nullable NSNumber *)aNullableInt
+                      aNullableDouble:(nullable NSNumber *)aNullableDouble
+                      aNullableString:(nullable NSString *)aNullableString
+                   aNullableByteArray:(nullable FlutterStandardTypedData *)aNullableByteArray
+                  aNullable4ByteArray:(nullable FlutterStandardTypedData *)aNullable4ByteArray
+                  aNullable8ByteArray:(nullable FlutterStandardTypedData *)aNullable8ByteArray
+                  aNullableFloatArray:(nullable FlutterStandardTypedData *)aNullableFloatArray
+                        aNullableList:(nullable NSArray *)aNullableList
+                         aNullableMap:(nullable NSDictionary *)aNullableMap
+                   nullableNestedList:(nullable NSArray<NSArray<NSNumber *> *> *)nullableNestedList
+           nullableMapWithAnnotations:
+               (nullable NSDictionary<NSString *, NSString *> *)nullableMapWithAnnotations
+                nullableMapWithObject:(nullable NSDictionary<NSString *, id> *)nullableMapWithObject
+                        aNullableEnum:(AnEnum)aNullableEnum {
+  AllNullableTypes *pigeonResult = [[AllNullableTypes alloc] init];
+  pigeonResult.aNullableBool = aNullableBool;
+  pigeonResult.aNullableInt = aNullableInt;
+  pigeonResult.aNullableDouble = aNullableDouble;
+  pigeonResult.aNullableString = aNullableString;
+  pigeonResult.aNullableByteArray = aNullableByteArray;
+  pigeonResult.aNullable4ByteArray = aNullable4ByteArray;
+  pigeonResult.aNullable8ByteArray = aNullable8ByteArray;
+  pigeonResult.aNullableFloatArray = aNullableFloatArray;
+  pigeonResult.aNullableList = aNullableList;
+  pigeonResult.aNullableMap = aNullableMap;
+  pigeonResult.nullableNestedList = nullableNestedList;
+  pigeonResult.nullableMapWithAnnotations = nullableMapWithAnnotations;
+  pigeonResult.nullableMapWithObject = nullableMapWithObject;
+  pigeonResult.aNullableEnum = aNullableEnum;
+  return pigeonResult;
+}
++ (AllNullableTypes *)fromList:(NSArray *)list {
+  AllNullableTypes *pigeonResult = [[AllNullableTypes alloc] init];
+  pigeonResult.aNullableBool = GetNullableObjectAtIndex(list, 0);
+  pigeonResult.aNullableInt = GetNullableObjectAtIndex(list, 1);
+  pigeonResult.aNullableDouble = GetNullableObjectAtIndex(list, 2);
+  pigeonResult.aNullableString = GetNullableObjectAtIndex(list, 3);
+  pigeonResult.aNullableByteArray = GetNullableObjectAtIndex(list, 4);
+  pigeonResult.aNullable4ByteArray = GetNullableObjectAtIndex(list, 5);
+  pigeonResult.aNullable8ByteArray = GetNullableObjectAtIndex(list, 6);
+  pigeonResult.aNullableFloatArray = GetNullableObjectAtIndex(list, 7);
+  pigeonResult.aNullableList = GetNullableObjectAtIndex(list, 8);
+  pigeonResult.aNullableMap = GetNullableObjectAtIndex(list, 9);
+  pigeonResult.nullableNestedList = GetNullableObjectAtIndex(list, 10);
+  pigeonResult.nullableMapWithAnnotations = GetNullableObjectAtIndex(list, 11);
+  pigeonResult.nullableMapWithObject = GetNullableObjectAtIndex(list, 12);
+  pigeonResult.aNullableEnum = [GetNullableObjectAtIndex(list, 13) integerValue];
+  return pigeonResult;
+}
++ (nullable AllNullableTypes *)nullableFromList:(NSArray *)list {
+  return (list) ? [AllNullableTypes fromList:list] : nil;
+}
+- (NSArray *)toList {
+  return @[
+    (self.aNullableBool ?: [NSNull null]),
+    (self.aNullableInt ?: [NSNull null]),
+    (self.aNullableDouble ?: [NSNull null]),
+    (self.aNullableString ?: [NSNull null]),
+    (self.aNullableByteArray ?: [NSNull null]),
+    (self.aNullable4ByteArray ?: [NSNull null]),
+    (self.aNullable8ByteArray ?: [NSNull null]),
+    (self.aNullableFloatArray ?: [NSNull null]),
+    (self.aNullableList ?: [NSNull null]),
+    (self.aNullableMap ?: [NSNull null]),
+    (self.nullableNestedList ?: [NSNull null]),
+    (self.nullableMapWithAnnotations ?: [NSNull null]),
+    (self.nullableMapWithObject ?: [NSNull null]),
+    @(self.aNullableEnum),
+  ];
+}
+@end
+
+@implementation AllNullableTypesWrapper
++ (instancetype)makeWithValues:(AllNullableTypes *)values {
+  AllNullableTypesWrapper *pigeonResult = [[AllNullableTypesWrapper alloc] init];
+  pigeonResult.values = values;
+  return pigeonResult;
+}
++ (AllNullableTypesWrapper *)fromList:(NSArray *)list {
+  AllNullableTypesWrapper *pigeonResult = [[AllNullableTypesWrapper alloc] init];
+  pigeonResult.values = [AllNullableTypes nullableFromList:(GetNullableObjectAtIndex(list, 0))];
+  NSAssert(pigeonResult.values != nil, @"");
+  return pigeonResult;
+}
++ (nullable AllNullableTypesWrapper *)nullableFromList:(NSArray *)list {
+  return (list) ? [AllNullableTypesWrapper fromList:list] : nil;
+}
+- (NSArray *)toList {
+  return @[
+    (self.values ? [self.values toList] : [NSNull null]),
+  ];
+}
+@end
+
+@interface HostIntegrationCoreApiCodecReader : FlutterStandardReader
+@end
+@implementation HostIntegrationCoreApiCodecReader
+- (nullable id)readValueOfType:(UInt8)type {
+  switch (type) {
+    case 128:
+      return [AllNullableTypes fromList:[self readValue]];
+
+    case 129:
+      return [AllNullableTypes fromList:[self readValue]];
+
+    case 130:
+      return [AllNullableTypesWrapper fromList:[self readValue]];
+
+    case 131:
+      return [AllTypes fromList:[self readValue]];
+
+    default:
+      return [super readValueOfType:type];
+  }
+}
+@end
+
+@interface HostIntegrationCoreApiCodecWriter : FlutterStandardWriter
+@end
+@implementation HostIntegrationCoreApiCodecWriter
+- (void)writeValue:(id)value {
+  if ([value isKindOfClass:[AllNullableTypes class]]) {
+    [self writeByte:128];
+    [self writeValue:[value toList]];
+  } else if ([value isKindOfClass:[AllNullableTypes class]]) {
+    [self writeByte:129];
+    [self writeValue:[value toList]];
+  } else if ([value isKindOfClass:[AllNullableTypesWrapper class]]) {
+    [self writeByte:130];
+    [self writeValue:[value toList]];
+  } else if ([value isKindOfClass:[AllTypes class]]) {
+    [self writeByte:131];
+    [self writeValue:[value toList]];
+  } else {
+    [super writeValue:value];
+  }
+}
+@end
+
+@interface HostIntegrationCoreApiCodecReaderWriter : FlutterStandardReaderWriter
+@end
+@implementation HostIntegrationCoreApiCodecReaderWriter
+- (FlutterStandardWriter *)writerWithData:(NSMutableData *)data {
+  return [[HostIntegrationCoreApiCodecWriter alloc] initWithData:data];
+}
+- (FlutterStandardReader *)readerWithData:(NSData *)data {
+  return [[HostIntegrationCoreApiCodecReader alloc] initWithData:data];
+}
+@end
+
+NSObject<FlutterMessageCodec> *HostIntegrationCoreApiGetCodec() {
+  static FlutterStandardMessageCodec *sSharedObject = nil;
+  static dispatch_once_t sPred = 0;
+  dispatch_once(&sPred, ^{
+    HostIntegrationCoreApiCodecReaderWriter *readerWriter =
+        [[HostIntegrationCoreApiCodecReaderWriter alloc] init];
+    sSharedObject = [FlutterStandardMessageCodec codecWithReaderWriter:readerWriter];
+  });
+  return sSharedObject;
+}
+
+void HostIntegrationCoreApiSetup(id<FlutterBinaryMessenger> binaryMessenger,
+                                 NSObject<HostIntegrationCoreApi> *api) {
+  /// A no-op function taking no arguments and returning no value, to sanity
+  /// test basic calling.
+  {
+    FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc]
+           initWithName:@"dev.flutter.pigeon.HostIntegrationCoreApi.noop"
+        binaryMessenger:binaryMessenger
+                  codec:HostIntegrationCoreApiGetCodec()];
+    if (api) {
+      NSCAssert([api respondsToSelector:@selector(noopWithError:)],
+                @"HostIntegrationCoreApi api (%@) doesn't respond to @selector(noopWithError:)",
+                api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        FlutterError *error;
+        [api noopWithError:&error];
+        callback(wrapResult(nil, error));
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+  /// Returns the passed object, to test serialization and deserialization.
+  {
+    FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc]
+           initWithName:@"dev.flutter.pigeon.HostIntegrationCoreApi.echoAllTypes"
+        binaryMessenger:binaryMessenger
+                  codec:HostIntegrationCoreApiGetCodec()];
+    if (api) {
+      NSCAssert(
+          [api respondsToSelector:@selector(echoAllTypes:error:)],
+          @"HostIntegrationCoreApi api (%@) doesn't respond to @selector(echoAllTypes:error:)",
+          api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        NSArray *args = message;
+        AllTypes *arg_everything = GetNullableObjectAtIndex(args, 0);
+        FlutterError *error;
+        AllTypes *output = [api echoAllTypes:arg_everything error:&error];
+        callback(wrapResult(output, error));
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+  /// Returns the passed object, to test serialization and deserialization.
+  {
+    FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc]
+           initWithName:@"dev.flutter.pigeon.HostIntegrationCoreApi.echoAllNullableTypes"
+        binaryMessenger:binaryMessenger
+                  codec:HostIntegrationCoreApiGetCodec()];
+    if (api) {
+      NSCAssert([api respondsToSelector:@selector(echoAllNullableTypes:error:)],
+                @"HostIntegrationCoreApi api (%@) doesn't respond to "
+                @"@selector(echoAllNullableTypes:error:)",
+                api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        NSArray *args = message;
+        AllNullableTypes *arg_everything = GetNullableObjectAtIndex(args, 0);
+        FlutterError *error;
+        AllNullableTypes *output = [api echoAllNullableTypes:arg_everything error:&error];
+        callback(wrapResult(output, error));
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+  /// Returns an error, to test error handling.
+  {
+    FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc]
+           initWithName:@"dev.flutter.pigeon.HostIntegrationCoreApi.throwError"
+        binaryMessenger:binaryMessenger
+                  codec:HostIntegrationCoreApiGetCodec()];
+    if (api) {
+      NSCAssert(
+          [api respondsToSelector:@selector(throwErrorWithError:)],
+          @"HostIntegrationCoreApi api (%@) doesn't respond to @selector(throwErrorWithError:)",
+          api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        FlutterError *error;
+        [api throwErrorWithError:&error];
+        callback(wrapResult(nil, error));
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+  /// Returns passed in int.
+  {
+    FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc]
+           initWithName:@"dev.flutter.pigeon.HostIntegrationCoreApi.echoInt"
+        binaryMessenger:binaryMessenger
+                  codec:HostIntegrationCoreApiGetCodec()];
+    if (api) {
+      NSCAssert([api respondsToSelector:@selector(echoInt:error:)],
+                @"HostIntegrationCoreApi api (%@) doesn't respond to @selector(echoInt:error:)",
+                api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        NSArray *args = message;
+        NSNumber *arg_anInt = GetNullableObjectAtIndex(args, 0);
+        FlutterError *error;
+        NSNumber *output = [api echoInt:arg_anInt error:&error];
+        callback(wrapResult(output, error));
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+  /// Returns passed in double.
+  {
+    FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc]
+           initWithName:@"dev.flutter.pigeon.HostIntegrationCoreApi.echoDouble"
+        binaryMessenger:binaryMessenger
+                  codec:HostIntegrationCoreApiGetCodec()];
+    if (api) {
+      NSCAssert([api respondsToSelector:@selector(echoDouble:error:)],
+                @"HostIntegrationCoreApi api (%@) doesn't respond to @selector(echoDouble:error:)",
+                api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        NSArray *args = message;
+        NSNumber *arg_aDouble = GetNullableObjectAtIndex(args, 0);
+        FlutterError *error;
+        NSNumber *output = [api echoDouble:arg_aDouble error:&error];
+        callback(wrapResult(output, error));
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+  /// Returns the passed in boolean.
+  {
+    FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc]
+           initWithName:@"dev.flutter.pigeon.HostIntegrationCoreApi.echoBool"
+        binaryMessenger:binaryMessenger
+                  codec:HostIntegrationCoreApiGetCodec()];
+    if (api) {
+      NSCAssert([api respondsToSelector:@selector(echoBool:error:)],
+                @"HostIntegrationCoreApi api (%@) doesn't respond to @selector(echoBool:error:)",
+                api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        NSArray *args = message;
+        NSNumber *arg_aBool = GetNullableObjectAtIndex(args, 0);
+        FlutterError *error;
+        NSNumber *output = [api echoBool:arg_aBool error:&error];
+        callback(wrapResult(output, error));
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+  /// Returns the passed in string.
+  {
+    FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc]
+           initWithName:@"dev.flutter.pigeon.HostIntegrationCoreApi.echoString"
+        binaryMessenger:binaryMessenger
+                  codec:HostIntegrationCoreApiGetCodec()];
+    if (api) {
+      NSCAssert([api respondsToSelector:@selector(echoString:error:)],
+                @"HostIntegrationCoreApi api (%@) doesn't respond to @selector(echoString:error:)",
+                api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        NSArray *args = message;
+        NSString *arg_aString = GetNullableObjectAtIndex(args, 0);
+        FlutterError *error;
+        NSString *output = [api echoString:arg_aString error:&error];
+        callback(wrapResult(output, error));
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+  /// Returns the passed in Uint8List.
+  {
+    FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc]
+           initWithName:@"dev.flutter.pigeon.HostIntegrationCoreApi.echoUint8List"
+        binaryMessenger:binaryMessenger
+                  codec:HostIntegrationCoreApiGetCodec()];
+    if (api) {
+      NSCAssert(
+          [api respondsToSelector:@selector(echoUint8List:error:)],
+          @"HostIntegrationCoreApi api (%@) doesn't respond to @selector(echoUint8List:error:)",
+          api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        NSArray *args = message;
+        FlutterStandardTypedData *arg_aUint8List = GetNullableObjectAtIndex(args, 0);
+        FlutterError *error;
+        FlutterStandardTypedData *output = [api echoUint8List:arg_aUint8List error:&error];
+        callback(wrapResult(output, error));
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+  /// Returns the inner `aString` value from the wrapped object, to test
+  /// sending of nested objects.
+  {
+    FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc]
+           initWithName:@"dev.flutter.pigeon.HostIntegrationCoreApi.extractNestedNullableString"
+        binaryMessenger:binaryMessenger
+                  codec:HostIntegrationCoreApiGetCodec()];
+    if (api) {
+      NSCAssert([api respondsToSelector:@selector(extractNestedNullableStringFrom:error:)],
+                @"HostIntegrationCoreApi api (%@) doesn't respond to "
+                @"@selector(extractNestedNullableStringFrom:error:)",
+                api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        NSArray *args = message;
+        AllNullableTypesWrapper *arg_wrapper = GetNullableObjectAtIndex(args, 0);
+        FlutterError *error;
+        NSString *output = [api extractNestedNullableStringFrom:arg_wrapper error:&error];
+        callback(wrapResult(output, error));
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+  /// Returns the inner `aString` value from the wrapped object, to test
+  /// sending of nested objects.
+  {
+    FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc]
+           initWithName:@"dev.flutter.pigeon.HostIntegrationCoreApi.createNestedNullableString"
+        binaryMessenger:binaryMessenger
+                  codec:HostIntegrationCoreApiGetCodec()];
+    if (api) {
+      NSCAssert([api respondsToSelector:@selector(createNestedObjectWithNullableString:error:)],
+                @"HostIntegrationCoreApi api (%@) doesn't respond to "
+                @"@selector(createNestedObjectWithNullableString:error:)",
+                api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        NSArray *args = message;
+        NSString *arg_nullableString = GetNullableObjectAtIndex(args, 0);
+        FlutterError *error;
+        AllNullableTypesWrapper *output =
+            [api createNestedObjectWithNullableString:arg_nullableString error:&error];
+        callback(wrapResult(output, error));
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+  /// Returns passed in arguments of multiple types.
+  {
+    FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc]
+           initWithName:@"dev.flutter.pigeon.HostIntegrationCoreApi.sendMultipleNullableTypes"
+        binaryMessenger:binaryMessenger
+                  codec:HostIntegrationCoreApiGetCodec()];
+    if (api) {
+      NSCAssert([api respondsToSelector:@selector(sendMultipleNullableTypesABool:
+                                                                           anInt:aString:error:)],
+                @"HostIntegrationCoreApi api (%@) doesn't respond to "
+                @"@selector(sendMultipleNullableTypesABool:anInt:aString:error:)",
+                api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        NSArray *args = message;
+        NSNumber *arg_aNullableBool = GetNullableObjectAtIndex(args, 0);
+        NSNumber *arg_aNullableInt = GetNullableObjectAtIndex(args, 1);
+        NSString *arg_aNullableString = GetNullableObjectAtIndex(args, 2);
+        FlutterError *error;
+        AllNullableTypes *output = [api sendMultipleNullableTypesABool:arg_aNullableBool
+                                                                 anInt:arg_aNullableInt
+                                                               aString:arg_aNullableString
+                                                                 error:&error];
+        callback(wrapResult(output, error));
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+  /// Returns passed in int.
+  {
+    FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc]
+           initWithName:@"dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableInt"
+        binaryMessenger:binaryMessenger
+                  codec:HostIntegrationCoreApiGetCodec()];
+    if (api) {
+      NSCAssert(
+          [api respondsToSelector:@selector(echoNullableInt:error:)],
+          @"HostIntegrationCoreApi api (%@) doesn't respond to @selector(echoNullableInt:error:)",
+          api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        NSArray *args = message;
+        NSNumber *arg_aNullableInt = GetNullableObjectAtIndex(args, 0);
+        FlutterError *error;
+        NSNumber *output = [api echoNullableInt:arg_aNullableInt error:&error];
+        callback(wrapResult(output, error));
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+  /// Returns passed in double.
+  {
+    FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc]
+           initWithName:@"dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableDouble"
+        binaryMessenger:binaryMessenger
+                  codec:HostIntegrationCoreApiGetCodec()];
+    if (api) {
+      NSCAssert([api respondsToSelector:@selector(echoNullableDouble:error:)],
+                @"HostIntegrationCoreApi api (%@) doesn't respond to "
+                @"@selector(echoNullableDouble:error:)",
+                api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        NSArray *args = message;
+        NSNumber *arg_aNullableDouble = GetNullableObjectAtIndex(args, 0);
+        FlutterError *error;
+        NSNumber *output = [api echoNullableDouble:arg_aNullableDouble error:&error];
+        callback(wrapResult(output, error));
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+  /// Returns the passed in boolean.
+  {
+    FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc]
+           initWithName:@"dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableBool"
+        binaryMessenger:binaryMessenger
+                  codec:HostIntegrationCoreApiGetCodec()];
+    if (api) {
+      NSCAssert(
+          [api respondsToSelector:@selector(echoNullableBool:error:)],
+          @"HostIntegrationCoreApi api (%@) doesn't respond to @selector(echoNullableBool:error:)",
+          api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        NSArray *args = message;
+        NSNumber *arg_aNullableBool = GetNullableObjectAtIndex(args, 0);
+        FlutterError *error;
+        NSNumber *output = [api echoNullableBool:arg_aNullableBool error:&error];
+        callback(wrapResult(output, error));
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+  /// Returns the passed in string.
+  {
+    FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc]
+           initWithName:@"dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableString"
+        binaryMessenger:binaryMessenger
+                  codec:HostIntegrationCoreApiGetCodec()];
+    if (api) {
+      NSCAssert([api respondsToSelector:@selector(echoNullableString:error:)],
+                @"HostIntegrationCoreApi api (%@) doesn't respond to "
+                @"@selector(echoNullableString:error:)",
+                api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        NSArray *args = message;
+        NSString *arg_aNullableString = GetNullableObjectAtIndex(args, 0);
+        FlutterError *error;
+        NSString *output = [api echoNullableString:arg_aNullableString error:&error];
+        callback(wrapResult(output, error));
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+  /// Returns the passed in Uint8List.
+  {
+    FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc]
+           initWithName:@"dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableUint8List"
+        binaryMessenger:binaryMessenger
+                  codec:HostIntegrationCoreApiGetCodec()];
+    if (api) {
+      NSCAssert([api respondsToSelector:@selector(echoNullableUint8List:error:)],
+                @"HostIntegrationCoreApi api (%@) doesn't respond to "
+                @"@selector(echoNullableUint8List:error:)",
+                api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        NSArray *args = message;
+        FlutterStandardTypedData *arg_aNullableUint8List = GetNullableObjectAtIndex(args, 0);
+        FlutterError *error;
+        FlutterStandardTypedData *output = [api echoNullableUint8List:arg_aNullableUint8List
+                                                                error:&error];
+        callback(wrapResult(output, error));
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+  /// A no-op function taking no arguments and returning no value, to sanity
+  /// test basic asynchronous calling.
+  {
+    FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc]
+           initWithName:@"dev.flutter.pigeon.HostIntegrationCoreApi.noopAsync"
+        binaryMessenger:binaryMessenger
+                  codec:HostIntegrationCoreApiGetCodec()];
+    if (api) {
+      NSCAssert(
+          [api respondsToSelector:@selector(noopAsyncWithCompletion:)],
+          @"HostIntegrationCoreApi api (%@) doesn't respond to @selector(noopAsyncWithCompletion:)",
+          api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        [api noopAsyncWithCompletion:^(FlutterError *_Nullable error) {
+          callback(wrapResult(nil, error));
+        }];
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+  /// Returns the passed string asynchronously.
+  {
+    FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc]
+           initWithName:@"dev.flutter.pigeon.HostIntegrationCoreApi.echoAsyncString"
+        binaryMessenger:binaryMessenger
+                  codec:HostIntegrationCoreApiGetCodec()];
+    if (api) {
+      NSCAssert([api respondsToSelector:@selector(echoAsyncString:completion:)],
+                @"HostIntegrationCoreApi api (%@) doesn't respond to "
+                @"@selector(echoAsyncString:completion:)",
+                api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        NSArray *args = message;
+        NSString *arg_aString = GetNullableObjectAtIndex(args, 0);
+        [api echoAsyncString:arg_aString
+                  completion:^(NSString *_Nullable output, FlutterError *_Nullable error) {
+                    callback(wrapResult(output, error));
+                  }];
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+  {
+    FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc]
+           initWithName:@"dev.flutter.pigeon.HostIntegrationCoreApi.callFlutterNoop"
+        binaryMessenger:binaryMessenger
+                  codec:HostIntegrationCoreApiGetCodec()];
+    if (api) {
+      NSCAssert([api respondsToSelector:@selector(callFlutterNoopWithCompletion:)],
+                @"HostIntegrationCoreApi api (%@) doesn't respond to "
+                @"@selector(callFlutterNoopWithCompletion:)",
+                api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        [api callFlutterNoopWithCompletion:^(FlutterError *_Nullable error) {
+          callback(wrapResult(nil, error));
+        }];
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+  {
+    FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc]
+           initWithName:@"dev.flutter.pigeon.HostIntegrationCoreApi.callFlutterEchoString"
+        binaryMessenger:binaryMessenger
+                  codec:HostIntegrationCoreApiGetCodec()];
+    if (api) {
+      NSCAssert([api respondsToSelector:@selector(callFlutterEchoString:completion:)],
+                @"HostIntegrationCoreApi api (%@) doesn't respond to "
+                @"@selector(callFlutterEchoString:completion:)",
+                api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        NSArray *args = message;
+        NSString *arg_aString = GetNullableObjectAtIndex(args, 0);
+        [api callFlutterEchoString:arg_aString
+                        completion:^(NSString *_Nullable output, FlutterError *_Nullable error) {
+                          callback(wrapResult(output, error));
+                        }];
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+}
+@interface FlutterIntegrationCoreApiCodecReader : FlutterStandardReader
+@end
+@implementation FlutterIntegrationCoreApiCodecReader
+- (nullable id)readValueOfType:(UInt8)type {
+  switch (type) {
+    case 128:
+      return [AllNullableTypes fromList:[self readValue]];
+
+    case 129:
+      return [AllTypes fromList:[self readValue]];
+
+    default:
+      return [super readValueOfType:type];
+  }
+}
+@end
+
+@interface FlutterIntegrationCoreApiCodecWriter : FlutterStandardWriter
+@end
+@implementation FlutterIntegrationCoreApiCodecWriter
+- (void)writeValue:(id)value {
+  if ([value isKindOfClass:[AllNullableTypes class]]) {
+    [self writeByte:128];
+    [self writeValue:[value toList]];
+  } else if ([value isKindOfClass:[AllTypes class]]) {
+    [self writeByte:129];
+    [self writeValue:[value toList]];
+  } else {
+    [super writeValue:value];
+  }
+}
+@end
+
+@interface FlutterIntegrationCoreApiCodecReaderWriter : FlutterStandardReaderWriter
+@end
+@implementation FlutterIntegrationCoreApiCodecReaderWriter
+- (FlutterStandardWriter *)writerWithData:(NSMutableData *)data {
+  return [[FlutterIntegrationCoreApiCodecWriter alloc] initWithData:data];
+}
+- (FlutterStandardReader *)readerWithData:(NSData *)data {
+  return [[FlutterIntegrationCoreApiCodecReader alloc] initWithData:data];
+}
+@end
+
+NSObject<FlutterMessageCodec> *FlutterIntegrationCoreApiGetCodec() {
+  static FlutterStandardMessageCodec *sSharedObject = nil;
+  static dispatch_once_t sPred = 0;
+  dispatch_once(&sPred, ^{
+    FlutterIntegrationCoreApiCodecReaderWriter *readerWriter =
+        [[FlutterIntegrationCoreApiCodecReaderWriter alloc] init];
+    sSharedObject = [FlutterStandardMessageCodec codecWithReaderWriter:readerWriter];
+  });
+  return sSharedObject;
+}
+
+@interface FlutterIntegrationCoreApi ()
+@property(nonatomic, strong) NSObject<FlutterBinaryMessenger> *binaryMessenger;
+@end
+
+@implementation FlutterIntegrationCoreApi
+
+- (instancetype)initWithBinaryMessenger:(NSObject<FlutterBinaryMessenger> *)binaryMessenger {
+  self = [super init];
+  if (self) {
+    _binaryMessenger = binaryMessenger;
+  }
+  return self;
+}
+- (void)noopWithCompletion:(void (^)(NSError *_Nullable))completion {
+  FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
+      messageChannelWithName:@"dev.flutter.pigeon.FlutterIntegrationCoreApi.noop"
+             binaryMessenger:self.binaryMessenger
+                       codec:FlutterIntegrationCoreApiGetCodec()];
+  [channel sendMessage:nil
+                 reply:^(id reply) {
+                   completion(nil);
+                 }];
+}
+- (void)echoAllTypes:(AllTypes *)arg_everything
+          completion:(void (^)(AllTypes *_Nullable, NSError *_Nullable))completion {
+  FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
+      messageChannelWithName:@"dev.flutter.pigeon.FlutterIntegrationCoreApi.echoAllTypes"
+             binaryMessenger:self.binaryMessenger
+                       codec:FlutterIntegrationCoreApiGetCodec()];
+  [channel sendMessage:@[ arg_everything ?: [NSNull null] ]
+                 reply:^(id reply) {
+                   AllTypes *output = reply;
+                   completion(output, nil);
+                 }];
+}
+- (void)echoAllNullableTypes:(AllNullableTypes *)arg_everything
+                  completion:(void (^)(AllNullableTypes *_Nullable, NSError *_Nullable))completion {
+  FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
+      messageChannelWithName:@"dev.flutter.pigeon.FlutterIntegrationCoreApi.echoAllNullableTypes"
+             binaryMessenger:self.binaryMessenger
+                       codec:FlutterIntegrationCoreApiGetCodec()];
+  [channel sendMessage:@[ arg_everything ?: [NSNull null] ]
+                 reply:^(id reply) {
+                   AllNullableTypes *output = reply;
+                   completion(output, nil);
+                 }];
+}
+- (void)echoString:(NSString *)arg_aString
+        completion:(void (^)(NSString *_Nullable, NSError *_Nullable))completion {
+  FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
+      messageChannelWithName:@"dev.flutter.pigeon.FlutterIntegrationCoreApi.echoString"
+             binaryMessenger:self.binaryMessenger
+                       codec:FlutterIntegrationCoreApiGetCodec()];
+  [channel sendMessage:@[ arg_aString ?: [NSNull null] ]
+                 reply:^(id reply) {
+                   NSString *output = reply;
+                   completion(output, nil);
+                 }];
+}
+@end
+NSObject<FlutterMessageCodec> *HostTrivialApiGetCodec() {
+  static FlutterStandardMessageCodec *sSharedObject = nil;
+  sSharedObject = [FlutterStandardMessageCodec sharedInstance];
+  return sSharedObject;
+}
+
+void HostTrivialApiSetup(id<FlutterBinaryMessenger> binaryMessenger,
+                         NSObject<HostTrivialApi> *api) {
+  {
+    FlutterBasicMessageChannel *channel =
+        [[FlutterBasicMessageChannel alloc] initWithName:@"dev.flutter.pigeon.HostTrivialApi.noop"
+                                         binaryMessenger:binaryMessenger
+                                                   codec:HostTrivialApiGetCodec()];
+    if (api) {
+      NSCAssert([api respondsToSelector:@selector(noopWithError:)],
+                @"HostTrivialApi api (%@) doesn't respond to @selector(noopWithError:)", api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        FlutterError *error;
+        [api noopWithError:&error];
+        callback(wrapResult(nil, error));
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+}
diff --git a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/.gitignore b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/.gitignore
index c69837a..a870aa1 100644
--- a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/.gitignore
+++ b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/.gitignore
@@ -3,3 +3,4 @@
 # such as a flag to suppress version stamp generation.
 *.kt
 !TestPlugin.kt
+!CoreTests.gen.kt
\ No newline at end of file
diff --git a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt
new file mode 100644
index 0000000..bcd41b0
--- /dev/null
+++ b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt
@@ -0,0 +1,793 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+// 
+// Autogenerated from Pigeon (v4.2.12), do not edit directly.
+// See also: https://pub.dev/packages/pigeon
+
+package com.example.test_plugin
+
+import android.util.Log
+import io.flutter.plugin.common.BasicMessageChannel
+import io.flutter.plugin.common.BinaryMessenger
+import io.flutter.plugin.common.MessageCodec
+import io.flutter.plugin.common.StandardMessageCodec
+import java.io.ByteArrayOutputStream
+import java.nio.ByteBuffer
+
+/** Generated class from Pigeon. */
+
+enum class AnEnum(val raw: Int) {
+  ONE(0),
+  TWO(1),
+  THREE(2);
+
+  companion object {
+    fun ofRaw(raw: Int): AnEnum? {
+      return values().firstOrNull { it.raw == raw }
+    }
+  }
+}
+
+/** Generated class from Pigeon that represents data sent in messages. */
+data class AllTypes (
+  val aBool: Boolean,
+  val anInt: Long,
+  val aDouble: Double,
+  val aString: String,
+  val aByteArray: ByteArray,
+  val a4ByteArray: IntArray,
+  val a8ByteArray: LongArray,
+  val aFloatArray: DoubleArray,
+  val aList: List<Any?>,
+  val aMap: Map<Any, Any?>,
+  val anEnum: AnEnum
+
+) {
+  companion object {
+    @Suppress("UNCHECKED_CAST")
+    fun fromList(list: List<Any?>): AllTypes {
+      val aBool = list[0] as Boolean
+      val anInt = list[1] as Long
+      val aDouble = list[2] as Double
+      val aString = list[3] as String
+      val aByteArray = list[4] as ByteArray
+      val a4ByteArray = list[5] as IntArray
+      val a8ByteArray = list[6] as LongArray
+      val aFloatArray = list[7] as DoubleArray
+      val aList = list[8] as List<Any?>
+      val aMap = list[9] as Map<Any, Any?>
+      val anEnum = AnEnum.ofRaw(list[10] as Int)!!
+      return AllTypes(aBool, anInt, aDouble, aString, aByteArray, a4ByteArray, a8ByteArray, aFloatArray, aList, aMap, anEnum)
+    }
+  }
+  fun toList(): List<Any?> {
+    return listOf<Any?>(
+      aBool,
+      anInt,
+      aDouble,
+      aString,
+      aByteArray,
+      a4ByteArray,
+      a8ByteArray,
+      aFloatArray,
+      aList,
+      aMap,
+      anEnum?.raw,
+    )
+  }
+}
+
+/** Generated class from Pigeon that represents data sent in messages. */
+data class AllNullableTypes (
+  val aNullableBool: Boolean? = null,
+  val aNullableInt: Long? = null,
+  val aNullableDouble: Double? = null,
+  val aNullableString: String? = null,
+  val aNullableByteArray: ByteArray? = null,
+  val aNullable4ByteArray: IntArray? = null,
+  val aNullable8ByteArray: LongArray? = null,
+  val aNullableFloatArray: DoubleArray? = null,
+  val aNullableList: List<Any?>? = null,
+  val aNullableMap: Map<Any, Any?>? = null,
+  val nullableNestedList: List<List<Boolean?>?>? = null,
+  val nullableMapWithAnnotations: Map<String?, String?>? = null,
+  val nullableMapWithObject: Map<String?, Any?>? = null,
+  val aNullableEnum: AnEnum? = null
+
+) {
+  companion object {
+    @Suppress("UNCHECKED_CAST")
+    fun fromList(list: List<Any?>): AllNullableTypes {
+      val aNullableBool = list[0] as? Boolean
+      val aNullableInt = list[1].let { if (it is Int) it.toLong() else it as? Long }
+      val aNullableDouble = list[2] as? Double
+      val aNullableString = list[3] as? String
+      val aNullableByteArray = list[4] as? ByteArray
+      val aNullable4ByteArray = list[5] as? IntArray
+      val aNullable8ByteArray = list[6] as? LongArray
+      val aNullableFloatArray = list[7] as? DoubleArray
+      val aNullableList = list[8] as? List<Any?>
+      val aNullableMap = list[9] as? Map<Any, Any?>
+      val nullableNestedList = list[10] as? List<List<Boolean?>?>
+      val nullableMapWithAnnotations = list[11] as? Map<String?, String?>
+      val nullableMapWithObject = list[12] as? Map<String?, Any?>
+      val aNullableEnum: AnEnum? = (list[13] as? Int)?.let {
+        AnEnum.ofRaw(it)
+      }
+
+      return AllNullableTypes(aNullableBool, aNullableInt, aNullableDouble, aNullableString, aNullableByteArray, aNullable4ByteArray, aNullable8ByteArray, aNullableFloatArray, aNullableList, aNullableMap, nullableNestedList, nullableMapWithAnnotations, nullableMapWithObject, aNullableEnum)
+    }
+  }
+  fun toList(): List<Any?> {
+    return listOf<Any?>(
+      aNullableBool,
+      aNullableInt,
+      aNullableDouble,
+      aNullableString,
+      aNullableByteArray,
+      aNullable4ByteArray,
+      aNullable8ByteArray,
+      aNullableFloatArray,
+      aNullableList,
+      aNullableMap,
+      nullableNestedList,
+      nullableMapWithAnnotations,
+      nullableMapWithObject,
+      aNullableEnum?.raw,
+    )
+  }
+}
+
+/** Generated class from Pigeon that represents data sent in messages. */
+data class AllNullableTypesWrapper (
+  val values: AllNullableTypes
+
+) {
+  companion object {
+    @Suppress("UNCHECKED_CAST")
+    fun fromList(list: List<Any?>): AllNullableTypesWrapper {
+      val values = AllNullableTypes.fromList(list[0] as List<Any?>)
+
+      return AllNullableTypesWrapper(values)
+    }
+  }
+  fun toList(): List<Any?> {
+    return listOf<Any?>(
+      values?.toList(),
+    )
+  }
+}
+
+@Suppress("UNCHECKED_CAST")
+private object HostIntegrationCoreApiCodec : StandardMessageCodec() {
+  override fun readValueOfType(type: Byte, buffer: ByteBuffer): Any? {
+    return when (type) {
+      128.toByte() -> {
+        return (readValue(buffer) as? List<Any?>)?.let {
+          AllNullableTypes.fromList(it)
+        }
+      }
+      129.toByte() -> {
+        return (readValue(buffer) as? List<Any?>)?.let {
+          AllNullableTypes.fromList(it)
+        }
+      }
+      130.toByte() -> {
+        return (readValue(buffer) as? List<Any?>)?.let {
+          AllNullableTypesWrapper.fromList(it)
+        }
+      }
+      131.toByte() -> {
+        return (readValue(buffer) as? List<Any?>)?.let {
+          AllTypes.fromList(it)
+        }
+      }
+      else -> super.readValueOfType(type, buffer)
+    }
+  }
+  override fun writeValue(stream: ByteArrayOutputStream, value: Any?)   {
+    when (value) {
+      is AllNullableTypes -> {
+        stream.write(128)
+        writeValue(stream, value.toList())
+      }
+      is AllNullableTypes -> {
+        stream.write(129)
+        writeValue(stream, value.toList())
+      }
+      is AllNullableTypesWrapper -> {
+        stream.write(130)
+        writeValue(stream, value.toList())
+      }
+      is AllTypes -> {
+        stream.write(131)
+        writeValue(stream, value.toList())
+      }
+      else -> super.writeValue(stream, value)
+    }
+  }
+}
+
+/**
+ * The core interface that each host language plugin must implement in
+ * platform_test integration tests.
+ *
+ * Generated interface from Pigeon that represents a handler of messages from Flutter.
+ */
+interface HostIntegrationCoreApi {
+  /**
+   * A no-op function taking no arguments and returning no value, to sanity
+   * test basic calling.
+   */
+  fun noop()
+  /** Returns the passed object, to test serialization and deserialization. */
+  fun echoAllTypes(everything: AllTypes): AllTypes
+  /** Returns the passed object, to test serialization and deserialization. */
+  fun echoAllNullableTypes(everything: AllNullableTypes?): AllNullableTypes?
+  /** Returns an error, to test error handling. */
+  fun throwError()
+  /** Returns passed in int. */
+  fun echoInt(anInt: Long): Long
+  /** Returns passed in double. */
+  fun echoDouble(aDouble: Double): Double
+  /** Returns the passed in boolean. */
+  fun echoBool(aBool: Boolean): Boolean
+  /** Returns the passed in string. */
+  fun echoString(aString: String): String
+  /** Returns the passed in Uint8List. */
+  fun echoUint8List(aUint8List: ByteArray): ByteArray
+  /**
+   * Returns the inner `aString` value from the wrapped object, to test
+   * sending of nested objects.
+   */
+  fun extractNestedNullableString(wrapper: AllNullableTypesWrapper): String?
+  /**
+   * Returns the inner `aString` value from the wrapped object, to test
+   * sending of nested objects.
+   */
+  fun createNestedNullableString(nullableString: String?): AllNullableTypesWrapper
+  /** Returns passed in arguments of multiple types. */
+  fun sendMultipleNullableTypes(aNullableBool: Boolean?, aNullableInt: Long?, aNullableString: String?): AllNullableTypes
+  /** Returns passed in int. */
+  fun echoNullableInt(aNullableInt: Long?): Long?
+  /** Returns passed in double. */
+  fun echoNullableDouble(aNullableDouble: Double?): Double?
+  /** Returns the passed in boolean. */
+  fun echoNullableBool(aNullableBool: Boolean?): Boolean?
+  /** Returns the passed in string. */
+  fun echoNullableString(aNullableString: String?): String?
+  /** Returns the passed in Uint8List. */
+  fun echoNullableUint8List(aNullableUint8List: ByteArray?): ByteArray?
+  /**
+   * A no-op function taking no arguments and returning no value, to sanity
+   * test basic asynchronous calling.
+   */
+  fun noopAsync(callback: () -> Unit)
+  /** Returns the passed string asynchronously. */
+  fun echoAsyncString(aString: String, callback: (String) -> Unit)
+  fun callFlutterNoop(callback: () -> Unit)
+  fun callFlutterEchoString(aString: String, callback: (String) -> Unit)
+
+  companion object {
+    /** The codec used by HostIntegrationCoreApi. */
+    val codec: MessageCodec<Any?> by lazy {
+      HostIntegrationCoreApiCodec
+    }
+    /** Sets up an instance of `HostIntegrationCoreApi` to handle messages through the `binaryMessenger`. */
+    @Suppress("UNCHECKED_CAST")
+    fun setUp(binaryMessenger: BinaryMessenger, api: HostIntegrationCoreApi?) {
+      run {
+        val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.HostIntegrationCoreApi.noop", codec)
+        if (api != null) {
+          channel.setMessageHandler { _, reply ->
+            var wrapped = listOf<Any?>()
+            try {
+              api.noop()
+              wrapped = listOf<Any?>(null)
+            } catch (exception: Error) {
+              wrapped = wrapError(exception)
+            }
+            reply.reply(wrapped)
+          }
+        } else {
+          channel.setMessageHandler(null)
+        }
+      }
+      run {
+        val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.HostIntegrationCoreApi.echoAllTypes", codec)
+        if (api != null) {
+          channel.setMessageHandler { message, reply ->
+            var wrapped = listOf<Any?>()
+            try {
+              val args = message as List<Any?>
+              val everythingArg = args[0] as AllTypes
+              wrapped = listOf<Any?>(api.echoAllTypes(everythingArg))
+            } catch (exception: Error) {
+              wrapped = wrapError(exception)
+            }
+            reply.reply(wrapped)
+          }
+        } else {
+          channel.setMessageHandler(null)
+        }
+      }
+      run {
+        val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.HostIntegrationCoreApi.echoAllNullableTypes", codec)
+        if (api != null) {
+          channel.setMessageHandler { message, reply ->
+            var wrapped = listOf<Any?>()
+            try {
+              val args = message as List<Any?>
+              val everythingArg = args[0] as? AllNullableTypes
+              wrapped = listOf<Any?>(api.echoAllNullableTypes(everythingArg))
+            } catch (exception: Error) {
+              wrapped = wrapError(exception)
+            }
+            reply.reply(wrapped)
+          }
+        } else {
+          channel.setMessageHandler(null)
+        }
+      }
+      run {
+        val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.HostIntegrationCoreApi.throwError", codec)
+        if (api != null) {
+          channel.setMessageHandler { _, reply ->
+            var wrapped = listOf<Any?>()
+            try {
+              api.throwError()
+              wrapped = listOf<Any?>(null)
+            } catch (exception: Error) {
+              wrapped = wrapError(exception)
+            }
+            reply.reply(wrapped)
+          }
+        } else {
+          channel.setMessageHandler(null)
+        }
+      }
+      run {
+        val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.HostIntegrationCoreApi.echoInt", codec)
+        if (api != null) {
+          channel.setMessageHandler { message, reply ->
+            var wrapped = listOf<Any?>()
+            try {
+              val args = message as List<Any?>
+              val anIntArg = args[0].let { if (it is Int) it.toLong() else it as Long }
+              wrapped = listOf<Any?>(api.echoInt(anIntArg))
+            } catch (exception: Error) {
+              wrapped = wrapError(exception)
+            }
+            reply.reply(wrapped)
+          }
+        } else {
+          channel.setMessageHandler(null)
+        }
+      }
+      run {
+        val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.HostIntegrationCoreApi.echoDouble", codec)
+        if (api != null) {
+          channel.setMessageHandler { message, reply ->
+            var wrapped = listOf<Any?>()
+            try {
+              val args = message as List<Any?>
+              val aDoubleArg = args[0] as Double
+              wrapped = listOf<Any?>(api.echoDouble(aDoubleArg))
+            } catch (exception: Error) {
+              wrapped = wrapError(exception)
+            }
+            reply.reply(wrapped)
+          }
+        } else {
+          channel.setMessageHandler(null)
+        }
+      }
+      run {
+        val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.HostIntegrationCoreApi.echoBool", codec)
+        if (api != null) {
+          channel.setMessageHandler { message, reply ->
+            var wrapped = listOf<Any?>()
+            try {
+              val args = message as List<Any?>
+              val aBoolArg = args[0] as Boolean
+              wrapped = listOf<Any?>(api.echoBool(aBoolArg))
+            } catch (exception: Error) {
+              wrapped = wrapError(exception)
+            }
+            reply.reply(wrapped)
+          }
+        } else {
+          channel.setMessageHandler(null)
+        }
+      }
+      run {
+        val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.HostIntegrationCoreApi.echoString", codec)
+        if (api != null) {
+          channel.setMessageHandler { message, reply ->
+            var wrapped = listOf<Any?>()
+            try {
+              val args = message as List<Any?>
+              val aStringArg = args[0] as String
+              wrapped = listOf<Any?>(api.echoString(aStringArg))
+            } catch (exception: Error) {
+              wrapped = wrapError(exception)
+            }
+            reply.reply(wrapped)
+          }
+        } else {
+          channel.setMessageHandler(null)
+        }
+      }
+      run {
+        val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.HostIntegrationCoreApi.echoUint8List", codec)
+        if (api != null) {
+          channel.setMessageHandler { message, reply ->
+            var wrapped = listOf<Any?>()
+            try {
+              val args = message as List<Any?>
+              val aUint8ListArg = args[0] as ByteArray
+              wrapped = listOf<Any?>(api.echoUint8List(aUint8ListArg))
+            } catch (exception: Error) {
+              wrapped = wrapError(exception)
+            }
+            reply.reply(wrapped)
+          }
+        } else {
+          channel.setMessageHandler(null)
+        }
+      }
+      run {
+        val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.HostIntegrationCoreApi.extractNestedNullableString", codec)
+        if (api != null) {
+          channel.setMessageHandler { message, reply ->
+            var wrapped = listOf<Any?>()
+            try {
+              val args = message as List<Any?>
+              val wrapperArg = args[0] as AllNullableTypesWrapper
+              wrapped = listOf<Any?>(api.extractNestedNullableString(wrapperArg))
+            } catch (exception: Error) {
+              wrapped = wrapError(exception)
+            }
+            reply.reply(wrapped)
+          }
+        } else {
+          channel.setMessageHandler(null)
+        }
+      }
+      run {
+        val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.HostIntegrationCoreApi.createNestedNullableString", codec)
+        if (api != null) {
+          channel.setMessageHandler { message, reply ->
+            var wrapped = listOf<Any?>()
+            try {
+              val args = message as List<Any?>
+              val nullableStringArg = args[0] as? String
+              wrapped = listOf<Any?>(api.createNestedNullableString(nullableStringArg))
+            } catch (exception: Error) {
+              wrapped = wrapError(exception)
+            }
+            reply.reply(wrapped)
+          }
+        } else {
+          channel.setMessageHandler(null)
+        }
+      }
+      run {
+        val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.HostIntegrationCoreApi.sendMultipleNullableTypes", codec)
+        if (api != null) {
+          channel.setMessageHandler { message, reply ->
+            var wrapped = listOf<Any?>()
+            try {
+              val args = message as List<Any?>
+              val aNullableBoolArg = args[0] as? Boolean
+              val aNullableIntArg = args[1].let { if (it is Int) it.toLong() else it as? Long }
+              val aNullableStringArg = args[2] as? String
+              wrapped = listOf<Any?>(api.sendMultipleNullableTypes(aNullableBoolArg, aNullableIntArg, aNullableStringArg))
+            } catch (exception: Error) {
+              wrapped = wrapError(exception)
+            }
+            reply.reply(wrapped)
+          }
+        } else {
+          channel.setMessageHandler(null)
+        }
+      }
+      run {
+        val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableInt", codec)
+        if (api != null) {
+          channel.setMessageHandler { message, reply ->
+            var wrapped = listOf<Any?>()
+            try {
+              val args = message as List<Any?>
+              val aNullableIntArg = args[0].let { if (it is Int) it.toLong() else it as? Long }
+              wrapped = listOf<Any?>(api.echoNullableInt(aNullableIntArg))
+            } catch (exception: Error) {
+              wrapped = wrapError(exception)
+            }
+            reply.reply(wrapped)
+          }
+        } else {
+          channel.setMessageHandler(null)
+        }
+      }
+      run {
+        val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableDouble", codec)
+        if (api != null) {
+          channel.setMessageHandler { message, reply ->
+            var wrapped = listOf<Any?>()
+            try {
+              val args = message as List<Any?>
+              val aNullableDoubleArg = args[0] as? Double
+              wrapped = listOf<Any?>(api.echoNullableDouble(aNullableDoubleArg))
+            } catch (exception: Error) {
+              wrapped = wrapError(exception)
+            }
+            reply.reply(wrapped)
+          }
+        } else {
+          channel.setMessageHandler(null)
+        }
+      }
+      run {
+        val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableBool", codec)
+        if (api != null) {
+          channel.setMessageHandler { message, reply ->
+            var wrapped = listOf<Any?>()
+            try {
+              val args = message as List<Any?>
+              val aNullableBoolArg = args[0] as? Boolean
+              wrapped = listOf<Any?>(api.echoNullableBool(aNullableBoolArg))
+            } catch (exception: Error) {
+              wrapped = wrapError(exception)
+            }
+            reply.reply(wrapped)
+          }
+        } else {
+          channel.setMessageHandler(null)
+        }
+      }
+      run {
+        val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableString", codec)
+        if (api != null) {
+          channel.setMessageHandler { message, reply ->
+            var wrapped = listOf<Any?>()
+            try {
+              val args = message as List<Any?>
+              val aNullableStringArg = args[0] as? String
+              wrapped = listOf<Any?>(api.echoNullableString(aNullableStringArg))
+            } catch (exception: Error) {
+              wrapped = wrapError(exception)
+            }
+            reply.reply(wrapped)
+          }
+        } else {
+          channel.setMessageHandler(null)
+        }
+      }
+      run {
+        val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableUint8List", codec)
+        if (api != null) {
+          channel.setMessageHandler { message, reply ->
+            var wrapped = listOf<Any?>()
+            try {
+              val args = message as List<Any?>
+              val aNullableUint8ListArg = args[0] as? ByteArray
+              wrapped = listOf<Any?>(api.echoNullableUint8List(aNullableUint8ListArg))
+            } catch (exception: Error) {
+              wrapped = wrapError(exception)
+            }
+            reply.reply(wrapped)
+          }
+        } else {
+          channel.setMessageHandler(null)
+        }
+      }
+      run {
+        val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.HostIntegrationCoreApi.noopAsync", codec)
+        if (api != null) {
+          channel.setMessageHandler { _, reply ->
+            var wrapped = listOf<Any?>()
+            try {
+              api.noopAsync() {
+                reply.reply(wrapResult(null))
+              }
+            } catch (exception: Error) {
+              wrapped = wrapError(exception)
+              reply.reply(wrapped)
+            }
+          }
+        } else {
+          channel.setMessageHandler(null)
+        }
+      }
+      run {
+        val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.HostIntegrationCoreApi.echoAsyncString", codec)
+        if (api != null) {
+          channel.setMessageHandler { message, reply ->
+            var wrapped = listOf<Any?>()
+            try {
+              val args = message as List<Any?>
+              val aStringArg = args[0] as String
+              api.echoAsyncString(aStringArg) {
+                reply.reply(wrapResult(it))
+              }
+            } catch (exception: Error) {
+              wrapped = wrapError(exception)
+              reply.reply(wrapped)
+            }
+          }
+        } else {
+          channel.setMessageHandler(null)
+        }
+      }
+      run {
+        val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.HostIntegrationCoreApi.callFlutterNoop", codec)
+        if (api != null) {
+          channel.setMessageHandler { _, reply ->
+            var wrapped = listOf<Any?>()
+            try {
+              api.callFlutterNoop() {
+                reply.reply(wrapResult(null))
+              }
+            } catch (exception: Error) {
+              wrapped = wrapError(exception)
+              reply.reply(wrapped)
+            }
+          }
+        } else {
+          channel.setMessageHandler(null)
+        }
+      }
+      run {
+        val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.HostIntegrationCoreApi.callFlutterEchoString", codec)
+        if (api != null) {
+          channel.setMessageHandler { message, reply ->
+            var wrapped = listOf<Any?>()
+            try {
+              val args = message as List<Any?>
+              val aStringArg = args[0] as String
+              api.callFlutterEchoString(aStringArg) {
+                reply.reply(wrapResult(it))
+              }
+            } catch (exception: Error) {
+              wrapped = wrapError(exception)
+              reply.reply(wrapped)
+            }
+          }
+        } else {
+          channel.setMessageHandler(null)
+        }
+      }
+    }
+  }
+}
+@Suppress("UNCHECKED_CAST")
+private object FlutterIntegrationCoreApiCodec : StandardMessageCodec() {
+  override fun readValueOfType(type: Byte, buffer: ByteBuffer): Any? {
+    return when (type) {
+      128.toByte() -> {
+        return (readValue(buffer) as? List<Any?>)?.let {
+          AllNullableTypes.fromList(it)
+        }
+      }
+      129.toByte() -> {
+        return (readValue(buffer) as? List<Any?>)?.let {
+          AllTypes.fromList(it)
+        }
+      }
+      else -> super.readValueOfType(type, buffer)
+    }
+  }
+  override fun writeValue(stream: ByteArrayOutputStream, value: Any?)   {
+    when (value) {
+      is AllNullableTypes -> {
+        stream.write(128)
+        writeValue(stream, value.toList())
+      }
+      is AllTypes -> {
+        stream.write(129)
+        writeValue(stream, value.toList())
+      }
+      else -> super.writeValue(stream, value)
+    }
+  }
+}
+
+/**
+ * The core interface that the Dart platform_test code implements for host
+ * integration tests to call into.
+ *
+ * Generated class from Pigeon that represents Flutter messages that can be called from Kotlin.
+ */
+@Suppress("UNCHECKED_CAST")
+class FlutterIntegrationCoreApi(private val binaryMessenger: BinaryMessenger) {
+  companion object {
+    /** The codec used by FlutterIntegrationCoreApi. */
+    val codec: MessageCodec<Any?> by lazy {
+      FlutterIntegrationCoreApiCodec
+    }
+  }
+  /**
+   * A no-op function taking no arguments and returning no value, to sanity
+   * test basic calling.
+   */
+  fun noop(callback: () -> Unit) {
+    val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.FlutterIntegrationCoreApi.noop", codec)
+    channel.send(null) {
+      callback()
+    }
+  }
+  /** Returns the passed object, to test serialization and deserialization. */
+  fun echoAllTypes(everythingArg: AllTypes, callback: (AllTypes) -> Unit) {
+    val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoAllTypes", codec)
+    channel.send(listOf(everythingArg)) {
+      val result = it as AllTypes
+      callback(result)
+    }
+  }
+  /** Returns the passed object, to test serialization and deserialization. */
+  fun echoAllNullableTypes(everythingArg: AllNullableTypes, callback: (AllNullableTypes) -> Unit) {
+    val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoAllNullableTypes", codec)
+    channel.send(listOf(everythingArg)) {
+      val result = it as AllNullableTypes
+      callback(result)
+    }
+  }
+  /** Returns the passed string, to test serialization and deserialization. */
+  fun echoString(aStringArg: String, callback: (String) -> Unit) {
+    val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoString", codec)
+    channel.send(listOf(aStringArg)) {
+      val result = it as String
+      callback(result)
+    }
+  }
+}
+/**
+ * An API that can be implemented for minimal, compile-only tests.
+ *
+ * Generated interface from Pigeon that represents a handler of messages from Flutter.
+ */
+interface HostTrivialApi {
+  fun noop()
+
+  companion object {
+    /** The codec used by HostTrivialApi. */
+    val codec: MessageCodec<Any?> by lazy {
+      StandardMessageCodec()
+    }
+    /** Sets up an instance of `HostTrivialApi` to handle messages through the `binaryMessenger`. */
+    @Suppress("UNCHECKED_CAST")
+    fun setUp(binaryMessenger: BinaryMessenger, api: HostTrivialApi?) {
+      run {
+        val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.HostTrivialApi.noop", codec)
+        if (api != null) {
+          channel.setMessageHandler { _, reply ->
+            var wrapped = listOf<Any?>()
+            try {
+              api.noop()
+              wrapped = listOf<Any?>(null)
+            } catch (exception: Error) {
+              wrapped = wrapError(exception)
+            }
+            reply.reply(wrapped)
+          }
+        } else {
+          channel.setMessageHandler(null)
+        }
+      }
+    }
+  }
+}
+
+private fun wrapResult(result: Any?): List<Any?> {
+  return listOf(result)
+}
+
+private fun wrapError(exception: Throwable): List<Any> {
+  return listOf<Any>(
+    exception.javaClass.simpleName,
+    exception.toString(),
+    "Cause: " + exception.cause + ", Stacktrace: " + Log.getStackTraceString(exception)
+  )
+}
diff --git a/packages/pigeon/platform_tests/test_plugin/ios/Classes/.gitignore b/packages/pigeon/platform_tests/test_plugin/ios/Classes/.gitignore
index ebbbb45..65eaa14 100644
--- a/packages/pigeon/platform_tests/test_plugin/ios/Classes/.gitignore
+++ b/packages/pigeon/platform_tests/test_plugin/ios/Classes/.gitignore
@@ -2,3 +2,4 @@
 # changes on generated files. This will need a way to avoid unnecessary churn,
 # such as a flag to suppress version stamp generation.
 *.gen.swift
+!CoreTests.gen.swift
\ No newline at end of file
diff --git a/packages/pigeon/platform_tests/test_plugin/ios/Classes/CoreTests.gen.swift b/packages/pigeon/platform_tests/test_plugin/ios/Classes/CoreTests.gen.swift
new file mode 100644
index 0000000..385b507
--- /dev/null
+++ b/packages/pigeon/platform_tests/test_plugin/ios/Classes/CoreTests.gen.swift
@@ -0,0 +1,657 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+// 
+// Autogenerated from Pigeon (v4.2.12), do not edit directly.
+// See also: https://pub.dev/packages/pigeon
+
+import Foundation
+#if os(iOS)
+import Flutter
+#elseif os(macOS)
+import FlutterMacOS
+#else
+#error("Unsupported platform.")
+#endif
+
+
+/// Generated class from Pigeon.
+
+enum AnEnum: Int {
+  case one = 0
+  case two = 1
+  case three = 2
+}
+
+/// Generated class from Pigeon that represents data sent in messages.
+struct AllTypes {
+  var aBool: Bool
+  var anInt: Int32
+  var aDouble: Double
+  var aString: String
+  var aByteArray: FlutterStandardTypedData
+  var a4ByteArray: FlutterStandardTypedData
+  var a8ByteArray: FlutterStandardTypedData
+  var aFloatArray: FlutterStandardTypedData
+  var aList: [Any?]
+  var aMap: [AnyHashable: Any?]
+  var anEnum: AnEnum
+
+  static func fromList(_ list: [Any?]) -> AllTypes? {
+    let aBool = list[0] as! Bool
+    let anInt = list[1] as! Int32
+    let aDouble = list[2] as! Double
+    let aString = list[3] as! String
+    let aByteArray = list[4] as! FlutterStandardTypedData
+    let a4ByteArray = list[5] as! FlutterStandardTypedData
+    let a8ByteArray = list[6] as! FlutterStandardTypedData
+    let aFloatArray = list[7] as! FlutterStandardTypedData
+    let aList = list[8] as! [Any?]
+    let aMap = list[9] as! [AnyHashable: Any?]
+    let anEnum = AnEnum(rawValue: list[10] as! Int)!
+
+    return AllTypes(
+      aBool: aBool,
+      anInt: anInt,
+      aDouble: aDouble,
+      aString: aString,
+      aByteArray: aByteArray,
+      a4ByteArray: a4ByteArray,
+      a8ByteArray: a8ByteArray,
+      aFloatArray: aFloatArray,
+      aList: aList,
+      aMap: aMap,
+      anEnum: anEnum
+    )
+  }
+  func toList() -> [Any?] {
+    return [
+      aBool,
+      anInt,
+      aDouble,
+      aString,
+      aByteArray,
+      a4ByteArray,
+      a8ByteArray,
+      aFloatArray,
+      aList,
+      aMap,
+      anEnum.rawValue,
+    ]
+  }
+}
+
+/// Generated class from Pigeon that represents data sent in messages.
+struct AllNullableTypes {
+  var aNullableBool: Bool? = nil
+  var aNullableInt: Int32? = nil
+  var aNullableDouble: Double? = nil
+  var aNullableString: String? = nil
+  var aNullableByteArray: FlutterStandardTypedData? = nil
+  var aNullable4ByteArray: FlutterStandardTypedData? = nil
+  var aNullable8ByteArray: FlutterStandardTypedData? = nil
+  var aNullableFloatArray: FlutterStandardTypedData? = nil
+  var aNullableList: [Any?]? = nil
+  var aNullableMap: [AnyHashable: Any?]? = nil
+  var nullableNestedList: [[Bool?]?]? = nil
+  var nullableMapWithAnnotations: [String?: String?]? = nil
+  var nullableMapWithObject: [String?: Any?]? = nil
+  var aNullableEnum: AnEnum? = nil
+
+  static func fromList(_ list: [Any?]) -> AllNullableTypes? {
+    let aNullableBool = list[0] as? Bool 
+    let aNullableInt = list[1] as? Int32 
+    let aNullableDouble = list[2] as? Double 
+    let aNullableString = list[3] as? String 
+    let aNullableByteArray = list[4] as? FlutterStandardTypedData 
+    let aNullable4ByteArray = list[5] as? FlutterStandardTypedData 
+    let aNullable8ByteArray = list[6] as? FlutterStandardTypedData 
+    let aNullableFloatArray = list[7] as? FlutterStandardTypedData 
+    let aNullableList = list[8] as? [Any?] 
+    let aNullableMap = list[9] as? [AnyHashable: Any?] 
+    let nullableNestedList = list[10] as? [[Bool?]?] 
+    let nullableMapWithAnnotations = list[11] as? [String?: String?] 
+    let nullableMapWithObject = list[12] as? [String?: Any?] 
+    var aNullableEnum: AnEnum? = nil
+    if let aNullableEnumRawValue = list[13] as? Int {
+      aNullableEnum = AnEnum(rawValue: aNullableEnumRawValue)
+    }
+
+    return AllNullableTypes(
+      aNullableBool: aNullableBool,
+      aNullableInt: aNullableInt,
+      aNullableDouble: aNullableDouble,
+      aNullableString: aNullableString,
+      aNullableByteArray: aNullableByteArray,
+      aNullable4ByteArray: aNullable4ByteArray,
+      aNullable8ByteArray: aNullable8ByteArray,
+      aNullableFloatArray: aNullableFloatArray,
+      aNullableList: aNullableList,
+      aNullableMap: aNullableMap,
+      nullableNestedList: nullableNestedList,
+      nullableMapWithAnnotations: nullableMapWithAnnotations,
+      nullableMapWithObject: nullableMapWithObject,
+      aNullableEnum: aNullableEnum
+    )
+  }
+  func toList() -> [Any?] {
+    return [
+      aNullableBool,
+      aNullableInt,
+      aNullableDouble,
+      aNullableString,
+      aNullableByteArray,
+      aNullable4ByteArray,
+      aNullable8ByteArray,
+      aNullableFloatArray,
+      aNullableList,
+      aNullableMap,
+      nullableNestedList,
+      nullableMapWithAnnotations,
+      nullableMapWithObject,
+      aNullableEnum?.rawValue,
+    ]
+  }
+}
+
+/// Generated class from Pigeon that represents data sent in messages.
+struct AllNullableTypesWrapper {
+  var values: AllNullableTypes
+
+  static func fromList(_ list: [Any?]) -> AllNullableTypesWrapper? {
+    let values = AllNullableTypes.fromList(list[0] as! [Any?])!
+
+    return AllNullableTypesWrapper(
+      values: values
+    )
+  }
+  func toList() -> [Any?] {
+    return [
+      values.toList(),
+    ]
+  }
+}
+
+private class HostIntegrationCoreApiCodecReader: FlutterStandardReader {
+  override func readValue(ofType type: UInt8) -> Any? {
+    switch type {
+      case 128:
+        return AllNullableTypes.fromList(self.readValue() as! [Any])      
+      case 129:
+        return AllNullableTypes.fromList(self.readValue() as! [Any])      
+      case 130:
+        return AllNullableTypesWrapper.fromList(self.readValue() as! [Any])      
+      case 131:
+        return AllTypes.fromList(self.readValue() as! [Any])      
+      default:
+        return super.readValue(ofType: type)
+      
+    }
+  }
+}
+private class HostIntegrationCoreApiCodecWriter: FlutterStandardWriter {
+  override func writeValue(_ value: Any) {
+    if let value = value as? AllNullableTypes {
+      super.writeByte(128)
+      super.writeValue(value.toList())
+    } else if let value = value as? AllNullableTypes {
+      super.writeByte(129)
+      super.writeValue(value.toList())
+    } else if let value = value as? AllNullableTypesWrapper {
+      super.writeByte(130)
+      super.writeValue(value.toList())
+    } else if let value = value as? AllTypes {
+      super.writeByte(131)
+      super.writeValue(value.toList())
+    } else {
+      super.writeValue(value)
+    }
+  }
+}
+
+private class HostIntegrationCoreApiCodecReaderWriter: FlutterStandardReaderWriter {
+  override func reader(with data: Data) -> FlutterStandardReader {
+    return HostIntegrationCoreApiCodecReader(data: data)
+  }
+
+  override func writer(with data: NSMutableData) -> FlutterStandardWriter {
+    return HostIntegrationCoreApiCodecWriter(data: data)
+  }
+}
+
+class HostIntegrationCoreApiCodec: FlutterStandardMessageCodec {
+  static let shared = HostIntegrationCoreApiCodec(readerWriter: HostIntegrationCoreApiCodecReaderWriter())
+}
+
+/// The core interface that each host language plugin must implement in
+/// platform_test integration tests.
+///
+/// Generated protocol from Pigeon that represents a handler of messages from Flutter.
+protocol HostIntegrationCoreApi {
+  /// A no-op function taking no arguments and returning no value, to sanity
+  /// test basic calling.
+  func noop()
+  /// Returns the passed object, to test serialization and deserialization.
+  func echoAllTypes(everything: AllTypes) -> AllTypes
+  /// Returns the passed object, to test serialization and deserialization.
+  func echoAllNullableTypes(everything: AllNullableTypes?) -> AllNullableTypes?
+  /// Returns an error, to test error handling.
+  func throwError()
+  /// Returns passed in int.
+  func echoInt(anInt: Int32) -> Int32
+  /// Returns passed in double.
+  func echoDouble(aDouble: Double) -> Double
+  /// Returns the passed in boolean.
+  func echoBool(aBool: Bool) -> Bool
+  /// Returns the passed in string.
+  func echoString(aString: String) -> String
+  /// Returns the passed in Uint8List.
+  func echoUint8List(aUint8List: FlutterStandardTypedData) -> FlutterStandardTypedData
+  /// Returns the inner `aString` value from the wrapped object, to test
+  /// sending of nested objects.
+  func extractNestedNullableString(wrapper: AllNullableTypesWrapper) -> String?
+  /// Returns the inner `aString` value from the wrapped object, to test
+  /// sending of nested objects.
+  func createNestedNullableString(nullableString: String?) -> AllNullableTypesWrapper
+  /// Returns passed in arguments of multiple types.
+  func sendMultipleNullableTypes(aNullableBool: Bool?, aNullableInt: Int32?, aNullableString: String?) -> AllNullableTypes
+  /// Returns passed in int.
+  func echoNullableInt(aNullableInt: Int32?) -> Int32?
+  /// Returns passed in double.
+  func echoNullableDouble(aNullableDouble: Double?) -> Double?
+  /// Returns the passed in boolean.
+  func echoNullableBool(aNullableBool: Bool?) -> Bool?
+  /// Returns the passed in string.
+  func echoNullableString(aNullableString: String?) -> String?
+  /// Returns the passed in Uint8List.
+  func echoNullableUint8List(aNullableUint8List: FlutterStandardTypedData?) -> FlutterStandardTypedData?
+  /// A no-op function taking no arguments and returning no value, to sanity
+  /// test basic asynchronous calling.
+  func noopAsync(completion: @escaping () -> Void)
+  /// Returns the passed string asynchronously.
+  func echoAsyncString(aString: String, completion: @escaping (String) -> Void)
+  func callFlutterNoop(completion: @escaping () -> Void)
+  func callFlutterEchoString(aString: String, completion: @escaping (String) -> Void)
+}
+
+/// Generated setup class from Pigeon to handle messages through the `binaryMessenger`.
+class HostIntegrationCoreApiSetup {
+  /// The codec used by HostIntegrationCoreApi.
+  static var codec: FlutterStandardMessageCodec { HostIntegrationCoreApiCodec.shared }
+  /// Sets up an instance of `HostIntegrationCoreApi` to handle messages through the `binaryMessenger`.
+  static func setUp(binaryMessenger: FlutterBinaryMessenger, api: HostIntegrationCoreApi?) {
+    /// A no-op function taking no arguments and returning no value, to sanity
+    /// test basic calling.
+    let noopChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.noop", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      noopChannel.setMessageHandler { _, reply in
+        api.noop()
+        reply(wrapResult(nil))
+      }
+    } else {
+      noopChannel.setMessageHandler(nil)
+    }
+    /// Returns the passed object, to test serialization and deserialization.
+    let echoAllTypesChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.echoAllTypes", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      echoAllTypesChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let everythingArg = args[0] as! AllTypes
+        let result = api.echoAllTypes(everything: everythingArg)
+        reply(wrapResult(result))
+      }
+    } else {
+      echoAllTypesChannel.setMessageHandler(nil)
+    }
+    /// Returns the passed object, to test serialization and deserialization.
+    let echoAllNullableTypesChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.echoAllNullableTypes", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      echoAllNullableTypesChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let everythingArg = args[0] as? AllNullableTypes
+        let result = api.echoAllNullableTypes(everything: everythingArg)
+        reply(wrapResult(result))
+      }
+    } else {
+      echoAllNullableTypesChannel.setMessageHandler(nil)
+    }
+    /// Returns an error, to test error handling.
+    let throwErrorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.throwError", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      throwErrorChannel.setMessageHandler { _, reply in
+        api.throwError()
+        reply(wrapResult(nil))
+      }
+    } else {
+      throwErrorChannel.setMessageHandler(nil)
+    }
+    /// Returns passed in int.
+    let echoIntChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.echoInt", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      echoIntChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let anIntArg = args[0] as! Int32
+        let result = api.echoInt(anInt: anIntArg)
+        reply(wrapResult(result))
+      }
+    } else {
+      echoIntChannel.setMessageHandler(nil)
+    }
+    /// Returns passed in double.
+    let echoDoubleChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.echoDouble", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      echoDoubleChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let aDoubleArg = args[0] as! Double
+        let result = api.echoDouble(aDouble: aDoubleArg)
+        reply(wrapResult(result))
+      }
+    } else {
+      echoDoubleChannel.setMessageHandler(nil)
+    }
+    /// Returns the passed in boolean.
+    let echoBoolChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.echoBool", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      echoBoolChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let aBoolArg = args[0] as! Bool
+        let result = api.echoBool(aBool: aBoolArg)
+        reply(wrapResult(result))
+      }
+    } else {
+      echoBoolChannel.setMessageHandler(nil)
+    }
+    /// Returns the passed in string.
+    let echoStringChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.echoString", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      echoStringChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let aStringArg = args[0] as! String
+        let result = api.echoString(aString: aStringArg)
+        reply(wrapResult(result))
+      }
+    } else {
+      echoStringChannel.setMessageHandler(nil)
+    }
+    /// Returns the passed in Uint8List.
+    let echoUint8ListChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.echoUint8List", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      echoUint8ListChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let aUint8ListArg = args[0] as! FlutterStandardTypedData
+        let result = api.echoUint8List(aUint8List: aUint8ListArg)
+        reply(wrapResult(result))
+      }
+    } else {
+      echoUint8ListChannel.setMessageHandler(nil)
+    }
+    /// Returns the inner `aString` value from the wrapped object, to test
+    /// sending of nested objects.
+    let extractNestedNullableStringChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.extractNestedNullableString", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      extractNestedNullableStringChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let wrapperArg = args[0] as! AllNullableTypesWrapper
+        let result = api.extractNestedNullableString(wrapper: wrapperArg)
+        reply(wrapResult(result))
+      }
+    } else {
+      extractNestedNullableStringChannel.setMessageHandler(nil)
+    }
+    /// Returns the inner `aString` value from the wrapped object, to test
+    /// sending of nested objects.
+    let createNestedNullableStringChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.createNestedNullableString", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      createNestedNullableStringChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let nullableStringArg = args[0] as? String
+        let result = api.createNestedNullableString(nullableString: nullableStringArg)
+        reply(wrapResult(result))
+      }
+    } else {
+      createNestedNullableStringChannel.setMessageHandler(nil)
+    }
+    /// Returns passed in arguments of multiple types.
+    let sendMultipleNullableTypesChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.sendMultipleNullableTypes", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      sendMultipleNullableTypesChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let aNullableBoolArg = args[0] as? Bool
+        let aNullableIntArg = args[1] as? Int32
+        let aNullableStringArg = args[2] as? String
+        let result = api.sendMultipleNullableTypes(aNullableBool: aNullableBoolArg, aNullableInt: aNullableIntArg, aNullableString: aNullableStringArg)
+        reply(wrapResult(result))
+      }
+    } else {
+      sendMultipleNullableTypesChannel.setMessageHandler(nil)
+    }
+    /// Returns passed in int.
+    let echoNullableIntChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableInt", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      echoNullableIntChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let aNullableIntArg = args[0] as? Int32
+        let result = api.echoNullableInt(aNullableInt: aNullableIntArg)
+        reply(wrapResult(result))
+      }
+    } else {
+      echoNullableIntChannel.setMessageHandler(nil)
+    }
+    /// Returns passed in double.
+    let echoNullableDoubleChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableDouble", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      echoNullableDoubleChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let aNullableDoubleArg = args[0] as? Double
+        let result = api.echoNullableDouble(aNullableDouble: aNullableDoubleArg)
+        reply(wrapResult(result))
+      }
+    } else {
+      echoNullableDoubleChannel.setMessageHandler(nil)
+    }
+    /// Returns the passed in boolean.
+    let echoNullableBoolChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableBool", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      echoNullableBoolChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let aNullableBoolArg = args[0] as? Bool
+        let result = api.echoNullableBool(aNullableBool: aNullableBoolArg)
+        reply(wrapResult(result))
+      }
+    } else {
+      echoNullableBoolChannel.setMessageHandler(nil)
+    }
+    /// Returns the passed in string.
+    let echoNullableStringChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableString", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      echoNullableStringChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let aNullableStringArg = args[0] as? String
+        let result = api.echoNullableString(aNullableString: aNullableStringArg)
+        reply(wrapResult(result))
+      }
+    } else {
+      echoNullableStringChannel.setMessageHandler(nil)
+    }
+    /// Returns the passed in Uint8List.
+    let echoNullableUint8ListChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableUint8List", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      echoNullableUint8ListChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let aNullableUint8ListArg = args[0] as? FlutterStandardTypedData
+        let result = api.echoNullableUint8List(aNullableUint8List: aNullableUint8ListArg)
+        reply(wrapResult(result))
+      }
+    } else {
+      echoNullableUint8ListChannel.setMessageHandler(nil)
+    }
+    /// A no-op function taking no arguments and returning no value, to sanity
+    /// test basic asynchronous calling.
+    let noopAsyncChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.noopAsync", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      noopAsyncChannel.setMessageHandler { _, reply in
+        api.noopAsync() {
+          reply(wrapResult(nil))
+        }
+      }
+    } else {
+      noopAsyncChannel.setMessageHandler(nil)
+    }
+    /// Returns the passed string asynchronously.
+    let echoAsyncStringChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.echoAsyncString", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      echoAsyncStringChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let aStringArg = args[0] as! String
+        api.echoAsyncString(aString: aStringArg) { result in
+          reply(wrapResult(result))
+        }
+      }
+    } else {
+      echoAsyncStringChannel.setMessageHandler(nil)
+    }
+    let callFlutterNoopChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.callFlutterNoop", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      callFlutterNoopChannel.setMessageHandler { _, reply in
+        api.callFlutterNoop() {
+          reply(wrapResult(nil))
+        }
+      }
+    } else {
+      callFlutterNoopChannel.setMessageHandler(nil)
+    }
+    let callFlutterEchoStringChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.callFlutterEchoString", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      callFlutterEchoStringChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let aStringArg = args[0] as! String
+        api.callFlutterEchoString(aString: aStringArg) { result in
+          reply(wrapResult(result))
+        }
+      }
+    } else {
+      callFlutterEchoStringChannel.setMessageHandler(nil)
+    }
+  }
+}
+private class FlutterIntegrationCoreApiCodecReader: FlutterStandardReader {
+  override func readValue(ofType type: UInt8) -> Any? {
+    switch type {
+      case 128:
+        return AllNullableTypes.fromList(self.readValue() as! [Any])      
+      case 129:
+        return AllTypes.fromList(self.readValue() as! [Any])      
+      default:
+        return super.readValue(ofType: type)
+      
+    }
+  }
+}
+private class FlutterIntegrationCoreApiCodecWriter: FlutterStandardWriter {
+  override func writeValue(_ value: Any) {
+    if let value = value as? AllNullableTypes {
+      super.writeByte(128)
+      super.writeValue(value.toList())
+    } else if let value = value as? AllTypes {
+      super.writeByte(129)
+      super.writeValue(value.toList())
+    } else {
+      super.writeValue(value)
+    }
+  }
+}
+
+private class FlutterIntegrationCoreApiCodecReaderWriter: FlutterStandardReaderWriter {
+  override func reader(with data: Data) -> FlutterStandardReader {
+    return FlutterIntegrationCoreApiCodecReader(data: data)
+  }
+
+  override func writer(with data: NSMutableData) -> FlutterStandardWriter {
+    return FlutterIntegrationCoreApiCodecWriter(data: data)
+  }
+}
+
+class FlutterIntegrationCoreApiCodec: FlutterStandardMessageCodec {
+  static let shared = FlutterIntegrationCoreApiCodec(readerWriter: FlutterIntegrationCoreApiCodecReaderWriter())
+}
+
+/// The core interface that the Dart platform_test code implements for host
+/// integration tests to call into.
+///
+/// Generated class from Pigeon that represents Flutter messages that can be called from Swift.
+class FlutterIntegrationCoreApi {
+  private let binaryMessenger: FlutterBinaryMessenger
+  init(binaryMessenger: FlutterBinaryMessenger){
+    self.binaryMessenger = binaryMessenger
+  }
+  var codec: FlutterStandardMessageCodec {
+    return FlutterIntegrationCoreApiCodec.shared
+  }
+  /// A no-op function taking no arguments and returning no value, to sanity
+  /// test basic calling.
+  func noop(completion: @escaping () -> Void) {
+    let channel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.FlutterIntegrationCoreApi.noop", binaryMessenger: binaryMessenger, codec: codec)
+    channel.sendMessage(nil) { _ in
+      completion()
+    }
+  }
+  /// Returns the passed object, to test serialization and deserialization.
+  func echoAllTypes(everything everythingArg: AllTypes, completion: @escaping (AllTypes) -> Void) {
+    let channel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoAllTypes", binaryMessenger: binaryMessenger, codec: codec)
+    channel.sendMessage([everythingArg]) { response in
+      let result = response as! AllTypes
+      completion(result)
+    }
+  }
+  /// Returns the passed object, to test serialization and deserialization.
+  func echoAllNullableTypes(everything everythingArg: AllNullableTypes, completion: @escaping (AllNullableTypes) -> Void) {
+    let channel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoAllNullableTypes", binaryMessenger: binaryMessenger, codec: codec)
+    channel.sendMessage([everythingArg]) { response in
+      let result = response as! AllNullableTypes
+      completion(result)
+    }
+  }
+  /// Returns the passed string, to test serialization and deserialization.
+  func echoString(aString aStringArg: String, completion: @escaping (String) -> Void) {
+    let channel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoString", binaryMessenger: binaryMessenger, codec: codec)
+    channel.sendMessage([aStringArg]) { response in
+      let result = response as! String
+      completion(result)
+    }
+  }
+}
+/// An API that can be implemented for minimal, compile-only tests.
+///
+/// Generated protocol from Pigeon that represents a handler of messages from Flutter.
+protocol HostTrivialApi {
+  func noop()
+}
+
+/// Generated setup class from Pigeon to handle messages through the `binaryMessenger`.
+class HostTrivialApiSetup {
+  /// The codec used by HostTrivialApi.
+  /// Sets up an instance of `HostTrivialApi` to handle messages through the `binaryMessenger`.
+  static func setUp(binaryMessenger: FlutterBinaryMessenger, api: HostTrivialApi?) {
+    let noopChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostTrivialApi.noop", binaryMessenger: binaryMessenger)
+    if let api = api {
+      noopChannel.setMessageHandler { _, reply in
+        api.noop()
+        reply(wrapResult(nil))
+      }
+    } else {
+      noopChannel.setMessageHandler(nil)
+    }
+  }
+}
+
+private func wrapResult(_ result: Any?) -> [Any?] {
+  return [result]
+}
+
+private func wrapError(_ error: FlutterError) -> [Any?] {
+  return [
+    error.code,
+    error.message,
+    error.details
+  ]
+}
diff --git a/packages/pigeon/platform_tests/test_plugin/macos/Classes/.gitignore b/packages/pigeon/platform_tests/test_plugin/macos/Classes/.gitignore
index ebbbb45..65eaa14 100644
--- a/packages/pigeon/platform_tests/test_plugin/macos/Classes/.gitignore
+++ b/packages/pigeon/platform_tests/test_plugin/macos/Classes/.gitignore
@@ -2,3 +2,4 @@
 # changes on generated files. This will need a way to avoid unnecessary churn,
 # such as a flag to suppress version stamp generation.
 *.gen.swift
+!CoreTests.gen.swift
\ No newline at end of file
diff --git a/packages/pigeon/platform_tests/test_plugin/macos/Classes/CoreTests.gen.swift b/packages/pigeon/platform_tests/test_plugin/macos/Classes/CoreTests.gen.swift
new file mode 100644
index 0000000..385b507
--- /dev/null
+++ b/packages/pigeon/platform_tests/test_plugin/macos/Classes/CoreTests.gen.swift
@@ -0,0 +1,657 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+// 
+// Autogenerated from Pigeon (v4.2.12), do not edit directly.
+// See also: https://pub.dev/packages/pigeon
+
+import Foundation
+#if os(iOS)
+import Flutter
+#elseif os(macOS)
+import FlutterMacOS
+#else
+#error("Unsupported platform.")
+#endif
+
+
+/// Generated class from Pigeon.
+
+enum AnEnum: Int {
+  case one = 0
+  case two = 1
+  case three = 2
+}
+
+/// Generated class from Pigeon that represents data sent in messages.
+struct AllTypes {
+  var aBool: Bool
+  var anInt: Int32
+  var aDouble: Double
+  var aString: String
+  var aByteArray: FlutterStandardTypedData
+  var a4ByteArray: FlutterStandardTypedData
+  var a8ByteArray: FlutterStandardTypedData
+  var aFloatArray: FlutterStandardTypedData
+  var aList: [Any?]
+  var aMap: [AnyHashable: Any?]
+  var anEnum: AnEnum
+
+  static func fromList(_ list: [Any?]) -> AllTypes? {
+    let aBool = list[0] as! Bool
+    let anInt = list[1] as! Int32
+    let aDouble = list[2] as! Double
+    let aString = list[3] as! String
+    let aByteArray = list[4] as! FlutterStandardTypedData
+    let a4ByteArray = list[5] as! FlutterStandardTypedData
+    let a8ByteArray = list[6] as! FlutterStandardTypedData
+    let aFloatArray = list[7] as! FlutterStandardTypedData
+    let aList = list[8] as! [Any?]
+    let aMap = list[9] as! [AnyHashable: Any?]
+    let anEnum = AnEnum(rawValue: list[10] as! Int)!
+
+    return AllTypes(
+      aBool: aBool,
+      anInt: anInt,
+      aDouble: aDouble,
+      aString: aString,
+      aByteArray: aByteArray,
+      a4ByteArray: a4ByteArray,
+      a8ByteArray: a8ByteArray,
+      aFloatArray: aFloatArray,
+      aList: aList,
+      aMap: aMap,
+      anEnum: anEnum
+    )
+  }
+  func toList() -> [Any?] {
+    return [
+      aBool,
+      anInt,
+      aDouble,
+      aString,
+      aByteArray,
+      a4ByteArray,
+      a8ByteArray,
+      aFloatArray,
+      aList,
+      aMap,
+      anEnum.rawValue,
+    ]
+  }
+}
+
+/// Generated class from Pigeon that represents data sent in messages.
+struct AllNullableTypes {
+  var aNullableBool: Bool? = nil
+  var aNullableInt: Int32? = nil
+  var aNullableDouble: Double? = nil
+  var aNullableString: String? = nil
+  var aNullableByteArray: FlutterStandardTypedData? = nil
+  var aNullable4ByteArray: FlutterStandardTypedData? = nil
+  var aNullable8ByteArray: FlutterStandardTypedData? = nil
+  var aNullableFloatArray: FlutterStandardTypedData? = nil
+  var aNullableList: [Any?]? = nil
+  var aNullableMap: [AnyHashable: Any?]? = nil
+  var nullableNestedList: [[Bool?]?]? = nil
+  var nullableMapWithAnnotations: [String?: String?]? = nil
+  var nullableMapWithObject: [String?: Any?]? = nil
+  var aNullableEnum: AnEnum? = nil
+
+  static func fromList(_ list: [Any?]) -> AllNullableTypes? {
+    let aNullableBool = list[0] as? Bool 
+    let aNullableInt = list[1] as? Int32 
+    let aNullableDouble = list[2] as? Double 
+    let aNullableString = list[3] as? String 
+    let aNullableByteArray = list[4] as? FlutterStandardTypedData 
+    let aNullable4ByteArray = list[5] as? FlutterStandardTypedData 
+    let aNullable8ByteArray = list[6] as? FlutterStandardTypedData 
+    let aNullableFloatArray = list[7] as? FlutterStandardTypedData 
+    let aNullableList = list[8] as? [Any?] 
+    let aNullableMap = list[9] as? [AnyHashable: Any?] 
+    let nullableNestedList = list[10] as? [[Bool?]?] 
+    let nullableMapWithAnnotations = list[11] as? [String?: String?] 
+    let nullableMapWithObject = list[12] as? [String?: Any?] 
+    var aNullableEnum: AnEnum? = nil
+    if let aNullableEnumRawValue = list[13] as? Int {
+      aNullableEnum = AnEnum(rawValue: aNullableEnumRawValue)
+    }
+
+    return AllNullableTypes(
+      aNullableBool: aNullableBool,
+      aNullableInt: aNullableInt,
+      aNullableDouble: aNullableDouble,
+      aNullableString: aNullableString,
+      aNullableByteArray: aNullableByteArray,
+      aNullable4ByteArray: aNullable4ByteArray,
+      aNullable8ByteArray: aNullable8ByteArray,
+      aNullableFloatArray: aNullableFloatArray,
+      aNullableList: aNullableList,
+      aNullableMap: aNullableMap,
+      nullableNestedList: nullableNestedList,
+      nullableMapWithAnnotations: nullableMapWithAnnotations,
+      nullableMapWithObject: nullableMapWithObject,
+      aNullableEnum: aNullableEnum
+    )
+  }
+  func toList() -> [Any?] {
+    return [
+      aNullableBool,
+      aNullableInt,
+      aNullableDouble,
+      aNullableString,
+      aNullableByteArray,
+      aNullable4ByteArray,
+      aNullable8ByteArray,
+      aNullableFloatArray,
+      aNullableList,
+      aNullableMap,
+      nullableNestedList,
+      nullableMapWithAnnotations,
+      nullableMapWithObject,
+      aNullableEnum?.rawValue,
+    ]
+  }
+}
+
+/// Generated class from Pigeon that represents data sent in messages.
+struct AllNullableTypesWrapper {
+  var values: AllNullableTypes
+
+  static func fromList(_ list: [Any?]) -> AllNullableTypesWrapper? {
+    let values = AllNullableTypes.fromList(list[0] as! [Any?])!
+
+    return AllNullableTypesWrapper(
+      values: values
+    )
+  }
+  func toList() -> [Any?] {
+    return [
+      values.toList(),
+    ]
+  }
+}
+
+private class HostIntegrationCoreApiCodecReader: FlutterStandardReader {
+  override func readValue(ofType type: UInt8) -> Any? {
+    switch type {
+      case 128:
+        return AllNullableTypes.fromList(self.readValue() as! [Any])      
+      case 129:
+        return AllNullableTypes.fromList(self.readValue() as! [Any])      
+      case 130:
+        return AllNullableTypesWrapper.fromList(self.readValue() as! [Any])      
+      case 131:
+        return AllTypes.fromList(self.readValue() as! [Any])      
+      default:
+        return super.readValue(ofType: type)
+      
+    }
+  }
+}
+private class HostIntegrationCoreApiCodecWriter: FlutterStandardWriter {
+  override func writeValue(_ value: Any) {
+    if let value = value as? AllNullableTypes {
+      super.writeByte(128)
+      super.writeValue(value.toList())
+    } else if let value = value as? AllNullableTypes {
+      super.writeByte(129)
+      super.writeValue(value.toList())
+    } else if let value = value as? AllNullableTypesWrapper {
+      super.writeByte(130)
+      super.writeValue(value.toList())
+    } else if let value = value as? AllTypes {
+      super.writeByte(131)
+      super.writeValue(value.toList())
+    } else {
+      super.writeValue(value)
+    }
+  }
+}
+
+private class HostIntegrationCoreApiCodecReaderWriter: FlutterStandardReaderWriter {
+  override func reader(with data: Data) -> FlutterStandardReader {
+    return HostIntegrationCoreApiCodecReader(data: data)
+  }
+
+  override func writer(with data: NSMutableData) -> FlutterStandardWriter {
+    return HostIntegrationCoreApiCodecWriter(data: data)
+  }
+}
+
+class HostIntegrationCoreApiCodec: FlutterStandardMessageCodec {
+  static let shared = HostIntegrationCoreApiCodec(readerWriter: HostIntegrationCoreApiCodecReaderWriter())
+}
+
+/// The core interface that each host language plugin must implement in
+/// platform_test integration tests.
+///
+/// Generated protocol from Pigeon that represents a handler of messages from Flutter.
+protocol HostIntegrationCoreApi {
+  /// A no-op function taking no arguments and returning no value, to sanity
+  /// test basic calling.
+  func noop()
+  /// Returns the passed object, to test serialization and deserialization.
+  func echoAllTypes(everything: AllTypes) -> AllTypes
+  /// Returns the passed object, to test serialization and deserialization.
+  func echoAllNullableTypes(everything: AllNullableTypes?) -> AllNullableTypes?
+  /// Returns an error, to test error handling.
+  func throwError()
+  /// Returns passed in int.
+  func echoInt(anInt: Int32) -> Int32
+  /// Returns passed in double.
+  func echoDouble(aDouble: Double) -> Double
+  /// Returns the passed in boolean.
+  func echoBool(aBool: Bool) -> Bool
+  /// Returns the passed in string.
+  func echoString(aString: String) -> String
+  /// Returns the passed in Uint8List.
+  func echoUint8List(aUint8List: FlutterStandardTypedData) -> FlutterStandardTypedData
+  /// Returns the inner `aString` value from the wrapped object, to test
+  /// sending of nested objects.
+  func extractNestedNullableString(wrapper: AllNullableTypesWrapper) -> String?
+  /// Returns the inner `aString` value from the wrapped object, to test
+  /// sending of nested objects.
+  func createNestedNullableString(nullableString: String?) -> AllNullableTypesWrapper
+  /// Returns passed in arguments of multiple types.
+  func sendMultipleNullableTypes(aNullableBool: Bool?, aNullableInt: Int32?, aNullableString: String?) -> AllNullableTypes
+  /// Returns passed in int.
+  func echoNullableInt(aNullableInt: Int32?) -> Int32?
+  /// Returns passed in double.
+  func echoNullableDouble(aNullableDouble: Double?) -> Double?
+  /// Returns the passed in boolean.
+  func echoNullableBool(aNullableBool: Bool?) -> Bool?
+  /// Returns the passed in string.
+  func echoNullableString(aNullableString: String?) -> String?
+  /// Returns the passed in Uint8List.
+  func echoNullableUint8List(aNullableUint8List: FlutterStandardTypedData?) -> FlutterStandardTypedData?
+  /// A no-op function taking no arguments and returning no value, to sanity
+  /// test basic asynchronous calling.
+  func noopAsync(completion: @escaping () -> Void)
+  /// Returns the passed string asynchronously.
+  func echoAsyncString(aString: String, completion: @escaping (String) -> Void)
+  func callFlutterNoop(completion: @escaping () -> Void)
+  func callFlutterEchoString(aString: String, completion: @escaping (String) -> Void)
+}
+
+/// Generated setup class from Pigeon to handle messages through the `binaryMessenger`.
+class HostIntegrationCoreApiSetup {
+  /// The codec used by HostIntegrationCoreApi.
+  static var codec: FlutterStandardMessageCodec { HostIntegrationCoreApiCodec.shared }
+  /// Sets up an instance of `HostIntegrationCoreApi` to handle messages through the `binaryMessenger`.
+  static func setUp(binaryMessenger: FlutterBinaryMessenger, api: HostIntegrationCoreApi?) {
+    /// A no-op function taking no arguments and returning no value, to sanity
+    /// test basic calling.
+    let noopChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.noop", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      noopChannel.setMessageHandler { _, reply in
+        api.noop()
+        reply(wrapResult(nil))
+      }
+    } else {
+      noopChannel.setMessageHandler(nil)
+    }
+    /// Returns the passed object, to test serialization and deserialization.
+    let echoAllTypesChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.echoAllTypes", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      echoAllTypesChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let everythingArg = args[0] as! AllTypes
+        let result = api.echoAllTypes(everything: everythingArg)
+        reply(wrapResult(result))
+      }
+    } else {
+      echoAllTypesChannel.setMessageHandler(nil)
+    }
+    /// Returns the passed object, to test serialization and deserialization.
+    let echoAllNullableTypesChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.echoAllNullableTypes", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      echoAllNullableTypesChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let everythingArg = args[0] as? AllNullableTypes
+        let result = api.echoAllNullableTypes(everything: everythingArg)
+        reply(wrapResult(result))
+      }
+    } else {
+      echoAllNullableTypesChannel.setMessageHandler(nil)
+    }
+    /// Returns an error, to test error handling.
+    let throwErrorChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.throwError", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      throwErrorChannel.setMessageHandler { _, reply in
+        api.throwError()
+        reply(wrapResult(nil))
+      }
+    } else {
+      throwErrorChannel.setMessageHandler(nil)
+    }
+    /// Returns passed in int.
+    let echoIntChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.echoInt", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      echoIntChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let anIntArg = args[0] as! Int32
+        let result = api.echoInt(anInt: anIntArg)
+        reply(wrapResult(result))
+      }
+    } else {
+      echoIntChannel.setMessageHandler(nil)
+    }
+    /// Returns passed in double.
+    let echoDoubleChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.echoDouble", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      echoDoubleChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let aDoubleArg = args[0] as! Double
+        let result = api.echoDouble(aDouble: aDoubleArg)
+        reply(wrapResult(result))
+      }
+    } else {
+      echoDoubleChannel.setMessageHandler(nil)
+    }
+    /// Returns the passed in boolean.
+    let echoBoolChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.echoBool", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      echoBoolChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let aBoolArg = args[0] as! Bool
+        let result = api.echoBool(aBool: aBoolArg)
+        reply(wrapResult(result))
+      }
+    } else {
+      echoBoolChannel.setMessageHandler(nil)
+    }
+    /// Returns the passed in string.
+    let echoStringChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.echoString", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      echoStringChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let aStringArg = args[0] as! String
+        let result = api.echoString(aString: aStringArg)
+        reply(wrapResult(result))
+      }
+    } else {
+      echoStringChannel.setMessageHandler(nil)
+    }
+    /// Returns the passed in Uint8List.
+    let echoUint8ListChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.echoUint8List", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      echoUint8ListChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let aUint8ListArg = args[0] as! FlutterStandardTypedData
+        let result = api.echoUint8List(aUint8List: aUint8ListArg)
+        reply(wrapResult(result))
+      }
+    } else {
+      echoUint8ListChannel.setMessageHandler(nil)
+    }
+    /// Returns the inner `aString` value from the wrapped object, to test
+    /// sending of nested objects.
+    let extractNestedNullableStringChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.extractNestedNullableString", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      extractNestedNullableStringChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let wrapperArg = args[0] as! AllNullableTypesWrapper
+        let result = api.extractNestedNullableString(wrapper: wrapperArg)
+        reply(wrapResult(result))
+      }
+    } else {
+      extractNestedNullableStringChannel.setMessageHandler(nil)
+    }
+    /// Returns the inner `aString` value from the wrapped object, to test
+    /// sending of nested objects.
+    let createNestedNullableStringChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.createNestedNullableString", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      createNestedNullableStringChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let nullableStringArg = args[0] as? String
+        let result = api.createNestedNullableString(nullableString: nullableStringArg)
+        reply(wrapResult(result))
+      }
+    } else {
+      createNestedNullableStringChannel.setMessageHandler(nil)
+    }
+    /// Returns passed in arguments of multiple types.
+    let sendMultipleNullableTypesChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.sendMultipleNullableTypes", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      sendMultipleNullableTypesChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let aNullableBoolArg = args[0] as? Bool
+        let aNullableIntArg = args[1] as? Int32
+        let aNullableStringArg = args[2] as? String
+        let result = api.sendMultipleNullableTypes(aNullableBool: aNullableBoolArg, aNullableInt: aNullableIntArg, aNullableString: aNullableStringArg)
+        reply(wrapResult(result))
+      }
+    } else {
+      sendMultipleNullableTypesChannel.setMessageHandler(nil)
+    }
+    /// Returns passed in int.
+    let echoNullableIntChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableInt", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      echoNullableIntChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let aNullableIntArg = args[0] as? Int32
+        let result = api.echoNullableInt(aNullableInt: aNullableIntArg)
+        reply(wrapResult(result))
+      }
+    } else {
+      echoNullableIntChannel.setMessageHandler(nil)
+    }
+    /// Returns passed in double.
+    let echoNullableDoubleChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableDouble", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      echoNullableDoubleChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let aNullableDoubleArg = args[0] as? Double
+        let result = api.echoNullableDouble(aNullableDouble: aNullableDoubleArg)
+        reply(wrapResult(result))
+      }
+    } else {
+      echoNullableDoubleChannel.setMessageHandler(nil)
+    }
+    /// Returns the passed in boolean.
+    let echoNullableBoolChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableBool", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      echoNullableBoolChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let aNullableBoolArg = args[0] as? Bool
+        let result = api.echoNullableBool(aNullableBool: aNullableBoolArg)
+        reply(wrapResult(result))
+      }
+    } else {
+      echoNullableBoolChannel.setMessageHandler(nil)
+    }
+    /// Returns the passed in string.
+    let echoNullableStringChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableString", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      echoNullableStringChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let aNullableStringArg = args[0] as? String
+        let result = api.echoNullableString(aNullableString: aNullableStringArg)
+        reply(wrapResult(result))
+      }
+    } else {
+      echoNullableStringChannel.setMessageHandler(nil)
+    }
+    /// Returns the passed in Uint8List.
+    let echoNullableUint8ListChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableUint8List", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      echoNullableUint8ListChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let aNullableUint8ListArg = args[0] as? FlutterStandardTypedData
+        let result = api.echoNullableUint8List(aNullableUint8List: aNullableUint8ListArg)
+        reply(wrapResult(result))
+      }
+    } else {
+      echoNullableUint8ListChannel.setMessageHandler(nil)
+    }
+    /// A no-op function taking no arguments and returning no value, to sanity
+    /// test basic asynchronous calling.
+    let noopAsyncChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.noopAsync", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      noopAsyncChannel.setMessageHandler { _, reply in
+        api.noopAsync() {
+          reply(wrapResult(nil))
+        }
+      }
+    } else {
+      noopAsyncChannel.setMessageHandler(nil)
+    }
+    /// Returns the passed string asynchronously.
+    let echoAsyncStringChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.echoAsyncString", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      echoAsyncStringChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let aStringArg = args[0] as! String
+        api.echoAsyncString(aString: aStringArg) { result in
+          reply(wrapResult(result))
+        }
+      }
+    } else {
+      echoAsyncStringChannel.setMessageHandler(nil)
+    }
+    let callFlutterNoopChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.callFlutterNoop", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      callFlutterNoopChannel.setMessageHandler { _, reply in
+        api.callFlutterNoop() {
+          reply(wrapResult(nil))
+        }
+      }
+    } else {
+      callFlutterNoopChannel.setMessageHandler(nil)
+    }
+    let callFlutterEchoStringChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostIntegrationCoreApi.callFlutterEchoString", binaryMessenger: binaryMessenger, codec: codec)
+    if let api = api {
+      callFlutterEchoStringChannel.setMessageHandler { message, reply in
+        let args = message as! [Any?]
+        let aStringArg = args[0] as! String
+        api.callFlutterEchoString(aString: aStringArg) { result in
+          reply(wrapResult(result))
+        }
+      }
+    } else {
+      callFlutterEchoStringChannel.setMessageHandler(nil)
+    }
+  }
+}
+private class FlutterIntegrationCoreApiCodecReader: FlutterStandardReader {
+  override func readValue(ofType type: UInt8) -> Any? {
+    switch type {
+      case 128:
+        return AllNullableTypes.fromList(self.readValue() as! [Any])      
+      case 129:
+        return AllTypes.fromList(self.readValue() as! [Any])      
+      default:
+        return super.readValue(ofType: type)
+      
+    }
+  }
+}
+private class FlutterIntegrationCoreApiCodecWriter: FlutterStandardWriter {
+  override func writeValue(_ value: Any) {
+    if let value = value as? AllNullableTypes {
+      super.writeByte(128)
+      super.writeValue(value.toList())
+    } else if let value = value as? AllTypes {
+      super.writeByte(129)
+      super.writeValue(value.toList())
+    } else {
+      super.writeValue(value)
+    }
+  }
+}
+
+private class FlutterIntegrationCoreApiCodecReaderWriter: FlutterStandardReaderWriter {
+  override func reader(with data: Data) -> FlutterStandardReader {
+    return FlutterIntegrationCoreApiCodecReader(data: data)
+  }
+
+  override func writer(with data: NSMutableData) -> FlutterStandardWriter {
+    return FlutterIntegrationCoreApiCodecWriter(data: data)
+  }
+}
+
+class FlutterIntegrationCoreApiCodec: FlutterStandardMessageCodec {
+  static let shared = FlutterIntegrationCoreApiCodec(readerWriter: FlutterIntegrationCoreApiCodecReaderWriter())
+}
+
+/// The core interface that the Dart platform_test code implements for host
+/// integration tests to call into.
+///
+/// Generated class from Pigeon that represents Flutter messages that can be called from Swift.
+class FlutterIntegrationCoreApi {
+  private let binaryMessenger: FlutterBinaryMessenger
+  init(binaryMessenger: FlutterBinaryMessenger){
+    self.binaryMessenger = binaryMessenger
+  }
+  var codec: FlutterStandardMessageCodec {
+    return FlutterIntegrationCoreApiCodec.shared
+  }
+  /// A no-op function taking no arguments and returning no value, to sanity
+  /// test basic calling.
+  func noop(completion: @escaping () -> Void) {
+    let channel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.FlutterIntegrationCoreApi.noop", binaryMessenger: binaryMessenger, codec: codec)
+    channel.sendMessage(nil) { _ in
+      completion()
+    }
+  }
+  /// Returns the passed object, to test serialization and deserialization.
+  func echoAllTypes(everything everythingArg: AllTypes, completion: @escaping (AllTypes) -> Void) {
+    let channel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoAllTypes", binaryMessenger: binaryMessenger, codec: codec)
+    channel.sendMessage([everythingArg]) { response in
+      let result = response as! AllTypes
+      completion(result)
+    }
+  }
+  /// Returns the passed object, to test serialization and deserialization.
+  func echoAllNullableTypes(everything everythingArg: AllNullableTypes, completion: @escaping (AllNullableTypes) -> Void) {
+    let channel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoAllNullableTypes", binaryMessenger: binaryMessenger, codec: codec)
+    channel.sendMessage([everythingArg]) { response in
+      let result = response as! AllNullableTypes
+      completion(result)
+    }
+  }
+  /// Returns the passed string, to test serialization and deserialization.
+  func echoString(aString aStringArg: String, completion: @escaping (String) -> Void) {
+    let channel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoString", binaryMessenger: binaryMessenger, codec: codec)
+    channel.sendMessage([aStringArg]) { response in
+      let result = response as! String
+      completion(result)
+    }
+  }
+}
+/// An API that can be implemented for minimal, compile-only tests.
+///
+/// Generated protocol from Pigeon that represents a handler of messages from Flutter.
+protocol HostTrivialApi {
+  func noop()
+}
+
+/// Generated setup class from Pigeon to handle messages through the `binaryMessenger`.
+class HostTrivialApiSetup {
+  /// The codec used by HostTrivialApi.
+  /// Sets up an instance of `HostTrivialApi` to handle messages through the `binaryMessenger`.
+  static func setUp(binaryMessenger: FlutterBinaryMessenger, api: HostTrivialApi?) {
+    let noopChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.HostTrivialApi.noop", binaryMessenger: binaryMessenger)
+    if let api = api {
+      noopChannel.setMessageHandler { _, reply in
+        api.noop()
+        reply(wrapResult(nil))
+      }
+    } else {
+      noopChannel.setMessageHandler(nil)
+    }
+  }
+}
+
+private func wrapResult(_ result: Any?) -> [Any?] {
+  return [result]
+}
+
+private func wrapError(_ error: FlutterError) -> [Any?] {
+  return [
+    error.code,
+    error.message,
+    error.details
+  ]
+}
diff --git a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/.gitignore b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/.gitignore
index 12c56aa..250e84e 100644
--- a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/.gitignore
+++ b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/.gitignore
@@ -3,3 +3,4 @@
 # such as a flag to suppress version stamp generation.
 *.gen.h
 *.gen.cpp
+!core_tests.gen*
\ No newline at end of file
diff --git a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp
new file mode 100644
index 0000000..990732c
--- /dev/null
+++ b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp
@@ -0,0 +1,1523 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// Autogenerated from Pigeon (v4.2.12), do not edit directly.
+// See also: https://pub.dev/packages/pigeon
+
+#undef _HAS_EXCEPTIONS
+
+#include "core_tests.gen.h"
+
+#include <flutter/basic_message_channel.h>
+#include <flutter/binary_messenger.h>
+#include <flutter/encodable_value.h>
+#include <flutter/standard_message_codec.h>
+
+#include <map>
+#include <optional>
+#include <string>
+
+namespace core_tests_pigeontest {
+
+// AllTypes
+
+bool AllTypes::a_bool() const { return a_bool_; }
+void AllTypes::set_a_bool(bool value_arg) { a_bool_ = value_arg; }
+
+int64_t AllTypes::an_int() const { return an_int_; }
+void AllTypes::set_an_int(int64_t value_arg) { an_int_ = value_arg; }
+
+double AllTypes::a_double() const { return a_double_; }
+void AllTypes::set_a_double(double value_arg) { a_double_ = value_arg; }
+
+const std::string& AllTypes::a_string() const { return a_string_; }
+void AllTypes::set_a_string(std::string_view value_arg) {
+  a_string_ = value_arg;
+}
+
+const std::vector<uint8_t>& AllTypes::a_byte_array() const {
+  return a_byte_array_;
+}
+void AllTypes::set_a_byte_array(const std::vector<uint8_t>& value_arg) {
+  a_byte_array_ = value_arg;
+}
+
+const std::vector<int32_t>& AllTypes::a4_byte_array() const {
+  return a4_byte_array_;
+}
+void AllTypes::set_a4_byte_array(const std::vector<int32_t>& value_arg) {
+  a4_byte_array_ = value_arg;
+}
+
+const std::vector<int64_t>& AllTypes::a8_byte_array() const {
+  return a8_byte_array_;
+}
+void AllTypes::set_a8_byte_array(const std::vector<int64_t>& value_arg) {
+  a8_byte_array_ = value_arg;
+}
+
+const std::vector<double>& AllTypes::a_float_array() const {
+  return a_float_array_;
+}
+void AllTypes::set_a_float_array(const std::vector<double>& value_arg) {
+  a_float_array_ = value_arg;
+}
+
+const flutter::EncodableList& AllTypes::a_list() const { return a_list_; }
+void AllTypes::set_a_list(const flutter::EncodableList& value_arg) {
+  a_list_ = value_arg;
+}
+
+const flutter::EncodableMap& AllTypes::a_map() const { return a_map_; }
+void AllTypes::set_a_map(const flutter::EncodableMap& value_arg) {
+  a_map_ = value_arg;
+}
+
+const AnEnum& AllTypes::an_enum() const { return an_enum_; }
+void AllTypes::set_an_enum(const AnEnum& value_arg) { an_enum_ = value_arg; }
+
+flutter::EncodableList AllTypes::ToEncodableList() const {
+  return flutter::EncodableList{
+      flutter::EncodableValue(a_bool_),
+      flutter::EncodableValue(an_int_),
+      flutter::EncodableValue(a_double_),
+      flutter::EncodableValue(a_string_),
+      flutter::EncodableValue(a_byte_array_),
+      flutter::EncodableValue(a4_byte_array_),
+      flutter::EncodableValue(a8_byte_array_),
+      flutter::EncodableValue(a_float_array_),
+      flutter::EncodableValue(a_list_),
+      flutter::EncodableValue(a_map_),
+      flutter::EncodableValue((int)an_enum_),
+  };
+}
+
+AllTypes::AllTypes() {}
+
+AllTypes::AllTypes(const flutter::EncodableList& list) {
+  auto& encodable_a_bool = list[0];
+  if (const bool* pointer_a_bool = std::get_if<bool>(&encodable_a_bool)) {
+    a_bool_ = *pointer_a_bool;
+  }
+  auto& encodable_an_int = list[1];
+  if (const int32_t* pointer_an_int = std::get_if<int32_t>(&encodable_an_int))
+    an_int_ = *pointer_an_int;
+  else if (const int64_t* pointer_an_int_64 =
+               std::get_if<int64_t>(&encodable_an_int))
+    an_int_ = *pointer_an_int_64;
+  auto& encodable_a_double = list[2];
+  if (const double* pointer_a_double =
+          std::get_if<double>(&encodable_a_double)) {
+    a_double_ = *pointer_a_double;
+  }
+  auto& encodable_a_string = list[3];
+  if (const std::string* pointer_a_string =
+          std::get_if<std::string>(&encodable_a_string)) {
+    a_string_ = *pointer_a_string;
+  }
+  auto& encodable_a_byte_array = list[4];
+  if (const std::vector<uint8_t>* pointer_a_byte_array =
+          std::get_if<std::vector<uint8_t>>(&encodable_a_byte_array)) {
+    a_byte_array_ = *pointer_a_byte_array;
+  }
+  auto& encodable_a4_byte_array = list[5];
+  if (const std::vector<int32_t>* pointer_a4_byte_array =
+          std::get_if<std::vector<int32_t>>(&encodable_a4_byte_array)) {
+    a4_byte_array_ = *pointer_a4_byte_array;
+  }
+  auto& encodable_a8_byte_array = list[6];
+  if (const std::vector<int64_t>* pointer_a8_byte_array =
+          std::get_if<std::vector<int64_t>>(&encodable_a8_byte_array)) {
+    a8_byte_array_ = *pointer_a8_byte_array;
+  }
+  auto& encodable_a_float_array = list[7];
+  if (const std::vector<double>* pointer_a_float_array =
+          std::get_if<std::vector<double>>(&encodable_a_float_array)) {
+    a_float_array_ = *pointer_a_float_array;
+  }
+  auto& encodable_a_list = list[8];
+  if (const flutter::EncodableList* pointer_a_list =
+          std::get_if<flutter::EncodableList>(&encodable_a_list)) {
+    a_list_ = *pointer_a_list;
+  }
+  auto& encodable_a_map = list[9];
+  if (const flutter::EncodableMap* pointer_a_map =
+          std::get_if<flutter::EncodableMap>(&encodable_a_map)) {
+    a_map_ = *pointer_a_map;
+  }
+  auto& encodable_an_enum = list[10];
+  if (const int32_t* pointer_an_enum = std::get_if<int32_t>(&encodable_an_enum))
+    an_enum_ = (AnEnum)*pointer_an_enum;
+}
+
+// AllNullableTypes
+
+const bool* AllNullableTypes::a_nullable_bool() const {
+  return a_nullable_bool_ ? &(*a_nullable_bool_) : nullptr;
+}
+void AllNullableTypes::set_a_nullable_bool(const bool* value_arg) {
+  a_nullable_bool_ = value_arg ? std::optional<bool>(*value_arg) : std::nullopt;
+}
+void AllNullableTypes::set_a_nullable_bool(bool value_arg) {
+  a_nullable_bool_ = value_arg;
+}
+
+const int64_t* AllNullableTypes::a_nullable_int() const {
+  return a_nullable_int_ ? &(*a_nullable_int_) : nullptr;
+}
+void AllNullableTypes::set_a_nullable_int(const int64_t* value_arg) {
+  a_nullable_int_ =
+      value_arg ? std::optional<int64_t>(*value_arg) : std::nullopt;
+}
+void AllNullableTypes::set_a_nullable_int(int64_t value_arg) {
+  a_nullable_int_ = value_arg;
+}
+
+const double* AllNullableTypes::a_nullable_double() const {
+  return a_nullable_double_ ? &(*a_nullable_double_) : nullptr;
+}
+void AllNullableTypes::set_a_nullable_double(const double* value_arg) {
+  a_nullable_double_ =
+      value_arg ? std::optional<double>(*value_arg) : std::nullopt;
+}
+void AllNullableTypes::set_a_nullable_double(double value_arg) {
+  a_nullable_double_ = value_arg;
+}
+
+const std::string* AllNullableTypes::a_nullable_string() const {
+  return a_nullable_string_ ? &(*a_nullable_string_) : nullptr;
+}
+void AllNullableTypes::set_a_nullable_string(
+    const std::string_view* value_arg) {
+  a_nullable_string_ =
+      value_arg ? std::optional<std::string>(*value_arg) : std::nullopt;
+}
+void AllNullableTypes::set_a_nullable_string(std::string_view value_arg) {
+  a_nullable_string_ = value_arg;
+}
+
+const std::vector<uint8_t>* AllNullableTypes::a_nullable_byte_array() const {
+  return a_nullable_byte_array_ ? &(*a_nullable_byte_array_) : nullptr;
+}
+void AllNullableTypes::set_a_nullable_byte_array(
+    const std::vector<uint8_t>* value_arg) {
+  a_nullable_byte_array_ = value_arg
+                               ? std::optional<std::vector<uint8_t>>(*value_arg)
+                               : std::nullopt;
+}
+void AllNullableTypes::set_a_nullable_byte_array(
+    const std::vector<uint8_t>& value_arg) {
+  a_nullable_byte_array_ = value_arg;
+}
+
+const std::vector<int32_t>* AllNullableTypes::a_nullable4_byte_array() const {
+  return a_nullable4_byte_array_ ? &(*a_nullable4_byte_array_) : nullptr;
+}
+void AllNullableTypes::set_a_nullable4_byte_array(
+    const std::vector<int32_t>* value_arg) {
+  a_nullable4_byte_array_ =
+      value_arg ? std::optional<std::vector<int32_t>>(*value_arg)
+                : std::nullopt;
+}
+void AllNullableTypes::set_a_nullable4_byte_array(
+    const std::vector<int32_t>& value_arg) {
+  a_nullable4_byte_array_ = value_arg;
+}
+
+const std::vector<int64_t>* AllNullableTypes::a_nullable8_byte_array() const {
+  return a_nullable8_byte_array_ ? &(*a_nullable8_byte_array_) : nullptr;
+}
+void AllNullableTypes::set_a_nullable8_byte_array(
+    const std::vector<int64_t>* value_arg) {
+  a_nullable8_byte_array_ =
+      value_arg ? std::optional<std::vector<int64_t>>(*value_arg)
+                : std::nullopt;
+}
+void AllNullableTypes::set_a_nullable8_byte_array(
+    const std::vector<int64_t>& value_arg) {
+  a_nullable8_byte_array_ = value_arg;
+}
+
+const std::vector<double>* AllNullableTypes::a_nullable_float_array() const {
+  return a_nullable_float_array_ ? &(*a_nullable_float_array_) : nullptr;
+}
+void AllNullableTypes::set_a_nullable_float_array(
+    const std::vector<double>* value_arg) {
+  a_nullable_float_array_ =
+      value_arg ? std::optional<std::vector<double>>(*value_arg) : std::nullopt;
+}
+void AllNullableTypes::set_a_nullable_float_array(
+    const std::vector<double>& value_arg) {
+  a_nullable_float_array_ = value_arg;
+}
+
+const flutter::EncodableList* AllNullableTypes::a_nullable_list() const {
+  return a_nullable_list_ ? &(*a_nullable_list_) : nullptr;
+}
+void AllNullableTypes::set_a_nullable_list(
+    const flutter::EncodableList* value_arg) {
+  a_nullable_list_ = value_arg
+                         ? std::optional<flutter::EncodableList>(*value_arg)
+                         : std::nullopt;
+}
+void AllNullableTypes::set_a_nullable_list(
+    const flutter::EncodableList& value_arg) {
+  a_nullable_list_ = value_arg;
+}
+
+const flutter::EncodableMap* AllNullableTypes::a_nullable_map() const {
+  return a_nullable_map_ ? &(*a_nullable_map_) : nullptr;
+}
+void AllNullableTypes::set_a_nullable_map(
+    const flutter::EncodableMap* value_arg) {
+  a_nullable_map_ = value_arg ? std::optional<flutter::EncodableMap>(*value_arg)
+                              : std::nullopt;
+}
+void AllNullableTypes::set_a_nullable_map(
+    const flutter::EncodableMap& value_arg) {
+  a_nullable_map_ = value_arg;
+}
+
+const flutter::EncodableList* AllNullableTypes::nullable_nested_list() const {
+  return nullable_nested_list_ ? &(*nullable_nested_list_) : nullptr;
+}
+void AllNullableTypes::set_nullable_nested_list(
+    const flutter::EncodableList* value_arg) {
+  nullable_nested_list_ =
+      value_arg ? std::optional<flutter::EncodableList>(*value_arg)
+                : std::nullopt;
+}
+void AllNullableTypes::set_nullable_nested_list(
+    const flutter::EncodableList& value_arg) {
+  nullable_nested_list_ = value_arg;
+}
+
+const flutter::EncodableMap* AllNullableTypes::nullable_map_with_annotations()
+    const {
+  return nullable_map_with_annotations_ ? &(*nullable_map_with_annotations_)
+                                        : nullptr;
+}
+void AllNullableTypes::set_nullable_map_with_annotations(
+    const flutter::EncodableMap* value_arg) {
+  nullable_map_with_annotations_ =
+      value_arg ? std::optional<flutter::EncodableMap>(*value_arg)
+                : std::nullopt;
+}
+void AllNullableTypes::set_nullable_map_with_annotations(
+    const flutter::EncodableMap& value_arg) {
+  nullable_map_with_annotations_ = value_arg;
+}
+
+const flutter::EncodableMap* AllNullableTypes::nullable_map_with_object()
+    const {
+  return nullable_map_with_object_ ? &(*nullable_map_with_object_) : nullptr;
+}
+void AllNullableTypes::set_nullable_map_with_object(
+    const flutter::EncodableMap* value_arg) {
+  nullable_map_with_object_ =
+      value_arg ? std::optional<flutter::EncodableMap>(*value_arg)
+                : std::nullopt;
+}
+void AllNullableTypes::set_nullable_map_with_object(
+    const flutter::EncodableMap& value_arg) {
+  nullable_map_with_object_ = value_arg;
+}
+
+const AnEnum* AllNullableTypes::a_nullable_enum() const {
+  return a_nullable_enum_ ? &(*a_nullable_enum_) : nullptr;
+}
+void AllNullableTypes::set_a_nullable_enum(const AnEnum* value_arg) {
+  a_nullable_enum_ =
+      value_arg ? std::optional<AnEnum>(*value_arg) : std::nullopt;
+}
+void AllNullableTypes::set_a_nullable_enum(const AnEnum& value_arg) {
+  a_nullable_enum_ = value_arg;
+}
+
+flutter::EncodableList AllNullableTypes::ToEncodableList() const {
+  return flutter::EncodableList{
+      a_nullable_bool_ ? flutter::EncodableValue(*a_nullable_bool_)
+                       : flutter::EncodableValue(),
+      a_nullable_int_ ? flutter::EncodableValue(*a_nullable_int_)
+                      : flutter::EncodableValue(),
+      a_nullable_double_ ? flutter::EncodableValue(*a_nullable_double_)
+                         : flutter::EncodableValue(),
+      a_nullable_string_ ? flutter::EncodableValue(*a_nullable_string_)
+                         : flutter::EncodableValue(),
+      a_nullable_byte_array_ ? flutter::EncodableValue(*a_nullable_byte_array_)
+                             : flutter::EncodableValue(),
+      a_nullable4_byte_array_
+          ? flutter::EncodableValue(*a_nullable4_byte_array_)
+          : flutter::EncodableValue(),
+      a_nullable8_byte_array_
+          ? flutter::EncodableValue(*a_nullable8_byte_array_)
+          : flutter::EncodableValue(),
+      a_nullable_float_array_
+          ? flutter::EncodableValue(*a_nullable_float_array_)
+          : flutter::EncodableValue(),
+      a_nullable_list_ ? flutter::EncodableValue(*a_nullable_list_)
+                       : flutter::EncodableValue(),
+      a_nullable_map_ ? flutter::EncodableValue(*a_nullable_map_)
+                      : flutter::EncodableValue(),
+      nullable_nested_list_ ? flutter::EncodableValue(*nullable_nested_list_)
+                            : flutter::EncodableValue(),
+      nullable_map_with_annotations_
+          ? flutter::EncodableValue(*nullable_map_with_annotations_)
+          : flutter::EncodableValue(),
+      nullable_map_with_object_
+          ? flutter::EncodableValue(*nullable_map_with_object_)
+          : flutter::EncodableValue(),
+      a_nullable_enum_ ? flutter::EncodableValue((int)(*a_nullable_enum_))
+                       : flutter::EncodableValue(),
+  };
+}
+
+AllNullableTypes::AllNullableTypes() {}
+
+AllNullableTypes::AllNullableTypes(const flutter::EncodableList& list) {
+  auto& encodable_a_nullable_bool = list[0];
+  if (const bool* pointer_a_nullable_bool =
+          std::get_if<bool>(&encodable_a_nullable_bool)) {
+    a_nullable_bool_ = *pointer_a_nullable_bool;
+  }
+  auto& encodable_a_nullable_int = list[1];
+  if (const int32_t* pointer_a_nullable_int =
+          std::get_if<int32_t>(&encodable_a_nullable_int))
+    a_nullable_int_ = *pointer_a_nullable_int;
+  else if (const int64_t* pointer_a_nullable_int_64 =
+               std::get_if<int64_t>(&encodable_a_nullable_int))
+    a_nullable_int_ = *pointer_a_nullable_int_64;
+  auto& encodable_a_nullable_double = list[2];
+  if (const double* pointer_a_nullable_double =
+          std::get_if<double>(&encodable_a_nullable_double)) {
+    a_nullable_double_ = *pointer_a_nullable_double;
+  }
+  auto& encodable_a_nullable_string = list[3];
+  if (const std::string* pointer_a_nullable_string =
+          std::get_if<std::string>(&encodable_a_nullable_string)) {
+    a_nullable_string_ = *pointer_a_nullable_string;
+  }
+  auto& encodable_a_nullable_byte_array = list[4];
+  if (const std::vector<uint8_t>* pointer_a_nullable_byte_array =
+          std::get_if<std::vector<uint8_t>>(&encodable_a_nullable_byte_array)) {
+    a_nullable_byte_array_ = *pointer_a_nullable_byte_array;
+  }
+  auto& encodable_a_nullable4_byte_array = list[5];
+  if (const std::vector<int32_t>* pointer_a_nullable4_byte_array =
+          std::get_if<std::vector<int32_t>>(
+              &encodable_a_nullable4_byte_array)) {
+    a_nullable4_byte_array_ = *pointer_a_nullable4_byte_array;
+  }
+  auto& encodable_a_nullable8_byte_array = list[6];
+  if (const std::vector<int64_t>* pointer_a_nullable8_byte_array =
+          std::get_if<std::vector<int64_t>>(
+              &encodable_a_nullable8_byte_array)) {
+    a_nullable8_byte_array_ = *pointer_a_nullable8_byte_array;
+  }
+  auto& encodable_a_nullable_float_array = list[7];
+  if (const std::vector<double>* pointer_a_nullable_float_array =
+          std::get_if<std::vector<double>>(&encodable_a_nullable_float_array)) {
+    a_nullable_float_array_ = *pointer_a_nullable_float_array;
+  }
+  auto& encodable_a_nullable_list = list[8];
+  if (const flutter::EncodableList* pointer_a_nullable_list =
+          std::get_if<flutter::EncodableList>(&encodable_a_nullable_list)) {
+    a_nullable_list_ = *pointer_a_nullable_list;
+  }
+  auto& encodable_a_nullable_map = list[9];
+  if (const flutter::EncodableMap* pointer_a_nullable_map =
+          std::get_if<flutter::EncodableMap>(&encodable_a_nullable_map)) {
+    a_nullable_map_ = *pointer_a_nullable_map;
+  }
+  auto& encodable_nullable_nested_list = list[10];
+  if (const flutter::EncodableList* pointer_nullable_nested_list =
+          std::get_if<flutter::EncodableList>(
+              &encodable_nullable_nested_list)) {
+    nullable_nested_list_ = *pointer_nullable_nested_list;
+  }
+  auto& encodable_nullable_map_with_annotations = list[11];
+  if (const flutter::EncodableMap* pointer_nullable_map_with_annotations =
+          std::get_if<flutter::EncodableMap>(
+              &encodable_nullable_map_with_annotations)) {
+    nullable_map_with_annotations_ = *pointer_nullable_map_with_annotations;
+  }
+  auto& encodable_nullable_map_with_object = list[12];
+  if (const flutter::EncodableMap* pointer_nullable_map_with_object =
+          std::get_if<flutter::EncodableMap>(
+              &encodable_nullable_map_with_object)) {
+    nullable_map_with_object_ = *pointer_nullable_map_with_object;
+  }
+  auto& encodable_a_nullable_enum = list[13];
+  if (const int32_t* pointer_a_nullable_enum =
+          std::get_if<int32_t>(&encodable_a_nullable_enum))
+    a_nullable_enum_ = (AnEnum)*pointer_a_nullable_enum;
+}
+
+// AllNullableTypesWrapper
+
+const AllNullableTypes& AllNullableTypesWrapper::values() const {
+  return values_;
+}
+void AllNullableTypesWrapper::set_values(const AllNullableTypes& value_arg) {
+  values_ = value_arg;
+}
+
+flutter::EncodableList AllNullableTypesWrapper::ToEncodableList() const {
+  return flutter::EncodableList{
+      flutter::EncodableValue(values_.ToEncodableList()),
+  };
+}
+
+AllNullableTypesWrapper::AllNullableTypesWrapper() {}
+
+AllNullableTypesWrapper::AllNullableTypesWrapper(
+    const flutter::EncodableList& list) {
+  auto& encodable_values = list[0];
+  if (const flutter::EncodableList* pointer_values =
+          std::get_if<flutter::EncodableList>(&encodable_values)) {
+    values_ = AllNullableTypes(*pointer_values);
+  }
+}
+
+HostIntegrationCoreApiCodecSerializer::HostIntegrationCoreApiCodecSerializer() {
+}
+flutter::EncodableValue HostIntegrationCoreApiCodecSerializer::ReadValueOfType(
+    uint8_t type, flutter::ByteStreamReader* stream) const {
+  switch (type) {
+    case 128:
+      return flutter::CustomEncodableValue(AllNullableTypes(
+          std::get<flutter::EncodableList>(ReadValue(stream))));
+
+    case 129:
+      return flutter::CustomEncodableValue(AllNullableTypes(
+          std::get<flutter::EncodableList>(ReadValue(stream))));
+
+    case 130:
+      return flutter::CustomEncodableValue(AllNullableTypesWrapper(
+          std::get<flutter::EncodableList>(ReadValue(stream))));
+
+    case 131:
+      return flutter::CustomEncodableValue(
+          AllTypes(std::get<flutter::EncodableList>(ReadValue(stream))));
+
+    default:
+      return flutter::StandardCodecSerializer::ReadValueOfType(type, stream);
+  }
+}
+
+void HostIntegrationCoreApiCodecSerializer::WriteValue(
+    const flutter::EncodableValue& value,
+    flutter::ByteStreamWriter* stream) const {
+  if (const flutter::CustomEncodableValue* custom_value =
+          std::get_if<flutter::CustomEncodableValue>(&value)) {
+    if (custom_value->type() == typeid(AllNullableTypes)) {
+      stream->WriteByte(128);
+      WriteValue(
+          flutter::EncodableValue(
+              std::any_cast<AllNullableTypes>(*custom_value).ToEncodableList()),
+          stream);
+      return;
+    }
+    if (custom_value->type() == typeid(AllNullableTypes)) {
+      stream->WriteByte(129);
+      WriteValue(
+          flutter::EncodableValue(
+              std::any_cast<AllNullableTypes>(*custom_value).ToEncodableList()),
+          stream);
+      return;
+    }
+    if (custom_value->type() == typeid(AllNullableTypesWrapper)) {
+      stream->WriteByte(130);
+      WriteValue(flutter::EncodableValue(
+                     std::any_cast<AllNullableTypesWrapper>(*custom_value)
+                         .ToEncodableList()),
+                 stream);
+      return;
+    }
+    if (custom_value->type() == typeid(AllTypes)) {
+      stream->WriteByte(131);
+      WriteValue(flutter::EncodableValue(
+                     std::any_cast<AllTypes>(*custom_value).ToEncodableList()),
+                 stream);
+      return;
+    }
+  }
+  flutter::StandardCodecSerializer::WriteValue(value, stream);
+}
+
+/// The codec used by HostIntegrationCoreApi.
+const flutter::StandardMessageCodec& HostIntegrationCoreApi::GetCodec() {
+  return flutter::StandardMessageCodec::GetInstance(
+      &HostIntegrationCoreApiCodecSerializer::GetInstance());
+}
+
+// Sets up an instance of `HostIntegrationCoreApi` to handle messages through
+// the `binary_messenger`.
+void HostIntegrationCoreApi::SetUp(flutter::BinaryMessenger* binary_messenger,
+                                   HostIntegrationCoreApi* api) {
+  {
+    auto channel =
+        std::make_unique<flutter::BasicMessageChannel<flutter::EncodableValue>>(
+            binary_messenger, "dev.flutter.pigeon.HostIntegrationCoreApi.noop",
+            &GetCodec());
+    if (api != nullptr) {
+      channel->SetMessageHandler(
+          [api](const flutter::EncodableValue& message,
+                const flutter::MessageReply<flutter::EncodableValue>& reply) {
+            flutter::EncodableList wrapped;
+            try {
+              std::optional<FlutterError> output = api->Noop();
+              if (output.has_value()) {
+                wrapped = WrapError(output.value());
+              } else {
+                wrapped.push_back(flutter::EncodableValue());
+              }
+            } catch (const std::exception& exception) {
+              wrapped = WrapError(exception.what());
+            }
+            reply(wrapped);
+          });
+    } else {
+      channel->SetMessageHandler(nullptr);
+    }
+  }
+  {
+    auto channel =
+        std::make_unique<flutter::BasicMessageChannel<flutter::EncodableValue>>(
+            binary_messenger,
+            "dev.flutter.pigeon.HostIntegrationCoreApi.echoAllTypes",
+            &GetCodec());
+    if (api != nullptr) {
+      channel->SetMessageHandler(
+          [api](const flutter::EncodableValue& message,
+                const flutter::MessageReply<flutter::EncodableValue>& reply) {
+            flutter::EncodableList wrapped;
+            try {
+              const auto& args = std::get<flutter::EncodableList>(message);
+              const auto& encodable_everything_arg = args.at(0);
+              if (encodable_everything_arg.IsNull()) {
+                reply(WrapError("everything_arg unexpectedly null."));
+                return;
+              }
+              const auto& everything_arg = std::any_cast<const AllTypes&>(
+                  std::get<flutter::CustomEncodableValue>(
+                      encodable_everything_arg));
+              ErrorOr<AllTypes> output = api->EchoAllTypes(everything_arg);
+              if (output.has_error()) {
+                wrapped = WrapError(output.error());
+              } else {
+                wrapped.push_back(flutter::CustomEncodableValue(
+                    std::move(output).TakeValue()));
+              }
+            } catch (const std::exception& exception) {
+              wrapped = WrapError(exception.what());
+            }
+            reply(wrapped);
+          });
+    } else {
+      channel->SetMessageHandler(nullptr);
+    }
+  }
+  {
+    auto channel =
+        std::make_unique<flutter::BasicMessageChannel<flutter::EncodableValue>>(
+            binary_messenger,
+            "dev.flutter.pigeon.HostIntegrationCoreApi.echoAllNullableTypes",
+            &GetCodec());
+    if (api != nullptr) {
+      channel->SetMessageHandler(
+          [api](const flutter::EncodableValue& message,
+                const flutter::MessageReply<flutter::EncodableValue>& reply) {
+            flutter::EncodableList wrapped;
+            try {
+              const auto& args = std::get<flutter::EncodableList>(message);
+              const auto& encodable_everything_arg = args.at(0);
+              const auto* everything_arg =
+                  &(std::any_cast<const AllNullableTypes&>(
+                      std::get<flutter::CustomEncodableValue>(
+                          encodable_everything_arg)));
+              ErrorOr<std::optional<AllNullableTypes>> output =
+                  api->EchoAllNullableTypes(everything_arg);
+              if (output.has_error()) {
+                wrapped = WrapError(output.error());
+              } else {
+                auto output_optional = std::move(output).TakeValue();
+                if (output_optional) {
+                  wrapped.push_back(flutter::CustomEncodableValue(
+                      std::move(output_optional).value()));
+                } else {
+                  wrapped.push_back(flutter::EncodableValue());
+                }
+              }
+            } catch (const std::exception& exception) {
+              wrapped = WrapError(exception.what());
+            }
+            reply(wrapped);
+          });
+    } else {
+      channel->SetMessageHandler(nullptr);
+    }
+  }
+  {
+    auto channel =
+        std::make_unique<flutter::BasicMessageChannel<flutter::EncodableValue>>(
+            binary_messenger,
+            "dev.flutter.pigeon.HostIntegrationCoreApi.throwError",
+            &GetCodec());
+    if (api != nullptr) {
+      channel->SetMessageHandler(
+          [api](const flutter::EncodableValue& message,
+                const flutter::MessageReply<flutter::EncodableValue>& reply) {
+            flutter::EncodableList wrapped;
+            try {
+              std::optional<FlutterError> output = api->ThrowError();
+              if (output.has_value()) {
+                wrapped = WrapError(output.value());
+              } else {
+                wrapped.push_back(flutter::EncodableValue());
+              }
+            } catch (const std::exception& exception) {
+              wrapped = WrapError(exception.what());
+            }
+            reply(wrapped);
+          });
+    } else {
+      channel->SetMessageHandler(nullptr);
+    }
+  }
+  {
+    auto channel =
+        std::make_unique<flutter::BasicMessageChannel<flutter::EncodableValue>>(
+            binary_messenger,
+            "dev.flutter.pigeon.HostIntegrationCoreApi.echoInt", &GetCodec());
+    if (api != nullptr) {
+      channel->SetMessageHandler(
+          [api](const flutter::EncodableValue& message,
+                const flutter::MessageReply<flutter::EncodableValue>& reply) {
+            flutter::EncodableList wrapped;
+            try {
+              const auto& args = std::get<flutter::EncodableList>(message);
+              const auto& encodable_an_int_arg = args.at(0);
+              if (encodable_an_int_arg.IsNull()) {
+                reply(WrapError("an_int_arg unexpectedly null."));
+                return;
+              }
+              const int64_t an_int_arg = encodable_an_int_arg.LongValue();
+              ErrorOr<int64_t> output = api->EchoInt(an_int_arg);
+              if (output.has_error()) {
+                wrapped = WrapError(output.error());
+              } else {
+                wrapped.push_back(
+                    flutter::EncodableValue(std::move(output).TakeValue()));
+              }
+            } catch (const std::exception& exception) {
+              wrapped = WrapError(exception.what());
+            }
+            reply(wrapped);
+          });
+    } else {
+      channel->SetMessageHandler(nullptr);
+    }
+  }
+  {
+    auto channel =
+        std::make_unique<flutter::BasicMessageChannel<flutter::EncodableValue>>(
+            binary_messenger,
+            "dev.flutter.pigeon.HostIntegrationCoreApi.echoDouble",
+            &GetCodec());
+    if (api != nullptr) {
+      channel->SetMessageHandler(
+          [api](const flutter::EncodableValue& message,
+                const flutter::MessageReply<flutter::EncodableValue>& reply) {
+            flutter::EncodableList wrapped;
+            try {
+              const auto& args = std::get<flutter::EncodableList>(message);
+              const auto& encodable_a_double_arg = args.at(0);
+              if (encodable_a_double_arg.IsNull()) {
+                reply(WrapError("a_double_arg unexpectedly null."));
+                return;
+              }
+              const auto& a_double_arg =
+                  std::get<double>(encodable_a_double_arg);
+              ErrorOr<double> output = api->EchoDouble(a_double_arg);
+              if (output.has_error()) {
+                wrapped = WrapError(output.error());
+              } else {
+                wrapped.push_back(
+                    flutter::EncodableValue(std::move(output).TakeValue()));
+              }
+            } catch (const std::exception& exception) {
+              wrapped = WrapError(exception.what());
+            }
+            reply(wrapped);
+          });
+    } else {
+      channel->SetMessageHandler(nullptr);
+    }
+  }
+  {
+    auto channel =
+        std::make_unique<flutter::BasicMessageChannel<flutter::EncodableValue>>(
+            binary_messenger,
+            "dev.flutter.pigeon.HostIntegrationCoreApi.echoBool", &GetCodec());
+    if (api != nullptr) {
+      channel->SetMessageHandler(
+          [api](const flutter::EncodableValue& message,
+                const flutter::MessageReply<flutter::EncodableValue>& reply) {
+            flutter::EncodableList wrapped;
+            try {
+              const auto& args = std::get<flutter::EncodableList>(message);
+              const auto& encodable_a_bool_arg = args.at(0);
+              if (encodable_a_bool_arg.IsNull()) {
+                reply(WrapError("a_bool_arg unexpectedly null."));
+                return;
+              }
+              const auto& a_bool_arg = std::get<bool>(encodable_a_bool_arg);
+              ErrorOr<bool> output = api->EchoBool(a_bool_arg);
+              if (output.has_error()) {
+                wrapped = WrapError(output.error());
+              } else {
+                wrapped.push_back(
+                    flutter::EncodableValue(std::move(output).TakeValue()));
+              }
+            } catch (const std::exception& exception) {
+              wrapped = WrapError(exception.what());
+            }
+            reply(wrapped);
+          });
+    } else {
+      channel->SetMessageHandler(nullptr);
+    }
+  }
+  {
+    auto channel =
+        std::make_unique<flutter::BasicMessageChannel<flutter::EncodableValue>>(
+            binary_messenger,
+            "dev.flutter.pigeon.HostIntegrationCoreApi.echoString",
+            &GetCodec());
+    if (api != nullptr) {
+      channel->SetMessageHandler(
+          [api](const flutter::EncodableValue& message,
+                const flutter::MessageReply<flutter::EncodableValue>& reply) {
+            flutter::EncodableList wrapped;
+            try {
+              const auto& args = std::get<flutter::EncodableList>(message);
+              const auto& encodable_a_string_arg = args.at(0);
+              if (encodable_a_string_arg.IsNull()) {
+                reply(WrapError("a_string_arg unexpectedly null."));
+                return;
+              }
+              const auto& a_string_arg =
+                  std::get<std::string>(encodable_a_string_arg);
+              ErrorOr<std::string> output = api->EchoString(a_string_arg);
+              if (output.has_error()) {
+                wrapped = WrapError(output.error());
+              } else {
+                wrapped.push_back(
+                    flutter::EncodableValue(std::move(output).TakeValue()));
+              }
+            } catch (const std::exception& exception) {
+              wrapped = WrapError(exception.what());
+            }
+            reply(wrapped);
+          });
+    } else {
+      channel->SetMessageHandler(nullptr);
+    }
+  }
+  {
+    auto channel =
+        std::make_unique<flutter::BasicMessageChannel<flutter::EncodableValue>>(
+            binary_messenger,
+            "dev.flutter.pigeon.HostIntegrationCoreApi.echoUint8List",
+            &GetCodec());
+    if (api != nullptr) {
+      channel->SetMessageHandler(
+          [api](const flutter::EncodableValue& message,
+                const flutter::MessageReply<flutter::EncodableValue>& reply) {
+            flutter::EncodableList wrapped;
+            try {
+              const auto& args = std::get<flutter::EncodableList>(message);
+              const auto& encodable_a_uint8_list_arg = args.at(0);
+              if (encodable_a_uint8_list_arg.IsNull()) {
+                reply(WrapError("a_uint8_list_arg unexpectedly null."));
+                return;
+              }
+              const auto& a_uint8_list_arg =
+                  std::get<std::vector<uint8_t>>(encodable_a_uint8_list_arg);
+              ErrorOr<std::vector<uint8_t>> output =
+                  api->EchoUint8List(a_uint8_list_arg);
+              if (output.has_error()) {
+                wrapped = WrapError(output.error());
+              } else {
+                wrapped.push_back(
+                    flutter::EncodableValue(std::move(output).TakeValue()));
+              }
+            } catch (const std::exception& exception) {
+              wrapped = WrapError(exception.what());
+            }
+            reply(wrapped);
+          });
+    } else {
+      channel->SetMessageHandler(nullptr);
+    }
+  }
+  {
+    auto channel = std::make_unique<
+        flutter::BasicMessageChannel<flutter::EncodableValue>>(
+        binary_messenger,
+        "dev.flutter.pigeon.HostIntegrationCoreApi.extractNestedNullableString",
+        &GetCodec());
+    if (api != nullptr) {
+      channel->SetMessageHandler(
+          [api](const flutter::EncodableValue& message,
+                const flutter::MessageReply<flutter::EncodableValue>& reply) {
+            flutter::EncodableList wrapped;
+            try {
+              const auto& args = std::get<flutter::EncodableList>(message);
+              const auto& encodable_wrapper_arg = args.at(0);
+              if (encodable_wrapper_arg.IsNull()) {
+                reply(WrapError("wrapper_arg unexpectedly null."));
+                return;
+              }
+              const auto& wrapper_arg =
+                  std::any_cast<const AllNullableTypesWrapper&>(
+                      std::get<flutter::CustomEncodableValue>(
+                          encodable_wrapper_arg));
+              ErrorOr<std::optional<std::string>> output =
+                  api->ExtractNestedNullableString(wrapper_arg);
+              if (output.has_error()) {
+                wrapped = WrapError(output.error());
+              } else {
+                auto output_optional = std::move(output).TakeValue();
+                if (output_optional) {
+                  wrapped.push_back(flutter::EncodableValue(
+                      std::move(output_optional).value()));
+                } else {
+                  wrapped.push_back(flutter::EncodableValue());
+                }
+              }
+            } catch (const std::exception& exception) {
+              wrapped = WrapError(exception.what());
+            }
+            reply(wrapped);
+          });
+    } else {
+      channel->SetMessageHandler(nullptr);
+    }
+  }
+  {
+    auto channel = std::make_unique<
+        flutter::BasicMessageChannel<flutter::EncodableValue>>(
+        binary_messenger,
+        "dev.flutter.pigeon.HostIntegrationCoreApi.createNestedNullableString",
+        &GetCodec());
+    if (api != nullptr) {
+      channel->SetMessageHandler(
+          [api](const flutter::EncodableValue& message,
+                const flutter::MessageReply<flutter::EncodableValue>& reply) {
+            flutter::EncodableList wrapped;
+            try {
+              const auto& args = std::get<flutter::EncodableList>(message);
+              const auto& encodable_nullable_string_arg = args.at(0);
+              const auto* nullable_string_arg =
+                  std::get_if<std::string>(&encodable_nullable_string_arg);
+              ErrorOr<AllNullableTypesWrapper> output =
+                  api->CreateNestedNullableString(nullable_string_arg);
+              if (output.has_error()) {
+                wrapped = WrapError(output.error());
+              } else {
+                wrapped.push_back(flutter::CustomEncodableValue(
+                    std::move(output).TakeValue()));
+              }
+            } catch (const std::exception& exception) {
+              wrapped = WrapError(exception.what());
+            }
+            reply(wrapped);
+          });
+    } else {
+      channel->SetMessageHandler(nullptr);
+    }
+  }
+  {
+    auto channel = std::make_unique<
+        flutter::BasicMessageChannel<flutter::EncodableValue>>(
+        binary_messenger,
+        "dev.flutter.pigeon.HostIntegrationCoreApi.sendMultipleNullableTypes",
+        &GetCodec());
+    if (api != nullptr) {
+      channel->SetMessageHandler(
+          [api](const flutter::EncodableValue& message,
+                const flutter::MessageReply<flutter::EncodableValue>& reply) {
+            flutter::EncodableList wrapped;
+            try {
+              const auto& args = std::get<flutter::EncodableList>(message);
+              const auto& encodable_a_nullable_bool_arg = args.at(0);
+              const auto* a_nullable_bool_arg =
+                  std::get_if<bool>(&encodable_a_nullable_bool_arg);
+              const auto& encodable_a_nullable_int_arg = args.at(1);
+              const int64_t a_nullable_int_arg_value =
+                  encodable_a_nullable_int_arg.IsNull()
+                      ? 0
+                      : encodable_a_nullable_int_arg.LongValue();
+              const auto* a_nullable_int_arg =
+                  encodable_a_nullable_int_arg.IsNull()
+                      ? nullptr
+                      : &a_nullable_int_arg_value;
+              const auto& encodable_a_nullable_string_arg = args.at(2);
+              const auto* a_nullable_string_arg =
+                  std::get_if<std::string>(&encodable_a_nullable_string_arg);
+              ErrorOr<AllNullableTypes> output = api->SendMultipleNullableTypes(
+                  a_nullable_bool_arg, a_nullable_int_arg,
+                  a_nullable_string_arg);
+              if (output.has_error()) {
+                wrapped = WrapError(output.error());
+              } else {
+                wrapped.push_back(flutter::CustomEncodableValue(
+                    std::move(output).TakeValue()));
+              }
+            } catch (const std::exception& exception) {
+              wrapped = WrapError(exception.what());
+            }
+            reply(wrapped);
+          });
+    } else {
+      channel->SetMessageHandler(nullptr);
+    }
+  }
+  {
+    auto channel =
+        std::make_unique<flutter::BasicMessageChannel<flutter::EncodableValue>>(
+            binary_messenger,
+            "dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableInt",
+            &GetCodec());
+    if (api != nullptr) {
+      channel->SetMessageHandler(
+          [api](const flutter::EncodableValue& message,
+                const flutter::MessageReply<flutter::EncodableValue>& reply) {
+            flutter::EncodableList wrapped;
+            try {
+              const auto& args = std::get<flutter::EncodableList>(message);
+              const auto& encodable_a_nullable_int_arg = args.at(0);
+              const int64_t a_nullable_int_arg_value =
+                  encodable_a_nullable_int_arg.IsNull()
+                      ? 0
+                      : encodable_a_nullable_int_arg.LongValue();
+              const auto* a_nullable_int_arg =
+                  encodable_a_nullable_int_arg.IsNull()
+                      ? nullptr
+                      : &a_nullable_int_arg_value;
+              ErrorOr<std::optional<int64_t>> output =
+                  api->EchoNullableInt(a_nullable_int_arg);
+              if (output.has_error()) {
+                wrapped = WrapError(output.error());
+              } else {
+                auto output_optional = std::move(output).TakeValue();
+                if (output_optional) {
+                  wrapped.push_back(flutter::EncodableValue(
+                      std::move(output_optional).value()));
+                } else {
+                  wrapped.push_back(flutter::EncodableValue());
+                }
+              }
+            } catch (const std::exception& exception) {
+              wrapped = WrapError(exception.what());
+            }
+            reply(wrapped);
+          });
+    } else {
+      channel->SetMessageHandler(nullptr);
+    }
+  }
+  {
+    auto channel =
+        std::make_unique<flutter::BasicMessageChannel<flutter::EncodableValue>>(
+            binary_messenger,
+            "dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableDouble",
+            &GetCodec());
+    if (api != nullptr) {
+      channel->SetMessageHandler(
+          [api](const flutter::EncodableValue& message,
+                const flutter::MessageReply<flutter::EncodableValue>& reply) {
+            flutter::EncodableList wrapped;
+            try {
+              const auto& args = std::get<flutter::EncodableList>(message);
+              const auto& encodable_a_nullable_double_arg = args.at(0);
+              const auto* a_nullable_double_arg =
+                  std::get_if<double>(&encodable_a_nullable_double_arg);
+              ErrorOr<std::optional<double>> output =
+                  api->EchoNullableDouble(a_nullable_double_arg);
+              if (output.has_error()) {
+                wrapped = WrapError(output.error());
+              } else {
+                auto output_optional = std::move(output).TakeValue();
+                if (output_optional) {
+                  wrapped.push_back(flutter::EncodableValue(
+                      std::move(output_optional).value()));
+                } else {
+                  wrapped.push_back(flutter::EncodableValue());
+                }
+              }
+            } catch (const std::exception& exception) {
+              wrapped = WrapError(exception.what());
+            }
+            reply(wrapped);
+          });
+    } else {
+      channel->SetMessageHandler(nullptr);
+    }
+  }
+  {
+    auto channel =
+        std::make_unique<flutter::BasicMessageChannel<flutter::EncodableValue>>(
+            binary_messenger,
+            "dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableBool",
+            &GetCodec());
+    if (api != nullptr) {
+      channel->SetMessageHandler(
+          [api](const flutter::EncodableValue& message,
+                const flutter::MessageReply<flutter::EncodableValue>& reply) {
+            flutter::EncodableList wrapped;
+            try {
+              const auto& args = std::get<flutter::EncodableList>(message);
+              const auto& encodable_a_nullable_bool_arg = args.at(0);
+              const auto* a_nullable_bool_arg =
+                  std::get_if<bool>(&encodable_a_nullable_bool_arg);
+              ErrorOr<std::optional<bool>> output =
+                  api->EchoNullableBool(a_nullable_bool_arg);
+              if (output.has_error()) {
+                wrapped = WrapError(output.error());
+              } else {
+                auto output_optional = std::move(output).TakeValue();
+                if (output_optional) {
+                  wrapped.push_back(flutter::EncodableValue(
+                      std::move(output_optional).value()));
+                } else {
+                  wrapped.push_back(flutter::EncodableValue());
+                }
+              }
+            } catch (const std::exception& exception) {
+              wrapped = WrapError(exception.what());
+            }
+            reply(wrapped);
+          });
+    } else {
+      channel->SetMessageHandler(nullptr);
+    }
+  }
+  {
+    auto channel =
+        std::make_unique<flutter::BasicMessageChannel<flutter::EncodableValue>>(
+            binary_messenger,
+            "dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableString",
+            &GetCodec());
+    if (api != nullptr) {
+      channel->SetMessageHandler(
+          [api](const flutter::EncodableValue& message,
+                const flutter::MessageReply<flutter::EncodableValue>& reply) {
+            flutter::EncodableList wrapped;
+            try {
+              const auto& args = std::get<flutter::EncodableList>(message);
+              const auto& encodable_a_nullable_string_arg = args.at(0);
+              const auto* a_nullable_string_arg =
+                  std::get_if<std::string>(&encodable_a_nullable_string_arg);
+              ErrorOr<std::optional<std::string>> output =
+                  api->EchoNullableString(a_nullable_string_arg);
+              if (output.has_error()) {
+                wrapped = WrapError(output.error());
+              } else {
+                auto output_optional = std::move(output).TakeValue();
+                if (output_optional) {
+                  wrapped.push_back(flutter::EncodableValue(
+                      std::move(output_optional).value()));
+                } else {
+                  wrapped.push_back(flutter::EncodableValue());
+                }
+              }
+            } catch (const std::exception& exception) {
+              wrapped = WrapError(exception.what());
+            }
+            reply(wrapped);
+          });
+    } else {
+      channel->SetMessageHandler(nullptr);
+    }
+  }
+  {
+    auto channel =
+        std::make_unique<flutter::BasicMessageChannel<flutter::EncodableValue>>(
+            binary_messenger,
+            "dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableUint8List",
+            &GetCodec());
+    if (api != nullptr) {
+      channel->SetMessageHandler(
+          [api](const flutter::EncodableValue& message,
+                const flutter::MessageReply<flutter::EncodableValue>& reply) {
+            flutter::EncodableList wrapped;
+            try {
+              const auto& args = std::get<flutter::EncodableList>(message);
+              const auto& encodable_a_nullable_uint8_list_arg = args.at(0);
+              const auto* a_nullable_uint8_list_arg =
+                  std::get_if<std::vector<uint8_t>>(
+                      &encodable_a_nullable_uint8_list_arg);
+              ErrorOr<std::optional<std::vector<uint8_t>>> output =
+                  api->EchoNullableUint8List(a_nullable_uint8_list_arg);
+              if (output.has_error()) {
+                wrapped = WrapError(output.error());
+              } else {
+                auto output_optional = std::move(output).TakeValue();
+                if (output_optional) {
+                  wrapped.push_back(flutter::EncodableValue(
+                      std::move(output_optional).value()));
+                } else {
+                  wrapped.push_back(flutter::EncodableValue());
+                }
+              }
+            } catch (const std::exception& exception) {
+              wrapped = WrapError(exception.what());
+            }
+            reply(wrapped);
+          });
+    } else {
+      channel->SetMessageHandler(nullptr);
+    }
+  }
+  {
+    auto channel =
+        std::make_unique<flutter::BasicMessageChannel<flutter::EncodableValue>>(
+            binary_messenger,
+            "dev.flutter.pigeon.HostIntegrationCoreApi.noopAsync", &GetCodec());
+    if (api != nullptr) {
+      channel->SetMessageHandler(
+          [api](const flutter::EncodableValue& message,
+                const flutter::MessageReply<flutter::EncodableValue>& reply) {
+            flutter::EncodableList wrapped;
+            try {
+              api->NoopAsync(
+                  [&wrapped, &reply](std::optional<FlutterError>&& output) {
+                    if (output.has_value()) {
+                      wrapped = WrapError(output.value());
+                    } else {
+                      wrapped.push_back(flutter::EncodableValue());
+                    }
+                    reply(wrapped);
+                  });
+            } catch (const std::exception& exception) {
+              wrapped = WrapError(exception.what());
+              reply(wrapped);
+            }
+          });
+    } else {
+      channel->SetMessageHandler(nullptr);
+    }
+  }
+  {
+    auto channel =
+        std::make_unique<flutter::BasicMessageChannel<flutter::EncodableValue>>(
+            binary_messenger,
+            "dev.flutter.pigeon.HostIntegrationCoreApi.echoAsyncString",
+            &GetCodec());
+    if (api != nullptr) {
+      channel->SetMessageHandler(
+          [api](const flutter::EncodableValue& message,
+                const flutter::MessageReply<flutter::EncodableValue>& reply) {
+            flutter::EncodableList wrapped;
+            try {
+              const auto& args = std::get<flutter::EncodableList>(message);
+              const auto& encodable_a_string_arg = args.at(0);
+              if (encodable_a_string_arg.IsNull()) {
+                reply(WrapError("a_string_arg unexpectedly null."));
+                return;
+              }
+              const auto& a_string_arg =
+                  std::get<std::string>(encodable_a_string_arg);
+              api->EchoAsyncString(
+                  a_string_arg,
+                  [&wrapped, &reply](ErrorOr<std::string>&& output) {
+                    if (output.has_error()) {
+                      wrapped = WrapError(output.error());
+                    } else {
+                      wrapped.push_back(flutter::EncodableValue(
+                          std::move(output).TakeValue()));
+                    }
+                    reply(wrapped);
+                  });
+            } catch (const std::exception& exception) {
+              wrapped = WrapError(exception.what());
+              reply(wrapped);
+            }
+          });
+    } else {
+      channel->SetMessageHandler(nullptr);
+    }
+  }
+  {
+    auto channel =
+        std::make_unique<flutter::BasicMessageChannel<flutter::EncodableValue>>(
+            binary_messenger,
+            "dev.flutter.pigeon.HostIntegrationCoreApi.callFlutterNoop",
+            &GetCodec());
+    if (api != nullptr) {
+      channel->SetMessageHandler(
+          [api](const flutter::EncodableValue& message,
+                const flutter::MessageReply<flutter::EncodableValue>& reply) {
+            flutter::EncodableList wrapped;
+            try {
+              api->CallFlutterNoop(
+                  [&wrapped, &reply](std::optional<FlutterError>&& output) {
+                    if (output.has_value()) {
+                      wrapped = WrapError(output.value());
+                    } else {
+                      wrapped.push_back(flutter::EncodableValue());
+                    }
+                    reply(wrapped);
+                  });
+            } catch (const std::exception& exception) {
+              wrapped = WrapError(exception.what());
+              reply(wrapped);
+            }
+          });
+    } else {
+      channel->SetMessageHandler(nullptr);
+    }
+  }
+  {
+    auto channel =
+        std::make_unique<flutter::BasicMessageChannel<flutter::EncodableValue>>(
+            binary_messenger,
+            "dev.flutter.pigeon.HostIntegrationCoreApi.callFlutterEchoString",
+            &GetCodec());
+    if (api != nullptr) {
+      channel->SetMessageHandler(
+          [api](const flutter::EncodableValue& message,
+                const flutter::MessageReply<flutter::EncodableValue>& reply) {
+            flutter::EncodableList wrapped;
+            try {
+              const auto& args = std::get<flutter::EncodableList>(message);
+              const auto& encodable_a_string_arg = args.at(0);
+              if (encodable_a_string_arg.IsNull()) {
+                reply(WrapError("a_string_arg unexpectedly null."));
+                return;
+              }
+              const auto& a_string_arg =
+                  std::get<std::string>(encodable_a_string_arg);
+              api->CallFlutterEchoString(
+                  a_string_arg,
+                  [&wrapped, &reply](ErrorOr<std::string>&& output) {
+                    if (output.has_error()) {
+                      wrapped = WrapError(output.error());
+                    } else {
+                      wrapped.push_back(flutter::EncodableValue(
+                          std::move(output).TakeValue()));
+                    }
+                    reply(wrapped);
+                  });
+            } catch (const std::exception& exception) {
+              wrapped = WrapError(exception.what());
+              reply(wrapped);
+            }
+          });
+    } else {
+      channel->SetMessageHandler(nullptr);
+    }
+  }
+}
+
+flutter::EncodableList HostIntegrationCoreApi::WrapError(
+    std::string_view error_message) {
+  return flutter::EncodableList(
+      {flutter::EncodableValue(std::string(error_message)),
+       flutter::EncodableValue("Error"), flutter::EncodableValue()});
+}
+flutter::EncodableList HostIntegrationCoreApi::WrapError(
+    const FlutterError& error) {
+  return flutter::EncodableList({flutter::EncodableValue(error.message()),
+                                 flutter::EncodableValue(error.code()),
+                                 error.details()});
+}
+
+FlutterIntegrationCoreApiCodecSerializer::
+    FlutterIntegrationCoreApiCodecSerializer() {}
+flutter::EncodableValue
+FlutterIntegrationCoreApiCodecSerializer::ReadValueOfType(
+    uint8_t type, flutter::ByteStreamReader* stream) const {
+  switch (type) {
+    case 128:
+      return flutter::CustomEncodableValue(AllNullableTypes(
+          std::get<flutter::EncodableList>(ReadValue(stream))));
+
+    case 129:
+      return flutter::CustomEncodableValue(
+          AllTypes(std::get<flutter::EncodableList>(ReadValue(stream))));
+
+    default:
+      return flutter::StandardCodecSerializer::ReadValueOfType(type, stream);
+  }
+}
+
+void FlutterIntegrationCoreApiCodecSerializer::WriteValue(
+    const flutter::EncodableValue& value,
+    flutter::ByteStreamWriter* stream) const {
+  if (const flutter::CustomEncodableValue* custom_value =
+          std::get_if<flutter::CustomEncodableValue>(&value)) {
+    if (custom_value->type() == typeid(AllNullableTypes)) {
+      stream->WriteByte(128);
+      WriteValue(
+          flutter::EncodableValue(
+              std::any_cast<AllNullableTypes>(*custom_value).ToEncodableList()),
+          stream);
+      return;
+    }
+    if (custom_value->type() == typeid(AllTypes)) {
+      stream->WriteByte(129);
+      WriteValue(flutter::EncodableValue(
+                     std::any_cast<AllTypes>(*custom_value).ToEncodableList()),
+                 stream);
+      return;
+    }
+  }
+  flutter::StandardCodecSerializer::WriteValue(value, stream);
+}
+
+// Generated class from Pigeon that represents Flutter messages that can be
+// called from C++.
+FlutterIntegrationCoreApi::FlutterIntegrationCoreApi(
+    flutter::BinaryMessenger* binary_messenger) {
+  this->binary_messenger_ = binary_messenger;
+}
+
+const flutter::StandardMessageCodec& FlutterIntegrationCoreApi::GetCodec() {
+  return flutter::StandardMessageCodec::GetInstance(
+      &FlutterIntegrationCoreApiCodecSerializer::GetInstance());
+}
+
+void FlutterIntegrationCoreApi::noop(std::function<void(void)>&& callback) {
+  auto channel =
+      std::make_unique<flutter::BasicMessageChannel<flutter::EncodableValue>>(
+          binary_messenger_,
+          "dev.flutter.pigeon.FlutterIntegrationCoreApi.noop", &GetCodec());
+  channel->Send(
+      flutter::EncodableValue(),
+      [callback](const uint8_t* reply, size_t reply_size) { callback(); });
+}
+void FlutterIntegrationCoreApi::echoAllTypes(
+    const AllTypes& everything_arg,
+    std::function<void(const AllTypes&)>&& callback) {
+  auto channel =
+      std::make_unique<flutter::BasicMessageChannel<flutter::EncodableValue>>(
+          binary_messenger_,
+          "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoAllTypes",
+          &GetCodec());
+  channel->Send(
+      flutter::EncodableList{flutter::CustomEncodableValue(everything_arg)},
+      [callback](const uint8_t* reply, size_t reply_size) {
+        std::unique_ptr<flutter::EncodableValue> decoded_reply =
+            GetCodec().DecodeMessage(reply, reply_size);
+        flutter::EncodableValue args =
+            *(flutter::EncodableValue*)(decoded_reply.release());
+        AllTypes output{};
+        if (const flutter::EncodableList* pointer_output =
+                std::get_if<flutter::EncodableList>(&args)) {
+          output = AllTypes(*pointer_output);
+        }
+        callback(output);
+      });
+}
+void FlutterIntegrationCoreApi::echoAllNullableTypes(
+    const AllNullableTypes& everything_arg,
+    std::function<void(const AllNullableTypes&)>&& callback) {
+  auto channel =
+      std::make_unique<flutter::BasicMessageChannel<flutter::EncodableValue>>(
+          binary_messenger_,
+          "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoAllNullableTypes",
+          &GetCodec());
+  channel->Send(
+      flutter::EncodableList{flutter::CustomEncodableValue(everything_arg)},
+      [callback](const uint8_t* reply, size_t reply_size) {
+        std::unique_ptr<flutter::EncodableValue> decoded_reply =
+            GetCodec().DecodeMessage(reply, reply_size);
+        flutter::EncodableValue args =
+            *(flutter::EncodableValue*)(decoded_reply.release());
+        AllNullableTypes output{};
+        if (const flutter::EncodableList* pointer_output =
+                std::get_if<flutter::EncodableList>(&args)) {
+          output = AllNullableTypes(*pointer_output);
+        }
+        callback(output);
+      });
+}
+void FlutterIntegrationCoreApi::echoString(
+    const std::string& a_string_arg,
+    std::function<void(const std::string&)>&& callback) {
+  auto channel =
+      std::make_unique<flutter::BasicMessageChannel<flutter::EncodableValue>>(
+          binary_messenger_,
+          "dev.flutter.pigeon.FlutterIntegrationCoreApi.echoString",
+          &GetCodec());
+  channel->Send(
+      flutter::EncodableList{flutter::CustomEncodableValue(a_string_arg)},
+      [callback](const uint8_t* reply, size_t reply_size) {
+        std::unique_ptr<flutter::EncodableValue> decoded_reply =
+            GetCodec().DecodeMessage(reply, reply_size);
+        flutter::EncodableValue args =
+            *(flutter::EncodableValue*)(decoded_reply.release());
+        std::string output{};
+        if (const std::string* pointer_output =
+                std::get_if<std::string>(&args)) {
+          output = *pointer_output;
+        }
+        callback(output);
+      });
+}
+/// The codec used by HostTrivialApi.
+const flutter::StandardMessageCodec& HostTrivialApi::GetCodec() {
+  return flutter::StandardMessageCodec::GetInstance(
+      &flutter::StandardCodecSerializer::GetInstance());
+}
+
+// Sets up an instance of `HostTrivialApi` to handle messages through the
+// `binary_messenger`.
+void HostTrivialApi::SetUp(flutter::BinaryMessenger* binary_messenger,
+                           HostTrivialApi* api) {
+  {
+    auto channel =
+        std::make_unique<flutter::BasicMessageChannel<flutter::EncodableValue>>(
+            binary_messenger, "dev.flutter.pigeon.HostTrivialApi.noop",
+            &GetCodec());
+    if (api != nullptr) {
+      channel->SetMessageHandler(
+          [api](const flutter::EncodableValue& message,
+                const flutter::MessageReply<flutter::EncodableValue>& reply) {
+            flutter::EncodableList wrapped;
+            try {
+              std::optional<FlutterError> output = api->Noop();
+              if (output.has_value()) {
+                wrapped = WrapError(output.value());
+              } else {
+                wrapped.push_back(flutter::EncodableValue());
+              }
+            } catch (const std::exception& exception) {
+              wrapped = WrapError(exception.what());
+            }
+            reply(wrapped);
+          });
+    } else {
+      channel->SetMessageHandler(nullptr);
+    }
+  }
+}
+
+flutter::EncodableList HostTrivialApi::WrapError(
+    std::string_view error_message) {
+  return flutter::EncodableList(
+      {flutter::EncodableValue(std::string(error_message)),
+       flutter::EncodableValue("Error"), flutter::EncodableValue()});
+}
+flutter::EncodableList HostTrivialApi::WrapError(const FlutterError& error) {
+  return flutter::EncodableList({flutter::EncodableValue(error.message()),
+                                 flutter::EncodableValue(error.code()),
+                                 error.details()});
+}
+
+}  // namespace core_tests_pigeontest
diff --git a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h
new file mode 100644
index 0000000..5100fdb
--- /dev/null
+++ b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h
@@ -0,0 +1,409 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// Autogenerated from Pigeon (v4.2.12), do not edit directly.
+// See also: https://pub.dev/packages/pigeon
+
+#ifndef PIGEON_CORE_TESTS_GEN_CORE_TESTS_PIGEONTEST_H_
+#define PIGEON_CORE_TESTS_GEN_CORE_TESTS_PIGEONTEST_H_
+#include <flutter/basic_message_channel.h>
+#include <flutter/binary_messenger.h>
+#include <flutter/encodable_value.h>
+#include <flutter/standard_message_codec.h>
+
+#include <map>
+#include <optional>
+#include <string>
+
+namespace core_tests_pigeontest {
+class CoreTestsTest;
+
+// Generated class from Pigeon.
+
+enum class AnEnum { one = 0, two = 1, three = 2 };
+
+class FlutterError {
+ public:
+  explicit FlutterError(const std::string& code) : code_(code) {}
+  explicit FlutterError(const std::string& code, const std::string& message)
+      : code_(code), message_(message) {}
+  explicit FlutterError(const std::string& code, const std::string& message,
+                        const flutter::EncodableValue& details)
+      : code_(code), message_(message), details_(details) {}
+
+  const std::string& code() const { return code_; }
+  const std::string& message() const { return message_; }
+  const flutter::EncodableValue& details() const { return details_; }
+
+ private:
+  std::string code_;
+  std::string message_;
+  flutter::EncodableValue details_;
+};
+
+template <class T>
+class ErrorOr {
+ public:
+  ErrorOr(const T& rhs) { new (&v_) T(rhs); }
+  ErrorOr(const T&& rhs) { v_ = std::move(rhs); }
+  ErrorOr(const FlutterError& rhs) { new (&v_) FlutterError(rhs); }
+  ErrorOr(const FlutterError&& rhs) { v_ = std::move(rhs); }
+
+  bool has_error() const { return std::holds_alternative<FlutterError>(v_); }
+  const T& value() const { return std::get<T>(v_); };
+  const FlutterError& error() const { return std::get<FlutterError>(v_); };
+
+ private:
+  friend class HostIntegrationCoreApi;
+  friend class FlutterIntegrationCoreApi;
+  friend class HostTrivialApi;
+  ErrorOr() = default;
+  T TakeValue() && { return std::get<T>(std::move(v_)); }
+
+  std::variant<T, FlutterError> v_;
+};
+
+// Generated class from Pigeon that represents data sent in messages.
+class AllTypes {
+ public:
+  AllTypes();
+  bool a_bool() const;
+  void set_a_bool(bool value_arg);
+
+  int64_t an_int() const;
+  void set_an_int(int64_t value_arg);
+
+  double a_double() const;
+  void set_a_double(double value_arg);
+
+  const std::string& a_string() const;
+  void set_a_string(std::string_view value_arg);
+
+  const std::vector<uint8_t>& a_byte_array() const;
+  void set_a_byte_array(const std::vector<uint8_t>& value_arg);
+
+  const std::vector<int32_t>& a4_byte_array() const;
+  void set_a4_byte_array(const std::vector<int32_t>& value_arg);
+
+  const std::vector<int64_t>& a8_byte_array() const;
+  void set_a8_byte_array(const std::vector<int64_t>& value_arg);
+
+  const std::vector<double>& a_float_array() const;
+  void set_a_float_array(const std::vector<double>& value_arg);
+
+  const flutter::EncodableList& a_list() const;
+  void set_a_list(const flutter::EncodableList& value_arg);
+
+  const flutter::EncodableMap& a_map() const;
+  void set_a_map(const flutter::EncodableMap& value_arg);
+
+  const AnEnum& an_enum() const;
+  void set_an_enum(const AnEnum& value_arg);
+
+ private:
+  AllTypes(const flutter::EncodableList& list);
+  flutter::EncodableList ToEncodableList() const;
+  friend class HostIntegrationCoreApi;
+  friend class HostIntegrationCoreApiCodecSerializer;
+  friend class FlutterIntegrationCoreApi;
+  friend class FlutterIntegrationCoreApiCodecSerializer;
+  friend class HostTrivialApi;
+  friend class HostTrivialApiCodecSerializer;
+  friend class CoreTestsTest;
+  bool a_bool_;
+  int64_t an_int_;
+  double a_double_;
+  std::string a_string_;
+  std::vector<uint8_t> a_byte_array_;
+  std::vector<int32_t> a4_byte_array_;
+  std::vector<int64_t> a8_byte_array_;
+  std::vector<double> a_float_array_;
+  flutter::EncodableList a_list_;
+  flutter::EncodableMap a_map_;
+  AnEnum an_enum_;
+};
+
+// Generated class from Pigeon that represents data sent in messages.
+class AllNullableTypes {
+ public:
+  AllNullableTypes();
+  const bool* a_nullable_bool() const;
+  void set_a_nullable_bool(const bool* value_arg);
+  void set_a_nullable_bool(bool value_arg);
+
+  const int64_t* a_nullable_int() const;
+  void set_a_nullable_int(const int64_t* value_arg);
+  void set_a_nullable_int(int64_t value_arg);
+
+  const double* a_nullable_double() const;
+  void set_a_nullable_double(const double* value_arg);
+  void set_a_nullable_double(double value_arg);
+
+  const std::string* a_nullable_string() const;
+  void set_a_nullable_string(const std::string_view* value_arg);
+  void set_a_nullable_string(std::string_view value_arg);
+
+  const std::vector<uint8_t>* a_nullable_byte_array() const;
+  void set_a_nullable_byte_array(const std::vector<uint8_t>* value_arg);
+  void set_a_nullable_byte_array(const std::vector<uint8_t>& value_arg);
+
+  const std::vector<int32_t>* a_nullable4_byte_array() const;
+  void set_a_nullable4_byte_array(const std::vector<int32_t>* value_arg);
+  void set_a_nullable4_byte_array(const std::vector<int32_t>& value_arg);
+
+  const std::vector<int64_t>* a_nullable8_byte_array() const;
+  void set_a_nullable8_byte_array(const std::vector<int64_t>* value_arg);
+  void set_a_nullable8_byte_array(const std::vector<int64_t>& value_arg);
+
+  const std::vector<double>* a_nullable_float_array() const;
+  void set_a_nullable_float_array(const std::vector<double>* value_arg);
+  void set_a_nullable_float_array(const std::vector<double>& value_arg);
+
+  const flutter::EncodableList* a_nullable_list() const;
+  void set_a_nullable_list(const flutter::EncodableList* value_arg);
+  void set_a_nullable_list(const flutter::EncodableList& value_arg);
+
+  const flutter::EncodableMap* a_nullable_map() const;
+  void set_a_nullable_map(const flutter::EncodableMap* value_arg);
+  void set_a_nullable_map(const flutter::EncodableMap& value_arg);
+
+  const flutter::EncodableList* nullable_nested_list() const;
+  void set_nullable_nested_list(const flutter::EncodableList* value_arg);
+  void set_nullable_nested_list(const flutter::EncodableList& value_arg);
+
+  const flutter::EncodableMap* nullable_map_with_annotations() const;
+  void set_nullable_map_with_annotations(
+      const flutter::EncodableMap* value_arg);
+  void set_nullable_map_with_annotations(
+      const flutter::EncodableMap& value_arg);
+
+  const flutter::EncodableMap* nullable_map_with_object() const;
+  void set_nullable_map_with_object(const flutter::EncodableMap* value_arg);
+  void set_nullable_map_with_object(const flutter::EncodableMap& value_arg);
+
+  const AnEnum* a_nullable_enum() const;
+  void set_a_nullable_enum(const AnEnum* value_arg);
+  void set_a_nullable_enum(const AnEnum& value_arg);
+
+ private:
+  AllNullableTypes(const flutter::EncodableList& list);
+  flutter::EncodableList ToEncodableList() const;
+  friend class AllNullableTypesWrapper;
+  friend class HostIntegrationCoreApi;
+  friend class HostIntegrationCoreApiCodecSerializer;
+  friend class FlutterIntegrationCoreApi;
+  friend class FlutterIntegrationCoreApiCodecSerializer;
+  friend class HostTrivialApi;
+  friend class HostTrivialApiCodecSerializer;
+  friend class CoreTestsTest;
+  std::optional<bool> a_nullable_bool_;
+  std::optional<int64_t> a_nullable_int_;
+  std::optional<double> a_nullable_double_;
+  std::optional<std::string> a_nullable_string_;
+  std::optional<std::vector<uint8_t>> a_nullable_byte_array_;
+  std::optional<std::vector<int32_t>> a_nullable4_byte_array_;
+  std::optional<std::vector<int64_t>> a_nullable8_byte_array_;
+  std::optional<std::vector<double>> a_nullable_float_array_;
+  std::optional<flutter::EncodableList> a_nullable_list_;
+  std::optional<flutter::EncodableMap> a_nullable_map_;
+  std::optional<flutter::EncodableList> nullable_nested_list_;
+  std::optional<flutter::EncodableMap> nullable_map_with_annotations_;
+  std::optional<flutter::EncodableMap> nullable_map_with_object_;
+  std::optional<AnEnum> a_nullable_enum_;
+};
+
+// Generated class from Pigeon that represents data sent in messages.
+class AllNullableTypesWrapper {
+ public:
+  AllNullableTypesWrapper();
+  const AllNullableTypes& values() const;
+  void set_values(const AllNullableTypes& value_arg);
+
+ private:
+  AllNullableTypesWrapper(const flutter::EncodableList& list);
+  flutter::EncodableList ToEncodableList() const;
+  friend class HostIntegrationCoreApi;
+  friend class HostIntegrationCoreApiCodecSerializer;
+  friend class FlutterIntegrationCoreApi;
+  friend class FlutterIntegrationCoreApiCodecSerializer;
+  friend class HostTrivialApi;
+  friend class HostTrivialApiCodecSerializer;
+  friend class CoreTestsTest;
+  AllNullableTypes values_;
+};
+
+class HostIntegrationCoreApiCodecSerializer
+    : public flutter::StandardCodecSerializer {
+ public:
+  inline static HostIntegrationCoreApiCodecSerializer& GetInstance() {
+    static HostIntegrationCoreApiCodecSerializer sInstance;
+    return sInstance;
+  }
+
+  HostIntegrationCoreApiCodecSerializer();
+
+ public:
+  void WriteValue(const flutter::EncodableValue& value,
+                  flutter::ByteStreamWriter* stream) const override;
+
+ protected:
+  flutter::EncodableValue ReadValueOfType(
+      uint8_t type, flutter::ByteStreamReader* stream) const override;
+};
+
+// The core interface that each host language plugin must implement in
+// platform_test integration tests.
+//
+// Generated interface from Pigeon that represents a handler of messages from
+// Flutter.
+class HostIntegrationCoreApi {
+ public:
+  HostIntegrationCoreApi(const HostIntegrationCoreApi&) = delete;
+  HostIntegrationCoreApi& operator=(const HostIntegrationCoreApi&) = delete;
+  virtual ~HostIntegrationCoreApi(){};
+  // A no-op function taking no arguments and returning no value, to sanity
+  // test basic calling.
+  virtual std::optional<FlutterError> Noop() = 0;
+  // Returns the passed object, to test serialization and deserialization.
+  virtual ErrorOr<AllTypes> EchoAllTypes(const AllTypes& everything) = 0;
+  // Returns the passed object, to test serialization and deserialization.
+  virtual ErrorOr<std::optional<AllNullableTypes>> EchoAllNullableTypes(
+      const AllNullableTypes* everything) = 0;
+  // Returns an error, to test error handling.
+  virtual std::optional<FlutterError> ThrowError() = 0;
+  // Returns passed in int.
+  virtual ErrorOr<int64_t> EchoInt(int64_t an_int) = 0;
+  // Returns passed in double.
+  virtual ErrorOr<double> EchoDouble(double a_double) = 0;
+  // Returns the passed in boolean.
+  virtual ErrorOr<bool> EchoBool(bool a_bool) = 0;
+  // Returns the passed in string.
+  virtual ErrorOr<std::string> EchoString(const std::string& a_string) = 0;
+  // Returns the passed in Uint8List.
+  virtual ErrorOr<std::vector<uint8_t>> EchoUint8List(
+      const std::vector<uint8_t>& a_uint8_list) = 0;
+  // Returns the inner `aString` value from the wrapped object, to test
+  // sending of nested objects.
+  virtual ErrorOr<std::optional<std::string>> ExtractNestedNullableString(
+      const AllNullableTypesWrapper& wrapper) = 0;
+  // Returns the inner `aString` value from the wrapped object, to test
+  // sending of nested objects.
+  virtual ErrorOr<AllNullableTypesWrapper> CreateNestedNullableString(
+      const std::string* nullable_string) = 0;
+  // Returns passed in arguments of multiple types.
+  virtual ErrorOr<AllNullableTypes> SendMultipleNullableTypes(
+      const bool* a_nullable_bool, const int64_t* a_nullable_int,
+      const std::string* a_nullable_string) = 0;
+  // Returns passed in int.
+  virtual ErrorOr<std::optional<int64_t>> EchoNullableInt(
+      const int64_t* a_nullable_int) = 0;
+  // Returns passed in double.
+  virtual ErrorOr<std::optional<double>> EchoNullableDouble(
+      const double* a_nullable_double) = 0;
+  // Returns the passed in boolean.
+  virtual ErrorOr<std::optional<bool>> EchoNullableBool(
+      const bool* a_nullable_bool) = 0;
+  // Returns the passed in string.
+  virtual ErrorOr<std::optional<std::string>> EchoNullableString(
+      const std::string* a_nullable_string) = 0;
+  // Returns the passed in Uint8List.
+  virtual ErrorOr<std::optional<std::vector<uint8_t>>> EchoNullableUint8List(
+      const std::vector<uint8_t>* a_nullable_uint8_list) = 0;
+  // A no-op function taking no arguments and returning no value, to sanity
+  // test basic asynchronous calling.
+  virtual void NoopAsync(
+      std::function<void(std::optional<FlutterError> reply)> result) = 0;
+  // Returns the passed string asynchronously.
+  virtual void EchoAsyncString(
+      const std::string& a_string,
+      std::function<void(ErrorOr<std::string> reply)> result) = 0;
+  virtual void CallFlutterNoop(
+      std::function<void(std::optional<FlutterError> reply)> result) = 0;
+  virtual void CallFlutterEchoString(
+      const std::string& a_string,
+      std::function<void(ErrorOr<std::string> reply)> result) = 0;
+
+  // The codec used by HostIntegrationCoreApi.
+  static const flutter::StandardMessageCodec& GetCodec();
+  // Sets up an instance of `HostIntegrationCoreApi` to handle messages through
+  // the `binary_messenger`.
+  static void SetUp(flutter::BinaryMessenger* binary_messenger,
+                    HostIntegrationCoreApi* api);
+  static flutter::EncodableList WrapError(std::string_view error_message);
+  static flutter::EncodableList WrapError(const FlutterError& error);
+
+ protected:
+  HostIntegrationCoreApi() = default;
+};
+class FlutterIntegrationCoreApiCodecSerializer
+    : public flutter::StandardCodecSerializer {
+ public:
+  inline static FlutterIntegrationCoreApiCodecSerializer& GetInstance() {
+    static FlutterIntegrationCoreApiCodecSerializer sInstance;
+    return sInstance;
+  }
+
+  FlutterIntegrationCoreApiCodecSerializer();
+
+ public:
+  void WriteValue(const flutter::EncodableValue& value,
+                  flutter::ByteStreamWriter* stream) const override;
+
+ protected:
+  flutter::EncodableValue ReadValueOfType(
+      uint8_t type, flutter::ByteStreamReader* stream) const override;
+};
+
+// The core interface that the Dart platform_test code implements for host
+// integration tests to call into.
+//
+// Generated class from Pigeon that represents Flutter messages that can be
+// called from C++.
+class FlutterIntegrationCoreApi {
+ private:
+  flutter::BinaryMessenger* binary_messenger_;
+
+ public:
+  FlutterIntegrationCoreApi(flutter::BinaryMessenger* binary_messenger);
+  static const flutter::StandardMessageCodec& GetCodec();
+  // A no-op function taking no arguments and returning no value, to sanity
+  // test basic calling.
+  void noop(std::function<void(void)>&& callback);
+  // Returns the passed object, to test serialization and deserialization.
+  void echoAllTypes(const AllTypes& everything_arg,
+                    std::function<void(const AllTypes&)>&& callback);
+  // Returns the passed object, to test serialization and deserialization.
+  void echoAllNullableTypes(
+      const AllNullableTypes& everything_arg,
+      std::function<void(const AllNullableTypes&)>&& callback);
+  // Returns the passed string, to test serialization and deserialization.
+  void echoString(const std::string& a_string_arg,
+                  std::function<void(const std::string&)>&& callback);
+};
+
+// An API that can be implemented for minimal, compile-only tests.
+//
+// Generated interface from Pigeon that represents a handler of messages from
+// Flutter.
+class HostTrivialApi {
+ public:
+  HostTrivialApi(const HostTrivialApi&) = delete;
+  HostTrivialApi& operator=(const HostTrivialApi&) = delete;
+  virtual ~HostTrivialApi(){};
+  virtual std::optional<FlutterError> Noop() = 0;
+
+  // The codec used by HostTrivialApi.
+  static const flutter::StandardMessageCodec& GetCodec();
+  // Sets up an instance of `HostTrivialApi` to handle messages through the
+  // `binary_messenger`.
+  static void SetUp(flutter::BinaryMessenger* binary_messenger,
+                    HostTrivialApi* api);
+  static flutter::EncodableList WrapError(std::string_view error_message);
+  static flutter::EncodableList WrapError(const FlutterError& error);
+
+ protected:
+  HostTrivialApi() = default;
+};
+}  // namespace core_tests_pigeontest
+#endif  // PIGEON_CORE_TESTS_GEN_CORE_TESTS_PIGEONTEST_H_