java_context.h 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. // Protocol Buffers - Google's data interchange format
  2. // Copyright 2008 Google Inc. All rights reserved.
  3. // https://developers.google.com/protocol-buffers/
  4. //
  5. // Redistribution and use in source and binary forms, with or without
  6. // modification, are permitted provided that the following conditions are
  7. // met:
  8. //
  9. // * Redistributions of source code must retain the above copyright
  10. // notice, this list of conditions and the following disclaimer.
  11. // * Redistributions in binary form must reproduce the above
  12. // copyright notice, this list of conditions and the following disclaimer
  13. // in the documentation and/or other materials provided with the
  14. // distribution.
  15. // * Neither the name of Google Inc. nor the names of its
  16. // contributors may be used to endorse or promote products derived from
  17. // this software without specific prior written permission.
  18. //
  19. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  20. // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  21. // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  22. // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  23. // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  24. // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  25. // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  26. // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  27. // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  28. // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  29. // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  30. #ifndef GOOGLE_PROTOBUF_COMPILER_JAVA_CONTEXT_H__
  31. #define GOOGLE_PROTOBUF_COMPILER_JAVA_CONTEXT_H__
  32. #include <map>
  33. #include <memory>
  34. #include <vector>
  35. #include <google/protobuf/stubs/common.h>
  36. #include <google/protobuf/compiler/java/java_options.h>
  37. namespace google {
  38. namespace protobuf {
  39. class FileDescriptor;
  40. class FieldDescriptor;
  41. class OneofDescriptor;
  42. class Descriptor;
  43. class EnumDescriptor;
  44. namespace compiler {
  45. namespace java {
  46. class ClassNameResolver; // name_resolver.h
  47. }
  48. }
  49. } // namespace protobuf
  50. namespace protobuf {
  51. namespace compiler {
  52. namespace java {
  53. struct FieldGeneratorInfo;
  54. struct OneofGeneratorInfo;
  55. // A context object holds the information that is shared among all code
  56. // generators.
  57. class Context {
  58. public:
  59. Context(const FileDescriptor* file, const Options& options);
  60. ~Context();
  61. // Get the name resolver associated with this context. The resolver
  62. // can be used to map descriptors to Java class names.
  63. ClassNameResolver* GetNameResolver() const;
  64. // Get the FieldGeneratorInfo for a given field.
  65. const FieldGeneratorInfo* GetFieldGeneratorInfo(
  66. const FieldDescriptor* field) const;
  67. // Get the OneofGeneratorInfo for a given oneof.
  68. const OneofGeneratorInfo* GetOneofGeneratorInfo(
  69. const OneofDescriptor* oneof) const;
  70. const Options& options() const { return options_; }
  71. // Enforces all the files (including transitive dependencies) to use
  72. // LiteRuntime.
  73. bool EnforceLite() const { return options_.enforce_lite; }
  74. // Does this message class have generated parsing, serialization, and other
  75. // standard methods for which reflection-based fallback implementations exist?
  76. bool HasGeneratedMethods(const Descriptor* descriptor) const;
  77. private:
  78. void InitializeFieldGeneratorInfo(const FileDescriptor* file);
  79. void InitializeFieldGeneratorInfoForMessage(const Descriptor* message);
  80. void InitializeFieldGeneratorInfoForFields(
  81. const std::vector<const FieldDescriptor*>& fields);
  82. std::unique_ptr<ClassNameResolver> name_resolver_;
  83. std::map<const FieldDescriptor*, FieldGeneratorInfo>
  84. field_generator_info_map_;
  85. std::map<const OneofDescriptor*, OneofGeneratorInfo>
  86. oneof_generator_info_map_;
  87. Options options_;
  88. GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Context);
  89. };
  90. } // namespace java
  91. } // namespace compiler
  92. } // namespace protobuf
  93. } // namespace google
  94. #endif // GOOGLE_PROTOBUF_COMPILER_JAVA_CONTEXT_H__