Trim imports for bundled generated protos.
To avoid a cycle between headers, have the WKTs use minimal imports instead of using the helper to get everything from the library. Fixes https://github.com/google/protobuf/issues/4301 Fixes https://github.com/google/protobuf/issues/4403
This commit is contained in:
parent
7bf47a6b5d
commit
bca797dac9
@ -31,7 +31,7 @@
|
||||
// This header is meant to only be used by the generated source, it should not
|
||||
// be included in code using protocol buffers.
|
||||
|
||||
#import "GPBProtocolBuffers.h"
|
||||
#import "GPBBootstrap.h"
|
||||
|
||||
#import "GPBDescriptor_PackagePrivate.h"
|
||||
#import "GPBExtensionInternals.h"
|
||||
|
@ -8,9 +8,13 @@
|
||||
#endif
|
||||
|
||||
#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS
|
||||
#import <Protobuf/GPBProtocolBuffers.h>
|
||||
#import <Protobuf/GPBDescriptor.h>
|
||||
#import <Protobuf/GPBMessage.h>
|
||||
#import <Protobuf/GPBRootObject.h>
|
||||
#else
|
||||
#import "GPBProtocolBuffers.h"
|
||||
#import "GPBDescriptor.h"
|
||||
#import "GPBMessage.h"
|
||||
#import "GPBRootObject.h"
|
||||
#endif
|
||||
|
||||
#if GOOGLE_PROTOBUF_OBJC_VERSION < 30002
|
||||
|
@ -8,9 +8,13 @@
|
||||
#endif
|
||||
|
||||
#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS
|
||||
#import <Protobuf/GPBProtocolBuffers.h>
|
||||
#import <Protobuf/GPBDescriptor.h>
|
||||
#import <Protobuf/GPBMessage.h>
|
||||
#import <Protobuf/GPBRootObject.h>
|
||||
#else
|
||||
#import "GPBProtocolBuffers.h"
|
||||
#import "GPBDescriptor.h"
|
||||
#import "GPBMessage.h"
|
||||
#import "GPBRootObject.h"
|
||||
#endif
|
||||
|
||||
#if GOOGLE_PROTOBUF_OBJC_VERSION < 30002
|
||||
|
@ -8,9 +8,13 @@
|
||||
#endif
|
||||
|
||||
#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS
|
||||
#import <Protobuf/GPBProtocolBuffers.h>
|
||||
#import <Protobuf/GPBDescriptor.h>
|
||||
#import <Protobuf/GPBMessage.h>
|
||||
#import <Protobuf/GPBRootObject.h>
|
||||
#else
|
||||
#import "GPBProtocolBuffers.h"
|
||||
#import "GPBDescriptor.h"
|
||||
#import "GPBMessage.h"
|
||||
#import "GPBRootObject.h"
|
||||
#endif
|
||||
|
||||
#if GOOGLE_PROTOBUF_OBJC_VERSION < 30002
|
||||
|
@ -8,9 +8,13 @@
|
||||
#endif
|
||||
|
||||
#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS
|
||||
#import <Protobuf/GPBProtocolBuffers.h>
|
||||
#import <Protobuf/GPBDescriptor.h>
|
||||
#import <Protobuf/GPBMessage.h>
|
||||
#import <Protobuf/GPBRootObject.h>
|
||||
#else
|
||||
#import "GPBProtocolBuffers.h"
|
||||
#import "GPBDescriptor.h"
|
||||
#import "GPBMessage.h"
|
||||
#import "GPBRootObject.h"
|
||||
#endif
|
||||
|
||||
#if GOOGLE_PROTOBUF_OBJC_VERSION < 30002
|
||||
|
@ -8,9 +8,13 @@
|
||||
#endif
|
||||
|
||||
#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS
|
||||
#import <Protobuf/GPBProtocolBuffers.h>
|
||||
#import <Protobuf/GPBDescriptor.h>
|
||||
#import <Protobuf/GPBMessage.h>
|
||||
#import <Protobuf/GPBRootObject.h>
|
||||
#else
|
||||
#import "GPBProtocolBuffers.h"
|
||||
#import "GPBDescriptor.h"
|
||||
#import "GPBMessage.h"
|
||||
#import "GPBRootObject.h"
|
||||
#endif
|
||||
|
||||
#if GOOGLE_PROTOBUF_OBJC_VERSION < 30002
|
||||
|
@ -8,9 +8,13 @@
|
||||
#endif
|
||||
|
||||
#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS
|
||||
#import <Protobuf/GPBProtocolBuffers.h>
|
||||
#import <Protobuf/GPBDescriptor.h>
|
||||
#import <Protobuf/GPBMessage.h>
|
||||
#import <Protobuf/GPBRootObject.h>
|
||||
#else
|
||||
#import "GPBProtocolBuffers.h"
|
||||
#import "GPBDescriptor.h"
|
||||
#import "GPBMessage.h"
|
||||
#import "GPBRootObject.h"
|
||||
#endif
|
||||
|
||||
#if GOOGLE_PROTOBUF_OBJC_VERSION < 30002
|
||||
|
@ -8,9 +8,13 @@
|
||||
#endif
|
||||
|
||||
#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS
|
||||
#import <Protobuf/GPBProtocolBuffers.h>
|
||||
#import <Protobuf/GPBDescriptor.h>
|
||||
#import <Protobuf/GPBMessage.h>
|
||||
#import <Protobuf/GPBRootObject.h>
|
||||
#else
|
||||
#import "GPBProtocolBuffers.h"
|
||||
#import "GPBDescriptor.h"
|
||||
#import "GPBMessage.h"
|
||||
#import "GPBRootObject.h"
|
||||
#endif
|
||||
|
||||
#if GOOGLE_PROTOBUF_OBJC_VERSION < 30002
|
||||
|
@ -8,9 +8,13 @@
|
||||
#endif
|
||||
|
||||
#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS
|
||||
#import <Protobuf/GPBProtocolBuffers.h>
|
||||
#import <Protobuf/GPBDescriptor.h>
|
||||
#import <Protobuf/GPBMessage.h>
|
||||
#import <Protobuf/GPBRootObject.h>
|
||||
#else
|
||||
#import "GPBProtocolBuffers.h"
|
||||
#import "GPBDescriptor.h"
|
||||
#import "GPBMessage.h"
|
||||
#import "GPBRootObject.h"
|
||||
#endif
|
||||
|
||||
#if GOOGLE_PROTOBUF_OBJC_VERSION < 30002
|
||||
|
@ -8,9 +8,13 @@
|
||||
#endif
|
||||
|
||||
#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS
|
||||
#import <Protobuf/GPBProtocolBuffers.h>
|
||||
#import <Protobuf/GPBDescriptor.h>
|
||||
#import <Protobuf/GPBMessage.h>
|
||||
#import <Protobuf/GPBRootObject.h>
|
||||
#else
|
||||
#import "GPBProtocolBuffers.h"
|
||||
#import "GPBDescriptor.h"
|
||||
#import "GPBMessage.h"
|
||||
#import "GPBRootObject.h"
|
||||
#endif
|
||||
|
||||
#if GOOGLE_PROTOBUF_OBJC_VERSION < 30002
|
||||
|
@ -8,9 +8,13 @@
|
||||
#endif
|
||||
|
||||
#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS
|
||||
#import <Protobuf/GPBProtocolBuffers.h>
|
||||
#import <Protobuf/GPBDescriptor.h>
|
||||
#import <Protobuf/GPBMessage.h>
|
||||
#import <Protobuf/GPBRootObject.h>
|
||||
#else
|
||||
#import "GPBProtocolBuffers.h"
|
||||
#import "GPBDescriptor.h"
|
||||
#import "GPBMessage.h"
|
||||
#import "GPBRootObject.h"
|
||||
#endif
|
||||
|
||||
#if GOOGLE_PROTOBUF_OBJC_VERSION < 30002
|
||||
|
@ -214,7 +214,17 @@ FileGenerator::~FileGenerator() {
|
||||
}
|
||||
|
||||
void FileGenerator::GenerateHeader(io::Printer *printer) {
|
||||
PrintFileRuntimePreamble(printer, "GPBProtocolBuffers.h");
|
||||
std::set<string> headers;
|
||||
// Generated files bundled with the library get minimal imports, everything
|
||||
// else gets the wrapper so everything is usable.
|
||||
if (IsProtobufLibraryBundledProtoFile(file_)) {
|
||||
headers.insert("GPBRootObject.h");
|
||||
headers.insert("GPBMessage.h");
|
||||
headers.insert("GPBDescriptor.h");
|
||||
} else {
|
||||
headers.insert("GPBProtocolBuffers.h");
|
||||
}
|
||||
PrintFileRuntimePreamble(printer, headers);
|
||||
|
||||
// Add some verification that the generated code matches the source the
|
||||
// code is being compiled with.
|
||||
@ -337,7 +347,9 @@ void FileGenerator::GenerateHeader(io::Printer *printer) {
|
||||
|
||||
void FileGenerator::GenerateSource(io::Printer *printer) {
|
||||
// #import the runtime support.
|
||||
PrintFileRuntimePreamble(printer, "GPBProtocolBuffers_RuntimeSupport.h");
|
||||
std::set<string> headers;
|
||||
headers.insert("GPBProtocolBuffers_RuntimeSupport.h");
|
||||
PrintFileRuntimePreamble(printer, headers);
|
||||
|
||||
// Enums use atomic in the generated code, so add the system import as needed.
|
||||
if (FileContainsEnums(file_)) {
|
||||
@ -566,7 +578,7 @@ void FileGenerator::GenerateSource(io::Printer *printer) {
|
||||
// files. This currently only supports the runtime coming from a framework
|
||||
// as defined by the official CocoaPod.
|
||||
void FileGenerator::PrintFileRuntimePreamble(
|
||||
io::Printer* printer, const string& header_to_import) const {
|
||||
io::Printer* printer, const std::set<string>& headers_to_import) const {
|
||||
printer->Print(
|
||||
"// Generated by the protocol buffer compiler. DO NOT EDIT!\n"
|
||||
"// source: $filename$\n"
|
||||
@ -575,6 +587,7 @@ void FileGenerator::PrintFileRuntimePreamble(
|
||||
|
||||
const string framework_name(ProtobufLibraryFrameworkName);
|
||||
const string cpp_symbol(ProtobufFrameworkImportSymbol(framework_name));
|
||||
|
||||
printer->Print(
|
||||
"// This CPP symbol can be defined to use imports that match up to the framework\n"
|
||||
"// imports needed when using CocoaPods.\n"
|
||||
@ -582,15 +595,31 @@ void FileGenerator::PrintFileRuntimePreamble(
|
||||
" #define $cpp_symbol$ 0\n"
|
||||
"#endif\n"
|
||||
"\n"
|
||||
"#if $cpp_symbol$\n"
|
||||
" #import <$framework_name$/$header$>\n"
|
||||
"#else\n"
|
||||
" #import \"$header$\"\n"
|
||||
"#if $cpp_symbol$\n",
|
||||
"cpp_symbol", cpp_symbol);
|
||||
|
||||
|
||||
for (std::set<string>::const_iterator iter = headers_to_import.begin();
|
||||
iter != headers_to_import.end(); ++iter) {
|
||||
printer->Print(
|
||||
" #import <$framework_name$/$header$>\n",
|
||||
"header", *iter,
|
||||
"framework_name", framework_name);
|
||||
}
|
||||
|
||||
printer->Print(
|
||||
"#else\n");
|
||||
|
||||
for (std::set<string>::const_iterator iter = headers_to_import.begin();
|
||||
iter != headers_to_import.end(); ++iter) {
|
||||
printer->Print(
|
||||
" #import \"$header$\"\n",
|
||||
"header", *iter);
|
||||
}
|
||||
|
||||
printer->Print(
|
||||
"#endif\n"
|
||||
"\n",
|
||||
"cpp_symbol", cpp_symbol,
|
||||
"header", header_to_import,
|
||||
"framework_name", framework_name);
|
||||
"\n");
|
||||
}
|
||||
|
||||
} // namespace objectivec
|
||||
|
@ -74,7 +74,7 @@ class FileGenerator {
|
||||
const Options options_;
|
||||
|
||||
void PrintFileRuntimePreamble(
|
||||
io::Printer* printer, const string& header_to_import) const;
|
||||
io::Printer* printer, const std::set<string>& headers_to_import) const;
|
||||
|
||||
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FileGenerator);
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user