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_FIELD_LITE_H__ 13 #define GOOGLE_PROTOBUF_COMPILER_JAVA_MESSAGE_FIELD_LITE_H__ 14 15 #include <cstdint> 16 #include <string> 17 #include <vector> 18 19 #include "absl/container/flat_hash_map.h" 20 #include "absl/strings/string_view.h" 21 #include "google/protobuf/compiler/java/lite/field_generator.h" 22 #include "google/protobuf/descriptor.h" 23 24 namespace google { 25 namespace protobuf { 26 namespace compiler { 27 namespace java { 28 class Context; // context.h 29 class ClassNameResolver; // name_resolver.h 30 } // namespace java 31 } // namespace compiler 32 } // namespace protobuf 33 } // namespace google 34 35 namespace google { 36 namespace protobuf { 37 namespace compiler { 38 namespace java { 39 40 class ImmutableMessageFieldLiteGenerator : public ImmutableFieldLiteGenerator { 41 public: 42 explicit ImmutableMessageFieldLiteGenerator(const FieldDescriptor* descriptor, 43 int messageBitIndex, 44 Context* context); 45 ImmutableMessageFieldLiteGenerator( 46 const ImmutableMessageFieldLiteGenerator&) = delete; 47 ImmutableMessageFieldLiteGenerator& operator=( 48 const ImmutableMessageFieldLiteGenerator&) = delete; 49 ~ImmutableMessageFieldLiteGenerator() override; 50 51 // implements ImmutableFieldLiteGenerator 52 // ------------------------------------ 53 int GetNumBitsForMessage() const override; 54 void GenerateInterfaceMembers(io::Printer* printer) const override; 55 void GenerateMembers(io::Printer* printer) const override; 56 void GenerateBuilderMembers(io::Printer* printer) const override; 57 void GenerateInitializationCode(io::Printer* printer) const override; 58 void GenerateFieldInfo(io::Printer* printer, 59 std::vector<uint16_t>* output) const override; 60 void GenerateKotlinDslMembers(io::Printer* printer) const override; 61 62 std::string GetBoxedType() const override; 63 64 protected: 65 const FieldDescriptor* descriptor_; 66 absl::flat_hash_map<absl::string_view, std::string> variables_; 67 const int messageBitIndex_; 68 ClassNameResolver* name_resolver_; 69 Context* context_; 70 71 private: 72 void GenerateKotlinOrNull(io::Printer* printer) const; 73 }; 74 75 class ImmutableMessageOneofFieldLiteGenerator 76 : public ImmutableMessageFieldLiteGenerator { 77 public: 78 ImmutableMessageOneofFieldLiteGenerator(const FieldDescriptor* descriptor, 79 int messageBitIndex, 80 Context* context); 81 ImmutableMessageOneofFieldLiteGenerator( 82 const ImmutableMessageOneofFieldLiteGenerator&) = delete; 83 ImmutableMessageOneofFieldLiteGenerator& operator=( 84 const ImmutableMessageOneofFieldLiteGenerator&) = delete; 85 ~ImmutableMessageOneofFieldLiteGenerator() override; 86 87 void GenerateMembers(io::Printer* printer) const override; 88 void GenerateBuilderMembers(io::Printer* printer) const override; 89 void GenerateFieldInfo(io::Printer* printer, 90 std::vector<uint16_t>* output) const override; 91 92 }; 93 94 class RepeatedImmutableMessageFieldLiteGenerator 95 : public ImmutableFieldLiteGenerator { 96 public: 97 explicit RepeatedImmutableMessageFieldLiteGenerator( 98 const FieldDescriptor* descriptor, int messageBitIndex, Context* context); 99 RepeatedImmutableMessageFieldLiteGenerator( 100 const RepeatedImmutableMessageFieldLiteGenerator&) = delete; 101 RepeatedImmutableMessageFieldLiteGenerator& operator=( 102 const RepeatedImmutableMessageFieldLiteGenerator&) = delete; 103 ~RepeatedImmutableMessageFieldLiteGenerator() override; 104 105 // implements ImmutableFieldLiteGenerator ------------------------------------ 106 int GetNumBitsForMessage() const override; 107 void GenerateInterfaceMembers(io::Printer* printer) const override; 108 void GenerateMembers(io::Printer* printer) const override; 109 void GenerateBuilderMembers(io::Printer* printer) const override; 110 void GenerateInitializationCode(io::Printer* printer) const override; 111 void GenerateFieldInfo(io::Printer* printer, 112 std::vector<uint16_t>* output) const override; 113 void GenerateKotlinDslMembers(io::Printer* printer) const override; 114 115 std::string GetBoxedType() const override; 116 117 protected: 118 const FieldDescriptor* descriptor_; 119 absl::flat_hash_map<absl::string_view, std::string> variables_; 120 ClassNameResolver* name_resolver_; 121 Context* context_; 122 }; 123 124 } // namespace java 125 } // namespace compiler 126 } // namespace protobuf 127 } // namespace google 128 129 #endif // GOOGLE_PROTOBUF_COMPILER_JAVA_MESSAGE_FIELD_LITE_H__ 130