Merge Java get/set Size and Iterator changes from Dave Engberg

Reviewed By: dreiss


git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665253 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 f82d930..f43db44 100644
--- a/compiler/cpp/src/generate/t_java_generator.cc
+++ b/compiler/cpp/src/generate/t_java_generator.cc
@@ -360,6 +360,7 @@
   if (is_exception) {
     out << "extends Exception ";
   }
+  out << "implements java.io.Serializable ";
   
   scope_up(out);
 
@@ -690,6 +691,16 @@
     std::string cap_name = field_name;
     cap_name[0] = toupper(cap_name[0]);
 
+    if (type->is_container()) {
+      // Method to return the size of the collection
+      indent(out) << "public int get" << cap_name << "Size() {" << endl;
+      indent_up();
+      indent(out) << "return (this." << field_name << " == null) ? 0 : " << 
+        "this." << field_name << ".size();" << endl;
+      indent_down();
+      indent(out) << "}" << endl << endl;
+    }
+
     if (type->is_set() || type->is_list()) {
 
       t_type* element_type;
@@ -700,8 +711,8 @@
       }
 
       // Iterator getter for sets and lists
-      indent(out) << "public java.util.Iterator get" << cap_name << "() {" <<
-        endl;
+      indent(out) << "public java.util.Iterator<" <<
+        type_name(element_type) <<  "> get" << cap_name << "Iterator() {" << endl;
       indent_up();
       indent(out) << "return (this." << field_name << " == null) ? null : " << 
         "this." << field_name << ".iterator();" << endl;