From 02225601e2e9a86863ad8dc76c5a9f9498f429c4 Mon Sep 17 00:00:00 2001 From: dsavvinov Date: Mon, 8 Aug 2016 18:42:34 +0300 Subject: [PATCH] Protobuf: prettified generated code --- .../google/protobuf/compiler/kotlin/protoc | Bin 110224 -> 114520 bytes .../kotlin/src/kotlin_class_generator.cc | 47 +++++++++++------- .../kotlin/src/kotlin_field_generator.cc | 44 ++++++++++++++-- .../kotlin/src/kotlin_field_generator.h | 3 +- 4 files changed, 70 insertions(+), 24 deletions(-) diff --git a/proto/compiler/google/src/google/protobuf/compiler/kotlin/protoc b/proto/compiler/google/src/google/protobuf/compiler/kotlin/protoc index e7560ccd23cab597048da4c9a2b54ebd24bb18eb..126ff0293796824140148310205428b1c4dcd745 100755 GIT binary patch delta 38487 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 D(ru~% delta 35355 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 Xr`{`;JNZt3Sr_wfSG8!H+~EHJj3r`c diff --git a/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_class_generator.cc b/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_class_generator.cc index 06f324b8a3f..c1c63afb766 100644 --- a/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_class_generator.cc +++ b/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_class_generator.cc @@ -21,31 +21,33 @@ void ClassGenerator::generateCode(io::Printer *printer, bool isBuilder) const { generateHeader(printer, isBuilder); printer->Indent(); - /* - * Field generator should know if it is generating code for builder - * or for fair class to choose between 'val' and 'var'. - * Also note that fields should be declared before init section. - */ - + // Generate code for property declaration + printer->Print("//========== Properties ===========\n"); for (FieldGenerator *gen: properties) { gen->generateCode(printer, isBuilder); printer->Print("\n"); } // Generate field for errors code - printer->Print("\n"); - printer->Print("var errorCode: Int = 0\n"); + printer->Print("var errorCode: Int = 0\n\n"); - printer->Print("\n"); generateInitSection(printer); + printer->Print("\n"); + // enum declarations and nested classes declarations only for fair classes if (!isBuilder) { + if (enumsDeclaraions.size() > 0) { + printer->Print("//========== Nested enums declarations ===========\n"); + } for (EnumGenerator *gen: enumsDeclaraions) { gen->generateCode(printer); printer->Print("\n"); } + if (classesDeclarations.size() > 0) { + printer->Print("//========== Nested classes declarations ===========\n"); + } for (ClassGenerator *gen: classesDeclarations) { gen->generateCode(printer); printer->Print("\n"); @@ -53,30 +55,37 @@ void ClassGenerator::generateCode(io::Printer *printer, bool isBuilder) const { } // write serialization methods only for fair classes, read methods only for Builders) - printer->Print("\n"); + printer->Print("//========== Serialization methods ===========\n"); generateWriteToMethod(printer); + printer->Print("\n"); // builder, mergeFrom and only for fair classes if (!isBuilder) { - printer->Print("\n"); - generateBuilder(printer); - printer->Print("\n"); generateMergeMethods(printer); + printer->Print("\n"); } // build() and setters are only for builders if (isBuilder) { - printer->Print("\n"); + printer->Print("//========== Mutating methods ===========\n"); generateBuildMethod(printer); - printer->Print("\n"); + generateParseMethods(printer); + printer->Print("\n"); } // getSize() + printer->Print("//========== Size-related methods ===========\n"); generateGetSizeMethod(printer); + printer->Print("\n"); + if (!isBuilder) { + printer->Print("//========== Builder ===========\n"); + generateBuilder(printer); + printer->Print("\n"); + } printer->Outdent(); printer->Print("}\n"); } @@ -139,7 +148,6 @@ void ClassGenerator::generateMergeMethods(io::Printer *printer) const { map vars; // mergeWith(other: Message) - printer->Print("\n"); vars["className"] = getFullType(); printer->Print(vars, "fun mergeWith (other: $className$) {\n"); printer->Indent(); @@ -203,6 +211,7 @@ void ClassGenerator::generateWriteToMethod(io::Printer *printer) const { // generate code for serialization/deserialization of fields for (int i = 0; i < properties.size(); ++i) { properties[i]->generateSerializationCode(printer, /* isRead = */ false, /* noTag = */ false); + printer->Print("\n"); } printer->Outdent(); @@ -319,7 +328,7 @@ void ClassGenerator::generateParseMethods(io::Printer *printer) const { printer->Print("return true"); printer->Outdent(); printer->Print("}\n"); // parseFieldFrom body - + printer->Print("\n"); // ====== parseFromWithSize(input: CodedInputStream, expectedSize: Int) ========= printer->Print(vars, @@ -346,7 +355,7 @@ void ClassGenerator::generateParseMethods(io::Printer *printer) const { printer->Outdent(); // function body printer->Print("}\n"); - + printer->Print("\n"); // ======== parseFrom(input: CodedInputStream) ========= printer->Print(vars, @@ -375,7 +384,7 @@ void ClassGenerator::generateGetSizeMethod(io::Printer *printer) const { printer->Print("return size\n"); printer->Outdent(); printer->Print("}\n"); - + printer->Print("\n"); // getSizeNoTag(): Int printer->Print("fun getSizeNoTag(): Int {\n"); diff --git a/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_field_generator.cc b/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_field_generator.cc index a277c583cb8..15287ee967b 100644 --- a/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_field_generator.cc +++ b/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_field_generator.cc @@ -32,6 +32,10 @@ void FieldGenerator::generateCode(io::Printer *printer, bool isBuilder) const { map vars; vars["name"] = simpleName; vars["field"] = getFullType(); + vars["protoType"] = getProtoType(); + + generateComment(printer); + printer->Print(vars, "var $name$ : $field$\n"); // make setter private @@ -93,13 +97,19 @@ void FieldGenerator::generateSerializationForPacked(io::Printer *printer, bool i */ FieldGenerator singleFieldGen = getUnderlyingTypeGenerator(); singleFieldGen.simpleName = "singleElemSize"; + + printer->Print("\n"); singleFieldGen.generateSerializationCode(printer, isRead, /* noTag = */ true, /* isField = */ false); + printer->Print("\n"); printer->Print(vars, "val arraySize = expectedByteSize / singleElemSize\n"); // Allocate new array of estimated size printer->Print(vars, "val newArray = $arrayType$(arraySize)\n"); + // place declaration of new variable in anonymous scope for hygiene + printer->Print("run {\n"); + printer->Indent(); printer->Print("var i = 0\n"); printer->Print(vars, "while(i < arraySize) {\n"); printer->Indent(); @@ -113,7 +123,10 @@ void FieldGenerator::generateSerializationForPacked(io::Printer *printer, bool i printer->Print(vars, "$fieldName$[i] = tmp\n"); printer->Print("i += 1\n"); - printer->Outdent(); + printer->Outdent(); // while-loop + printer->Print("}\n"); + + printer->Outdent(); // anonymous scope printer->Print("}\n"); } else { @@ -129,10 +142,17 @@ void FieldGenerator::generateSerializationForPacked(io::Printer *printer, bool i // length printer->Print(vars, "var arrayByteSize = 0\n"); + + printer->Print("\n"); generateSizeEstimationCode(printer, "arrayByteSize", /* noTag = */ true, /* isField = */ false); printer->Print(vars, "output.writeInt32NoTag(arrayByteSize)\n"); + printer->Print("\n"); // all elements + // place declaration of new variable in anonymous scope for hygiene + printer->Print("run {\n"); + printer->Indent(); + printer->Print("var i = 0\n"); printer->Print(vars, "while (i < $fieldName$.size) {\n"); printer->Indent(); @@ -145,7 +165,11 @@ void FieldGenerator::generateSerializationForPacked(io::Printer *printer, bool i singleFieldGen.generateSerializationCode(printer, isRead, /* noTag = */ isPrimitive, /* isField = */ false); printer->Print(vars, "i += 1\n"); - printer->Outdent(); // for-loop + + printer->Outdent(); // while-loop + printer->Print("}\n"); + + printer->Outdent(); // anonymous scope printer->Print("}\n"); } } @@ -250,6 +274,9 @@ void FieldGenerator::generateSerializationCode(io::Printer *printer, bool isRead vars["fieldName"] = simpleName; vars["initValue"] = getInitValue(); + if (isField) { + generateComment(printer); + } /* Try to generate syntax for serialization of repeated fields. * Note that it should be first check because of Google's FieldDescriptor structure */ @@ -376,7 +403,7 @@ void FieldGenerator::generateSizeEstimationCode(io::Printer *printer, string var singleFieldGen.generateSizeEstimationCode(printer, "arraySize", noTag, /* isField = */ false); printer->Print(vars, "i += 1\n"); - + printer->Outdent(); // for-loop printer->Print("}\n"); @@ -498,6 +525,17 @@ string FieldGenerator::getWireType() const { return name_resolving::protobufTypeToKotlinWireType(descriptor->type()); } +void FieldGenerator::generateComment(io::Printer *printer) const { + map vars; + + vars["repeated"] = descriptor->is_repeated() ? "repeated " : ""; + vars["declared_type"] = descriptor->type_name(); + vars["name"] = descriptor->name(); + vars["number"] = std::to_string(descriptor->number()); + + printer->Print(vars, "//$repeated$$declared_type$ $name$ = $number$\n"); +} + } // namespace kotlin } // namespace compiler diff --git a/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_field_generator.h b/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_field_generator.h index 5f19f8ef045..be3d8687b1d 100644 --- a/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_field_generator.h +++ b/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_field_generator.h @@ -22,13 +22,12 @@ class NameResolver; // declared in kotlin_name_resolver.h class FieldGenerator { private: FieldDescriptor const * descriptor; - // TODO: refactor from field generator to some static utility namespace void generateSetter(io::Printer * printer) const; + void generateComment(io::Printer * printer) const; void generateRepeatedMethods(io::Printer * printer, bool isBuilder) const; void generateSerializationForPacked (io::Printer * printer, bool isRead, bool noTag, bool isField) const; - void generateSerializationForRepeated (io::Printer * printer, bool isRead, bool noTag, bool isField) const; void generateSerializationForEnums (io::Printer * printer, bool isRead, bool noTag, bool isField) const; void generateSerializationForMessages (io::Printer * printer, bool isRead, bool noTag, bool isField) const; void generateSerializationForPrimitives (io::Printer * printer, bool isRead, bool noTag, bool isField) const;