|
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