Add sections to java client generation

Change-Id: I6e767567d7e0c485529497e56df6946a9d7eb999
diff --git a/tools/codergen/template/embed.go b/tools/codergen/template/embed.go
index 7978191..9545ef6 100644
--- a/tools/codergen/template/embed.go
+++ b/tools/codergen/template/embed.go
@@ -1111,6 +1111,14 @@
   {{end}}
 {{end}}
 
+{{define "Java.ClientBody"}}
+  ¶{{/*Newline after section marker*/}}
+  {{range .Service.Methods}}
+    {{template "Java.Method" .}} throws IOException, RpcException;¶
+  {{end}}
+  //{{/*Comment the following section marker*/}}
+{{end}}
+
 {{define "Java.Client"}}
   §{{$.Copyright}}§¶
   package {{.JavaPackage}};¶
@@ -1122,12 +1130,50 @@
   import java.util.concurrent.Future;¶

   public interface {{.Service.Name}}Client {Ȧ
-    {{range .Service.Methods}}
-      {{template "Java.Method" .}} throws IOException, RpcException;¶
-    {{end}}
+    //{{Section "Java.ClientBody"}}¶
   «}¶
 {{end}}
 
+{{define "Java.ClientImplBody"}}
+  ¶{{/*Newline after section marker*/}}
+  private final Broadcaster myBroadcaster;¶
+  private final ExecutorService myExecutorService;¶
+
+  public {{.Service.Name}}ClientImpl(ExecutorService executorService, InputStream in, OutputStream out, int mtu) {Ȧ
+    myExecutorService = executorService;¶
+    myBroadcaster = new Broadcaster(in, out, mtu, myExecutorService);¶
+  «}¶
+  {{range .Service.Methods}}
+    @Override¶
+    public {{template "Java.Method" .}} {Ȧ
+      return myExecutorService.submit(new {{.Name}}Callable({{template "Java.Arguments" .}}));¶
+    «}¶
+  {{end}}
+  ¶
+  {{range .Service.Methods}}
+    private class {{.Name}}Callable implements {{Call "Java.Callable" .Result.Type}} {Ȧ
+      private final {{File.ClassName .Call}} myCall;¶
+      ¶
+      private {{.Name}}Callable({{template "Java.Parameters" .}}) {Ȧ
+        myCall = new {{File.ClassName .Call}}();¶
+        {{range .Call.Params}}
+          myCall.{{File.Setter .Name}}({{.Name}});¶
+        {{end}}
+      «}¶
+      @Override¶
+      public {{Call "Java.Value" .Result.Type}} call() throws Exception {Ȧ
+        {{if .Result.Type}}{{File.ClassName .Result}} result = ({{File.ClassName .Result}})myBroadcaster.Send(myCall);¶
+          return result.myValue;¶
+        {{else}}
+          myBroadcaster.Send(myCall);¶
+          return null;¶
+        {{end}}
+      «}¶
+    «}¶
+  {{end}}
+  //{{/*Comment the following section marker*/}}
+{{end}}
+
 {{define "Java.ClientImpl"}}
   §{{$.Copyright}}§
   package {{.JavaPackage}};¶
