OLD | NEW |
1 // Protocol Buffers - Google's data interchange format | 1 // Protocol Buffers - Google's data interchange format |
2 // Copyright 2008 Google Inc. All rights reserved. | 2 // Copyright 2008 Google Inc. All rights reserved. |
3 // https://developers.google.com/protocol-buffers/ | 3 // https://developers.google.com/protocol-buffers/ |
4 // | 4 // |
5 // Redistribution and use in source and binary forms, with or without | 5 // Redistribution and use in source and binary forms, with or without |
6 // modification, are permitted provided that the following conditions are | 6 // modification, are permitted provided that the following conditions are |
7 // met: | 7 // met: |
8 // | 8 // |
9 // * Redistributions of source code must retain the above copyright | 9 // * Redistributions of source code must retain the above copyright |
10 // notice, this list of conditions and the following disclaimer. | 10 // notice, this list of conditions and the following disclaimer. |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 if (descriptor->options().unknown_fields().field_count() > 0) return true; | 54 if (descriptor->options().unknown_fields().field_count() > 0) return true; |
55 for (int i = 0; i < descriptor->value_count(); ++i) { | 55 for (int i = 0; i < descriptor->value_count(); ++i) { |
56 const EnumValueDescriptor* value = descriptor->value(i); | 56 const EnumValueDescriptor* value = descriptor->value(i); |
57 if (value->options().unknown_fields().field_count() > 0) return true; | 57 if (value->options().unknown_fields().field_count() > 0) return true; |
58 } | 58 } |
59 return false; | 59 return false; |
60 } | 60 } |
61 } // namespace | 61 } // namespace |
62 | 62 |
63 EnumLiteGenerator::EnumLiteGenerator(const EnumDescriptor* descriptor, | 63 EnumLiteGenerator::EnumLiteGenerator(const EnumDescriptor* descriptor, |
64 bool immutable_api, Context* context) | 64 bool immutable_api, |
65 : descriptor_(descriptor), | 65 Context* context) |
66 immutable_api_(immutable_api), | 66 : descriptor_(descriptor), immutable_api_(immutable_api), |
67 context_(context), | 67 name_resolver_(context->GetNameResolver()) { |
68 name_resolver_(context->GetNameResolver()) { | |
69 for (int i = 0; i < descriptor_->value_count(); i++) { | 68 for (int i = 0; i < descriptor_->value_count(); i++) { |
70 const EnumValueDescriptor* value = descriptor_->value(i); | 69 const EnumValueDescriptor* value = descriptor_->value(i); |
71 const EnumValueDescriptor* canonical_value = | 70 const EnumValueDescriptor* canonical_value = |
72 descriptor_->FindValueByNumber(value->number()); | 71 descriptor_->FindValueByNumber(value->number()); |
73 | 72 |
74 if (value == canonical_value) { | 73 if (value == canonical_value) { |
75 canonical_values_.push_back(value); | 74 canonical_values_.push_back(value); |
76 } else { | 75 } else { |
77 Alias alias; | 76 Alias alias; |
78 alias.value = value; | 77 alias.value = value; |
79 alias.canonical_value = canonical_value; | 78 alias.canonical_value = canonical_value; |
80 aliases_.push_back(alias); | 79 aliases_.push_back(alias); |
81 } | 80 } |
82 } | 81 } |
83 } | 82 } |
84 | 83 |
85 EnumLiteGenerator::~EnumLiteGenerator() {} | 84 EnumLiteGenerator::~EnumLiteGenerator() {} |
86 | 85 |
87 void EnumLiteGenerator::Generate(io::Printer* printer) { | 86 void EnumLiteGenerator::Generate(io::Printer* printer) { |
88 WriteEnumDocComment(printer, descriptor_); | 87 WriteEnumDocComment(printer, descriptor_); |
89 MaybePrintGeneratedAnnotation(context_, printer, descriptor_, immutable_api_); | |
90 printer->Print( | 88 printer->Print( |
91 "public enum $classname$\n" | 89 "public enum $classname$\n" |
92 " implements com.google.protobuf.Internal.EnumLite {\n", | 90 " implements com.google.protobuf.Internal.EnumLite {\n", |
93 "classname", descriptor_->name()); | 91 "classname", descriptor_->name()); |
94 printer->Annotate("classname", descriptor_); | |
95 printer->Indent(); | 92 printer->Indent(); |
96 | 93 |
97 for (int i = 0; i < canonical_values_.size(); i++) { | 94 for (int i = 0; i < canonical_values_.size(); i++) { |
98 std::map<string, string> vars; | 95 map<string, string> vars; |
99 vars["name"] = canonical_values_[i]->name(); | 96 vars["name"] = canonical_values_[i]->name(); |
100 vars["number"] = SimpleItoa(canonical_values_[i]->number()); | 97 vars["number"] = SimpleItoa(canonical_values_[i]->number()); |
101 WriteEnumValueDocComment(printer, canonical_values_[i]); | 98 WriteEnumValueDocComment(printer, canonical_values_[i]); |
102 if (canonical_values_[i]->options().deprecated()) { | 99 if (canonical_values_[i]->options().deprecated()) { |
103 printer->Print("@java.lang.Deprecated\n"); | 100 printer->Print("@java.lang.Deprecated\n"); |
104 } | 101 } |
105 printer->Print(vars, | 102 printer->Print(vars, |
106 "$name$($number$),\n"); | 103 "$name$($number$),\n"); |
107 } | 104 } |
108 | 105 |
109 if (SupportUnknownEnumValue(descriptor_->file())) { | 106 if (SupportUnknownEnumValue(descriptor_->file())) { |
110 printer->Print("UNRECOGNIZED(-1),\n"); | 107 printer->Print("UNRECOGNIZED(-1),\n"); |
111 } | 108 } |
112 | 109 |
113 printer->Print( | 110 printer->Print( |
114 ";\n" | 111 ";\n" |
115 "\n"); | 112 "\n"); |
116 | 113 |
117 // ----------------------------------------------------------------- | 114 // ----------------------------------------------------------------- |
118 | 115 |
119 for (int i = 0; i < aliases_.size(); i++) { | 116 for (int i = 0; i < aliases_.size(); i++) { |
120 std::map<string, string> vars; | 117 map<string, string> vars; |
121 vars["classname"] = descriptor_->name(); | 118 vars["classname"] = descriptor_->name(); |
122 vars["name"] = aliases_[i].value->name(); | 119 vars["name"] = aliases_[i].value->name(); |
123 vars["canonical_name"] = aliases_[i].canonical_value->name(); | 120 vars["canonical_name"] = aliases_[i].canonical_value->name(); |
124 WriteEnumValueDocComment(printer, aliases_[i].value); | 121 WriteEnumValueDocComment(printer, aliases_[i].value); |
125 printer->Print(vars, | 122 printer->Print(vars, |
126 "public static final $classname$ $name$ = $canonical_name$;\n"); | 123 "public static final $classname$ $name$ = $canonical_name$;\n"); |
127 } | 124 } |
128 | 125 |
129 for (int i = 0; i < descriptor_->value_count(); i++) { | 126 for (int i = 0; i < descriptor_->value_count(); i++) { |
130 std::map<string, string> vars; | 127 map<string, string> vars; |
131 vars["name"] = descriptor_->value(i)->name(); | 128 vars["name"] = descriptor_->value(i)->name(); |
132 vars["number"] = SimpleItoa(descriptor_->value(i)->number()); | 129 vars["number"] = SimpleItoa(descriptor_->value(i)->number()); |
133 WriteEnumValueDocComment(printer, descriptor_->value(i)); | 130 WriteEnumValueDocComment(printer, descriptor_->value(i)); |
134 printer->Print(vars, | 131 printer->Print(vars, |
135 "public static final int $name$_VALUE = $number$;\n"); | 132 "public static final int $name$_VALUE = $number$;\n"); |
136 } | 133 } |
137 printer->Print("\n"); | 134 printer->Print("\n"); |
138 | 135 |
139 // ----------------------------------------------------------------- | 136 // ----------------------------------------------------------------- |
140 | 137 |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 return false; | 209 return false; |
213 } | 210 } |
214 } | 211 } |
215 return true; | 212 return true; |
216 } | 213 } |
217 | 214 |
218 } // namespace java | 215 } // namespace java |
219 } // namespace compiler | 216 } // namespace compiler |
220 } // namespace protobuf | 217 } // namespace protobuf |
221 } // namespace google | 218 } // namespace google |
OLD | NEW |