From 9a93c5f593043286dc2821e1dae7f6a83a7a5810 Mon Sep 17 00:00:00 2001 From: Max Cai Date: Mon, 14 Oct 2013 16:28:08 +0100 Subject: [PATCH] Make generated code more aligned with Google Java style. - Blank line after opening a message class (but not an enum interface). - Let all code blocks insert blank lines before themselves. This applies to 'package' statement, all message classes, enum classes or constant groups, extensions, bitfields, proto fields (one block per field; i.e. accessors don't have blank lines among them), and basic MessageNano methods. In this case we don't need to guess what the next block is and create blank lines for it. - Fixed some newline/indent errors. - Only one SuppressWarnings("hiding") per file. Change-Id: I865f52ad4fb6ea3b3a98b97ac9d78d19fc46c858 --- .../compiler/javanano/javanano_enum.cc | 2 +- .../compiler/javanano/javanano_enum_field.cc | 8 +- .../compiler/javanano/javanano_extension.cc | 6 +- .../compiler/javanano/javanano_file.cc | 20 +++-- .../compiler/javanano/javanano_message.cc | 88 +++++++++++-------- .../javanano/javanano_message_field.cc | 9 +- 6 files changed, 78 insertions(+), 55 deletions(-) diff --git a/src/google/protobuf/compiler/javanano/javanano_enum.cc b/src/google/protobuf/compiler/javanano/javanano_enum.cc index 18f688ac07..f934b05f0d 100644 --- a/src/google/protobuf/compiler/javanano/javanano_enum.cc +++ b/src/google/protobuf/compiler/javanano/javanano_enum.cc @@ -69,6 +69,7 @@ EnumGenerator::~EnumGenerator() {} void EnumGenerator::Generate(io::Printer* printer) { printer->Print( + "\n" "// enum $classname$\n", "classname", descriptor_->name()); @@ -102,7 +103,6 @@ void EnumGenerator::Generate(io::Printer* printer) { printer->Outdent(); printer->Print("}\n"); } - printer->Print("\n"); } } // namespace javanano diff --git a/src/google/protobuf/compiler/javanano/javanano_enum_field.cc b/src/google/protobuf/compiler/javanano/javanano_enum_field.cc index fe67d76b31..436616176d 100644 --- a/src/google/protobuf/compiler/javanano/javanano_enum_field.cc +++ b/src/google/protobuf/compiler/javanano/javanano_enum_field.cc @@ -111,11 +111,11 @@ GenerateClearCode(io::Printer* printer) const { void EnumFieldGenerator:: GenerateMergingCode(io::Printer* printer) const { printer->Print(variables_, - " this.$name$ = input.readInt32();\n"); + "this.$name$ = input.readInt32();\n"); if (params_.generate_has()) { printer->Print(variables_, - " has$capitalized_name$ = true;\n"); + "has$capitalized_name$ = true;\n"); } } @@ -281,8 +281,8 @@ GenerateMergingCode(io::Printer* printer) const { "input.popLimit(limit);\n"); } else { printer->Print(variables_, - "int arrayLength = com.google.protobuf.nano.WireFormatNano.\n" - " getRepeatedFieldArrayLength(input, $tag$);\n" + "int arrayLength = com.google.protobuf.nano.WireFormatNano\n" + " .getRepeatedFieldArrayLength(input, $tag$);\n" "int i = this.$name$ == null ? 0 : this.$name$.length;\n" "int[] newArray = new int[i + arrayLength];\n" "if (i != 0) {\n" diff --git a/src/google/protobuf/compiler/javanano/javanano_extension.cc b/src/google/protobuf/compiler/javanano/javanano_extension.cc index a85645e927..0bc9c9d186 100644 --- a/src/google/protobuf/compiler/javanano/javanano_extension.cc +++ b/src/google/protobuf/compiler/javanano/javanano_extension.cc @@ -77,13 +77,15 @@ ExtensionGenerator::~ExtensionGenerator() {} void ExtensionGenerator::Generate(io::Printer* printer) const { if (descriptor_->is_repeated()) { printer->Print(variables_, - "// Extends $extends$\n" + "\n" + "// extends $extends$\n" "public static final com.google.protobuf.nano.Extension> $name$ = \n" " com.google.protobuf.nano.Extension.createRepeated($number$,\n" " new com.google.protobuf.nano.Extension.TypeLiteral>(){});\n"); } else { printer->Print(variables_, - "// Extends $extends$\n" + "\n" + "// extends $extends$\n" "public static final com.google.protobuf.nano.Extension<$type$> $name$ =\n" " com.google.protobuf.nano.Extension.create($number$,\n" " new com.google.protobuf.nano.Extension.TypeLiteral<$type$>(){});\n"); diff --git a/src/google/protobuf/compiler/javanano/javanano_file.cc b/src/google/protobuf/compiler/javanano/javanano_file.cc index 75d0e44f09..4e9fe0a88f 100644 --- a/src/google/protobuf/compiler/javanano/javanano_file.cc +++ b/src/google/protobuf/compiler/javanano/javanano_file.cc @@ -163,17 +163,22 @@ 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!\n" - "\n"); + "// Generated by the protocol buffer compiler. DO NOT EDIT!\n"); if (!java_package_.empty()) { printer->Print( - "package $package$;\n" - "\n", + "\n" + "package $package$;\n", "package", java_package_); } + // Note: constants (from enums, emitted in the loop below) may have the same names as constants + // in the nested classes. This causes Java warnings, but is not fatal, so we suppress those + // warnings here in the top-most class declaration. printer->Print( + "\n" + "@SuppressWarnings(\"hiding\")\n" "public final class $classname$ {\n" + " \n" " private $classname$() {}\n", "classname", classname_); printer->Indent(); @@ -223,12 +228,11 @@ static void GenerateSibling(const string& package_dir, io::Printer printer(output.get(), '$'); printer.Print( - "// Generated by the protocol buffer compiler. DO NOT EDIT!\n" - "\n"); + "// Generated by the protocol buffer compiler. DO NOT EDIT!\n"); if (!java_package.empty()) { printer.Print( - "package $package$;\n" - "\n", + "\n" + "package $package$;\n", "package", java_package); } diff --git a/src/google/protobuf/compiler/javanano/javanano_message.cc b/src/google/protobuf/compiler/javanano/javanano_message.cc index 420405d207..c55ca55b06 100644 --- a/src/google/protobuf/compiler/javanano/javanano_message.cc +++ b/src/google/protobuf/compiler/javanano/javanano_message.cc @@ -121,37 +121,47 @@ void MessageGenerator::GenerateStaticVariableInitializers( } void MessageGenerator::Generate(io::Printer* printer) { - const string& file_name = descriptor_->file()->name(); - bool is_own_file = - params_.java_multiple_files(file_name) - && descriptor_->containing_type() == NULL; - if (!params_.store_unknown_fields() && (descriptor_->extension_count() != 0 || descriptor_->extension_range_count() != 0)) { GOOGLE_LOG(FATAL) << "Extensions are only supported in NANO_RUNTIME if the " "'store_unknown_fields' generator option is 'true'\n"; } - // Note: Fields (which will be emitted in the loop, below) may have the same names as fields in - // the inner or outer class. This causes Java warnings, but is not fatal, so we suppress those - // warnings here in the class declaration. - printer->Print( - "@SuppressWarnings(\"hiding\")\n" - "public $modifiers$final class $classname$ extends\n" - " com.google.protobuf.nano.MessageNano {\n", - "modifiers", is_own_file ? "" : "static ", - "classname", descriptor_->name()); + const string& file_name = descriptor_->file()->name(); + bool is_own_file = + params_.java_multiple_files(file_name) + && descriptor_->containing_type() == NULL; + + if (is_own_file) { + // Note: constants (from enums and fields requiring stored defaults, emitted in the loop below) + // may have the same names as constants in the nested classes. This causes Java warnings, but + // is not fatal, so we suppress those warnings here in the top-most class declaration. + printer->Print( + "\n" + "@SuppressWarnings(\"hiding\")\n" + "public final class $classname$ extends\n" + " com.google.protobuf.nano.MessageNano {\n", + "classname", descriptor_->name()); + } else { + printer->Print( + "\n" + "public static final class $classname$ extends\n" + " com.google.protobuf.nano.MessageNano {\n", + "classname", descriptor_->name()); + } printer->Indent(); printer->Print( - "public static final $classname$ EMPTY_ARRAY[] = {};\n" + "\n" + "public static final $classname$[] EMPTY_ARRAY = {};\n" + "\n" "public $classname$() {\n" " clear();\n" - "}\n" - "\n", + "}\n", "classname", descriptor_->name()); if (params_.store_unknown_fields()) { printer->Print( + "\n" "private java.util.List\n" " unknownFieldData;\n"); } @@ -171,16 +181,19 @@ void MessageGenerator::Generate(io::Printer* printer) { // Integers for bit fields int totalInts = (field_generators_.total_bits() + 31) / 32; - for (int i = 0; i < totalInts; i++) { - printer->Print("private int $bit_field_name$;\n", - "bit_field_name", GetBitFieldName(i)); + if (totalInts > 0) { + printer->Print("\n"); + for (int i = 0; i < totalInts; i++) { + printer->Print("private int $bit_field_name$;\n", + "bit_field_name", GetBitFieldName(i)); + } } // Fields for (int i = 0; i < descriptor_->field_count(); i++) { + printer->Print("\n"); PrintFieldComment(printer, descriptor_->field(i)); field_generators_.get(descriptor_->field(i)).GenerateMembers(printer); - printer->Print("\n"); } GenerateClear(printer); @@ -189,25 +202,27 @@ void MessageGenerator::Generate(io::Printer* printer) { if (params_.store_unknown_fields() && descriptor_->extension_range_count() > 0) { printer->Print( + "\n" "public T getExtension(com.google.protobuf.nano.Extension extension) {\n" " return com.google.protobuf.nano.WireFormatNano.getExtension(\n" " extension, unknownFieldData);\n" - "}\n\n" + "}\n" + "\n" "public void setExtension(com.google.protobuf.nano.Extension extension, T value) {\n" " if (unknownFieldData == null) {\n" - " unknownFieldData = \n" + " unknownFieldData =\n" " new java.util.ArrayList();\n" " }\n" " com.google.protobuf.nano.WireFormatNano.setExtension(\n" " extension, value, unknownFieldData);\n" - "}\n\n"); + "}\n"); } GenerateMessageSerializationMethods(printer); GenerateMergeFromMethods(printer); GenerateParseFromMethods(printer); printer->Outdent(); - printer->Print("}\n\n"); + printer->Print("}\n"); } // =================================================================== @@ -220,11 +235,13 @@ GenerateMessageSerializationMethods(io::Printer* printer) { // writeTo only throws an exception if it contains one or more fields to write if (descriptor_->field_count() > 0 || params_.store_unknown_fields()) { printer->Print( + "\n" "@Override\n" "public void writeTo(com.google.protobuf.nano.CodedOutputByteBufferNano output)\n" - " throws java.io.IOException {\n"); + " throws java.io.IOException {\n"); } else { printer->Print( + "\n" "@Override\n" "public void writeTo(com.google.protobuf.nano.CodedOutputByteBufferNano output) {\n"); } @@ -274,8 +291,7 @@ GenerateMessageSerializationMethods(io::Printer* printer) { printer->Print( " cachedSize = size;\n" " return size;\n" - "}\n" - "\n"); + "}\n"); } void MessageGenerator::GenerateMergeFromMethods(io::Printer* printer) { @@ -283,9 +299,10 @@ void MessageGenerator::GenerateMergeFromMethods(io::Printer* printer) { SortFieldsByNumber(descriptor_)); printer->Print( + "\n" "@Override\n" "public $classname$ mergeFrom(\n" - " com.google.protobuf.nano.CodedInputByteBufferNano input)\n" + " com.google.protobuf.nano.CodedInputByteBufferNano input)\n" " throws java.io.IOException {\n", "classname", descriptor_->name()); @@ -350,8 +367,7 @@ void MessageGenerator::GenerateMergeFromMethods(io::Printer* printer) { printer->Print( " }\n" // switch (tag) " }\n" // while (true) - "}\n" - "\n"); + "}\n"); } void MessageGenerator:: @@ -360,6 +376,7 @@ GenerateParseFromMethods(io::Printer* printer) { // because they need to be generated even for messages that are optimized // for code size. printer->Print( + "\n" "public static $classname$ parseFrom(byte[] data)\n" " throws com.google.protobuf.nano.InvalidProtocolBufferNanoException {\n" " return com.google.protobuf.nano.MessageNano.mergeFrom(new $classname$(), data);\n" @@ -369,8 +386,7 @@ GenerateParseFromMethods(io::Printer* printer) { " com.google.protobuf.nano.CodedInputByteBufferNano input)\n" " throws java.io.IOException {\n" " return new $classname$().mergeFrom(input);\n" - "}\n" - "\n", + "}\n", "classname", descriptor_->name()); } @@ -381,7 +397,8 @@ void MessageGenerator::GenerateSerializeOneField( void MessageGenerator::GenerateClear(io::Printer* printer) { printer->Print( - "public final $classname$ clear() {\n", + "\n" + "public $classname$ clear() {\n", "classname", descriptor_->name()); printer->Indent(); @@ -407,8 +424,7 @@ void MessageGenerator::GenerateClear(io::Printer* printer) { printer->Print( " cachedSize = -1;\n" " return this;\n" - "}\n" - "\n"); + "}\n"); } // =================================================================== diff --git a/src/google/protobuf/compiler/javanano/javanano_message_field.cc b/src/google/protobuf/compiler/javanano/javanano_message_field.cc index 027428f0e3..225cf42c60 100644 --- a/src/google/protobuf/compiler/javanano/javanano_message_field.cc +++ b/src/google/protobuf/compiler/javanano/javanano_message_field.cc @@ -98,7 +98,7 @@ GenerateMergingCode(io::Printer* printer) const { printer->Print(variables_, "if (this.$name$ == null) {\n" " this.$name$ = new $type$();\n" - "}"); + "}\n"); if (descriptor_->type() == FieldDescriptor::TYPE_GROUP) { printer->Print(variables_, @@ -173,7 +173,7 @@ GenerateMergingCode(io::Printer* printer) const { printer->Print(variables_, "if (!has$capitalized_name$()) {\n" " set$capitalized_name$(new $type$());\n" - "}"); + "}\n"); if (descriptor_->type() == FieldDescriptor::TYPE_GROUP) { printer->Print(variables_, @@ -231,10 +231,11 @@ void RepeatedMessageFieldGenerator:: GenerateMergingCode(io::Printer* printer) const { // First, figure out the length of the array, then parse. printer->Print(variables_, - "int arrayLength = com.google.protobuf.nano.WireFormatNano" + "int arrayLength = com.google.protobuf.nano.WireFormatNano\n" " .getRepeatedFieldArrayLength(input, $tag$);\n" "int i = this.$name$ == null ? 0 : this.$name$.length;\n" - "$type$[] newArray = new $type$[i + arrayLength];\n" + "$type$[] newArray =\n" + " new $type$[i + arrayLength];\n" "if (i != 0) {\n" " java.lang.System.arraycopy(this.$name$, 0, newArray, 0, i);\n" "}\n"