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 31#ifndef GOOGLE_PROTOBUF_COMPILER_JAVA_CONTEXT_H__ 32#define GOOGLE_PROTOBUF_COMPILER_JAVA_CONTEXT_H__ 33 34#include <map> 35#include <memory> 36#include <vector> 37 38#include <google/protobuf/stubs/common.h> 39 40namespace google { 41namespace protobuf { 42 class FileDescriptor; 43 class FieldDescriptor; 44 class OneofDescriptor; 45 class Descriptor; 46 namespace compiler { 47 namespace java { 48 class ClassNameResolver; // name_resolver.h 49 } 50 } 51} // namespace protobuf 52 53namespace protobuf { 54namespace compiler { 55namespace java { 56 57struct FieldGeneratorInfo; 58struct OneofGeneratorInfo; 59// A context object holds the information that is shared among all code 60// generators. 61class Context { 62 public: 63 explicit Context(const FileDescriptor* file); 64 ~Context(); 65 66 // Get the name resolver associated with this context. The resolver 67 // can be used to map descriptors to Java class names. 68 ClassNameResolver* GetNameResolver(); 69 70 // Get the FieldGeneratorInfo for a given field. 71 const FieldGeneratorInfo* GetFieldGeneratorInfo( 72 const FieldDescriptor* field) const; 73 74 // Get the OneofGeneratorInfo for a given oneof. 75 const OneofGeneratorInfo* GetOneofGeneratorInfo( 76 const OneofDescriptor* oneof) const; 77 78 private: 79 void InitializeFieldGeneratorInfo(const FileDescriptor* file); 80 void InitializeFieldGeneratorInfoForMessage(const Descriptor* message); 81 void InitializeFieldGeneratorInfoForFields( 82 const vector<const FieldDescriptor*>& fields); 83 84 scoped_ptr<ClassNameResolver> name_resolver_; 85 map<const FieldDescriptor*, FieldGeneratorInfo> field_generator_info_map_; 86 map<const OneofDescriptor*, OneofGeneratorInfo> oneof_generator_info_map_; 87 GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Context); 88}; 89 90} // namespace java 91} // namespace compiler 92} // namespace protobuf 93 94} // namespace google 95#endif // GOOGLE_PROTOBUF_COMPILER_JAVA_CONTEXT_H__ 96