|
18 | 18 | #include "absl/container/btree_set.h" |
19 | 19 | #include "absl/log/absl_check.h" |
20 | 20 | #include "absl/log/absl_log.h" |
| 21 | +#include "absl/status/status.h" |
21 | 22 | #include "absl/strings/str_cat.h" |
22 | 23 | #include "absl/strings/string_view.h" |
23 | 24 | #include "google/protobuf/compiler/code_generator.h" |
|
33 | 34 | #include "google/protobuf/compiler/java/shared_code_generator.h" |
34 | 35 | #include "google/protobuf/compiler/retention.h" |
35 | 36 | #include "google/protobuf/compiler/versions.h" |
| 37 | +#include "google/protobuf/descriptor.h" |
36 | 38 | #include "google/protobuf/descriptor.pb.h" |
37 | 39 | #include "google/protobuf/descriptor_visitor.h" |
38 | 40 | #include "google/protobuf/dynamic_message.h" |
@@ -252,6 +254,19 @@ bool FileGenerator::Validate(std::string* error) { |
252 | 254 | "https://github.com/protocolbuffers/protobuf/blob/main/java/" |
253 | 255 | "lite.md"; |
254 | 256 | } |
| 257 | + google::protobuf::internal::VisitDescriptors(*file_, [&](const EnumDescriptor& enm) { |
| 258 | + absl::Status status = ValidateNestInFileClassFeature(enm); |
| 259 | + if (!status.ok()) { |
| 260 | + absl::StrAppend(error, status.message()); |
| 261 | + } |
| 262 | + }); |
| 263 | + |
| 264 | + google::protobuf::internal::VisitDescriptors(*file_, [&](const Descriptor& message) { |
| 265 | + absl::Status status = ValidateNestInFileClassFeature(message); |
| 266 | + if (!status.ok()) { |
| 267 | + absl::StrAppend(error, status.message()); |
| 268 | + } |
| 269 | + }); |
255 | 270 |
|
256 | 271 | return error->empty(); |
257 | 272 | } |
@@ -338,17 +353,21 @@ void FileGenerator::Generate(io::Printer* printer) { |
338 | 353 |
|
339 | 354 | // ----------------------------------------------------------------- |
340 | 355 |
|
341 | | - if (!MultipleJavaFiles(file_, immutable_api_)) { |
342 | | - for (int i = 0; i < file_->enum_type_count(); i++) { |
| 356 | + for (int i = 0; i < file_->enum_type_count(); i++) { |
| 357 | + if (NestedInFileClass(*file_->enum_type(i), immutable_api_)) { |
343 | 358 | generator_factory_->NewEnumGenerator(file_->enum_type(i)) |
344 | 359 | ->Generate(printer); |
345 | 360 | } |
346 | | - for (int i = 0; i < file_->message_type_count(); i++) { |
| 361 | + } |
| 362 | + for (int i = 0; i < file_->message_type_count(); i++) { |
| 363 | + if (NestedInFileClass(*file_->message_type(i), immutable_api_)) { |
347 | 364 | message_generators_[i]->GenerateInterface(printer); |
348 | 365 | message_generators_[i]->Generate(printer); |
349 | 366 | } |
350 | | - if (HasGenericServices(file_, context_->EnforceLite())) { |
351 | | - for (int i = 0; i < file_->service_count(); i++) { |
| 367 | + } |
| 368 | + if (HasGenericServices(file_, context_->EnforceLite())) { |
| 369 | + for (int i = 0; i < file_->service_count(); i++) { |
| 370 | + if (NestedInFileClass(*file_->service(i), immutable_api_)) { |
352 | 371 | std::unique_ptr<ServiceGenerator> generator( |
353 | 372 | generator_factory_->NewServiceGenerator(file_->service(i))); |
354 | 373 | generator->Generate(printer); |
@@ -564,38 +583,39 @@ void FileGenerator::GenerateSiblings( |
564 | 583 | const std::string& package_dir, GeneratorContext* context, |
565 | 584 | std::vector<std::string>* file_list, |
566 | 585 | std::vector<std::string>* annotation_list) { |
567 | | - if (MultipleJavaFiles(file_, immutable_api_)) { |
568 | | - for (int i = 0; i < file_->enum_type_count(); i++) { |
569 | | - std::unique_ptr<EnumGenerator> generator( |
570 | | - generator_factory_->NewEnumGenerator(file_->enum_type(i))); |
571 | | - GenerateSibling<EnumGenerator>( |
572 | | - package_dir, java_package_, file_->enum_type(i), context, file_list, |
573 | | - options_.annotate_code, annotation_list, "", generator.get(), |
574 | | - options_.opensource_runtime, &EnumGenerator::Generate); |
575 | | - } |
576 | | - for (int i = 0; i < file_->message_type_count(); i++) { |
577 | | - if (immutable_api_) { |
578 | | - GenerateSibling<MessageGenerator>( |
579 | | - package_dir, java_package_, file_->message_type(i), context, |
580 | | - file_list, options_.annotate_code, annotation_list, "OrBuilder", |
581 | | - message_generators_[i].get(), options_.opensource_runtime, |
582 | | - &MessageGenerator::GenerateInterface); |
583 | | - } |
| 586 | + for (int i = 0; i < file_->enum_type_count(); i++) { |
| 587 | + if (NestedInFileClass(*file_->enum_type(i), immutable_api_)) continue; |
| 588 | + std::unique_ptr<EnumGenerator> generator( |
| 589 | + generator_factory_->NewEnumGenerator(file_->enum_type(i))); |
| 590 | + GenerateSibling<EnumGenerator>( |
| 591 | + package_dir, java_package_, file_->enum_type(i), context, file_list, |
| 592 | + options_.annotate_code, annotation_list, "", generator.get(), |
| 593 | + options_.opensource_runtime, &EnumGenerator::Generate); |
| 594 | + } |
| 595 | + for (int i = 0; i < file_->message_type_count(); i++) { |
| 596 | + if (NestedInFileClass(*file_->message_type(i), immutable_api_)) continue; |
| 597 | + if (immutable_api_) { |
584 | 598 | GenerateSibling<MessageGenerator>( |
585 | 599 | package_dir, java_package_, file_->message_type(i), context, |
586 | | - file_list, options_.annotate_code, annotation_list, "", |
| 600 | + file_list, options_.annotate_code, annotation_list, "OrBuilder", |
587 | 601 | message_generators_[i].get(), options_.opensource_runtime, |
588 | | - &MessageGenerator::Generate); |
| 602 | + &MessageGenerator::GenerateInterface); |
589 | 603 | } |
590 | | - if (HasGenericServices(file_, context_->EnforceLite())) { |
591 | | - for (int i = 0; i < file_->service_count(); i++) { |
592 | | - std::unique_ptr<ServiceGenerator> generator( |
593 | | - generator_factory_->NewServiceGenerator(file_->service(i))); |
594 | | - GenerateSibling<ServiceGenerator>( |
595 | | - package_dir, java_package_, file_->service(i), context, file_list, |
596 | | - options_.annotate_code, annotation_list, "", generator.get(), |
597 | | - options_.opensource_runtime, &ServiceGenerator::Generate); |
598 | | - } |
| 604 | + GenerateSibling<MessageGenerator>( |
| 605 | + package_dir, java_package_, file_->message_type(i), context, file_list, |
| 606 | + options_.annotate_code, annotation_list, "", |
| 607 | + message_generators_[i].get(), options_.opensource_runtime, |
| 608 | + &MessageGenerator::Generate); |
| 609 | + } |
| 610 | + if (HasGenericServices(file_, context_->EnforceLite())) { |
| 611 | + for (int i = 0; i < file_->service_count(); i++) { |
| 612 | + if (NestedInFileClass(*file_->service(i), immutable_api_)) continue; |
| 613 | + std::unique_ptr<ServiceGenerator> generator( |
| 614 | + generator_factory_->NewServiceGenerator(file_->service(i))); |
| 615 | + GenerateSibling<ServiceGenerator>( |
| 616 | + package_dir, java_package_, file_->service(i), context, file_list, |
| 617 | + options_.annotate_code, annotation_list, "", generator.get(), |
| 618 | + options_.opensource_runtime, &ServiceGenerator::Generate); |
599 | 619 | } |
600 | 620 | } |
601 | 621 | } |
|
0 commit comments