javanano_params.h revision 26ce449901aa8c2f954fb4a5e8bbcc1253b3ca01
1d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Protocol Buffers - Google's data interchange format 2d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Copyright 2010 Google Inc. All rights reserved. 3d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// http://code.google.com/p/protobuf/ 4d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// 5d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Redistribution and use in source and binary forms, with or without 6d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// modification, are permitted provided that the following conditions are 7d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// met: 8d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// 9d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// * Redistributions of source code must retain the above copyright 10d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// notice, this list of conditions and the following disclaimer. 11d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// * Redistributions in binary form must reproduce the above 12d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// copyright notice, this list of conditions and the following disclaimer 13d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// in the documentation and/or other materials provided with the 14d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// distribution. 15d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// * Neither the name of Google Inc. nor the names of its 16d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// contributors may be used to endorse or promote products derived from 17d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// this software without specific prior written permission. 18d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// 19d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 31d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Author: wink@google.com (Wink Saville) 32d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 33d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen#ifndef PROTOBUF_COMPILER_JAVANANO_JAVANANO_PARAMS_H_ 34d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen#define PROTOBUF_COMPILER_JAVANANO_JAVANANO_PARAMS_H_ 35d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 36d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen#include <map> 37d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen#include <set> 38d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen#include <google/protobuf/stubs/strutil.h> 39d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 40d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chennamespace google { 41d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chennamespace protobuf { 42d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chennamespace compiler { 43d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chennamespace javanano { 44d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 45d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenenum eMultipleFiles { JAVANANO_MUL_UNSET, JAVANANO_MUL_FALSE, JAVANANO_MUL_TRUE }; 46d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 47d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Parameters for used by the generators 48d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenclass Params { 49d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public: 50d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen typedef map<string, string> NameMap; 51d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen typedef set<string> NameSet; 52d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private: 53d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen string empty_; 54d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen string base_name_; 55d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen eMultipleFiles override_java_multiple_files_; 56d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen bool store_unknown_fields_; 57d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen NameMap java_packages_; 58d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen NameMap java_outer_classnames_; 59d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen NameSet java_multiple_files_; 60d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen bool generate_has_; 61d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen bool java_enum_style_; 62d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen bool optional_field_accessors_; 63d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 64d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public: 65d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen Params(const string & base_name) : 66d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen empty_(""), 67d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen base_name_(base_name), 68d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen override_java_multiple_files_(JAVANANO_MUL_UNSET), 69d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen store_unknown_fields_(false), 70d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen generate_has_(false), 71d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen java_enum_style_(false), 72d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen optional_field_accessors_(false) { 73d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 74d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 75d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const string& base_name() const { 76d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return base_name_; 77d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 78d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 79d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen bool has_java_package(const string& file_name) const { 80d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return java_packages_.find(file_name) 81d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen != java_packages_.end(); 82d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 83d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen void set_java_package(const string& file_name, 84d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const string& java_package) { 85d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen java_packages_[file_name] = java_package; 86d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 87d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const string& java_package(const string& file_name) const { 88d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen NameMap::const_iterator itr; 89d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 90d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen itr = java_packages_.find(file_name); 91d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (itr == java_packages_.end()) { 92d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return empty_; 93d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } else { 94d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return itr->second; 95d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 96d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 97d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const NameMap& java_packages() { 98d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return java_packages_; 99d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 100d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 101d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen bool has_java_outer_classname(const string& file_name) const { 102d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return java_outer_classnames_.find(file_name) 103d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen != java_outer_classnames_.end(); 104d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 105d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen void set_java_outer_classname(const string& file_name, 106d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const string& java_outer_classname) { 107d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen java_outer_classnames_[file_name] = java_outer_classname; 108d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 109d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const string& java_outer_classname(const string& file_name) const { 110d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen NameMap::const_iterator itr; 111d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 112d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen itr = java_outer_classnames_.find(file_name); 113d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (itr == java_outer_classnames_.end()) { 114d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return empty_; 115d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } else { 116d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return itr->second; 117d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 118d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 119d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen const NameMap& java_outer_classnames() { 120d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return java_outer_classnames_; 121d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 122d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 123d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen void set_override_java_multiple_files(bool java_multiple_files) { 124 if (java_multiple_files) { 125 override_java_multiple_files_ = JAVANANO_MUL_TRUE; 126 } else { 127 override_java_multiple_files_ = JAVANANO_MUL_FALSE; 128 } 129 } 130 void clear_override_java_multiple_files() { 131 override_java_multiple_files_ = JAVANANO_MUL_UNSET; 132 } 133 134 void set_java_multiple_files(const string& file_name, bool value) { 135 if (value) { 136 java_multiple_files_.insert(file_name); 137 } else { 138 java_multiple_files_.erase(file_name); 139 } 140 } 141 bool java_multiple_files(const string& file_name) const { 142 switch (override_java_multiple_files_) { 143 case JAVANANO_MUL_FALSE: 144 return false; 145 case JAVANANO_MUL_TRUE: 146 return true; 147 default: 148 return java_multiple_files_.find(file_name) 149 != java_multiple_files_.end(); 150 } 151 } 152 153 void set_store_unknown_fields(bool value) { 154 store_unknown_fields_ = value; 155 } 156 bool store_unknown_fields() const { 157 return store_unknown_fields_; 158 } 159 160 void set_generate_has(bool value) { 161 generate_has_ = value; 162 } 163 bool generate_has() const { 164 return generate_has_; 165 } 166 167 void set_java_enum_style(bool value) { 168 java_enum_style_ = value; 169 } 170 bool java_enum_style() const { 171 return java_enum_style_; 172 } 173 174 void set_optional_field_accessors(bool value) { 175 optional_field_accessors_ = value; 176 } 177 bool optional_field_accessors() const { 178 return optional_field_accessors_; 179 } 180}; 181 182} // namespace javanano 183} // namespace compiler 184} // namespace protobuf 185} // namespace google 186#endif // PROTOBUF_COMPILER_JAVANANO_JAVANANO_PARAMS_H_ 187