|
|
|
@ -1021,27 +1021,11 @@ bool ValidateObjCClassPrefix(const FileDescriptor* file, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// If there was no prefix option, we're done at this point.
|
|
|
|
|
if (prefix.length() == 0) { |
|
|
|
|
if (prefix.empty()) { |
|
|
|
|
// No prefix, nothing left to check.
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Check: Error - Make sure the prefix wasn't expected for a different
|
|
|
|
|
// package (overlap is allowed, but it has to be listed as an expected
|
|
|
|
|
// overlap).
|
|
|
|
|
for (map<string, string>::iterator i = expected_package_prefixes.begin(); |
|
|
|
|
i != expected_package_prefixes.end(); ++i) { |
|
|
|
|
if (i->second == prefix) { |
|
|
|
|
*out_error = |
|
|
|
|
"error: Found 'option objc_class_prefix = \"" + prefix + |
|
|
|
|
"\";' in '" + file->name() + |
|
|
|
|
"'; that prefix is already used for 'package " + i->first + |
|
|
|
|
";'. It can only be reused by listing it in the expected file (" + |
|
|
|
|
generation_options.expected_prefixes_path + ")."; |
|
|
|
|
return false; // Only report first usage of the prefix.
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Check: Warning - Make sure the prefix is is a reasonable value according
|
|
|
|
|
// to Apple's rules (the checks above implicitly whitelist anything that
|
|
|
|
|
// doesn't meet these rules).
|
|
|
|
@ -1063,6 +1047,56 @@ bool ValidateObjCClassPrefix(const FileDescriptor* file, |
|
|
|
|
cerr.flush(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 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(); |
|
|
|
|
i != expected_package_prefixes.end(); ++i) { |
|
|
|
|
if (i->second == prefix) { |
|
|
|
|
other_package_for_prefix = i->first; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Check: Warning - If the file does not have a package, check whether
|
|
|
|
|
// the prefix declared is being used by another package or not.
|
|
|
|
|
if (package.empty()) { |
|
|
|
|
// The file does not have a package and ...
|
|
|
|
|
if (other_package_for_prefix.empty()) { |
|
|
|
|
// ... no other package has declared that prefix.
|
|
|
|
|
cerr << endl |
|
|
|
|
<< "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; |
|
|
|
|
cerr.flush(); |
|
|
|
|
} else { |
|
|
|
|
// ... another package has declared the same prefix.
|
|
|
|
|
cerr << endl |
|
|
|
|
<< "protoc:0: warning: File '" << file->name() << "' has no package " |
|
|
|
|
<< "and package '" << other_package_for_prefix << "' already uses '" |
|
|
|
|
<< 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; |
|
|
|
|
cerr.flush(); |
|
|
|
|
} |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Check: Error - Make sure the prefix wasn't expected for a different
|
|
|
|
|
// package (overlap is allowed, but it has to be listed as an expected
|
|
|
|
|
// overlap).
|
|
|
|
|
if (!other_package_for_prefix.empty()) { |
|
|
|
|
*out_error = |
|
|
|
|
"error: Found 'option objc_class_prefix = \"" + prefix + |
|
|
|
|
"\";' in '" + file->name() + |
|
|
|
|
"'; 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 + ")."; |
|
|
|
|
return false; // Only report first usage of the prefix.
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Check: Warning - If the given package/prefix pair wasn't expected, issue a
|
|
|
|
|
// warning issue a warning suggesting it gets added to the file.
|
|
|
|
|
if (!expected_package_prefixes.empty()) { |
|
|
|
|