|
@@ -980,28 +980,20 @@ bool LoadExpectedPackagePrefixes(const Options &generation_options,
|
|
|
generation_options.expected_prefixes_path, &collector, out_error);
|
|
|
}
|
|
|
|
|
|
-} // namespace
|
|
|
-
|
|
|
-bool ValidateObjCClassPrefix(const FileDescriptor* file,
|
|
|
- const Options& generation_options,
|
|
|
- string* out_error) {
|
|
|
+bool ValidateObjCClassPrefix(
|
|
|
+ const FileDescriptor* file,
|
|
|
+ const string& expected_prefixes_path,
|
|
|
+ const map<string, string>& expected_package_prefixes,
|
|
|
+ string* out_error) {
|
|
|
const string prefix = file->options().objc_class_prefix();
|
|
|
const string package = file->package();
|
|
|
|
|
|
// NOTE: src/google/protobuf/compiler/plugin.cc makes use of cerr for some
|
|
|
// error cases, so it seems to be ok to use as a back door for warnings.
|
|
|
|
|
|
- // Load any expected package prefixes to validate against those.
|
|
|
- map<string, string> expected_package_prefixes;
|
|
|
- if (!LoadExpectedPackagePrefixes(generation_options,
|
|
|
- &expected_package_prefixes,
|
|
|
- out_error)) {
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
// Check: Error - See if there was an expected prefix for the package and
|
|
|
// report if it doesn't match (wrong or missing).
|
|
|
- map<string, string>::iterator package_match =
|
|
|
+ map<string, string>::const_iterator package_match =
|
|
|
expected_package_prefixes.find(package);
|
|
|
if (package_match != expected_package_prefixes.end()) {
|
|
|
// There was an entry, and...
|
|
@@ -1050,7 +1042,7 @@ bool ValidateObjCClassPrefix(const FileDescriptor* file,
|
|
|
|
|
|
// Look for any other package that uses the same prefix.
|
|
|
string other_package_for_prefix;
|
|
|
- for (map<string, string>::iterator i = expected_package_prefixes.begin();
|
|
|
+ for (map<string, string>::const_iterator i = expected_package_prefixes.begin();
|
|
|
i != expected_package_prefixes.end(); ++i) {
|
|
|
if (i->second == prefix) {
|
|
|
other_package_for_prefix = i->first;
|
|
@@ -1068,7 +1060,7 @@ bool ValidateObjCClassPrefix(const FileDescriptor* file,
|
|
|
<< "protoc:0: warning: File '" << file->name() << "' has no "
|
|
|
<< "package. Consider adding a new package to the proto and adding '"
|
|
|
<< "new.package = " << prefix << "' to the expected prefixes file ("
|
|
|
- << generation_options.expected_prefixes_path << ")." << endl;
|
|
|
+ << expected_prefixes_path << ")." << endl;
|
|
|
cerr.flush();
|
|
|
} else {
|
|
|
// ... another package has declared the same prefix.
|
|
@@ -1078,7 +1070,7 @@ bool ValidateObjCClassPrefix(const FileDescriptor* file,
|
|
|
<< prefix << "' as its prefix. Consider either adding a new package "
|
|
|
<< "to the proto, or reusing one of the packages already using this "
|
|
|
<< "prefix in the expected prefixes file ("
|
|
|
- << generation_options.expected_prefixes_path << ")." << endl;
|
|
|
+ << expected_prefixes_path << ")." << endl;
|
|
|
cerr.flush();
|
|
|
}
|
|
|
return true;
|
|
@@ -1094,7 +1086,7 @@ bool ValidateObjCClassPrefix(const FileDescriptor* file,
|
|
|
"'; that prefix is already used for 'package " +
|
|
|
other_package_for_prefix + ";'. It can only be reused by listing " +
|
|
|
"it in the expected file (" +
|
|
|
- generation_options.expected_prefixes_path + ").";
|
|
|
+ expected_prefixes_path + ").";
|
|
|
return false; // Only report first usage of the prefix.
|
|
|
}
|
|
|
|
|
@@ -1105,13 +1097,39 @@ bool ValidateObjCClassPrefix(const FileDescriptor* file,
|
|
|
<< "protoc:0: warning: Found unexpected 'option objc_class_prefix = \""
|
|
|
<< prefix << "\";' in '" << file->name() << "';"
|
|
|
<< " consider adding it to the expected prefixes file ("
|
|
|
- << generation_options.expected_prefixes_path << ")." << endl;
|
|
|
+ << expected_prefixes_path << ")." << endl;
|
|
|
cerr.flush();
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+} // namespace
|
|
|
+
|
|
|
+bool ValidateObjCClassPrefixes(const vector<const FileDescriptor*>& files,
|
|
|
+ const Options& generation_options,
|
|
|
+ string* out_error) {
|
|
|
+ // Load the expected package prefixes, if available, to validate against.
|
|
|
+ map<string, string> expected_package_prefixes;
|
|
|
+ if (!LoadExpectedPackagePrefixes(generation_options,
|
|
|
+ &expected_package_prefixes,
|
|
|
+ out_error)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ for (int i = 0; i < files.size(); i++) {
|
|
|
+ bool is_valid =
|
|
|
+ ValidateObjCClassPrefix(files[i],
|
|
|
+ generation_options.expected_prefixes_path,
|
|
|
+ expected_package_prefixes,
|
|
|
+ out_error);
|
|
|
+ if (!is_valid) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+}
|
|
|
+
|
|
|
TextFormatDecodeData::TextFormatDecodeData() { }
|
|
|
|
|
|
TextFormatDecodeData::~TextFormatDecodeData() { }
|