From a46d82fd5dab211c293d5eac633f748eab711062 Mon Sep 17 00:00:00 2001 From: Protobuf Team Bot Date: Fri, 26 Jan 2024 14:16:18 -0800 Subject: [PATCH] Minor cleanup: IWYU, clang-tidy, etc. PiperOrigin-RevId: 601865102 --- src/google/protobuf/BUILD.bazel | 2 + .../compiler/command_line_interface_tester.cc | 5 +- src/google/protobuf/compiler/cpp/generator.cc | 8 +- .../compiler/cpp/generator_unittest.cc | 6 +- src/google/protobuf/descriptor.cc | 162 ++++++++++-------- src/google/protobuf/descriptor_unittest.cc | 87 ++++++---- 6 files changed, 152 insertions(+), 118 deletions(-) diff --git a/src/google/protobuf/BUILD.bazel b/src/google/protobuf/BUILD.bazel index 6a25c878dc..a183147069 100644 --- a/src/google/protobuf/BUILD.bazel +++ b/src/google/protobuf/BUILD.bazel @@ -1156,8 +1156,10 @@ cc_test( "//src/google/protobuf/stubs", "//src/google/protobuf/testing", "//src/google/protobuf/testing:file", + "@com_google_absl//absl/base:log_severity", "@com_google_absl//absl/container:btree", "@com_google_absl//absl/container:flat_hash_set", + "@com_google_absl//absl/flags:flag", "@com_google_absl//absl/functional:any_invocable", "@com_google_absl//absl/log:absl_check", "@com_google_absl//absl/log:absl_log", diff --git a/src/google/protobuf/compiler/command_line_interface_tester.cc b/src/google/protobuf/compiler/command_line_interface_tester.cc index 7948108320..1586ee1df6 100644 --- a/src/google/protobuf/compiler/command_line_interface_tester.cc +++ b/src/google/protobuf/compiler/command_line_interface_tester.cc @@ -7,19 +7,22 @@ #include "google/protobuf/compiler/command_line_interface_tester.h" -#include +#include #include #include +#include "google/protobuf/testing/file.h" #include "google/protobuf/testing/file.h" #include "google/protobuf/testing/file.h" #include #include "google/protobuf/testing/googletest.h" +#include #include "absl/log/absl_check.h" #include "absl/status/status.h" #include "absl/strings/str_cat.h" #include "absl/strings/str_replace.h" #include "absl/strings/str_split.h" +#include "absl/strings/string_view.h" namespace google { namespace protobuf { diff --git a/src/google/protobuf/compiler/cpp/generator.cc b/src/google/protobuf/compiler/cpp/generator.cc index cbff8cdaef..841785515f 100644 --- a/src/google/protobuf/compiler/cpp/generator.cc +++ b/src/google/protobuf/compiler/cpp/generator.cc @@ -22,13 +22,16 @@ #include "absl/memory/memory.h" #include "absl/status/status.h" #include "absl/strings/match.h" +#include "absl/strings/numbers.h" #include "absl/strings/str_cat.h" #include "absl/strings/str_split.h" #include "absl/strings/string_view.h" +#include "google/protobuf/compiler/code_generator.h" #include "google/protobuf/compiler/cpp/file.h" #include "google/protobuf/compiler/cpp/helpers.h" #include "google/protobuf/compiler/cpp/options.h" #include "google/protobuf/cpp_features.pb.h" +#include "google/protobuf/descriptor.h" #include "google/protobuf/descriptor.pb.h" #include "google/protobuf/descriptor_visitor.h" #include "google/protobuf/io/printer.h" @@ -142,8 +145,9 @@ bool CppGenerator::Generate(const FileDescriptor* file, } else if (key == "lite_implicit_weak_fields") { file_options.enforce_mode = EnforceOptimizeMode::kLiteRuntime; file_options.lite_implicit_weak_fields = true; - if (!value.empty()) { - file_options.num_cc_files = std::strtol(value.c_str(), nullptr, 10); + int num_cc_files; + if (!value.empty() && absl::SimpleAtoi(value, &num_cc_files)) { + file_options.num_cc_files = num_cc_files; } } else if (key == "descriptor_implicit_weak_messages") { file_options.descriptor_implicit_weak_messages = true; diff --git a/src/google/protobuf/compiler/cpp/generator_unittest.cc b/src/google/protobuf/compiler/cpp/generator_unittest.cc index b1ee0e3785..f421b5cba5 100644 --- a/src/google/protobuf/compiler/cpp/generator_unittest.cc +++ b/src/google/protobuf/compiler/cpp/generator_unittest.cc @@ -69,7 +69,7 @@ TEST_F(CppGeneratorTest, LegacyClosedEnumOnNonEnumField) { R"schema( edition = "2023"; import "google/protobuf/cpp_features.proto"; - + message Foo { int32 bar = 1 [features.(pb.cpp).legacy_closed_enum = true]; })schema"); @@ -109,7 +109,7 @@ TEST_F(CppGeneratorTest, LegacyClosedEnumInherited) { edition = "2023"; import "google/protobuf/cpp_features.proto"; option features.(pb.cpp).legacy_closed_enum = true; - + enum TestEnum { TEST_ENUM_UNKNOWN = 0; } @@ -130,7 +130,7 @@ TEST_F(CppGeneratorTest, LegacyClosedEnumImplicit) { edition = "2023"; import "google/protobuf/cpp_features.proto"; option features.(pb.cpp).legacy_closed_enum = true; - + enum TestEnum { TEST_ENUM_UNKNOWN = 0; } diff --git a/src/google/protobuf/descriptor.cc b/src/google/protobuf/descriptor.cc index c69e19efdd..12301a788e 100644 --- a/src/google/protobuf/descriptor.cc +++ b/src/google/protobuf/descriptor.cc @@ -11,23 +11,32 @@ #include "google/protobuf/descriptor.h" +#include + #include #include +#include +#include #include -#include +#include +#include #include #include #include +#include // IWYU pragma: keep #include #include +#include #include #include #include -#include "google/protobuf/stubs/common.h" +#include "absl/base/attributes.h" #include "absl/base/call_once.h" #include "absl/base/casts.h" +#include "absl/base/const_init.h" #include "absl/base/dynamic_annotations.h" +#include "absl/base/thread_annotations.h" #include "absl/container/btree_map.h" #include "absl/container/flat_hash_map.h" #include "absl/container/flat_hash_set.h" @@ -50,17 +59,20 @@ #include "absl/strings/substitute.h" #include "absl/synchronization/mutex.h" #include "absl/types/optional.h" +#include "absl/types/span.h" #include "google/protobuf/any.h" #include "google/protobuf/cpp_edition_defaults.h" #include "google/protobuf/cpp_features.pb.h" #include "google/protobuf/descriptor.pb.h" #include "google/protobuf/descriptor_database.h" +#include "google/protobuf/descriptor_lite.h" #include "google/protobuf/descriptor_visitor.h" #include "google/protobuf/dynamic_message.h" #include "google/protobuf/feature_resolver.h" #include "google/protobuf/generated_message_util.h" #include "google/protobuf/io/strtod.h" #include "google/protobuf/io/tokenizer.h" +#include "google/protobuf/message_lite.h" #include "google/protobuf/parse_context.h" #include "google/protobuf/port.h" #include "google/protobuf/repeated_ptr_field.h" @@ -251,7 +263,7 @@ class FlatAllocation { public: static constexpr size_t kMaxAlign = Max(alignof(T)...); - FlatAllocation(const TypeMap& ends) : ends_(ends) { + explicit FlatAllocation(const TypeMap& ends) : ends_(ends) { // The arrays start just after FlatAllocation, so adjust the ends. Fold({(ends_.template Get() += RoundUpTo(sizeof(FlatAllocation)))...}); @@ -844,7 +856,7 @@ std::string EnumValueToPascalCase(const std::string& input) { // Class to remove an enum prefix from enum values. class PrefixRemover { public: - PrefixRemover(absl::string_view prefix) { + explicit PrefixRemover(absl::string_view prefix) { // Strip underscores and lower-case the prefix. for (char character : prefix) { if (character != '_') { @@ -1497,7 +1509,7 @@ DescriptorPool::Tables::Tables() { DescriptorPool::Tables::~Tables() { ABSL_DCHECK(checkpoints_.empty()); } -FileDescriptorTables::FileDescriptorTables() {} +FileDescriptorTables::FileDescriptorTables() = default; FileDescriptorTables::~FileDescriptorTables() { delete fields_by_lowercase_name_.load(std::memory_order_acquire); @@ -1922,7 +1934,7 @@ const SourceCodeInfo_Location* FileDescriptorTables::GetSourceLocation( // DescriptorPool -DescriptorPool::ErrorCollector::~ErrorCollector() {} +DescriptorPool::ErrorCollector::~ErrorCollector() = default; absl::string_view DescriptorPool::ErrorCollector::ErrorLocationName( ErrorLocation location) { @@ -2322,8 +2334,9 @@ void DescriptorPool::FindAllExtensions( // ------------------------------------------------------------------- -const FieldDescriptor* Descriptor::FindFieldByNumber(int key) const { - const FieldDescriptor* result = file()->tables_->FindFieldByNumber(this, key); +const FieldDescriptor* Descriptor::FindFieldByNumber(int number) const { + const FieldDescriptor* result = + file()->tables_->FindFieldByNumber(this, number); if (result == nullptr || result->is_extension()) { return nullptr; } else { @@ -2332,9 +2345,9 @@ const FieldDescriptor* Descriptor::FindFieldByNumber(int key) const { } const FieldDescriptor* Descriptor::FindFieldByLowercaseName( - absl::string_view key) const { + absl::string_view lowercase_name) const { const FieldDescriptor* result = - file()->tables_->FindFieldByLowercaseName(this, key); + file()->tables_->FindFieldByLowercaseName(this, lowercase_name); if (result == nullptr || result->is_extension()) { return nullptr; } else { @@ -2343,9 +2356,9 @@ const FieldDescriptor* Descriptor::FindFieldByLowercaseName( } const FieldDescriptor* Descriptor::FindFieldByCamelcaseName( - absl::string_view key) const { + absl::string_view camelcase_name) const { const FieldDescriptor* result = - file()->tables_->FindFieldByCamelcaseName(this, key); + file()->tables_->FindFieldByCamelcaseName(this, camelcase_name); if (result == nullptr || result->is_extension()) { return nullptr; } else { @@ -2354,28 +2367,28 @@ const FieldDescriptor* Descriptor::FindFieldByCamelcaseName( } const FieldDescriptor* Descriptor::FindFieldByName( - absl::string_view key) const { + absl::string_view name) const { const FieldDescriptor* field = - file()->tables_->FindNestedSymbol(this, key).field_descriptor(); + file()->tables_->FindNestedSymbol(this, name).field_descriptor(); return field != nullptr && !field->is_extension() ? field : nullptr; } const OneofDescriptor* Descriptor::FindOneofByName( - absl::string_view key) const { - return file()->tables_->FindNestedSymbol(this, key).oneof_descriptor(); + absl::string_view name) const { + return file()->tables_->FindNestedSymbol(this, name).oneof_descriptor(); } const FieldDescriptor* Descriptor::FindExtensionByName( - absl::string_view key) const { + absl::string_view name) const { const FieldDescriptor* field = - file()->tables_->FindNestedSymbol(this, key).field_descriptor(); + file()->tables_->FindNestedSymbol(this, name).field_descriptor(); return field != nullptr && field->is_extension() ? field : nullptr; } const FieldDescriptor* Descriptor::FindExtensionByLowercaseName( - absl::string_view key) const { + absl::string_view name) const { const FieldDescriptor* result = - file()->tables_->FindFieldByLowercaseName(this, key); + file()->tables_->FindFieldByLowercaseName(this, name); if (result == nullptr || !result->is_extension()) { return nullptr; } else { @@ -2384,9 +2397,9 @@ const FieldDescriptor* Descriptor::FindExtensionByLowercaseName( } const FieldDescriptor* Descriptor::FindExtensionByCamelcaseName( - absl::string_view key) const { + absl::string_view name) const { const FieldDescriptor* result = - file()->tables_->FindFieldByCamelcaseName(this, key); + file()->tables_->FindFieldByCamelcaseName(this, name); if (result == nullptr || !result->is_extension()) { return nullptr; } else { @@ -2395,18 +2408,18 @@ const FieldDescriptor* Descriptor::FindExtensionByCamelcaseName( } const Descriptor* Descriptor::FindNestedTypeByName( - absl::string_view key) const { - return file()->tables_->FindNestedSymbol(this, key).descriptor(); + absl::string_view name) const { + return file()->tables_->FindNestedSymbol(this, name).descriptor(); } const EnumDescriptor* Descriptor::FindEnumTypeByName( - absl::string_view key) const { - return file()->tables_->FindNestedSymbol(this, key).enum_descriptor(); + absl::string_view name) const { + return file()->tables_->FindNestedSymbol(this, name).enum_descriptor(); } const EnumValueDescriptor* Descriptor::FindEnumValueByName( - absl::string_view key) const { - return file()->tables_->FindNestedSymbol(this, key).enum_value_descriptor(); + absl::string_view name) const { + return file()->tables_->FindNestedSymbol(this, name).enum_value_descriptor(); } const FieldDescriptor* Descriptor::map_key() const { @@ -2422,54 +2435,54 @@ const FieldDescriptor* Descriptor::map_value() const { } const EnumValueDescriptor* EnumDescriptor::FindValueByName( - absl::string_view key) const { - return file()->tables_->FindNestedSymbol(this, key).enum_value_descriptor(); + absl::string_view name) const { + return file()->tables_->FindNestedSymbol(this, name).enum_value_descriptor(); } -const EnumValueDescriptor* EnumDescriptor::FindValueByNumber(int key) const { - return file()->tables_->FindEnumValueByNumber(this, key); +const EnumValueDescriptor* EnumDescriptor::FindValueByNumber(int number) const { + return file()->tables_->FindEnumValueByNumber(this, number); } const EnumValueDescriptor* EnumDescriptor::FindValueByNumberCreatingIfUnknown( - int key) const { - return file()->tables_->FindEnumValueByNumberCreatingIfUnknown(this, key); + int number) const { + return file()->tables_->FindEnumValueByNumberCreatingIfUnknown(this, number); } const MethodDescriptor* ServiceDescriptor::FindMethodByName( - absl::string_view key) const { - return file()->tables_->FindNestedSymbol(this, key).method_descriptor(); + absl::string_view name) const { + return file()->tables_->FindNestedSymbol(this, name).method_descriptor(); } const Descriptor* FileDescriptor::FindMessageTypeByName( - absl::string_view key) const { - return tables_->FindNestedSymbol(this, key).descriptor(); + absl::string_view name) const { + return tables_->FindNestedSymbol(this, name).descriptor(); } const EnumDescriptor* FileDescriptor::FindEnumTypeByName( - absl::string_view key) const { - return tables_->FindNestedSymbol(this, key).enum_descriptor(); + absl::string_view name) const { + return tables_->FindNestedSymbol(this, name).enum_descriptor(); } const EnumValueDescriptor* FileDescriptor::FindEnumValueByName( - absl::string_view key) const { - return tables_->FindNestedSymbol(this, key).enum_value_descriptor(); + absl::string_view name) const { + return tables_->FindNestedSymbol(this, name).enum_value_descriptor(); } const ServiceDescriptor* FileDescriptor::FindServiceByName( - absl::string_view key) const { - return tables_->FindNestedSymbol(this, key).service_descriptor(); + absl::string_view name) const { + return tables_->FindNestedSymbol(this, name).service_descriptor(); } const FieldDescriptor* FileDescriptor::FindExtensionByName( - absl::string_view key) const { + absl::string_view name) const { const FieldDescriptor* field = - tables_->FindNestedSymbol(this, key).field_descriptor(); + tables_->FindNestedSymbol(this, name).field_descriptor(); return field != nullptr && field->is_extension() ? field : nullptr; } const FieldDescriptor* FileDescriptor::FindExtensionByLowercaseName( - absl::string_view key) const { - const FieldDescriptor* result = tables_->FindFieldByLowercaseName(this, key); + absl::string_view name) const { + const FieldDescriptor* result = tables_->FindFieldByLowercaseName(this, name); if (result == nullptr || !result->is_extension()) { return nullptr; } else { @@ -2478,8 +2491,8 @@ const FieldDescriptor* FileDescriptor::FindExtensionByLowercaseName( } const FieldDescriptor* FileDescriptor::FindExtensionByCamelcaseName( - absl::string_view key) const { - const FieldDescriptor* result = tables_->FindFieldByCamelcaseName(this, key); + absl::string_view name) const { + const FieldDescriptor* result = tables_->FindFieldByCamelcaseName(this, name); if (result == nullptr || !result->is_extension()) { return nullptr; } else { @@ -2696,14 +2709,14 @@ std::string FieldDescriptor::DefaultValueAsString( // optimization. These constructors are never called, so we define them // out of line to make sure the debug info is emitted somewhere. -Descriptor::Descriptor() {} +Descriptor::Descriptor() = default; FieldDescriptor::FieldDescriptor() {} -OneofDescriptor::OneofDescriptor() {} -EnumDescriptor::EnumDescriptor() {} -EnumValueDescriptor::EnumValueDescriptor() {} -ServiceDescriptor::ServiceDescriptor() {} -MethodDescriptor::MethodDescriptor() {} -FileDescriptor::FileDescriptor() {} +OneofDescriptor::OneofDescriptor() = default; +EnumDescriptor::EnumDescriptor() = default; +EnumValueDescriptor::EnumValueDescriptor() = default; +ServiceDescriptor::ServiceDescriptor() = default; +MethodDescriptor::MethodDescriptor() = default; +FileDescriptor::FileDescriptor() = default; // CopyTo methods ==================================================== @@ -2773,7 +2786,7 @@ void FileDescriptor::CopyJsonNameTo(FileDescriptorProto* proto) const { void FileDescriptor::CopySourceCodeInfoTo(FileDescriptorProto* proto) const { if (source_code_info_ && source_code_info_ != &SourceCodeInfo::default_instance()) { - proto->mutable_source_code_info()->CopyFrom(*source_code_info_); + *proto->mutable_source_code_info() = *source_code_info_; } } @@ -2808,7 +2821,7 @@ void Descriptor::CopyTo(DescriptorProto* proto) const { } if (&options() != &MessageOptions::default_instance()) { - proto->mutable_options()->CopyFrom(options()); + *proto->mutable_options() = options(); } RestoreFeaturesToOptions(proto_features_, proto); @@ -2896,7 +2909,7 @@ void FieldDescriptor::CopyTo(FieldDescriptorProto* proto) const { } if (&options() != &FieldOptions::default_instance()) { - proto->mutable_options()->CopyFrom(options()); + *proto->mutable_options() = options(); } RestoreFeaturesToOptions(proto_features_, proto); @@ -2909,7 +2922,7 @@ void FieldDescriptor::CopyJsonNameTo(FieldDescriptorProto* proto) const { void OneofDescriptor::CopyTo(OneofDescriptorProto* proto) const { proto->set_name(name()); if (&options() != &OneofOptions::default_instance()) { - proto->mutable_options()->CopyFrom(options()); + *proto->mutable_options() = options(); } RestoreFeaturesToOptions(proto_features_, proto); } @@ -2930,7 +2943,7 @@ void EnumDescriptor::CopyTo(EnumDescriptorProto* proto) const { } if (&options() != &EnumOptions::default_instance()) { - proto->mutable_options()->CopyFrom(options()); + *proto->mutable_options() = options(); } RestoreFeaturesToOptions(proto_features_, proto); } @@ -2940,7 +2953,7 @@ void EnumValueDescriptor::CopyTo(EnumValueDescriptorProto* proto) const { proto->set_number(number()); if (&options() != &EnumValueOptions::default_instance()) { - proto->mutable_options()->CopyFrom(options()); + *proto->mutable_options() = options(); } RestoreFeaturesToOptions(proto_features_, proto); } @@ -2953,7 +2966,7 @@ void ServiceDescriptor::CopyTo(ServiceDescriptorProto* proto) const { } if (&options() != &ServiceOptions::default_instance()) { - proto->mutable_options()->CopyFrom(options()); + *proto->mutable_options() = options(); } RestoreFeaturesToOptions(proto_features_, proto); } @@ -2972,7 +2985,7 @@ void MethodDescriptor::CopyTo(MethodDescriptorProto* proto) const { proto->mutable_output_type()->append(output_type()->full_name()); if (&options() != &MethodOptions::default_instance()) { - proto->mutable_options()->CopyFrom(options()); + *proto->mutable_options() = options(); } if (client_streaming_) { @@ -4608,7 +4621,7 @@ DescriptorBuilder::DescriptorBuilder( std::true_type{}); } -DescriptorBuilder::~DescriptorBuilder() {} +DescriptorBuilder::~DescriptorBuilder() = default; PROTOBUF_NOINLINE void DescriptorBuilder::AddError( const std::string& element_name, const Message& descriptor, @@ -5109,7 +5122,7 @@ bool DescriptorBuilder::AddSymbol(const std::string& full_name, void DescriptorBuilder::AddPackage(const std::string& name, const Message& proto, FileDescriptor* file) { - if (name.find('\0') != std::string::npos) { + if (absl::StrContains(name, '\0')) { AddError(name, proto, DescriptorPool::ErrorCollector::NAME, [&] { return absl::StrCat("\"", name, "\" contains null character."); }); @@ -5691,7 +5704,7 @@ FileDescriptor* DescriptorBuilder::BuildFileImpl( SourceCodeInfo* info = nullptr; if (proto.has_source_code_info()) { info = alloc.AllocateArray(1); - info->CopyFrom(proto.source_code_info()); + *info = proto.source_code_info(); result->source_code_info_ = info; } else { result->source_code_info_ = &SourceCodeInfo::default_instance(); @@ -5717,7 +5730,7 @@ FileDescriptor* DescriptorBuilder::BuildFileImpl( } result->pool_ = pool_; - if (result->name().find('\0') != std::string::npos) { + if (absl::StrContains(result->name(), '\0')) { AddError(result->name(), proto, DescriptorPool::ErrorCollector::NAME, [&] { return absl::StrCat("\"", result->name(), "\" contains null character."); }); @@ -6362,7 +6375,7 @@ void DescriptorBuilder::BuildFieldOrExtension(const FieldDescriptorProto& proto, std::strtol(proto.default_value().c_str(), &end_pos, 0); break; case FieldDescriptor::CPPTYPE_INT64: - static_assert(sizeof(int64_t) == sizeof(long long), + static_assert(sizeof(int64_t) == sizeof(long long), // NOLINT "sizeof int64_t is not sizeof long long"); result->default_value_int64_t_ = std::strtoll(proto.default_value().c_str(), &end_pos, 0); @@ -6372,8 +6385,9 @@ void DescriptorBuilder::BuildFieldOrExtension(const FieldDescriptorProto& proto, std::strtoul(proto.default_value().c_str(), &end_pos, 0); break; case FieldDescriptor::CPPTYPE_UINT64: - static_assert(sizeof(uint64_t) == sizeof(unsigned long long), - "sizeof uint64_t is not sizeof unsigned long long"); + static_assert( + sizeof(uint64_t) == sizeof(unsigned long long), // NOLINT + "sizeof uint64_t is not sizeof unsigned long long"); result->default_value_uint64_t_ = std::strtoull(proto.default_value().c_str(), &end_pos, 0); break; @@ -8378,7 +8392,7 @@ DescriptorBuilder::OptionInterpreter::OptionInterpreter( ABSL_CHECK(builder_); } -DescriptorBuilder::OptionInterpreter::~OptionInterpreter() {} +DescriptorBuilder::OptionInterpreter::~OptionInterpreter() = default; bool DescriptorBuilder::OptionInterpreter::InterpretOptionExtensions( OptionsToInterpret* options_to_interpret) { @@ -8688,7 +8702,7 @@ bool DescriptorBuilder::OptionInterpreter::InterpretSingleOption( << (*iter)->type(); return false; } - unknown_fields.reset(parent_unknown_fields.release()); + unknown_fields = std::move(parent_unknown_fields); } // Now merge the UnknownFieldSet corresponding to the top-level message into diff --git a/src/google/protobuf/descriptor_unittest.cc b/src/google/protobuf/descriptor_unittest.cc index c90192e99c..7bf5000fb9 100644 --- a/src/google/protobuf/descriptor_unittest.cc +++ b/src/google/protobuf/descriptor_unittest.cc @@ -13,8 +13,14 @@ #include "google/protobuf/descriptor.h" +#include + +#include +#include #include +#include #include +#include #include #include #include @@ -22,15 +28,15 @@ #include #include -#include "google/protobuf/stubs/common.h" #include "google/protobuf/any.pb.h" #include "google/protobuf/descriptor.pb.h" #include "google/protobuf/descriptor.pb.h" #include -#include "google/protobuf/testing/googletest.h" #include +#include "absl/base/log_severity.h" #include "absl/container/btree_set.h" #include "absl/container/flat_hash_set.h" +#include "absl/flags/flag.h" #include "absl/functional/any_invocable.h" #include "absl/log/absl_check.h" #include "absl/log/absl_log.h" @@ -38,9 +44,12 @@ #include "absl/log/scoped_mock_log.h" #include "absl/status/status.h" #include "absl/status/statusor.h" +#include "absl/strings/numbers.h" #include "absl/strings/str_cat.h" #include "absl/strings/str_format.h" +#include "absl/strings/str_split.h" #include "absl/strings/string_view.h" +#include "absl/strings/strip.h" #include "absl/strings/substitute.h" #include "absl/synchronization/notification.h" #include "google/protobuf/compiler/importer.h" @@ -50,6 +59,7 @@ #include "google/protobuf/descriptor_legacy.h" #include "google/protobuf/dynamic_message.h" #include "google/protobuf/feature_resolver.h" +#include "google/protobuf/io/coded_stream.h" #include "google/protobuf/io/tokenizer.h" #include "google/protobuf/io/zero_copy_stream_impl_lite.h" #include "google/protobuf/test_textproto.h" @@ -220,8 +230,8 @@ void AddEmptyEnum(FileDescriptorProto* file, absl::string_view name) { class MockErrorCollector : public DescriptorPool::ErrorCollector { public: - MockErrorCollector() {} - ~MockErrorCollector() override {} + MockErrorCollector() = default; + ~MockErrorCollector() override = default; std::string text_; std::string warning_text_; @@ -593,7 +603,7 @@ TEST_F(FileDescriptorTest, DebugStringRoundTrip) { ASSERT_GE(debug_strings.size(), 3); DescriptorPool pool; - for (int i = 0; i < debug_strings.size(); ++i) { + for (size_t i = 0; i < debug_strings.size(); ++i) { const std::string& name = debug_strings[i].first; const std::string& content = debug_strings[i].second; io::ArrayInputStream input_stream(content.data(), content.size()); @@ -2605,7 +2615,7 @@ class MiscTest : public testing::Test { } // Build the descriptors and get the pointers. - pool_.reset(new DescriptorPool()); + pool_ = std::make_unique(); const FileDescriptor* file = pool_->BuildFile(file_proto); if (file != nullptr && file->message_type_count() == 1 && @@ -2995,10 +3005,10 @@ class AllowUnknownDependenciesTest switch (mode()) { case NO_DATABASE: - pool_.reset(new DescriptorPool); + pool_ = std::make_unique(); break; case FALLBACK_DATABASE: - pool_.reset(new DescriptorPool(&db_)); + pool_ = std::make_unique(&db_); break; } @@ -5720,8 +5730,8 @@ TEST_F(ValidationErrorTest, Int32OptionValueOutOfPositiveRange) { " positive_int_value: 0x80000000 } " "}", - "foo.proto: foo.proto: OPTION_VALUE: Value out of range, -2147483648 to 2147483647, " - "for int32 option \"foo\".\n"); + "foo.proto: foo.proto: OPTION_VALUE: Value out of range, -2147483648 to " + "2147483647, for int32 option \"foo\".\n"); } TEST_F(ValidationErrorTest, Int32OptionValueOutOfNegativeRange) { @@ -5737,8 +5747,8 @@ TEST_F(ValidationErrorTest, Int32OptionValueOutOfNegativeRange) { " negative_int_value: -0x80000001 } " "}", - "foo.proto: foo.proto: OPTION_VALUE: Value out of range, -2147483648 to 2147483647, " - "for int32 option \"foo\".\n"); + "foo.proto: foo.proto: OPTION_VALUE: Value out of range, -2147483648 to " + "2147483647, for int32 option \"foo\".\n"); } TEST_F(ValidationErrorTest, Int32OptionValueIsNotPositiveInt) { @@ -5753,8 +5763,8 @@ TEST_F(ValidationErrorTest, Int32OptionValueIsNotPositiveInt) { " is_extension: true } " " string_value: \"5\" } }", - "foo.proto: foo.proto: OPTION_VALUE: Value must be integer, from -2147483648 to 2147483647, " - "for int32 option \"foo\".\n"); + "foo.proto: foo.proto: OPTION_VALUE: Value must be integer, from " + "-2147483648 to 2147483647, for int32 option \"foo\".\n"); } TEST_F(ValidationErrorTest, Int64OptionValueOutOfRange) { @@ -5771,8 +5781,9 @@ TEST_F(ValidationErrorTest, Int64OptionValueOutOfRange) { "} " "}", - "foo.proto: foo.proto: OPTION_VALUE: Value out of range, -9223372036854775808 to 9223372036854775807, " - "for int64 option \"foo\".\n"); + "foo.proto: foo.proto: OPTION_VALUE: Value out of range, " + "-9223372036854775808 to 9223372036854775807, for int64 option " + "\"foo\".\n"); } TEST_F(ValidationErrorTest, Int64OptionValueIsNotPositiveInt) { @@ -5787,8 +5798,9 @@ TEST_F(ValidationErrorTest, Int64OptionValueIsNotPositiveInt) { " is_extension: true } " " identifier_value: \"5\" } }", - "foo.proto: foo.proto: OPTION_VALUE: Value must be integer, from -9223372036854775808 to 9223372036854775807, " - "for int64 option \"foo\".\n"); + "foo.proto: foo.proto: OPTION_VALUE: Value must be integer, from " + "-9223372036854775808 to 9223372036854775807, for int64 option " + "\"foo\".\n"); } TEST_F(ValidationErrorTest, UInt32OptionValueOutOfRange) { @@ -5803,8 +5815,8 @@ TEST_F(ValidationErrorTest, UInt32OptionValueOutOfRange) { " is_extension: true } " " positive_int_value: 0x100000000 } }", - "foo.proto: foo.proto: OPTION_VALUE: Value out of range, 0 to 4294967295, " - "for uint32 option \"foo\".\n"); + "foo.proto: foo.proto: OPTION_VALUE: Value out of range, 0 to " + "4294967295, for uint32 option \"foo\".\n"); } TEST_F(ValidationErrorTest, UInt32OptionValueIsNotPositiveInt) { @@ -5819,8 +5831,8 @@ TEST_F(ValidationErrorTest, UInt32OptionValueIsNotPositiveInt) { " is_extension: true } " " double_value: -5.6 } }", - "foo.proto: foo.proto: OPTION_VALUE: Value must be integer, from 0 to 4294967295, " - "for uint32 option \"foo\".\n"); + "foo.proto: foo.proto: OPTION_VALUE: Value must be integer, from 0 to " + "4294967295, for uint32 option \"foo\".\n"); } TEST_F(ValidationErrorTest, UInt64OptionValueIsNotPositiveInt) { @@ -5835,8 +5847,8 @@ TEST_F(ValidationErrorTest, UInt64OptionValueIsNotPositiveInt) { " is_extension: true } " " negative_int_value: -5 } }", - "foo.proto: foo.proto: OPTION_VALUE: Value must be integer, from 0 to 18446744073709551615, " - "for uint64 option \"foo\".\n"); + "foo.proto: foo.proto: OPTION_VALUE: Value must be integer, from 0 to " + "18446744073709551615, for uint64 option \"foo\".\n"); } TEST_F(ValidationErrorTest, FloatOptionValueIsNotNumber) { @@ -5960,8 +5972,7 @@ TEST_F(ValidationErrorTest, StringOptionValueIsNotString) { " identifier_value: \"MOOO\" } }", "foo.proto: foo.proto: OPTION_VALUE: Value must be quoted string " - "for " - "string option \"foo\".\n"); + "for string option \"foo\".\n"); } TEST_F(ValidationErrorTest, JsonNameOptionOnExtensions) { @@ -8422,11 +8433,11 @@ TEST_F(FeaturesTest, MapFieldFeaturesOverride) { option features.(pb.test).int_file_feature = 99; option features.(pb.test).int_multiple_feature = 1; - + message Foo { option features.(pb.test).int_message_feature = 87; option features.(pb.test).int_multiple_feature = 2; - + map map_field = 1 [ features.(pb.test).int_field_feature = 100, features.(pb.test).int_multiple_feature = 3 @@ -11195,7 +11206,7 @@ static void AddToDatabase(SimpleDescriptorDatabase* database, class DatabaseBackedPoolTest : public testing::Test { protected: - DatabaseBackedPoolTest() {} + DatabaseBackedPoolTest() = default; SimpleDescriptorDatabase database_; @@ -11226,8 +11237,8 @@ class DatabaseBackedPoolTest : public testing::Test { // need an actual mock DescriptorDatabase to test errors. class ErrorDescriptorDatabase : public DescriptorDatabase { public: - ErrorDescriptorDatabase() {} - ~ErrorDescriptorDatabase() override {} + ErrorDescriptorDatabase() = default; + ~ErrorDescriptorDatabase() override = default; // implements DescriptorDatabase --------------------------------- bool FindFileByName(const std::string& filename, @@ -11262,11 +11273,11 @@ class DatabaseBackedPoolTest : public testing::Test { // called and forwards to some other DescriptorDatabase. class CallCountingDatabase : public DescriptorDatabase { public: - CallCountingDatabase(DescriptorDatabase* wrapped_db) + explicit CallCountingDatabase(DescriptorDatabase* wrapped_db) : wrapped_db_(wrapped_db) { Clear(); } - ~CallCountingDatabase() override {} + ~CallCountingDatabase() override = default; DescriptorDatabase* wrapped_db_; @@ -11299,9 +11310,9 @@ class DatabaseBackedPoolTest : public testing::Test { // DescriptorPool to reload foo.proto if it is already loaded. class FalsePositiveDatabase : public DescriptorDatabase { public: - FalsePositiveDatabase(DescriptorDatabase* wrapped_db) + explicit FalsePositiveDatabase(DescriptorDatabase* wrapped_db) : wrapped_db_(wrapped_db) {} - ~FalsePositiveDatabase() override {} + ~FalsePositiveDatabase() override = default; DescriptorDatabase* wrapped_db_; @@ -11585,8 +11596,8 @@ TEST_F(DatabaseBackedPoolTest, DoesntReloadFilesUncesessarily) { // build a descriptor for MessageN can require O(2^N) time. class ExponentialErrorDatabase : public DescriptorDatabase { public: - ExponentialErrorDatabase() {} - ~ExponentialErrorDatabase() override {} + ExponentialErrorDatabase() = default; + ~ExponentialErrorDatabase() override = default; // implements DescriptorDatabase --------------------------------- bool FindFileByName(const std::string& filename, @@ -11687,7 +11698,7 @@ TEST_F(DatabaseBackedPoolTest, DoesntFallbackOnWrongType) { class AbortingErrorCollector : public DescriptorPool::ErrorCollector { public: - AbortingErrorCollector() {} + AbortingErrorCollector() = default; AbortingErrorCollector(const AbortingErrorCollector&) = delete; AbortingErrorCollector& operator=(const AbortingErrorCollector&) = delete;