Skip to content

Commit 277bf72

Browse files
mkruskal-googlecopybara-github
authored andcommitted
BEGIN_PUBLIC
Add support for edition 2024 This also rips out some of the duplicated logic for java class naming by using the helpers exposed by the protobuf java generator. There is likely a lot more that could be cleaned up, but this is the minimal required to handle edition 2024 features. END_PUBLIC PiperOrigin-RevId: 826713943
1 parent c07f723 commit 277bf72

16 files changed

Lines changed: 155 additions & 237 deletions

protobuf/compiler/src/google/protobuf/compiler/j2objc/common.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@
5454
#include "google/protobuf/compiler/code_generator.h"
5555
#include "google/protobuf/descriptor.h"
5656
#include "google/protobuf/descriptor.pb.h"
57+
#include "google/protobuf/compiler/java/helpers.h"
58+
#include "google/protobuf/compiler/java/names.h"
5759
#include "google/protobuf/io/printer.h"
5860
#include "google/protobuf/io/strtod.h"
5961
#include "google/protobuf/io/zero_copy_stream.h"

protobuf/compiler/src/google/protobuf/compiler/j2objc/j2objc_file.cc

Lines changed: 83 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -98,12 +98,12 @@ void PrintForwardDeclarations(const std::set<std::string>* declarations,
9898

9999
FileGenerator::FileGenerator(const FileDescriptor* file, bool enforce_lite)
100100
: file_(file),
101-
classname_(FileClassName(file)),
101+
classname_(java::FileClassName(file)),
102102
enforce_lite_(enforce_lite) {
103103
if (IsGenerateFileDirMapping()) {
104104
output_dir_ = FileParentDir(file);
105105
} else {
106-
output_dir_ = JavaPackageToDir(FileJavaPackage(file));
106+
output_dir_ = JavaPackageToDir(java::FileJavaPackage(file));
107107
}
108108
}
109109

@@ -161,20 +161,21 @@ void FileGenerator::GenerateHeader(GeneratorContext* context) {
161161
}
162162
declarations.insert("@class ComGoogleProtobufExtensionRegistryLite");
163163

164-
if (!GenerateMultipleFiles()) {
165-
for (int i = 0; i < file_->message_type_count(); i++) {
166-
std::unique_ptr<MessageGenerator> generator;
167-
if (enforce_lite_) {
168-
generator =
169-
std::make_unique<MessageLiteGenerator>(file_->message_type(i));
170-
} else {
171-
generator = std::make_unique<MessageGenerator>(file_->message_type(i));
172-
}
173-
generator->CollectMessageOrBuilderImports(&headers);
174-
generator->CollectHeaderImports(&headers);
175-
generator->CollectForwardDeclarations(&declarations);
176-
generator->CollectMessageOrBuilderForwardDeclarations(&declarations);
164+
for (int i = 0; i < file_->message_type_count(); i++) {
165+
if (GenerateMultipleFiles(file_->message_type(i))) {
166+
continue;
167+
}
168+
std::unique_ptr<MessageGenerator> generator;
169+
if (enforce_lite_) {
170+
generator =
171+
std::make_unique<MessageLiteGenerator>(file_->message_type(i));
172+
} else {
173+
generator = std::make_unique<MessageGenerator>(file_->message_type(i));
177174
}
175+
generator->CollectMessageOrBuilderImports(&headers);
176+
generator->CollectHeaderImports(&headers);
177+
generator->CollectForwardDeclarations(&declarations);
178+
generator->CollectMessageOrBuilderForwardDeclarations(&declarations);
178179
}
179180

180181
PrintImports(&headers, &printer);
@@ -242,22 +243,26 @@ void FileGenerator::GenerateHeader(GeneratorContext* context) {
242243
ExtensionGenerator(file_->extension(i)).GenerateMembersHeader(&printer);
243244
}
244245

245-
if (!GenerateMultipleFiles()) {
246-
for (int i = 0; i < file_->enum_type_count(); i++) {
247-
EnumGenerator(file_->enum_type(i)).GenerateHeader(&printer);
246+
for (int i = 0; i < file_->enum_type_count(); i++) {
247+
if (GenerateMultipleFiles(file_->enum_type(i))) {
248+
continue;
248249
}
250+
EnumGenerator(file_->enum_type(i)).GenerateHeader(&printer);
251+
}
249252

250-
for (int i = 0; i < file_->message_type_count(); i++) {
251-
std::unique_ptr<MessageGenerator> generator;
252-
if (enforce_lite_) {
253-
generator =
254-
std::make_unique<MessageLiteGenerator>(file_->message_type(i));
255-
} else {
256-
generator = std::make_unique<MessageGenerator>(file_->message_type(i));
257-
}
258-
generator->GenerateMessageOrBuilder(&printer);
259-
generator->GenerateHeader(&printer);
253+
for (int i = 0; i < file_->message_type_count(); i++) {
254+
if (GenerateMultipleFiles(file_->message_type(i))) {
255+
continue;
256+
}
257+
std::unique_ptr<MessageGenerator> generator;
258+
if (enforce_lite_) {
259+
generator =
260+
std::make_unique<MessageLiteGenerator>(file_->message_type(i));
261+
} else {
262+
generator = std::make_unique<MessageGenerator>(file_->message_type(i));
260263
}
264+
generator->GenerateMessageOrBuilder(&printer);
265+
generator->GenerateHeader(&printer);
261266
}
262267
printer.Print(
263268
"\n"
@@ -279,22 +284,27 @@ void FileGenerator::GenerateSource(GeneratorContext* context) {
279284
headers.insert("com/google/protobuf/ExtensionRegistry.h");
280285
}
281286
headers.insert("com/google/protobuf/ExtensionRegistryLite.h");
282-
if (GenerateMultipleFiles()) {
283-
for (int i = 0; i < file_->message_type_count(); i++) {
287+
for (int i = 0; i < file_->message_type_count(); i++) {
288+
if (GenerateMultipleFiles(file_->message_type(i))) {
284289
headers.insert(GetHeader(file_->message_type(i)));
285290
}
286-
} else {
287-
for (int i = 0; i < file_->message_type_count(); i++) {
288-
if (enforce_lite_) {
289-
MessageLiteGenerator(file_->message_type(i))
290-
.CollectSourceImports(&headers);
291-
} else {
292-
MessageGenerator(file_->message_type(i)).CollectSourceImports(&headers);
293-
}
291+
}
292+
for (int i = 0; i < file_->message_type_count(); i++) {
293+
if (GenerateMultipleFiles(file_->message_type(i))) {
294+
continue;
294295
}
295-
for (int i = 0; i < file_->enum_type_count(); i++) {
296-
EnumGenerator(file_->enum_type(i)).CollectSourceImports(&headers);
296+
if (enforce_lite_) {
297+
MessageLiteGenerator(file_->message_type(i))
298+
.CollectSourceImports(&headers);
299+
} else {
300+
MessageGenerator(file_->message_type(i)).CollectSourceImports(&headers);
301+
}
302+
}
303+
for (int i = 0; i < file_->enum_type_count(); i++) {
304+
if (GenerateMultipleFiles(file_->enum_type(i))) {
305+
continue;
297306
}
307+
EnumGenerator(file_->enum_type(i)).CollectSourceImports(&headers);
298308
}
299309
for (int i = 0; i < file_->extension_count(); i++) {
300310
ExtensionGenerator(file_->extension(i)).CollectSourceImports(&headers);
@@ -402,16 +412,20 @@ void FileGenerator::GenerateSource(GeneratorContext* context) {
402412
printer.Outdent();
403413
printer.Print("}\n");
404414

405-
if (!GenerateMultipleFiles()) {
406-
for (int i = 0; i < file_->enum_type_count(); i++) {
407-
EnumGenerator(file_->enum_type(i)).GenerateSource(&printer);
415+
for (int i = 0; i < file_->enum_type_count(); i++) {
416+
if (GenerateMultipleFiles(file_->enum_type(i))) {
417+
continue;
408418
}
409-
for (int i = 0; i < file_->message_type_count(); i++) {
410-
if (enforce_lite_) {
411-
MessageLiteGenerator(file_->message_type(i)).GenerateSource(&printer);
412-
} else {
413-
MessageGenerator(file_->message_type(i)).GenerateSource(&printer);
414-
}
419+
EnumGenerator(file_->enum_type(i)).GenerateSource(&printer);
420+
}
421+
for (int i = 0; i < file_->message_type_count(); i++) {
422+
if (GenerateMultipleFiles(file_->message_type(i))) {
423+
continue;
424+
}
425+
if (enforce_lite_) {
426+
MessageLiteGenerator(file_->message_type(i)).GenerateSource(&printer);
427+
} else {
428+
MessageGenerator(file_->message_type(i)).GenerateSource(&printer);
415429
}
416430
}
417431
}
@@ -528,21 +542,31 @@ void FileGenerator::GenerateMessageOrBuilder(
528542
}
529543

530544
void FileGenerator::GenerateSiblings(GeneratorContext* context) {
531-
if (GenerateMultipleFiles()) {
532-
for (int i = 0; i < file_->enum_type_count(); i++) {
533-
GenerateEnumHeader(context, file_->enum_type(i));
534-
GenerateEnumSource(context, file_->enum_type(i));
545+
for (int i = 0; i < file_->enum_type_count(); i++) {
546+
if (!GenerateMultipleFiles(file_->enum_type(i))) {
547+
continue;
535548
}
536-
for (int i = 0; i < file_->message_type_count(); i++) {
537-
GenerateMessageHeader(context, file_->message_type(i));
538-
GenerateMessageSource(context, file_->message_type(i));
539-
GenerateMessageOrBuilder(context, file_->message_type(i));
549+
GenerateEnumHeader(context, file_->enum_type(i));
550+
GenerateEnumSource(context, file_->enum_type(i));
551+
}
552+
for (int i = 0; i < file_->message_type_count(); i++) {
553+
if (!GenerateMultipleFiles(file_->message_type(i))) {
554+
continue;
540555
}
556+
GenerateMessageHeader(context, file_->message_type(i));
557+
GenerateMessageSource(context, file_->message_type(i));
558+
GenerateMessageOrBuilder(context, file_->message_type(i));
541559
}
542560
}
543561

544-
bool FileGenerator::GenerateMultipleFiles() {
545-
return file_->options().java_multiple_files() && !IsGenerateFileDirMapping();
562+
bool FileGenerator::GenerateMultipleFiles(const Descriptor* descriptor) {
563+
return !java::NestedInFileClass(*descriptor, /*immutable=*/true) &&
564+
!IsGenerateFileDirMapping();
565+
}
566+
567+
bool FileGenerator::GenerateMultipleFiles(const EnumDescriptor* descriptor) {
568+
return !java::NestedInFileClass(*descriptor, /*immutable=*/true) &&
569+
!IsGenerateFileDirMapping();
546570
}
547571

548572
void PrintProperty(io::Printer* printer, const std::string& key,

protobuf/compiler/src/google/protobuf/compiler/j2objc/j2objc_file.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,8 @@ class FileGenerator {
8282
void GenerateMessageOrBuilder(GeneratorContext* context,
8383
const Descriptor* descriptor);
8484
std::string GetFileName(std::string suffix);
85-
bool GenerateMultipleFiles();
85+
bool GenerateMultipleFiles(const Descriptor* descriptor);
86+
bool GenerateMultipleFiles(const EnumDescriptor* descriptor);
8687

8788
const FileDescriptor* file_;
8889
std::string output_dir_;

protobuf/compiler/src/google/protobuf/compiler/j2objc/j2objc_generator.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ class J2ObjCGenerator : public CodeGenerator {
6161
}
6262

6363
Edition GetMinimumEdition() const override { return Edition::EDITION_PROTO2; }
64-
Edition GetMaximumEdition() const override { return Edition::EDITION_2023; }
64+
Edition GetMaximumEdition() const override { return Edition::EDITION_2024; }
6565

6666
private:
6767
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(J2ObjCGenerator);

0 commit comments

Comments
 (0)