1 // Protocol Buffers - Google's data interchange format 2 // Copyright 2008 Google Inc. All rights reserved. 3 // 4 // Use of this source code is governed by a BSD-style 5 // license that can be found in the LICENSE file or at 6 // https://developers.google.com/open-source/licenses/bsd 7 8 // Author: kenton@google.com (Kenton Varda) 9 // Based on original Protocol Buffers design by 10 // Sanjay Ghemawat, Jeff Dean, and others. 11 12 #ifndef GOOGLE_PROTOBUF_COMPILER_JAVA_MESSAGE_H__ 13 #define GOOGLE_PROTOBUF_COMPILER_JAVA_MESSAGE_H__ 14 15 #include <memory> 16 #include <string> 17 #include <vector> 18 19 #include "google/protobuf/compiler/java/generator_factory.h" 20 #include "google/protobuf/compiler/java/full/field_generator.h" 21 #include "google/protobuf/descriptor.h" 22 23 namespace google { 24 namespace protobuf { 25 namespace compiler { 26 namespace java { 27 class Context; // context.h 28 class ClassNameResolver; // name_resolver.h 29 } // namespace java 30 } // namespace compiler 31 namespace io { 32 class Printer; // printer.h 33 } 34 } // namespace protobuf 35 } // namespace google 36 37 namespace google { 38 namespace protobuf { 39 namespace compiler { 40 namespace java { 41 42 class ImmutableMessageGenerator : public MessageGenerator { 43 public: 44 ImmutableMessageGenerator(const Descriptor* descriptor, Context* context); 45 ImmutableMessageGenerator(const ImmutableMessageGenerator&) = delete; 46 ImmutableMessageGenerator& operator=(const ImmutableMessageGenerator&) = 47 delete; 48 ~ImmutableMessageGenerator() override; 49 50 void Generate(io::Printer* printer) override; 51 void GenerateInterface(io::Printer* printer) override; 52 void GenerateExtensionRegistrationCode(io::Printer* printer) override; 53 void GenerateStaticVariables(io::Printer* printer, 54 int* bytecode_estimate) override; 55 56 // Returns an estimate of the number of bytes the printed code will compile to 57 int GenerateStaticVariableInitializers(io::Printer* printer) override; 58 59 private: 60 void GenerateFieldAccessorTable(io::Printer* printer, int* bytecode_estimate); 61 62 // Returns an estimate of the number of bytes the printed code will compile to 63 int GenerateFieldAccessorTableInitializer(io::Printer* printer); 64 65 void GenerateMessageSerializationMethods(io::Printer* printer); 66 void GenerateParseFromMethods(io::Printer* printer); 67 68 void GenerateBuilder(io::Printer* printer); 69 void GenerateIsInitialized(io::Printer* printer); 70 void GenerateDescriptorMethods(io::Printer* printer); 71 void GenerateInitializers(io::Printer* printer); 72 void GenerateEqualsAndHashCode(io::Printer* printer); 73 void GenerateParser(io::Printer* printer); 74 void GenerateParsingConstructor(io::Printer* printer); 75 void GenerateMutableCopy(io::Printer* printer); 76 void GenerateAnyMethods(io::Printer* printer); 77 78 Context* context_; 79 ClassNameResolver* name_resolver_; 80 FieldGeneratorMap<ImmutableFieldGenerator> field_generators_; 81 }; 82 83 } // namespace java 84 } // namespace compiler 85 } // namespace protobuf 86 } // namespace google 87 88 #endif // GOOGLE_PROTOBUF_COMPILER_JAVA_MESSAGE_H__ 89