[thrift] small fixes to java generator

Summary: - size generated collections correctly
         - StringBuilder vs StringBuffer

Reviewed By: mcslee

Test Plan: built TestThrift.thrift; it compiled, yay

Revert Plan: sure

Notes:

EImportant:


git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665134 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 b988ab3..fdd7202 100644
--- a/compiler/cpp/src/generate/t_java_generator.cc
+++ b/compiler/cpp/src/generate/t_java_generator.cc
@@ -650,7 +650,7 @@
   indent_up();
 
   out <<
-    indent() << "StringBuffer sb = new StringBuffer(\"" << tstruct->get_name() << "(\");" << endl;
+    indent() << "StringBuilder sb = new StringBuilder(\"" << tstruct->get_name() << "(\");" << endl;
 
   const vector<t_field*>& fields = tstruct->get_members();
   vector<t_field*>::const_iterator f_iter;
@@ -1293,20 +1293,23 @@
     obj = tmp("_list");
   }
 
-  indent(out) << prefix << " = new " << type_name(ttype, false, true) << "(); // from me" << endl;
-
   // Declare variables, read header
   if (ttype->is_map()) {
-    out <<
-      indent() << "TMap " << obj << " = iprot.readMapBegin();" << endl;
+    indent(out) << "TMap " << obj << " = iprot.readMapBegin();" << endl;
   } else if (ttype->is_set()) {
-    out <<
-      indent() << "TSet " << obj << " = iprot.readSetBegin();" << endl;
+    indent(out) << "TSet " << obj << " = iprot.readSetBegin();" << endl;
   } else if (ttype->is_list()) {
-    out <<
-      indent() << "TList " << obj << " = iprot.readListBegin();" << endl;
+    indent(out) << "TList " << obj << " = iprot.readListBegin();" << endl;
   }
 
+  indent(out)
+    << prefix << " = new " << type_name(ttype, false, true) 
+    // size the collection correctly
+    << "(" 
+    << (ttype->is_list() ? "" : "2*" )
+    << obj << ".size"
+    << ");" << endl;
+
   // For loop iterates over elements
   string i = tmp("_i");
   indent(out) <<