@@ -1142,41 +1188,7 @@
   import java.util.concurrent.Future;
 
   public class {{.Service.Name}}ClientImpl implements {{.Service.Name}}Client {Ȧ
-    private final Broadcaster myBroadcaster;¶
-    private final ExecutorService myExecutorService;¶
-
-    public {{.Service.Name}}ClientImpl(ExecutorService executorService, InputStream in, OutputStream out, int mtu) {Ȧ
-      myExecutorService = executorService;¶
-      myBroadcaster = new Broadcaster(in, out, mtu, myExecutorService);¶
-    «}¶
-    {{range .Service.Methods}}
-      @Override¶
-      public {{template "Java.Method" .}} {Ȧ
-        return myExecutorService.submit(new {{.Name}}Callable({{template "Java.Arguments" .}}));¶
-      «}¶
-    {{end}}
-    ¶
-    {{range .Service.Methods}}
-      private class {{.Name}}Callable implements {{Call "Java.Callable" .Result.Type}} {Ȧ
-        private final {{File.ClassName .Call}} myCall;¶
-        ¶
-        private {{.Name}}Callable({{template "Java.Parameters" .}}) {Ȧ
-          myCall = new {{File.ClassName .Call}}();¶
-          {{range .Call.Params}}
-            myCall.{{File.Setter .Name}}({{.Name}});¶
-          {{end}}
-        «}¶
-        @Override¶
-        public {{Call "Java.Value" .Result.Type}} call() throws Exception {Ȧ
-          {{if .Result.Type}}{{File.ClassName .Result}} result = ({{File.ClassName .Result}})myBroadcaster.Send(myCall);¶
-            return result.myValue;¶
-          {{else}}
-            myBroadcaster.Send(myCall);¶
-            return null;¶
-          {{end}}
-        «}¶
-      «}¶
-    {{end}}
+    //{{Section "Java.ClientImplBody"}}¶
   «}¶
 {{end}}
 `
diff --git a/tools/codergen/template/java_client.tmpl b/tools/codergen/template/java_client.tmpl
index 2927f81..9ccef0f 100644
--- a/tools/codergen/template/java_client.tmpl
+++ b/tools/codergen/template/java_client.tmpl
@@ -34,6 +34,14 @@
   {{end}}
 {{end}}
 
+{{define "Java.ClientBody"}}
+  ¶{{/*Newline after section marker*/}}
+  {{range .Service.Methods}}
+    {{template "Java.Method" .}} throws IOException, RpcException;¶
+  {{end}}
+  //{{/*Comment the following section marker*/}}
+{{end}}
+
 {{define "Java.Client"}}
   §{{$.Copyright}}§¶
   package {{.JavaPackage}};¶
@@ -45,12 +53,50 @@
   import java.util.concurrent.Future;¶

   public interface {{.Service.Name}}Client {Ȧ
-    {{range .Service.Methods}}
-      {{template "Java.Method" .}} throws IOException, RpcException;¶
-    {{end}}
+    //{{Section "Java.ClientBody"}}¶
   «}¶
 {{end}}
 
+{{define "Java.ClientImplBody"}}
+  ¶{{/*Newline after section marker*/}}
+  private final Broadcaster myBroadcaster;¶
+  private final ExecutorService myExecutorService;¶
+
+  public {{.Service.Name}}ClientImpl(ExecutorService executorService, InputStream in, OutputStream out, int mtu) {Ȧ
+    myExecutorService = executorService;¶
+    myBroadcaster = new Broadcaster(in, out, mtu, myExecutorService);¶
+  «}¶
+  {{range .Service.Methods}}
+    @Override¶
+    public {{template "Java.Method" .}} {Ȧ
+      return myExecutorService.submit(new {{.Name}}Callable({{template "Java.Arguments" .}}));¶
+    «}¶
+  {{end}}
+  ¶
+  {{range .Service.Methods}}
+    private class {{.Name}}Callable implements {{Call "Java.Callable" .Result.Type}} {Ȧ
+      private final {{File.ClassName .Call}} myCall;¶
+      ¶
+      private {{.Name}}Callable({{template "Java.Parameters" .}}) {Ȧ
+        myCall = new {{File.ClassName .Call}}();¶
+        {{range .Call.Params}}
+          myCall.{{File.Setter .Name}}({{.Name}});¶
+        {{end}}
+      «}¶
+      @Override¶
+      public {{Call "Java.Value" .Result.Type}} call() throws Exception {Ȧ
+        {{if .Result.Type}}{{File.ClassName .Result}} result = ({{File.ClassName .Result}})myBroadcaster.Send(myCall);¶
+          return result.myValue;¶
+        {{else}}
+          myBroadcaster.Send(myCall);¶
+          return null;¶
+        {{end}}
+      «}¶
+    «}¶
+  {{end}}
+  //{{/*Comment the following section marker*/}}
+{{end}}
+
 {{define "Java.ClientImpl"}}
   §{{$.Copyright}}§
   package {{.JavaPackage}};¶
@@ -65,40 +111,6 @@
   import java.util.concurrent.Future;
 
   public class {{.Service.Name}}ClientImpl implements {{.Service.Name}}Client {Ȧ
-    private final Broadcaster myBroadcaster;¶
-    private final ExecutorService myExecutorService;¶
-
-    public {{.Service.Name}}ClientImpl(ExecutorService executorService, InputStream in, OutputStream out, int mtu) {Ȧ
-      myExecutorService = executorService;¶
-      myBroadcaster = new Broadcaster(in, out, mtu, myExecutorService);¶
-    «}¶
-    {{range .Service.Methods}}
-      @Override¶
-      public {{template "Java.Method" .}} {Ȧ
-        return myExecutorService.submit(new {{.Name}}Callable({{template "Java.Arguments" .}}));¶
-      «}¶
-    {{end}}
-    ¶
-    {{range .Service.Methods}}
-      private class {{.Name}}Callable implements {{Call "Java.Callable" .Result.Type}} {Ȧ
-        private final {{File.ClassName .Call}} myCall;¶
-        ¶
-        private {{.Name}}Callable({{template "Java.Parameters" .}}) {Ȧ
-          myCall = new {{File.ClassName .Call}}();¶
-          {{range .Call.Params}}
-            myCall.{{File.Setter .Name}}({{.Name}});¶
-          {{end}}
-        «}¶
-        @Override¶
-        public {{Call "Java.Value" .Result.Type}} call() throws Exception {Ȧ
-          {{if .Result.Type}}{{File.ClassName .Result}} result = ({{File.ClassName .Result}})myBroadcaster.Send(myCall);¶
-            return result.myValue;¶
-          {{else}}
-            myBroadcaster.Send(myCall);¶
-            return null;¶
-          {{end}}
-        «}¶
-      «}¶
-    {{end}}
+    //{{Section "Java.ClientImplBody"}}¶
   «}¶
 {{end}}