1 // Protocol Buffers - Google's data interchange format 2 // Copyright 2010 Google Inc. All rights reserved. 3 // http://code.google.com/p/protobuf/ 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 // Author: wink@google.com (Wink Saville) 32 33 #ifndef PROTOBUF_COMPILER_JAVANANO_JAVANANO_PARAMS_H_ 34 #define PROTOBUF_COMPILER_JAVANANO_JAVANANO_PARAMS_H_ 35 36 #include <map> 37 #include <set> 38 #include <google/protobuf/stubs/strutil.h> 39 40 namespace google { 41 namespace protobuf { 42 namespace compiler { 43 namespace javanano { 44 45 enum eMultipleFiles { JAVANANO_MUL_UNSET, JAVANANO_MUL_FALSE, JAVANANO_MUL_TRUE }; 46 47 // Parameters for used by the generators 48 class Params { 49 public: 50 typedef map<string, string> NameMap; 51 typedef set<string> NameSet; 52 private: 53 string empty_; 54 string base_name_; 55 eMultipleFiles override_java_multiple_files_; 56 bool store_unknown_fields_; 57 NameMap java_packages_; 58 NameMap java_outer_classnames_; 59 NameSet java_multiple_files_; 60 bool generate_has_; 61 bool java_enum_style_; 62 bool optional_field_accessors_; 63 bool use_reference_types_for_primitives_; 64 bool generate_equals_; 65 bool ignore_services_; 66 bool parcelable_messages_; 67 bool reftypes_primitive_enums_; 68 bool generate_clear_; 69 bool generate_clone_; 70 bool generate_intdefs_; 71 72 public: Params(const string & base_name)73 Params(const string & base_name) : 74 empty_(""), 75 base_name_(base_name), 76 override_java_multiple_files_(JAVANANO_MUL_UNSET), 77 store_unknown_fields_(false), 78 generate_has_(false), 79 java_enum_style_(false), 80 optional_field_accessors_(false), 81 use_reference_types_for_primitives_(false), 82 generate_equals_(false), 83 ignore_services_(false), 84 parcelable_messages_(false), 85 reftypes_primitive_enums_(false), 86 generate_clear_(true), 87 generate_clone_(false), 88 generate_intdefs_(false) { 89 } 90 base_name()91 const string& base_name() const { 92 return base_name_; 93 } 94 has_java_package(const string & file_name)95 bool has_java_package(const string& file_name) const { 96 return java_packages_.find(file_name) 97 != java_packages_.end(); 98 } set_java_package(const string & file_name,const string & java_package)99 void set_java_package(const string& file_name, 100 const string& java_package) { 101 java_packages_[file_name] = java_package; 102 } java_package(const string & file_name)103 const string& java_package(const string& file_name) const { 104 NameMap::const_iterator itr; 105 106 itr = java_packages_.find(file_name); 107 if (itr == java_packages_.end()) { 108 return empty_; 109 } else { 110 return itr->second; 111 } 112 } java_packages()113 const NameMap& java_packages() { 114 return java_packages_; 115 } 116 has_java_outer_classname(const string & file_name)117 bool has_java_outer_classname(const string& file_name) const { 118 return java_outer_classnames_.find(file_name) 119 != java_outer_classnames_.end(); 120 } set_java_outer_classname(const string & file_name,const string & java_outer_classname)121 void set_java_outer_classname(const string& file_name, 122 const string& java_outer_classname) { 123 java_outer_classnames_[file_name] = java_outer_classname; 124 } java_outer_classname(const string & file_name)125 const string& java_outer_classname(const string& file_name) const { 126 NameMap::const_iterator itr; 127 128 itr = java_outer_classnames_.find(file_name); 129 if (itr == java_outer_classnames_.end()) { 130 return empty_; 131 } else { 132 return itr->second; 133 } 134 } java_outer_classnames()135 const NameMap& java_outer_classnames() { 136 return java_outer_classnames_; 137 } 138 set_override_java_multiple_files(bool java_multiple_files)139 void set_override_java_multiple_files(bool java_multiple_files) { 140 if (java_multiple_files) { 141 override_java_multiple_files_ = JAVANANO_MUL_TRUE; 142 } else { 143 override_java_multiple_files_ = JAVANANO_MUL_FALSE; 144 } 145 } clear_override_java_multiple_files()146 void clear_override_java_multiple_files() { 147 override_java_multiple_files_ = JAVANANO_MUL_UNSET; 148 } 149 set_java_multiple_files(const string & file_name,bool value)150 void set_java_multiple_files(const string& file_name, bool value) { 151 if (value) { 152 java_multiple_files_.insert(file_name); 153 } else { 154 java_multiple_files_.erase(file_name); 155 } 156 } java_multiple_files(const string & file_name)157 bool java_multiple_files(const string& file_name) const { 158 switch (override_java_multiple_files_) { 159 case JAVANANO_MUL_FALSE: 160 return false; 161 case JAVANANO_MUL_TRUE: 162 return true; 163 default: 164 return java_multiple_files_.find(file_name) 165 != java_multiple_files_.end(); 166 } 167 } 168 set_store_unknown_fields(bool value)169 void set_store_unknown_fields(bool value) { 170 store_unknown_fields_ = value; 171 } store_unknown_fields()172 bool store_unknown_fields() const { 173 return store_unknown_fields_; 174 } 175 set_generate_has(bool value)176 void set_generate_has(bool value) { 177 generate_has_ = value; 178 } generate_has()179 bool generate_has() const { 180 return generate_has_; 181 } 182 set_java_enum_style(bool value)183 void set_java_enum_style(bool value) { 184 java_enum_style_ = value; 185 } java_enum_style()186 bool java_enum_style() const { 187 return java_enum_style_; 188 } 189 set_optional_field_accessors(bool value)190 void set_optional_field_accessors(bool value) { 191 optional_field_accessors_ = value; 192 } optional_field_accessors()193 bool optional_field_accessors() const { 194 return optional_field_accessors_; 195 } 196 set_use_reference_types_for_primitives(bool value)197 void set_use_reference_types_for_primitives(bool value) { 198 use_reference_types_for_primitives_ = value; 199 } use_reference_types_for_primitives()200 bool use_reference_types_for_primitives() const { 201 return use_reference_types_for_primitives_; 202 } 203 set_generate_equals(bool value)204 void set_generate_equals(bool value) { 205 generate_equals_ = value; 206 } generate_equals()207 bool generate_equals() const { 208 return generate_equals_; 209 } 210 set_ignore_services(bool value)211 void set_ignore_services(bool value) { 212 ignore_services_ = value; 213 } ignore_services()214 bool ignore_services() const { 215 return ignore_services_; 216 } 217 set_parcelable_messages(bool value)218 void set_parcelable_messages(bool value) { 219 parcelable_messages_ = value; 220 } parcelable_messages()221 bool parcelable_messages() const { 222 return parcelable_messages_; 223 } 224 set_reftypes_primitive_enums(bool value)225 void set_reftypes_primitive_enums(bool value) { 226 reftypes_primitive_enums_ = value; 227 } reftypes_primitive_enums()228 bool reftypes_primitive_enums() const { 229 return reftypes_primitive_enums_; 230 } 231 set_generate_clear(bool value)232 void set_generate_clear(bool value) { 233 generate_clear_ = value; 234 } generate_clear()235 bool generate_clear() const { 236 return generate_clear_; 237 } 238 set_generate_clone(bool value)239 void set_generate_clone(bool value) { 240 generate_clone_ = value; 241 } generate_clone()242 bool generate_clone() const { 243 return generate_clone_; 244 } 245 set_generate_intdefs(bool value)246 void set_generate_intdefs(bool value) { 247 generate_intdefs_ = value; 248 } generate_intdefs()249 bool generate_intdefs() const { 250 return generate_intdefs_; 251 } 252 }; 253 254 } // namespace javanano 255 } // namespace compiler 256 } // namespace protobuf 257 } // namespace google 258 #endif // PROTOBUF_COMPILER_JAVANANO_JAVANANO_PARAMS_H_ 259