Rename Duplex to Bidi
diff --git a/compiler/src/java_plugin/cpp/java_generator.cpp b/compiler/src/java_plugin/cpp/java_generator.cpp
index 7bff09d..e24b03b 100644
--- a/compiler/src/java_plugin/cpp/java_generator.cpp
+++ b/compiler/src/java_plugin/cpp/java_generator.cpp
@@ -74,7 +74,7 @@
     bool server_streaming = method->server_streaming();
     if (client_streaming) {
       if (server_streaming) {
-        (*vars)["method_type"] = "DUPLEX_STREAMING";
+        (*vars)["method_type"] = "BIDI_STREAMING";
       } else {
         (*vars)["method_type"] = "CLIENT_STREAMING";
       }
@@ -299,7 +299,7 @@
         break;
       case ASYNC_CALL:
         if (client_streaming) {
-          // Duplex streaming or client streaming
+          // Bidirectional streaming or client streaming
           p->Print(
               *vars,
               "$StreamObserver$<$input_type$> $lower_method_name$(\n"
@@ -346,7 +346,7 @@
         case ASYNC_CALL:
           if (server_streaming) {
             if (client_streaming) {
-              (*vars)["calls_method"] = "asyncDuplexStreamingCall";
+              (*vars)["calls_method"] = "asyncBidiStreamingCall";
               (*vars)["params"] = "responseObserver";
             } else {
               (*vars)["calls_method"] = "asyncServerStreamingCall";
@@ -412,9 +412,9 @@
     bool server_streaming = method->server_streaming();
     if (client_streaming) {
       if (server_streaming) {
-        (*vars)["calls_method"] = "asyncDuplexStreamingCall";
+        (*vars)["calls_method"] = "asyncBidiStreamingCall";
         (*vars)["invocation_class"] =
-            "io.grpc.stub.ServerCalls.DuplexStreamingMethod";
+            "io.grpc.stub.ServerCalls.BidiStreamingMethod";
       } else {
         (*vars)["calls_method"] = "asyncClientStreamingCall";
         (*vars)["invocation_class"] =
@@ -543,7 +543,7 @@
       "import static "
       "io.grpc.stub.ClientCalls.asyncClientStreamingCall;\n"
       "import static "
-      "io.grpc.stub.ClientCalls.asyncDuplexStreamingCall;\n"
+      "io.grpc.stub.ClientCalls.asyncBidiStreamingCall;\n"
       "import static "
       "io.grpc.stub.ClientCalls.blockingUnaryCall;\n"
       "import static "
@@ -557,7 +557,7 @@
       "import static "
       "io.grpc.stub.ServerCalls.asyncClientStreamingCall;\n"
       "import static "
-      "io.grpc.stub.ServerCalls.asyncDuplexStreamingCall;\n\n");
+      "io.grpc.stub.ServerCalls.asyncBidiStreamingCall;\n\n");
   if (generate_nano) {
     p->Print("import java.io.IOException;\n\n");
   }
diff --git a/compiler/src/test/golden/TestService.java.txt b/compiler/src/test/golden/TestService.java.txt
index dcf1d83..e897816 100644
--- a/compiler/src/test/golden/TestService.java.txt
+++ b/compiler/src/test/golden/TestService.java.txt
@@ -3,14 +3,14 @@
 import static io.grpc.stub.ClientCalls.asyncUnaryCall;
 import static io.grpc.stub.ClientCalls.asyncServerStreamingCall;
 import static io.grpc.stub.ClientCalls.asyncClientStreamingCall;
-import static io.grpc.stub.ClientCalls.asyncDuplexStreamingCall;
+import static io.grpc.stub.ClientCalls.asyncBidiStreamingCall;
 import static io.grpc.stub.ClientCalls.blockingUnaryCall;
 import static io.grpc.stub.ClientCalls.blockingServerStreamingCall;
 import static io.grpc.stub.ClientCalls.futureUnaryCall;
 import static io.grpc.stub.ServerCalls.asyncUnaryCall;
 import static io.grpc.stub.ServerCalls.asyncServerStreamingCall;
 import static io.grpc.stub.ServerCalls.asyncClientStreamingCall;
-import static io.grpc.stub.ServerCalls.asyncDuplexStreamingCall;
+import static io.grpc.stub.ServerCalls.asyncBidiStreamingCall;
 
 @javax.annotation.Generated("by gRPC proto compiler")
 public class TestServiceGrpc {
@@ -38,17 +38,17 @@
           io.grpc.protobuf.ProtoUtils.marshaller(io.grpc.testing.integration.Test.StreamingInputCallRequest.parser()),
           io.grpc.protobuf.ProtoUtils.marshaller(io.grpc.testing.integration.Test.StreamingInputCallResponse.parser()));
   public static final io.grpc.MethodDescriptor<io.grpc.testing.integration.Test.StreamingOutputCallRequest,
-      io.grpc.testing.integration.Test.StreamingOutputCallResponse> METHOD_FULL_DUPLEX_CALL =
+      io.grpc.testing.integration.Test.StreamingOutputCallResponse> METHOD_FULL_BIDI_CALL =
       io.grpc.MethodDescriptor.create(
-          io.grpc.MethodDescriptor.MethodType.DUPLEX_STREAMING,
-          "grpc.testing.TestService", "FullDuplexCall",
+          io.grpc.MethodDescriptor.MethodType.BIDI_STREAMING,
+          "grpc.testing.TestService", "FullBidiCall",
           io.grpc.protobuf.ProtoUtils.marshaller(io.grpc.testing.integration.Test.StreamingOutputCallRequest.parser()),
           io.grpc.protobuf.ProtoUtils.marshaller(io.grpc.testing.integration.Test.StreamingOutputCallResponse.parser()));
   public static final io.grpc.MethodDescriptor<io.grpc.testing.integration.Test.StreamingOutputCallRequest,
-      io.grpc.testing.integration.Test.StreamingOutputCallResponse> METHOD_HALF_DUPLEX_CALL =
+      io.grpc.testing.integration.Test.StreamingOutputCallResponse> METHOD_HALF_BIDI_CALL =
       io.grpc.MethodDescriptor.create(
-          io.grpc.MethodDescriptor.MethodType.DUPLEX_STREAMING,
-          "grpc.testing.TestService", "HalfDuplexCall",
+          io.grpc.MethodDescriptor.MethodType.BIDI_STREAMING,
+          "grpc.testing.TestService", "HalfBidiCall",
           io.grpc.protobuf.ProtoUtils.marshaller(io.grpc.testing.integration.Test.StreamingOutputCallRequest.parser()),
           io.grpc.protobuf.ProtoUtils.marshaller(io.grpc.testing.integration.Test.StreamingOutputCallResponse.parser()));
 
@@ -77,10 +77,10 @@
     public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingInputCallRequest> streamingInputCall(
         io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingInputCallResponse> responseObserver);
 
-    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> fullDuplexCall(
+    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> fullBidiCall(
         io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallResponse> responseObserver);
 
-    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> halfDuplexCall(
+    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> halfBidiCall(
         io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallResponse> responseObserver);
   }
 
@@ -137,17 +137,17 @@
     }
 
     @java.lang.Override
-    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> fullDuplexCall(
+    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> fullBidiCall(
         io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallResponse> responseObserver) {
-      return asyncDuplexStreamingCall(
-          channel.newCall(METHOD_FULL_DUPLEX_CALL, callOptions), responseObserver);
+      return asyncBidiStreamingCall(
+          channel.newCall(METHOD_FULL_BIDI_CALL, callOptions), responseObserver);
     }
 
     @java.lang.Override
-    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> halfDuplexCall(
+    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> halfBidiCall(
         io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallResponse> responseObserver) {
-      return asyncDuplexStreamingCall(
-          channel.newCall(METHOD_HALF_DUPLEX_CALL, callOptions), responseObserver);
+      return asyncBidiStreamingCall(
+          channel.newCall(METHOD_HALF_BIDI_CALL, callOptions), responseObserver);
     }
   }
 
@@ -249,27 +249,27 @@
               }
             })))
       .addMethod(io.grpc.ServerMethodDefinition.create(
-          METHOD_FULL_DUPLEX_CALL,
-          asyncDuplexStreamingCall(
-            new io.grpc.stub.ServerCalls.DuplexStreamingMethod<
+          METHOD_FULL_BIDI_CALL,
+          asyncBidiStreamingCall(
+            new io.grpc.stub.ServerCalls.BidiStreamingMethod<
                 io.grpc.testing.integration.Test.StreamingOutputCallRequest,
                 io.grpc.testing.integration.Test.StreamingOutputCallResponse>() {
               @java.lang.Override
               public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> invoke(
                   io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallResponse> responseObserver) {
-                return serviceImpl.fullDuplexCall(responseObserver);
+                return serviceImpl.fullBidiCall(responseObserver);
               }
             })))
       .addMethod(io.grpc.ServerMethodDefinition.create(
-          METHOD_HALF_DUPLEX_CALL,
-          asyncDuplexStreamingCall(
-            new io.grpc.stub.ServerCalls.DuplexStreamingMethod<
+          METHOD_HALF_BIDI_CALL,
+          asyncBidiStreamingCall(
+            new io.grpc.stub.ServerCalls.BidiStreamingMethod<
                 io.grpc.testing.integration.Test.StreamingOutputCallRequest,
                 io.grpc.testing.integration.Test.StreamingOutputCallResponse>() {
               @java.lang.Override
               public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> invoke(
                   io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallResponse> responseObserver) {
-                return serviceImpl.halfDuplexCall(responseObserver);
+                return serviceImpl.halfBidiCall(responseObserver);
               }
             }))).build();
   }
diff --git a/compiler/src/test/golden/TestServiceNano.java.txt b/compiler/src/test/golden/TestServiceNano.java.txt
index 1b823ab..edcb936 100644
--- a/compiler/src/test/golden/TestServiceNano.java.txt
+++ b/compiler/src/test/golden/TestServiceNano.java.txt
@@ -3,14 +3,14 @@
 import static io.grpc.stub.ClientCalls.asyncUnaryCall;
 import static io.grpc.stub.ClientCalls.asyncServerStreamingCall;
 import static io.grpc.stub.ClientCalls.asyncClientStreamingCall;
-import static io.grpc.stub.ClientCalls.asyncDuplexStreamingCall;
+import static io.grpc.stub.ClientCalls.asyncBidiStreamingCall;
 import static io.grpc.stub.ClientCalls.blockingUnaryCall;
 import static io.grpc.stub.ClientCalls.blockingServerStreamingCall;
 import static io.grpc.stub.ClientCalls.futureUnaryCall;
 import static io.grpc.stub.ServerCalls.asyncUnaryCall;
 import static io.grpc.stub.ServerCalls.asyncServerStreamingCall;
 import static io.grpc.stub.ServerCalls.asyncClientStreamingCall;
-import static io.grpc.stub.ServerCalls.asyncDuplexStreamingCall;
+import static io.grpc.stub.ServerCalls.asyncBidiStreamingCall;
 
 import java.io.IOException;
 
@@ -76,10 +76,10 @@
                   }
           }));
   public static final io.grpc.MethodDescriptor<io.grpc.testing.integration.Test.StreamingOutputCallRequest,
