• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)62 std::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