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: liujisi@google.com (Pherl Liu) 9 10 #include "google/protobuf/compiler/java/generator_factory.h" 11 12 #include <memory> 13 14 #include "google/protobuf/compiler/java/context.h" 15 #include "google/protobuf/compiler/java/full/service.h" 16 #include "google/protobuf/compiler/java/lite/enum.h" 17 #include "google/protobuf/compiler/java/lite/extension.h" 18 #include "google/protobuf/compiler/java/lite/message.h" 19 #include "google/protobuf/descriptor.h" 20 21 namespace google { 22 namespace protobuf { 23 namespace compiler { 24 namespace java { 25 26 // Factory that creates generators for immutable-default messages. 27 class ImmutableLiteGeneratorFactory : public GeneratorFactory { 28 public: ImmutableLiteGeneratorFactory(Context * context)29 explicit ImmutableLiteGeneratorFactory(Context* context) 30 : context_(context) {} 31 ImmutableLiteGeneratorFactory(const ImmutableLiteGeneratorFactory&) = delete; 32 ImmutableLiteGeneratorFactory& operator=( 33 const ImmutableLiteGeneratorFactory&) = delete; 34 ~ImmutableLiteGeneratorFactory() override = default; 35 NewMessageGenerator(const Descriptor * descriptor) const36 std::unique_ptr<MessageGenerator> NewMessageGenerator( 37 const Descriptor* descriptor) const override { 38 return std::make_unique<ImmutableMessageLiteGenerator>(descriptor, 39 context_); 40 } 41 NewEnumGenerator(const EnumDescriptor * descriptor) const42 std::unique_ptr<EnumGenerator> NewEnumGenerator( 43 const EnumDescriptor* descriptor) const override { 44 return std::make_unique<EnumLiteGenerator>(descriptor, true, context_); 45 } 46 NewExtensionGenerator(const FieldDescriptor * descriptor) const47 std::unique_ptr<ExtensionGenerator> NewExtensionGenerator( 48 const FieldDescriptor* descriptor) const override { 49 return std::make_unique<ImmutableExtensionLiteGenerator>(descriptor, 50 context_); 51 } 52 NewServiceGenerator(const ServiceDescriptor * descriptor) const53 std::unique_ptr<ServiceGenerator> NewServiceGenerator( 54 const ServiceDescriptor* descriptor) const override { 55 return std::make_unique<ImmutableServiceGenerator>(descriptor, context_); 56 } 57 58 private: 59 Context* context_; 60 }; 61 MakeImmutableLiteGeneratorFactory(Context * context)62std::unique_ptr<GeneratorFactory> MakeImmutableLiteGeneratorFactory( 63 Context* context) { 64 return std::make_unique<ImmutableLiteGeneratorFactory>(context); 65 } 66 67 } // namespace java 68 } // namespace compiler 69 } // namespace protobuf 70 } // namespace google 71