Add JavaDoc comments to generated Thrift Java code
         Reviewed By: dreiss
           Test Plan: Generate Java code from .thrift file w/ javadoc comments
              Revert: OK
               Notes: My first backend diffcamp review


git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665256 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/compiler/cpp/src/generate/t_java_generator.cc b/compiler/cpp/src/generate/t_java_generator.cc
index f43db44..eef82af 100644
--- a/compiler/cpp/src/generate/t_java_generator.cc
+++ b/compiler/cpp/src/generate/t_java_generator.cc
@@ -354,6 +354,8 @@
                                                        bool is_exception,
                                                        bool in_class,
                                                        bool is_result) {
+  generate_java_doc(out, tstruct);
+
   indent(out) <<
     "public " << (in_class ? "static " : "") << "class " << tstruct->get_name() << " ";
   
@@ -881,14 +883,16 @@
     extends_iface = " extends " + extends + ".Iface";
   }
 
-  f_service_ <<
-    indent() << "public interface Iface" << extends_iface << " {" << endl;
+  generate_java_doc(f_service_, tservice);
+  f_service_ << indent() << "public interface Iface" << extends_iface <<
+    " {" << endl << endl;
   indent_up();
   vector<t_function*> functions = tservice->get_functions();
   vector<t_function*>::iterator f_iter; 
   for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
-    indent(f_service_) <<
-      "public " << function_signature(*f_iter) << ";" << endl;
+    generate_java_doc(f_service_, *f_iter);
+    indent(f_service_) << "public " << function_signature(*f_iter) << ";" <<
+      endl << endl;
   }
   indent_down();
   f_service_ <<
@@ -1961,3 +1965,22 @@
 
   throw "INVALID TYPE IN type_to_enum: " + type->get_name();
 }
+
+/**
+ * Emits a JavaDoc comment if the provided object has a doc in Thrift
+ */
+void t_java_generator::generate_java_doc(ofstream &out,
+                                         t_doc* tdoc) {
+  if (tdoc->has_doc()) {
+    indent(out) << "/**" << endl;
+    stringstream docs(tdoc->get_doc(), ios_base::in);
+    while (!docs.eof()) {
+      char line[1024];
+      docs.getline(line, 1024);
+      if (strlen(line) > 0 || !docs.eof()) {  // skip the empty last line
+        indent(out) << " * " << line << endl;
+      }
+    }
+    indent(out) << " */" << endl;
+  }
+}
diff --git a/compiler/cpp/src/generate/t_java_generator.h b/compiler/cpp/src/generate/t_java_generator.h
index db08515..913b0f9 100644
--- a/compiler/cpp/src/generate/t_java_generator.h
+++ b/compiler/cpp/src/generate/t_java_generator.h
@@ -125,6 +125,10 @@
                                           t_list*     tlist,
                                           std::string iter);
 
+  void generate_java_doc                 (std::ofstream& out,
+                                          t_doc*     tdoc);
+
+
   /**
    * Helper rendering functions
    */