THRIFT-479. java: Add javadocs for enum types

Fields now reference their enum class name in javadoc. Also, generated enum classes's members are now javadoc'd.



git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@799128 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 e8d2a42..37c66fc 100644
--- a/compiler/cpp/src/generate/t_java_generator.cc
+++ b/compiler/cpp/src/generate/t_java_generator.cc
@@ -168,11 +168,17 @@
                                           std::string iter);
 
   void generate_java_doc                 (std::ofstream& out,
-                                          t_doc*     tdoc);
+                                          t_field*    field);
+
+  void generate_java_doc                 (std::ofstream& out,
+                                          t_doc*      tdoc);
 
   void generate_java_doc                 (std::ofstream& out,
                                           t_function* tdoc);
 
+  void generate_java_docstring_comment   (std::ofstream &out,
+                                          string contents);
+
   void generate_deep_copy_container(std::ofstream& out, std::string source_name_p1, std::string source_name_p2, std::string result_name, t_type* type);
   void generate_deep_copy_non_container(std::ofstream& out, std::string source_name, std::string dest_name, t_type* type);
 
@@ -349,6 +355,7 @@
       ++value;
     }
 
+    generate_java_doc(f_enum, *c_iter);
     indent(f_enum) <<
       "public static final int " << (*c_iter)->get_name() <<
       " = " << value << ";" << endl;
@@ -2774,16 +2781,30 @@
   return constant_name;
 }
 
+void t_java_generator::generate_java_docstring_comment(ofstream &out, string contents) {
+  generate_docstring_comment(out,
+    "/**\n",
+    " * ", contents,
+    " */\n");
+}
+
+void t_java_generator::generate_java_doc(ofstream &out,
+                                         t_field* field) {
+  if (field->get_type()->is_enum()) {
+    string combined_message = field->get_doc() + "\n@see " + get_enum_class_name(field->get_type());
+    generate_java_docstring_comment(out, combined_message);
+  } else {
+    generate_java_doc(out, (t_doc*)field);
+  }
+}
+
 /**
  * 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()) {
-    generate_docstring_comment(out,
-      "/**\n",
-      " * ", tdoc->get_doc(),
-      " */\n");
+    generate_java_docstring_comment(out, tdoc->get_doc());
   }
 }
 
diff --git a/test/ConstantsDemo.thrift b/test/ConstantsDemo.thrift
index 7e97f02..bf414ec 100644
--- a/test/ConstantsDemo.thrift
+++ b/test/ConstantsDemo.thrift
@@ -30,6 +30,7 @@
 }
 
 struct thing2 {
+  /** standard docstring */
   1: enumconstants val = TWO
 }