aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/google/protobuf/compiler/csharp/csharp_enum.cc115
-rw-r--r--src/google/protobuf/compiler/csharp/csharp_enum_field.cc10
-rw-r--r--src/google/protobuf/compiler/csharp/csharp_extension.cc8
-rw-r--r--src/google/protobuf/compiler/csharp/csharp_file.cc144
-rw-r--r--src/google/protobuf/compiler/csharp/csharp_helpers.cc12
-rw-r--r--src/google/protobuf/compiler/csharp/csharp_message.cc148
-rw-r--r--src/google/protobuf/compiler/csharp/csharp_message_field.cc8
-rw-r--r--src/google/protobuf/compiler/csharp/csharp_primitive_field.cc42
-rw-r--r--src/google/protobuf/compiler/csharp/csharp_service.cc40
-rw-r--r--src/google/protobuf/compiler/main.cc1
10 files changed, 183 insertions, 345 deletions
diff --git a/src/google/protobuf/compiler/csharp/csharp_enum.cc b/src/google/protobuf/compiler/csharp/csharp_enum.cc
index b68fb5a5..9e6846d7 100644
--- a/src/google/protobuf/compiler/csharp/csharp_enum.cc
+++ b/src/google/protobuf/compiler/csharp/csharp_enum.cc
@@ -58,8 +58,7 @@ void EnumGenerator::Generate(io::Printer* printer) {
descriptor_->containing_type() == NULL &&
descriptor_->file()->options().csharp_multiple_files();
printer->Print(
- "public $static$ enum $classname$ {\r\n",
- "static", is_own_file ? "" : "static",
+ "public enum $classname$ {\r\n",
"classname", descriptor_->name());
printer->Indent();
@@ -68,16 +67,18 @@ void EnumGenerator::Generate(io::Printer* printer) {
vars["name"] = canonical_values_[i]->name();
vars["index"] = SimpleItoa(canonical_values_[i]->index());
vars["number"] = SimpleItoa(canonical_values_[i]->number());
+
+ // TODO(jonskeet): Change CONSTANT_CASE into PascalCase
printer->Print(vars,
- "$name$($index$, $number$),\r\n");
+ "[pb::DescriptorIndex($index$)]\r\n"
+ "$name$ = $number$,\r\n");
}
-
- printer->Print(
- ";\r\n"
- "\r\n");
+ printer->Outdent();
+ printer->Print("}\r\n\r\n");
// -----------------------------------------------------------------
-
+ // TODO(jonskeet): Think about aliases!
+ /*
for (int i = 0; i < aliases_.size(); i++) {
map<string, string> vars;
vars["classname"] = descriptor_->name();
@@ -85,103 +86,7 @@ void EnumGenerator::Generate(io::Printer* printer) {
vars["canonical_name"] = aliases_[i].canonical_value->name();
printer->Print(vars,
"public static final $classname$ $name$ = $canonical_name$;\r\n");
- }
-
- // -----------------------------------------------------------------
-
- printer->Print(
- "\r\n"
- "public final int getNumber() { return value; }\r\n"
- "\r\n"
- "public static $classname$ valueOf(int value) {\r\n"
- " switch (value) {\r\n",
- "classname", descriptor_->name());
- printer->Indent();
- printer->Indent();
-
- for (int i = 0; i < canonical_values_.size(); i++) {
- printer->Print(
- "case $number$: return $name$;\r\n",
- "name", canonical_values_[i]->name(),
- "number", SimpleItoa(canonical_values_[i]->number()));
- }
-
- printer->Outdent();
- printer->Outdent();
- printer->Print(
- " default: return null;\r\n"
- " }\r\n"
- "}\r\n"
- "\r\n");
-
- // -----------------------------------------------------------------
- // Reflection
-
- printer->Print(
- "public final com.google.protobuf.Descriptors.EnumValueDescriptor\r\n"
- " getValueDescriptor() {\r\n"
- " return getDescriptor().getValues().get(index);\r\n"
- "}\r\n"
- "public final com.google.protobuf.Descriptors.EnumDescriptor\r\n"
- " getDescriptorForType() {\r\n"
- " return getDescriptor();\r\n"
- "}\r\n"
- "public static final com.google.protobuf.Descriptors.EnumDescriptor\r\n"
- " getDescriptor() {\r\n");
-
- // TODO(kenton): Cache statically? Note that we can't access descriptors
- // at module init time because it wouldn't work with descriptor.proto, but
- // we can cache the value the first time getDescriptor() is called.
- if (descriptor_->containing_type() == NULL) {
- printer->Print(
- " return $file$.getDescriptor().getEnumTypes().get($index$);\r\n",
- "file", ClassName(descriptor_->file()),
- "index", SimpleItoa(descriptor_->index()));
- } else {
- printer->Print(
- " return $parent$.getDescriptor().getEnumTypes().get($index$);\r\n",
- "parent", ClassName(descriptor_->containing_type()),
- "index", SimpleItoa(descriptor_->index()));
- }
-
- printer->Print(
- "}\r\n"
- "\r\n"
- "private static final $classname$[] VALUES = {\r\n"
- " ",
- "classname", descriptor_->name());
-
- for (int i = 0; i < descriptor_->value_count(); i++) {
- printer->Print("$name$, ",
- "name", descriptor_->value(i)->name());
- }
-
- printer->Print(
- "\r\n"
- "};\r\n"
- "public static $classname$ valueOf(\r\n"
- " com.google.protobuf.Descriptors.EnumValueDescriptor desc) {\r\n"
- " if (desc.getType() != getDescriptor()) {\r\n"
- " throw new java.lang.IllegalArgumentException(\r\n"
- " \"EnumValueDescriptor is not for this type.\");\r\n"
- " }\r\n"
- " return VALUES[desc.getIndex()];\r\n"
- "}\r\n",
- "classname", descriptor_->name());
-
- // -----------------------------------------------------------------
-
- printer->Print(
- "private final int index;\r\n"
- "private final int value;\r\n"
- "private $classname$(int index, int value) {\r\n"
- " this.index = index;\r\n"
- " this.value = value;\r\n"
- "}\r\n",
- "classname", descriptor_->name());
-
- printer->Outdent();
- printer->Print("}\r\n\r\n");
+ }*/
}
} // namespace csharp
diff --git a/src/google/protobuf/compiler/csharp/csharp_enum_field.cc b/src/google/protobuf/compiler/csharp/csharp_enum_field.cc
index c8d6cf5e..7895d948 100644
--- a/src/google/protobuf/compiler/csharp/csharp_enum_field.cc
+++ b/src/google/protobuf/compiler/csharp/csharp_enum_field.cc
@@ -132,7 +132,7 @@ void EnumFieldGenerator::
GenerateSerializedSizeCode(io::Printer* printer) const {
printer->Print(variables_,
"if (has$capitalized_name$()) {\r\n"
- " size += com.google.protobuf.CodedOutputStream\r\n"
+ " size += pb::CodedOutputStream\r\n"
" .computeEnumSize($number$, get$capitalized_name$().getNumber());\r\n"
"}\r\n");
}
@@ -172,7 +172,7 @@ GenerateBuilderMembers(io::Printer* printer) const {
// could hold on to the returned list and modify it after the message
// has been built, thus mutating the message which is supposed to be
// immutable.
- "public java.util.List<$type$> get$capitalized_name$List() {\r\n"
+ "public global::System.Collections.Generic::IList<$type$> get$capitalized_name$List() {\r\n"
" return java.util.Collections.unmodifiableList(result.$name$_);\r\n"
"}\r\n"
"public int get$capitalized_name$Count() {\r\n"
@@ -192,8 +192,8 @@ GenerateBuilderMembers(io::Printer* printer) const {
" result.$name$_.add(value);\r\n"
" return this;\r\n"
"}\r\n"
- "public Builder addAll$capitalized_name$(\r\n"
- " java.lang.Iterable<? extends $type$> values) {\r\n"
+ "public Builder addAll$capitalized_name$<T>(\r\n"
+ " global::System.Collections.Generic.IEnumerable<T> values) where T : $type$ {\r\n"
" if (result.$name$_.isEmpty()) {\r\n"
" result.$name$_ = new java.util.ArrayList<$type$>();\r\n"
" }\r\n"
@@ -250,7 +250,7 @@ void RepeatedEnumFieldGenerator::
GenerateSerializedSizeCode(io::Printer* printer) const {
printer->Print(variables_,
"for ($type$ element : get$capitalized_name$List()) {\r\n"
- " size += com.google.protobuf.CodedOutputStream\r\n"
+ " size += pb::CodedOutputStream\r\n"
" .computeEnumSize($number$, element.getNumber());\r\n"
"}\r\n");
}
diff --git a/src/google/protobuf/compiler/csharp/csharp_extension.cc b/src/google/protobuf/compiler/csharp/csharp_extension.cc
index 660ad3d3..fee5c31e 100644
--- a/src/google/protobuf/compiler/csharp/csharp_extension.cc
+++ b/src/google/protobuf/compiler/csharp/csharp_extension.cc
@@ -57,20 +57,20 @@ void ExtensionGenerator::Generate(io::Printer* printer) {
if (descriptor_->is_repeated()) {
printer->Print(vars,
"public static final\r\n"
- " com.google.protobuf.GeneratedMessage.GeneratedExtension<\r\n"
+ " pb::GeneratedMessage.GeneratedExtension<\r\n"
" $containing_type$,\r\n"
" java.util.List<$type$>> $name$ =\r\n"
- " com.google.protobuf.GeneratedMessage\r\n"
+ " pb::GeneratedMessage\r\n"
" .newRepeatedGeneratedExtension(\r\n"
" getDescriptor().getExtensions().get($index$),\r\n"
" $type$.class);\r\n");
} else {
printer->Print(vars,
"public static final\r\n"
- " com.google.protobuf.GeneratedMessage.GeneratedExtension<\r\n"
+ " pb::GeneratedMessage.GeneratedExtension<\r\n"
" $containing_type$,\r\n"
" $type$> $name$ =\r\n"
- " com.google.protobuf.GeneratedMessage.newGeneratedExtension(\r\n"
+ " pb::GeneratedMessage.newGeneratedExtension(\r\n"
" getDescriptor().getExtensions().get($index$),\r\n"
" $type$.class);\r\n");
}
diff --git a/src/google/protobuf/compiler/csharp/csharp_file.cc b/src/google/protobuf/compiler/csharp/csharp_file.cc
index 581a20f2..2d3c0f94 100644
--- a/src/google/protobuf/compiler/csharp/csharp_file.cc
+++ b/src/google/protobuf/compiler/csharp/csharp_file.cc
@@ -69,7 +69,7 @@ bool FileGenerator::Validate(string* error) {
if (found_conflict) {
error->assign(file_->name());
error->append(
- ": Cannot generate Java output because the file's outer class name, \"");
+ ": Cannot generate C# output because the file's top-level class name, \"");
error->append(classname_);
error->append(
"\", matches the name of one of the types declared inside it. "
@@ -81,67 +81,25 @@ bool FileGenerator::Validate(string* error) {
return true;
}
-// Shameless copy of CEscape, but using backslash-u encoding
-// Still won't really work for anything non-ASCII.
-static int UnicodeEscapeInternal(const char* src, int src_len, char* dest,
- int dest_len) {
- const char* src_end = src + src_len;
- int used = 0;
- for (; src < src_end; src++) {
- if (dest_len - used < 2) // Need space for two letter escape
- return -1;
-
- bool is_hex_escape = false;
- switch (*src) {
- case '\n': dest[used++] = '\\'; dest[used++] = 'n'; break;
- case '\r': dest[used++] = '\\'; dest[used++] = 'r'; break;
- case '\t': dest[used++] = '\\'; dest[used++] = 't'; break;
- case '\"': dest[used++] = '\\'; dest[used++] = '\"'; break;
- case '\'': dest[used++] = '\\'; dest[used++] = '\''; break;
- case '\\': dest[used++] = '\\'; dest[used++] = '\\'; break;
- default:
- if (*src < 0x20 || *src > 0x7E) {
- if (dest_len - used < 6) // need space for 6 letter escape
- return -1;
- sprintf(dest + used, "\\u00%02x", static_cast<uint8>(*src));
- used += 6;
- } else {
- dest[used++] = *src; break;
- }
- }
- }
-
- if (dest_len - used < 1) // make sure that there is room for \0
- return -1;
-
- dest[used] = '\0'; // doesn't count towards return value though
- return used;
-}
-
-string UnicodeEscape(const string& src) {
- const int dest_length = src.size() * 6 + 1; // Maximum possible expansion
- scoped_array<char> dest(new char[dest_length]);
- const int len = UnicodeEscapeInternal(src.data(), src.size(),
- dest.get(), dest_length);
- GOOGLE_DCHECK_GE(len, 0);
- return string(dest.get(), len);
-}
-
-
void FileGenerator::Generate(io::Printer* printer) {
// We don't import anything because we refer to all classes by their
// fully-qualified names in the generated source.
printer->Print(
"// Generated by the protocol buffer compiler. DO NOT EDIT!\r\n"
"\r\n");
+
+ // Namespace alias to avoid lines getting horribly long
+ printer->Print("using pb = global::Google.ProtocolBuffers;\r\n\r\n");
+
if (!csharp_namespace_.empty()) {
printer->Print(
- "package $package$;\r\n"
+ "namespace $namespace$ {\r\n"
"\r\n",
- "package", csharp_namespace_);
+ "namespace", csharp_namespace_);
+ printer->Indent();
}
printer->Print(
- "public final class $classname$ {\r\n"
+ "public sealed class $classname$ {\r\n"
" private $classname$() {}\r\n",
"classname", classname_);
printer->Indent();
@@ -149,69 +107,50 @@ void FileGenerator::Generate(io::Printer* printer) {
// -----------------------------------------------------------------
// Embed the descriptor. We simply serialize the entire FileDescriptorProto
- // and embed it as a string literal, which is parsed and built into real
- // descriptors at initialization time. We unfortunately have to put it in
- // a string literal, not a byte array, because apparently using a literal
- // byte array causes the Java compiler to generate *instructions* to
- // initialize each and every byte of the array, e.g. as if you typed:
- // b[0] = 123; b[1] = 456; b[2] = 789;
- // This makes huge bytecode files and can easily hit the compiler's internal
- // code size limits (error "code to large"). String literals are apparently
- // embedded raw, which is what we want.
+ // and embed it as a byte array, which is parsed and built into real
+ // descriptors at initialization time.
FileDescriptorProto file_proto;
file_->CopyTo(&file_proto);
string file_data;
file_proto.SerializeToString(&file_data);
printer->Print(
- "public static com.google.protobuf.Descriptors.FileDescriptor\r\n"
- " getDescriptor() {\r\n"
- " return descriptor;\r\n"
+ "public static pb::Descriptors.FileDescriptor Descriptor {\r\n"
+ " get { return descriptor; }\r\n"
"}\r\n"
- "private static final com.google.protobuf.Descriptors.FileDescriptor\r\n"
- " descriptor = buildDescriptor();\r\n"
- "private static\r\n"
- " com.google.protobuf.Descriptors.FileDescriptor\r\n"
- " buildDescriptor() {\r\n"
- " string descriptorData =\r\n");
+ "private static readonly pb::Descriptors.FileDescriptor descriptor = pb::Descriptors.FileDescriptor.InternalBuildGeneratedFileFrom (\r\n"
+ " new byte[] {");
+ printer->Indent();
+ printer->Indent();
printer->Indent();
printer->Indent();
- // Only write 40 bytes per line.
- static const int kBytesPerLine = 40;
- for (int i = 0; i < file_data.size(); i += kBytesPerLine) {
- if (i > 0) printer->Print(" +\r\n");
- printer->Print("\"$data$\"",
- "data", UnicodeEscape(file_data.substr(i, kBytesPerLine)));
- }
- printer->Print(";\r\n");
+ // Only write 20 bytes per line.
+ static const int kBytesPerLine = 20;
+ char buffer[3];
+ for (int i = 0; i < file_data.size(); i++) {
+ if ((i % kBytesPerLine) == 0) {
+ printer->Print("\r\n");
+ }
+ // TODO(jonskeet): There must be a better way of doing this!
+ sprintf(buffer, "%02x", static_cast<uint8>(file_data[i]));
+ printer->Print("0x$val$, ", "val", buffer);
+ }
printer->Outdent();
- printer->Print(
- "try {\r\n"
- " return com.google.protobuf.Descriptors.FileDescriptor\r\n"
- " .internalBuildGeneratedFileFrom(descriptorData,\r\n"
- " new com.google.protobuf.Descriptors.FileDescriptor[] {\r\n");
-
+ printer->Outdent();
+ printer->Print("\r\n}, new pb::Descriptors.FileDescriptor[] {\r\n");
for (int i = 0; i < file_->dependency_count(); i++) {
printer->Print(
" $dependency$.getDescriptor(),\r\n",
"dependency", ClassName(file_->dependency(i)));
}
- printer->Print(
- " });\r\n"
- "} catch (Exception e) {\r\n"
- " throw new RuntimeException(\r\n"
- " \"Failed to parse protocol buffer descriptor for \" +\r\n"
- " \"\\\"$filename$\\\".\", e);\r\n"
- "}\r\n",
- "filename", file_->name());
+ printer->Print("});\r\n");
printer->Outdent();
- printer->Print(
- "}\r\n"
- "\r\n");
+ printer->Outdent();
+ printer->Print("\r\n");
// -----------------------------------------------------------------
@@ -241,6 +180,10 @@ void FileGenerator::Generate(io::Printer* printer) {
printer->Outdent();
printer->Print("}\r\n");
+ if (!csharp_namespace_.empty()) {
+ printer->Outdent();
+ printer->Print("}\r\n");
+ }
}
template<typename GeneratorClass, typename DescriptorClass>
@@ -259,14 +202,23 @@ static void GenerateSibling(const string& package_dir,
printer.Print(
"// Generated by the protocol buffer compiler. DO NOT EDIT!\r\n"
"\r\n");
+
+ // Namespace alias to avoid lines getting horribly long
+ printer.Print("using pb = global::Google.ProtocolBuffers;\r\n\r\n");
+
if (!csharp_namespace.empty()) {
printer.Print(
- "package $package$;\r\n"
+ "namespace $namespace$ {\r\n"
"\r\n",
- "package", csharp_namespace);
+ "namespace", csharp_namespace);
+ printer.Indent();
}
GeneratorClass(descriptor).Generate(&printer);
+ if (!csharp_namespace.empty()) {
+ printer.Outdent();
+ printer.Print("}\r\n");
+ }
}
void FileGenerator::GenerateSiblings(const string& package_dir,
diff --git a/src/google/protobuf/compiler/csharp/csharp_helpers.cc b/src/google/protobuf/compiler/csharp/csharp_helpers.cc
index 27c53678..dc3fd398 100644
--- a/src/google/protobuf/compiler/csharp/csharp_helpers.cc
+++ b/src/google/protobuf/compiler/csharp/csharp_helpers.cc
@@ -206,13 +206,13 @@ JavaType GetJavaType(FieldDescriptor::Type field_type) {
const char* BoxedPrimitiveTypeName(JavaType type) {
switch (type) {
- case JAVATYPE_INT : return "java.lang.Integer";
- case JAVATYPE_LONG : return "java.lang.Long";
- case JAVATYPE_FLOAT : return "java.lang.Float";
- case JAVATYPE_DOUBLE : return "java.lang.Double";
- case JAVATYPE_BOOLEAN: return "java.lang.Boolean";
+ case JAVATYPE_INT : return "int";
+ case JAVATYPE_LONG : return "long";
+ case JAVATYPE_FLOAT : return "float";
+ case JAVATYPE_DOUBLE : return "double";
+ case JAVATYPE_BOOLEAN: return "bool";
case JAVATYPE_STRING : return "string";
- case JAVATYPE_BYTES : return "com.google.protobuf.ByteString";
+ case JAVATYPE_BYTES : return "pb::ByteString";
case JAVATYPE_ENUM : return NULL;
case JAVATYPE_MESSAGE: return NULL;
diff --git a/src/google/protobuf/compiler/csharp/csharp_message.cc b/src/google/protobuf/compiler/csharp/csharp_message.cc
index fa03938a..520cb982 100644
--- a/src/google/protobuf/compiler/csharp/csharp_message.cc
+++ b/src/google/protobuf/compiler/csharp/csharp_message.cc
@@ -140,7 +140,7 @@ MessageGenerator::MessageGenerator(const Descriptor* descriptor)
MessageGenerator::~MessageGenerator() {}
void MessageGenerator::GenerateStaticVariables(io::Printer* printer) {
- // Because descriptor.proto (com.google.protobuf.DescriptorProtos) is
+ // Because descriptor.proto (Google.ProtocolBuffers.DescriptorProtos) is
// used in the construction of descriptors, we have a tricky bootstrapping
// problem. To help control static initialization order, we make sure all
// descriptors and other static data that depends on them are members of
@@ -155,9 +155,9 @@ void MessageGenerator::GenerateStaticVariables(io::Printer* printer) {
vars["parent"] = UniqueFileScopeIdentifier(descriptor_->containing_type());
}
if (descriptor_->file()->options().csharp_multiple_files()) {
- // We can only make these package-private since the classes that use them
+ // We can only make these assembly-private since the classes that use them
// are in separate files.
- vars["private"] = "";
+ vars["private"] = "internal ";
} else {
vars["private"] = "private ";
}
@@ -165,12 +165,12 @@ void MessageGenerator::GenerateStaticVariables(io::Printer* printer) {
// The descriptor for this type.
if (descriptor_->containing_type() == NULL) {
printer->Print(vars,
- "$private$static final com.google.protobuf.Descriptors.Descriptor\r\n"
+ "$private$static readonly pb::Descriptors.Descriptor {\r\n"
" internal_$identifier$_descriptor =\r\n"
" getDescriptor().getMessageTypes().get($index$);\r\n");
} else {
printer->Print(vars,
- "$private$static final com.google.protobuf.Descriptors.Descriptor\r\n"
+ "$private$static readonly pb::Descriptors.Descriptor {\r\n"
" internal_$identifier$_descriptor =\r\n"
" internal_$parent$_descriptor.getNestedTypes().get($index$);\r\n");
}
@@ -178,9 +178,9 @@ void MessageGenerator::GenerateStaticVariables(io::Printer* printer) {
// And the FieldAccessorTable.
printer->Print(vars,
"$private$static\r\n"
- " com.google.protobuf.GeneratedMessage.FieldAccessorTable\r\n"
+ " pb::GeneratedMessage.FieldAccessorTable\r\n"
" internal_$identifier$_fieldAccessorTable = new\r\n"
- " com.google.protobuf.GeneratedMessage.FieldAccessorTable(\r\n"
+ " pb::GeneratedMessage.FieldAccessorTable(\r\n"
" internal_$identifier$_descriptor,\r\n"
" new string[] { ");
for (int i = 0; i < descriptor_->field_count(); i++) {
@@ -209,16 +209,11 @@ void MessageGenerator::Generate(io::Printer* printer) {
if (descriptor_->extension_range_count() > 0) {
printer->Print(
- "public $static$ final class $classname$ extends\r\n"
- " com.google.protobuf.GeneratedMessage.ExtendableMessage<\r\n"
- " $classname$> {\r\n",
- "static", is_own_file ? "" : "static",
+ "public sealed class $classname$ : pb::GeneratedMessage.ExtendableMessage<$classname$> {\r\n",
"classname", descriptor_->name());
} else {
printer->Print(
- "public $static$ final class $classname$ extends\r\n"
- " com.google.protobuf.GeneratedMessage {\r\n",
- "static", is_own_file ? "" : "static",
+ "public sealed class $classname$ : pb::GeneratedMessage {\r\n",
"classname", descriptor_->name());
}
printer->Indent();
@@ -226,25 +221,23 @@ void MessageGenerator::Generate(io::Printer* printer) {
"// Use $classname$.newBuilder() to construct.\r\n"
"private $classname$() {}\r\n"
"\r\n"
- "private static final $classname$ defaultInstance = new $classname$();\r\n"
- "public static $classname$ getDefaultInstance() {\r\n"
- " return defaultInstance;\r\n"
+ "private static readonly $classname$ defaultInstance = new $classname$();\r\n"
+ "public static $classname$ DefaultInstance {\r\n"
+ " get { return defaultInstance; }\r\n"
"}\r\n"
"\r\n"
- "public $classname$ getDefaultInstanceForType() {\r\n"
- " return defaultInstance;\r\n"
+ "public $classname$ DefaultInstanceForType {\r\n"
+ " get { return defaultInstance; }\r\n"
"}\r\n"
"\r\n",
"classname", descriptor_->name());
printer->Print(
- "public static final com.google.protobuf.Descriptors.Descriptor\r\n"
- " getDescriptor() {\r\n"
- " return $fileclass$.internal_$identifier$_descriptor;\r\n"
+ "public static pb::Descriptors.Descriptor Descriptor {\r\n"
+ " get { return $fileclass$.internal_$identifier$_descriptor; }\r\n"
"}\r\n"
"\r\n"
- "protected com.google.protobuf.GeneratedMessage.FieldAccessorTable\r\n"
- " internalGetFieldAccessorTable() {\r\n"
- " return $fileclass$.internal_$identifier$_fieldAccessorTable;\r\n"
+ "protected pb::GeneratedMessage.FieldAccessorTable InternalGetFieldAccessorTable {\r\n"
+ " get { return $fileclass$.internal_$identifier$_fieldAccessorTable; }\r\n"
"}\r\n"
"\r\n",
"fileclass", ClassName(descriptor_->file()),
@@ -293,15 +286,12 @@ GenerateMessageSerializationMethods(io::Printer* printer) {
sort(sorted_extensions.begin(), sorted_extensions.end(),
ExtensionRangeOrdering());
- printer->Print(
- "public void writeTo(com.google.protobuf.CodedOutputStream output)\r\n"
- " throws java.io.IOException {\r\n");
+ printer->Print("public void writeTo(pb::CodedOutputStream output) {\r\n");
printer->Indent();
if (descriptor_->extension_range_count() > 0) {
printer->Print(
- "com.google.protobuf.GeneratedMessage.ExtendableMessage\r\n"
- " .ExtensionWriter extensionWriter = newExtensionWriter();\r\n");
+ "pb::GeneratedMessage.ExtendableMessage.ExtensionWriter extensionWriter = NewExtensionWriter();\r\n");
}
// Merge the fields and the extension ranges, both sorted by field number.
@@ -321,10 +311,10 @@ GenerateMessageSerializationMethods(io::Printer* printer) {
if (descriptor_->options().message_set_wire_format()) {
printer->Print(
- "getUnknownFields().writeAsMessageSetTo(output);\r\n");
+ "UnknownFields.WriteAsMessageSetTo(output);\r\n");
} else {
printer->Print(
- "getUnknownFields().writeTo(output);\r\n");
+ "UnknownFields.WriteTo(output);\r\n");
}
printer->Outdent();
@@ -332,34 +322,38 @@ GenerateMessageSerializationMethods(io::Printer* printer) {
"}\r\n"
"\r\n"
"private int memoizedSerializedSize = -1;\r\n"
- "public int getSerializedSize() {\r\n"
- " int size = memoizedSerializedSize;\r\n"
- " if (size != -1) return size;\r\n"
- "\r\n"
- " size = 0;\r\n");
+ "public int SerializedSize {\r\n");
printer->Indent();
-
+ printer->Print("get {\r\n");
+ printer->Indent();
+ printer->Print(
+ "int size = memoizedSerializedSize;\r\n"
+ "if (size != -1) return size;\r\n"
+ "\r\n"
+ "size = 0;\r\n");
for (int i = 0; i < descriptor_->field_count(); i++) {
field_generators_.get(sorted_fields[i]).GenerateSerializedSizeCode(printer);
}
if (descriptor_->extension_range_count() > 0) {
printer->Print(
- "size += extensionsSerializedSize();\r\n");
+ "size += ExtensionsSerializedSize;\r\n");
}
if (descriptor_->options().message_set_wire_format()) {
printer->Print(
- "size += getUnknownFields().getSerializedSizeAsMessageSet();\r\n");
+ "size += UnknownFields.SerializedSizeAsMessageSet;\r\n");
} else {
printer->Print(
- "size += getUnknownFields().getSerializedSize();\r\n");
+ "size += UnknownFieldsSerializedSize;\r\n");
}
printer->Outdent();
+ printer->Outdent();
printer->Print(
- " memoizedSerializedSize = size;\r\n"
- " return size;\r\n"
+ " memoizedSerializedSize = size;\r\n"
+ " return size;\r\n"
+ " }\r\n"
"}\r\n"
"\r\n");
}
@@ -370,49 +364,36 @@ GenerateParseFromMethods(io::Printer* printer) {
// because they need to be generated even for messages that are optimized
// for code size.
printer->Print(
- "public static $classname$ parseFrom(\r\n"
- " com.google.protobuf.ByteString data)\r\n"
- " throws com.google.protobuf.InvalidProtocolBufferException {\r\n"
+ "public static $classname$ parseFrom(pb::ByteString data) {\r\n"
" return newBuilder().mergeFrom(data).buildParsed();\r\n"
"}\r\n"
- "public static $classname$ parseFrom(\r\n"
- " com.google.protobuf.ByteString data,\r\n"
- " com.google.protobuf.ExtensionRegistry extensionRegistry)\r\n"
- " throws com.google.protobuf.InvalidProtocolBufferException {\r\n"
+ "public static $classname$ parseFrom(pb::ByteString data,\r\n"
+ " pb::ExtensionRegistry extensionRegistry) {\r\n"
" return newBuilder().mergeFrom(data, extensionRegistry)\r\n"
" .buildParsed();\r\n"
"}\r\n"
- "public static $classname$ parseFrom(byte[] data)\r\n"
- " throws com.google.protobuf.InvalidProtocolBufferException {\r\n"
+ "public static $classname$ parseFrom(byte[] data) {\r\n"
" return newBuilder().mergeFrom(data).buildParsed();\r\n"
"}\r\n"
- "public static $classname$ parseFrom(\r\n"
- " byte[] data,\r\n"
- " com.google.protobuf.ExtensionRegistry extensionRegistry)\r\n"
- " throws com.google.protobuf.InvalidProtocolBufferException {\r\n"
+ "public static $classname$ parseFrom(byte[] data,\r\n"
+ " pb::ExtensionRegistry extensionRegistry) {\r\n"
" return newBuilder().mergeFrom(data, extensionRegistry)\r\n"
" .buildParsed();\r\n"
"}\r\n"
- "public static $classname$ parseFrom(java.io.InputStream input)\r\n"
- " throws java.io.IOException {\r\n"
+ "public static $classname$ parseFrom(global::System.IO.Stream input) {\r\n"
" return newBuilder().mergeFrom(input).buildParsed();\r\n"
"}\r\n"
"public static $classname$ parseFrom(\r\n"
- " java.io.InputStream input,\r\n"
- " com.google.protobuf.ExtensionRegistry extensionRegistry)\r\n"
- " throws java.io.IOException {\r\n"
+ " global::System.IO.Stream input,\r\n"
+ " pb::ExtensionRegistry extensionRegistry) {\r\n"
" return newBuilder().mergeFrom(input, extensionRegistry)\r\n"
" .buildParsed();\r\n"
"}\r\n"
- "public static $classname$ parseFrom(\r\n"
- " com.google.protobuf.CodedInputStream input)\r\n"
- " throws java.io.IOException {\r\n"
+ "public static $classname$ parseFrom(pb::CodedInputStream input) {\r\n"
" return newBuilder().mergeFrom(input).buildParsed();\r\n"
"}\r\n"
- "public static $classname$ parseFrom(\r\n"
- " com.google.protobuf.CodedInputStream input,\r\n"
- " com.google.protobuf.ExtensionRegistry extensionRegistry)\r\n"
- " throws java.io.IOException {\r\n"
+ "public static $classname$ parseFrom(pb::CodedInputStream input,\r\n"
+ " pb::ExtensionRegistry extensionRegistry) {\r\n"
" return newBuilder().mergeFrom(input, extensionRegistry)\r\n"
" .buildParsed();\r\n"
"}\r\n"
@@ -446,14 +427,12 @@ void MessageGenerator::GenerateBuilder(io::Printer* printer) {
if (descriptor_->extension_range_count() > 0) {
printer->Print(
- "public static final class Builder extends\r\n"
- " com.google.protobuf.GeneratedMessage.ExtendableBuilder<\r\n"
+ "public sealed class Builder : pb::GeneratedMessage.ExtendableBuilder<\r\n"
" $classname$, Builder> {\r\n",
"classname", ClassName(descriptor_));
} else {
printer->Print(
- "public static final class Builder extends\r\n"
- " com.google.protobuf.GeneratedMessage.Builder<Builder> {\r\n",
+ "public sealed class Builder : pb::GeneratedMessage.Builder<Builder> {\r\n",
"classname", ClassName(descriptor_));
}
printer->Indent();
@@ -499,7 +478,7 @@ void MessageGenerator::GenerateCommonBuilderMethods(io::Printer* printer) {
" return new Builder().mergeFrom(result);\r\n"
"}\r\n"
"\r\n"
- "public com.google.protobuf.Descriptors.Descriptor\r\n"
+ "public pb::Descriptors.Descriptor\r\n"
" getDescriptorForType() {\r\n"
" return $classname$.getDescriptor();\r\n"
"}\r\n"
@@ -515,16 +494,15 @@ void MessageGenerator::GenerateCommonBuilderMethods(io::Printer* printer) {
printer->Print(
"public $classname$ build() {\r\n"
" if (!isInitialized()) {\r\n"
- " throw new com.google.protobuf.UninitializedMessageException(\r\n"
+ " throw new pb::UninitializedMessageException(\r\n"
" result);\r\n"
" }\r\n"
" return buildPartial();\r\n"
"}\r\n"
"\r\n"
- "private $classname$ buildParsed()\r\n"
- " throws com.google.protobuf.InvalidProtocolBufferException {\r\n"
+ "private $classname$ buildParsed() {\r\n"
" if (!isInitialized()) {\r\n"
- " throw new com.google.protobuf.UninitializedMessageException(\r\n"
+ " throw new pb::UninitializedMessageException(\r\n"
" result).asInvalidProtocolBufferException();\r\n"
" }\r\n"
" return buildPartial();\r\n"
@@ -551,7 +529,7 @@ void MessageGenerator::GenerateCommonBuilderMethods(io::Printer* printer) {
if (descriptor_->file()->options().optimize_for() == FileOptions::SPEED) {
printer->Print(
- "public Builder mergeFrom(com.google.protobuf.Message other) {\r\n"
+ "public Builder mergeFrom(pb::Message other) {\r\n"
" if (other instanceof $classname$) {\r\n"
" return mergeFrom(($classname$)other);\r\n"
" } else {\r\n"
@@ -588,21 +566,19 @@ void MessageGenerator::GenerateBuilderParsingMethods(io::Printer* printer) {
printer->Print(
"public Builder mergeFrom(\r\n"
- " com.google.protobuf.CodedInputStream input)\r\n"
- " throws java.io.IOException {\r\n"
+ " pb::CodedInputStream input) {\r\n"
" return mergeFrom(input,\r\n"
- " com.google.protobuf.ExtensionRegistry.getEmptyRegistry());\r\n"
+ " pb::ExtensionRegistry.getEmptyRegistry());\r\n"
"}\r\n"
"\r\n"
"public Builder mergeFrom(\r\n"
- " com.google.protobuf.CodedInputStream input,\r\n"
- " com.google.protobuf.ExtensionRegistry extensionRegistry)\r\n"
- " throws java.io.IOException {\r\n");
+ " pb::CodedInputStream input,\r\n"
+ " pb::ExtensionRegistry extensionRegistry) {\r\n");
printer->Indent();
printer->Print(
- "com.google.protobuf.UnknownFieldSet.Builder unknownFields =\r\n"
- " com.google.protobuf.UnknownFieldSet.newBuilder(\r\n"
+ "pb::UnknownFieldSet.Builder unknownFields =\r\n"
+ " pb::UnknownFieldSet.newBuilder(\r\n"
" this.getUnknownFields());\r\n"
"while (true) {\r\n");
printer->Indent();
diff --git a/src/google/protobuf/compiler/csharp/csharp_message_field.cc b/src/google/protobuf/compiler/csharp/csharp_message_field.cc
index 8d833b4f..56a8b0a7 100644
--- a/src/google/protobuf/compiler/csharp/csharp_message_field.cc
+++ b/src/google/protobuf/compiler/csharp/csharp_message_field.cc
@@ -153,7 +153,7 @@ void MessageFieldGenerator::
GenerateSerializedSizeCode(io::Printer* printer) const {
printer->Print(variables_,
"if (has$capitalized_name$()) {\r\n"
- " size += com.google.protobuf.CodedOutputStream\r\n"
+ " size += pb::CodedOutputStream\r\n"
" .compute$group_or_message$Size($number$, get$capitalized_name$());\r\n"
"}\r\n");
}
@@ -225,8 +225,8 @@ GenerateBuilderMembers(io::Printer* printer) const {
" result.$name$_.add(builderForValue.build());\r\n"
" return this;\r\n"
"}\r\n"
- "public Builder addAll$capitalized_name$(\r\n"
- " java.lang.Iterable<? extends $type$> values) {\r\n"
+ "public Builder addAll$capitalized_name$<T>(\r\n"
+ " global::System.Collections.Generic.IEnumerable<T> values) where T : $type$ {\r\n"
" if (result.$name$_.isEmpty()) {\r\n"
" result.$name$_ = new java.util.ArrayList<$type$>();\r\n"
" }\r\n"
@@ -288,7 +288,7 @@ void RepeatedMessageFieldGenerator::
GenerateSerializedSizeCode(io::Printer* printer) const {
printer->Print(variables_,
"for ($type$ element : get$capitalized_name$List()) {\r\n"
- " size += com.google.protobuf.CodedOutputStream\r\n"
+ " size += pb::CodedOutputStream\r\n"
" .compute$group_or_message$Size($number$, element);\r\n"
"}\r\n");
}
diff --git a/src/google/protobuf/compiler/csharp/csharp_primitive_field.cc b/src/google/protobuf/compiler/csharp/csharp_primitive_field.cc
index 3ff24499..c504fd5b 100644
--- a/src/google/protobuf/compiler/csharp/csharp_primitive_field.cc
+++ b/src/google/protobuf/compiler/csharp/csharp_primitive_field.cc
@@ -44,7 +44,7 @@ const char* PrimitiveTypeName(JavaType type) {
case JAVATYPE_DOUBLE : return "double";
case JAVATYPE_BOOLEAN: return "boolean";
case JAVATYPE_STRING : return "string";
- case JAVATYPE_BYTES : return "com.google.protobuf.ByteString";
+ case JAVATYPE_BYTES : return "pb::ByteString";
case JAVATYPE_ENUM : return NULL;
case JAVATYPE_MESSAGE: return NULL;
@@ -128,7 +128,7 @@ string DefaultValue(const FieldDescriptor* field) {
}
if (isBytes && !field->has_default_value()) {
- return "com.google.protobuf.ByteString.EMPTY";
+ return "pb::ByteString.Empty";
}
// Escaping strings correctly for Java and generating efficient
@@ -136,7 +136,7 @@ string DefaultValue(const FieldDescriptor* field) {
// whole problem by just grabbing the default value from the descriptor.
return strings::Substitute(
"(($0) $1.getDescriptor().getFields().get($2).getDefaultValue())",
- isBytes ? "com.google.protobuf.ByteString" : "string",
+ isBytes ? "pb::ByteString" : "string",
ClassName(field->containing_type()), field->index());
}
@@ -181,27 +181,33 @@ PrimitiveFieldGenerator::~PrimitiveFieldGenerator() {}
void PrimitiveFieldGenerator::
GenerateMembers(io::Printer* printer) const {
printer->Print(variables_,
- "private boolean has$capitalized_name$;\r\n"
+ "private bool has$capitalized_name$;\r\n"
"private $type$ $name$_ = $default$;\r\n"
- "public boolean has$capitalized_name$() { return has$capitalized_name$; }\r\n"
- "public $type$ get$capitalized_name$() { return $name$_; }\r\n");
+ "public boolean Has$capitalized_name$ {\r\n"
+ " get { return has$capitalized_name$; }\r\n"
+ "}\r\n"
+ "public $type$ $capitalized_name$ {\r\n"
+ " get { return $name$_; }\r\n"
+ "}\r\n");
}
void PrimitiveFieldGenerator::
GenerateBuilderMembers(io::Printer* printer) const {
printer->Print(variables_,
- "public boolean has$capitalized_name$() {\r\n"
- " return result.has$capitalized_name$();\r\n"
- "}\r\n"
- "public $type$ get$capitalized_name$() {\r\n"
- " return result.get$capitalized_name$();\r\n"
+ "public boolean Has$capitalized_name$ {\r\n"
+ " get { return result.Has$capitalized_name$; }\r\n"
"}\r\n"
- "public Builder set$capitalized_name$($type$ value) {\r\n"
- " result.has$capitalized_name$ = true;\r\n"
- " result.$name$_ = value;\r\n"
- " return this;\r\n"
+ // TODO(jonskeet): Consider whether this is really the right pattern,
+ // or whether we want a method returning a Builder. This allows for
+ // object initializers.
+ "public $type$ $capitalized_name$ {\r\n"
+ " get { return result.$capitalized_name$; }\r\n"
+ " set {\r\n"
+ " result.has$capitalized_name$ = true;\r\n"
+ " result.$name$_ = value;\r\n"
+ " }\r\n"
"}\r\n"
- "public Builder clear$capitalized_name$() {\r\n"
+ "public Builder Clear$capitalized_name$() {\r\n"
" result.has$capitalized_name$ = false;\r\n"
" result.$name$_ = $default$;\r\n"
" return this;\r\n"
@@ -239,7 +245,7 @@ void PrimitiveFieldGenerator::
GenerateSerializedSizeCode(io::Printer* printer) const {
printer->Print(variables_,
"if (has$capitalized_name$()) {\r\n"
- " size += com.google.protobuf.CodedOutputStream\r\n"
+ " size += pb::CodedOutputStream\r\n"
" .compute$capitalized_type$Size($number$, get$capitalized_name$());\r\n"
"}\r\n");
}
@@ -351,7 +357,7 @@ void RepeatedPrimitiveFieldGenerator::
GenerateSerializedSizeCode(io::Printer* printer) const {
printer->Print(variables_,
"for ($type$ element : get$capitalized_name$List()) {\r\n"
- " size += com.google.protobuf.CodedOutputStream\r\n"
+ " size += pb::CodedOutputStream\r\n"
" .compute$capitalized_type$Size($number$, element);\r\n"
"}\r\n");
}
diff --git a/src/google/protobuf/compiler/csharp/csharp_service.cc b/src/google/protobuf/compiler/csharp/csharp_service.cc
index f9e4faf3..52d92b2b 100644
--- a/src/google/protobuf/compiler/csharp/csharp_service.cc
+++ b/src/google/protobuf/compiler/csharp/csharp_service.cc
@@ -39,7 +39,7 @@ void ServiceGenerator::Generate(io::Printer* printer) {
bool is_own_file = descriptor_->file()->options().csharp_multiple_files();
printer->Print(
"public $static$ abstract class $classname$\r\n"
- " implements com.google.protobuf.Service {\r\n",
+ " implements pb::Service {\r\n",
"static", is_own_file ? "" : "static",
"classname", descriptor_->name());
printer->Indent();
@@ -53,20 +53,20 @@ void ServiceGenerator::Generate(io::Printer* printer) {
vars["output"] = ClassName(method->output_type());
printer->Print(vars,
"public abstract void $name$(\r\n"
- " com.google.protobuf.RpcController controller,\r\n"
+ " pb::RpcController controller,\r\n"
" $input$ request,\r\n"
- " com.google.protobuf.RpcCallback<$output$> done);\r\n");
+ " pb::RpcCallback<$output$> done);\r\n");
}
// Generate getDescriptor() and getDescriptorForType().
printer->Print(
"\r\n"
"public static final\r\n"
- " com.google.protobuf.Descriptors.ServiceDescriptor\r\n"
+ " pb::Descriptors.ServiceDescriptor\r\n"
" getDescriptor() {\r\n"
" return $file$.getDescriptor().getServices().get($index$);\r\n"
"}\r\n"
- "public final com.google.protobuf.Descriptors.ServiceDescriptor\r\n"
+ "public final pb::Descriptors.ServiceDescriptor\r\n"
" getDescriptorForType() {\r\n"
" return getDescriptor();\r\n"
"}\r\n",
@@ -87,11 +87,11 @@ void ServiceGenerator::GenerateCallMethod(io::Printer* printer) {
printer->Print(
"\r\n"
"public final void callMethod(\r\n"
- " com.google.protobuf.Descriptors.MethodDescriptor method,\r\n"
- " com.google.protobuf.RpcController controller,\r\n"
- " com.google.protobuf.Message request,\r\n"
- " com.google.protobuf.RpcCallback<\r\n"
- " com.google.protobuf.Message> done) {\r\n"
+ " pb::Descriptors.MethodDescriptor method,\r\n"
+ " pb::RpcController controller,\r\n"
+ " pb::Message request,\r\n"
+ " pb::RpcCallback<\r\n"
+ " pb::Message> done) {\r\n"
" if (method.getService() != getDescriptor()) {\r\n"
" throw new java.lang.IllegalArgumentException(\r\n"
" \"Service.callMethod() given method descriptor for wrong \" +\r\n"
@@ -111,7 +111,7 @@ void ServiceGenerator::GenerateCallMethod(io::Printer* printer) {
printer->Print(vars,
"case $index$:\r\n"
" this.$method$(controller, ($input$)request,\r\n"
- " com.google.protobuf.RpcUtil.<$output$>specializeCallback(\r\n"
+ " pb::RpcUtil.<$output$>specializeCallback(\r\n"
" done));\r\n"
" return;\r\n");
}
@@ -132,9 +132,9 @@ void ServiceGenerator::GenerateCallMethod(io::Printer* printer) {
void ServiceGenerator::GenerateGetPrototype(RequestOrResponse which,
io::Printer* printer) {
printer->Print(
- "public final com.google.protobuf.Message\r\n"
+ "public final pb::Message\r\n"
" get$request_or_response$Prototype(\r\n"
- " com.google.protobuf.Descriptors.MethodDescriptor method) {\r\n"
+ " pb::Descriptors.MethodDescriptor method) {\r\n"
" if (method.getService() != getDescriptor()) {\r\n"
" throw new java.lang.IllegalArgumentException(\r\n"
" \"Service.get$request_or_response$Prototype() given method \" +\r\n"
@@ -172,7 +172,7 @@ void ServiceGenerator::GenerateGetPrototype(RequestOrResponse which,
void ServiceGenerator::GenerateStub(io::Printer* printer) {
printer->Print(
"public static Stub newStub(\r\n"
- " com.google.protobuf.RpcChannel channel) {\r\n"
+ " pb::RpcChannel channel) {\r\n"
" return new Stub(channel);\r\n"
"}\r\n"
"\r\n"
@@ -181,13 +181,13 @@ void ServiceGenerator::GenerateStub(io::Printer* printer) {
printer->Indent();
printer->Print(
- "private Stub(com.google.protobuf.RpcChannel channel) {\r\n"
+ "private Stub(pb::RpcChannel channel) {\r\n"
" this.channel = channel;\r\n"
"}\r\n"
"\r\n"
- "private final com.google.protobuf.RpcChannel channel;\r\n"
+ "private final pb::RpcChannel channel;\r\n"
"\r\n"
- "public com.google.protobuf.RpcChannel getChannel() {\r\n"
+ "public pb::RpcChannel getChannel() {\r\n"
" return channel;\r\n"
"}\r\n");
@@ -201,15 +201,15 @@ void ServiceGenerator::GenerateStub(io::Printer* printer) {
printer->Print(vars,
"\r\n"
"public void $method$(\r\n"
- " com.google.protobuf.RpcController controller,\r\n"
+ " pb::RpcController controller,\r\n"
" $input$ request,\r\n"
- " com.google.protobuf.RpcCallback<$output$> done) {\r\n"
+ " pb::RpcCallback<$output$> done) {\r\n"
" channel.callMethod(\r\n"
" getDescriptor().getMethods().get($index$),\r\n"
" controller,\r\n"
" request,\r\n"
" $output$.getDefaultInstance(),\r\n"
- " com.google.protobuf.RpcUtil.generalizeCallback(\r\n"
+ " pb::RpcUtil.generalizeCallback(\r\n"
" done,\r\n"
" $output$.class,\r\n"
" $output$.getDefaultInstance()));\r\n"
diff --git a/src/google/protobuf/compiler/main.cc b/src/google/protobuf/compiler/main.cc
index 8d69a02c..84b58a35 100644
--- a/src/google/protobuf/compiler/main.cc
+++ b/src/google/protobuf/compiler/main.cc
@@ -36,7 +36,6 @@ int main(int argc, char* argv[]) {
cli.RegisterGenerator("--java_out", &java_generator,
"Generate Java source file.");
-
// Proto2 Python
google::protobuf::compiler::python::Generator py_generator;
cli.RegisterGenerator("--python_out", &py_generator,