Skip to content

Commit bca797d

Browse files
committed
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 protocolbuffers#4301 Fixes protocolbuffers#4403
1 parent 7bf47a6 commit bca797d

13 files changed

+102
-33
lines changed

objectivec/GPBProtocolBuffers_RuntimeSupport.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
// This header is meant to only be used by the generated source, it should not
3232
// be included in code using protocol buffers.
3333

34-
#import "GPBProtocolBuffers.h"
34+
#import "GPBBootstrap.h"
3535

3636
#import "GPBDescriptor_PackagePrivate.h"
3737
#import "GPBExtensionInternals.h"

objectivec/google/protobuf/Any.pbobjc.h

+6-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

objectivec/google/protobuf/Api.pbobjc.h

+6-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

objectivec/google/protobuf/Duration.pbobjc.h

+6-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

objectivec/google/protobuf/Empty.pbobjc.h

+6-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

objectivec/google/protobuf/FieldMask.pbobjc.h

+6-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

objectivec/google/protobuf/SourceContext.pbobjc.h

+6-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

objectivec/google/protobuf/Struct.pbobjc.h

+6-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

objectivec/google/protobuf/Timestamp.pbobjc.h

+6-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

objectivec/google/protobuf/Type.pbobjc.h

+6-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

objectivec/google/protobuf/Wrappers.pbobjc.h

+6-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/google/protobuf/compiler/objectivec/objectivec_file.cc

+40-11
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,17 @@ FileGenerator::~FileGenerator() {
214214
}
215215

216216
void FileGenerator::GenerateHeader(io::Printer *printer) {
217-
PrintFileRuntimePreamble(printer, "GPBProtocolBuffers.h");
217+
std::set<string> headers;
218+
// Generated files bundled with the library get minimal imports, everything
219+
// else gets the wrapper so everything is usable.
220+
if (IsProtobufLibraryBundledProtoFile(file_)) {
221+
headers.insert("GPBRootObject.h");
222+
headers.insert("GPBMessage.h");
223+
headers.insert("GPBDescriptor.h");
224+
} else {
225+
headers.insert("GPBProtocolBuffers.h");
226+
}
227+
PrintFileRuntimePreamble(printer, headers);
218228

219229
// Add some verification that the generated code matches the source the
220230
// code is being compiled with.
@@ -337,7 +347,9 @@ void FileGenerator::GenerateHeader(io::Printer *printer) {
337347

338348
void FileGenerator::GenerateSource(io::Printer *printer) {
339349
// #import the runtime support.
340-
PrintFileRuntimePreamble(printer, "GPBProtocolBuffers_RuntimeSupport.h");
350+
std::set<string> headers;
351+
headers.insert("GPBProtocolBuffers_RuntimeSupport.h");
352+
PrintFileRuntimePreamble(printer, headers);
341353

342354
// Enums use atomic in the generated code, so add the system import as needed.
343355
if (FileContainsEnums(file_)) {
@@ -566,7 +578,7 @@ void FileGenerator::GenerateSource(io::Printer *printer) {
566578
// files. This currently only supports the runtime coming from a framework
567579
// as defined by the official CocoaPod.
568580
void FileGenerator::PrintFileRuntimePreamble(
569-
io::Printer* printer, const string& header_to_import) const {
581+
io::Printer* printer, const std::set<string>& headers_to_import) const {
570582
printer->Print(
571583
"// Generated by the protocol buffer compiler. DO NOT EDIT!\n"
572584
"// source: $filename$\n"
@@ -575,22 +587,39 @@ void FileGenerator::PrintFileRuntimePreamble(
575587

576588
const string framework_name(ProtobufLibraryFrameworkName);
577589
const string cpp_symbol(ProtobufFrameworkImportSymbol(framework_name));
590+
578591
printer->Print(
579592
"// This CPP symbol can be defined to use imports that match up to the framework\n"
580593
"// imports needed when using CocoaPods.\n"
581594
"#if !defined($cpp_symbol$)\n"
582595
" #define $cpp_symbol$ 0\n"
583596
"#endif\n"
584597
"\n"
585-
"#if $cpp_symbol$\n"
586-
" #import <$framework_name$/$header$>\n"
587-
"#else\n"
588-
" #import \"$header$\"\n"
598+
"#if $cpp_symbol$\n",
599+
"cpp_symbol", cpp_symbol);
600+
601+
602+
for (std::set<string>::const_iterator iter = headers_to_import.begin();
603+
iter != headers_to_import.end(); ++iter) {
604+
printer->Print(
605+
" #import <$framework_name$/$header$>\n",
606+
"header", *iter,
607+
"framework_name", framework_name);
608+
}
609+
610+
printer->Print(
611+
"#else\n");
612+
613+
for (std::set<string>::const_iterator iter = headers_to_import.begin();
614+
iter != headers_to_import.end(); ++iter) {
615+
printer->Print(
616+
" #import \"$header$\"\n",
617+
"header", *iter);
618+
}
619+
620+
printer->Print(
589621
"#endif\n"
590-
"\n",
591-
"cpp_symbol", cpp_symbol,
592-
"header", header_to_import,
593-
"framework_name", framework_name);
622+
"\n");
594623
}
595624

596625
} // namespace objectivec

src/google/protobuf/compiler/objectivec/objectivec_file.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ class FileGenerator {
7474
const Options options_;
7575

7676
void PrintFileRuntimePreamble(
77-
io::Printer* printer, const string& header_to_import) const;
77+
io::Printer* printer, const std::set<string>& headers_to_import) const;
7878

7979
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FileGenerator);
8080
};

0 commit comments

Comments
 (0)