Upgrade rust/crates/protobuf-codegen to 2.16.2

Test: make
Change-Id: I14166e5bd65e98c7c7a53cff992df72164346bc5
diff --git a/src/field/mod.rs b/src/field/mod.rs
index 37d4fe3..4925d2c 100644
--- a/src/field/mod.rs
+++ b/src/field/mod.rs
@@ -14,8 +14,10 @@
 
 use float;
 use inside::protobuf_crate_path;
+use message::RustTypeMessage;
 use protobuf_name::ProtobufAbsolutePath;
 use rust_name::RustIdent;
+use rust_name::RustIdentWithPath;
 use scope::FieldWithContext;
 use scope::MessageOrEnumWithScope;
 use scope::RootScope;
@@ -267,7 +269,9 @@
             ) => RustType::Bytes,
             FieldElem::Primitive(.., PrimitiveTypeVariant::Carllerche) => unreachable!(),
             FieldElem::Group => RustType::Group,
-            FieldElem::Message(ref name, ..) => RustType::Message(name.clone()),
+            FieldElem::Message(ref name, ..) => {
+                RustType::Message(RustTypeMessage(RustIdentWithPath::new(name.clone())))
+            }
             FieldElem::Enum(ref name, _, ref default_value) => {
                 RustType::Enum(name.clone(), default_value.clone())
             }
@@ -452,8 +456,13 @@
 
         let generate_accessors = customize.generate_accessors.unwrap_or(true);
 
-        let default_expose_field =
-            field.message.scope.file_scope.syntax() == Syntax::PROTO3 || !generate_accessors;
+        let syntax = field.message.scope.file_scope.syntax();
+
+        let field_may_have_custom_default_value = syntax == Syntax::PROTO2
+            && field.field.get_label() != FieldDescriptorProto_Label::LABEL_REPEATED
+            && field.field.get_field_type() != FieldDescriptorProto_Type::TYPE_MESSAGE;
+
+        let default_expose_field = !field_may_have_custom_default_value;
 
         let expose_field = customize.expose_fields.unwrap_or(default_expose_field);
 
@@ -1630,11 +1639,14 @@
 
         if self.proto_type == FieldDescriptorProto_Type::TYPE_MESSAGE {
             let self_field = self.self_field();
-            let ref field_type_name = self.elem().rust_storage_type();
+            let ref rust_type_message = match self.elem().rust_storage_type() {
+                RustType::Message(m) => m,
+                _ => unreachable!(),
+            };
             w.write_line(&format!(
-                "{}.as_ref().unwrap_or_else(|| {}::default_instance())",
+                "{}.as_ref().unwrap_or_else(|| {})",
                 self_field,
-                field_type_name.to_code(&self.customize)
+                rust_type_message.default_instance(&self.customize)
             ));
         } else {
             let get_xxx_default_value_rust = self.get_xxx_default_value_rust();