-      io.grpc.testing.integration.Test.StreamingOutputCallResponse> METHOD_FULL_DUPLEX_CALL =
+      io.grpc.testing.integration.Test.StreamingOutputCallResponse> METHOD_FULL_BIDI_CALL =
       io.grpc.MethodDescriptor.create(
-          io.grpc.MethodDescriptor.MethodType.DUPLEX_STREAMING,
-          "grpc.testing.TestService", "FullDuplexCall",
+          io.grpc.MethodDescriptor.MethodType.BIDI_STREAMING,
+          "grpc.testing.TestService", "FullBidiCall",
           io.grpc.protobuf.nano.NanoUtils.<io.grpc.testing.integration.Test.StreamingOutputCallRequest>marshaller(
               new io.grpc.protobuf.nano.Parser<io.grpc.testing.integration.Test.StreamingOutputCallRequest>() {
                   @Override
@@ -95,10 +95,10 @@
                   }
           }));
   public static final io.grpc.MethodDescriptor<io.grpc.testing.integration.Test.StreamingOutputCallRequest,
-      io.grpc.testing.integration.Test.StreamingOutputCallResponse> METHOD_HALF_DUPLEX_CALL =
+      io.grpc.testing.integration.Test.StreamingOutputCallResponse> METHOD_HALF_BIDI_CALL =
       io.grpc.MethodDescriptor.create(
-          io.grpc.MethodDescriptor.MethodType.DUPLEX_STREAMING,
-          "grpc.testing.TestService", "HalfDuplexCall",
+          io.grpc.MethodDescriptor.MethodType.BIDI_STREAMING,
+          "grpc.testing.TestService", "HalfBidiCall",
           io.grpc.protobuf.nano.NanoUtils.<io.grpc.testing.integration.Test.StreamingOutputCallRequest>marshaller(
               new io.grpc.protobuf.nano.Parser<io.grpc.testing.integration.Test.StreamingOutputCallRequest>() {
                   @Override
@@ -139,10 +139,10 @@
     public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingInputCallRequest> streamingInputCall(
         io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingInputCallResponse> responseObserver);
 
-    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> fullDuplexCall(
+    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> fullBidiCall(
         io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallResponse> responseObserver);
 
-    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> halfDuplexCall(
+    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> halfBidiCall(
         io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallResponse> responseObserver);
   }
 
@@ -199,17 +199,17 @@
     }
 
     @java.lang.Override
-    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> fullDuplexCall(
+    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> fullBidiCall(
         io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallResponse> responseObserver) {
-      return asyncDuplexStreamingCall(
-          channel.newCall(METHOD_FULL_DUPLEX_CALL, callOptions), responseObserver);
+      return asyncBidiStreamingCall(
+          channel.newCall(METHOD_FULL_BIDI_CALL, callOptions), responseObserver);
     }
 
     @java.lang.Override
-    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> halfDuplexCall(
+    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> halfBidiCall(
         io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallResponse> responseObserver) {
-      return asyncDuplexStreamingCall(
-          channel.newCall(METHOD_HALF_DUPLEX_CALL, callOptions), responseObserver);
+      return asyncBidiStreamingCall(
+          channel.newCall(METHOD_HALF_BIDI_CALL, callOptions), responseObserver);
     }
   }
 
@@ -311,27 +311,27 @@
               }
             })))
       .addMethod(io.grpc.ServerMethodDefinition.create(
-          METHOD_FULL_DUPLEX_CALL,
-          asyncDuplexStreamingCall(
-            new io.grpc.stub.ServerCalls.DuplexStreamingMethod<
+          METHOD_FULL_BIDI_CALL,
+          asyncBidiStreamingCall(
+            new io.grpc.stub.ServerCalls.BidiStreamingMethod<
                 io.grpc.testing.integration.Test.StreamingOutputCallRequest,
                 io.grpc.testing.integration.Test.StreamingOutputCallResponse>() {
               @java.lang.Override
               public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> invoke(
                   io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallResponse> responseObserver) {
-                return serviceImpl.fullDuplexCall(responseObserver);
+                return serviceImpl.fullBidiCall(responseObserver);
               }
             })))
       .addMethod(io.grpc.ServerMethodDefinition.create(
-          METHOD_HALF_DUPLEX_CALL,
-          asyncDuplexStreamingCall(
-            new io.grpc.stub.ServerCalls.DuplexStreamingMethod<
+          METHOD_HALF_BIDI_CALL,
+          asyncBidiStreamingCall(
+            new io.grpc.stub.ServerCalls.BidiStreamingMethod<
                 io.grpc.testing.integration.Test.StreamingOutputCallRequest,
                 io.grpc.testing.integration.Test.StreamingOutputCallResponse>() {
               @java.lang.Override
               public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> invoke(
                   io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallResponse> responseObserver) {
-                return serviceImpl.halfDuplexCall(responseObserver);
+                return serviceImpl.halfBidiCall(responseObserver);
               }
             }))).build();
   }
diff --git a/compiler/src/test/proto/test.proto b/compiler/src/test/proto/test.proto
index ba4938d..5b4a267 100644
--- a/compiler/src/test/proto/test.proto
+++ b/compiler/src/test/proto/test.proto
@@ -40,14 +40,14 @@
 
   // A sequence of requests with each request served by the server immediately.
   // As one request could lead to multiple responses, this interface
-  // demonstrates the idea of full duplexing.
-  rpc FullDuplexCall(stream StreamingOutputCallRequest)
+  // demonstrates the idea of full bidirectionality.
+  rpc FullBidiCall(stream StreamingOutputCallRequest)
       returns (stream StreamingOutputCallResponse);
 
   // A sequence of requests followed by a sequence of responses.
   // The server buffers all the client requests and then serves them in order. A
   // stream of responses are returned to the client when the server starts with
   // first request.
-  rpc HalfDuplexCall(stream StreamingOutputCallRequest)
+  rpc HalfBidiCall(stream StreamingOutputCallRequest)
       returns (stream StreamingOutputCallResponse);
 }