Internal changes to extensions. PiperOrigin-RevId: 506091325
diff --git a/src/google/protobuf/descriptor.cc b/src/google/protobuf/descriptor.cc index 63236f4..a7b33fc 100644 --- a/src/google/protobuf/descriptor.cc +++ b/src/google/protobuf/descriptor.cc
@@ -38,6 +38,7 @@ #include <array> #include <cstdlib> #include <functional> +#include <iterator> #include <limits> #include <memory> #include <sstream> @@ -62,8 +63,11 @@ #include "absl/strings/str_format.h" #include "absl/strings/str_join.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/mutex.h" +#include "absl/types/optional.h" #include "google/protobuf/any.h" #include "google/protobuf/descriptor.pb.h" #include "google/protobuf/descriptor_database.h" @@ -1872,6 +1876,7 @@ unused_import_track_files_[file_name] = is_error; } + void DescriptorPool::ClearUnusedImportTrackFiles() { unused_import_track_files_.clear(); } @@ -1912,7 +1917,10 @@ const DescriptorPool* DescriptorPool::generated_pool() { const DescriptorPool* pool = internal_generated_pool(); - // Ensure that descriptor.proto has been registered in the generated pool. + // Ensure that descriptor.proto gets registered in the generated pool. It is a + // special case because it is included in the full runtime. We have to avoid + // registering it pre-main, because we need to ensure that the linker + // --gc-sections step can strip out the full runtime if it is unused. DescriptorProto::descriptor(); return pool; } @@ -6473,6 +6481,7 @@ } } + void DescriptorBuilder::CrossLinkField(FieldDescriptor* field, const FieldDescriptorProto& proto) { if (field->options_ == nullptr) { @@ -7111,7 +7120,7 @@ // determine whether the json_name option is set on the field. Here we // compare it against the default calculated json_name value and consider // the option set if they are different. This won't catch the case when - // an user explicitly sets json_name to the default value, but should be + // a user explicitly sets json_name to the default value, but should be // good enough to catch common misuses. if (field->is_extension() && (field->has_json_name() &&
diff --git a/src/google/protobuf/descriptor.h b/src/google/protobuf/descriptor.h index 21a97cb..1caf5c1 100644 --- a/src/google/protobuf/descriptor.h +++ b/src/google/protobuf/descriptor.h
@@ -70,6 +70,7 @@ #include "absl/log/absl_log.h" #include "absl/strings/string_view.h" #include "absl/synchronization/mutex.h" +#include "absl/types/optional.h" #include "google/protobuf/port.h" // Must be included last. @@ -116,6 +117,7 @@ class FileOptions; class UninterpretedOption; class SourceCodeInfo; +class ExtensionMetadata; // Defined in message.h class Message; @@ -140,6 +142,7 @@ namespace descriptor_unittest { class DescriptorTest; +class ValidationErrorTest; } // namespace descriptor_unittest // Defined in printer.h @@ -2087,6 +2090,7 @@ friend class FileDescriptor; friend class DescriptorBuilder; friend class FileDescriptorTables; + friend class google::protobuf::descriptor_unittest::ValidationErrorTest; // Return true if the given name is a sub-symbol of any non-package // descriptor that already exists in the descriptor pool. (The full @@ -2162,6 +2166,7 @@ // Set of files to track for unused imports. The bool value when true means // unused imports are treated as errors (and as warnings when false). absl::flat_hash_map<std::string, bool> unused_import_track_files_; + };
diff --git a/src/google/protobuf/descriptor_unittest.cc b/src/google/protobuf/descriptor_unittest.cc index 88661a0..51f3475 100644 --- a/src/google/protobuf/descriptor_unittest.cc +++ b/src/google/protobuf/descriptor_unittest.cc
@@ -47,6 +47,7 @@ #include "absl/log/die_if_null.h" #include "absl/log/scoped_mock_log.h" #include "absl/strings/str_format.h" +#include "absl/strings/string_view.h" #include "google/protobuf/unittest.pb.h" #include "google/protobuf/unittest_custom_options.pb.h" #include "google/protobuf/stubs/common.h" @@ -3937,6 +3938,7 @@ return ABSL_DIE_IF_NULL(pool_.BuildFile(file_proto)); } + // Parse file_text as a FileDescriptorProto in text format and add it // to the DescriptorPool. Expect errors to be produced which match the // given error text. @@ -7078,6 +7080,7 @@ } + TEST_F(ValidationErrorTest, PackageTooLong) { BuildFileWithErrors( "name: \"foo.proto\" "
diff --git a/src/google/protobuf/port_def.inc b/src/google/protobuf/port_def.inc index a8a7576..adf67d5 100644 --- a/src/google/protobuf/port_def.inc +++ b/src/google/protobuf/port_def.inc
@@ -208,6 +208,10 @@ // Owner: mkruskal@ #define PROTOBUF_FUTURE_REMOVE_CLEARED_API 1 +// Used for descriptor proto extension declarations. +// Owner: shaod@, gberg@ +#define PROTOBUF_FUTURE_DESCRIPTOR_EXTENSION_DECL 1 + #endif #ifdef PROTOBUF_VERSION
diff --git a/src/google/protobuf/port_undef.inc b/src/google/protobuf/port_undef.inc index cc945eb..fa75fda 100644 --- a/src/google/protobuf/port_undef.inc +++ b/src/google/protobuf/port_undef.inc
@@ -119,6 +119,7 @@ #ifdef PROTOBUF_FUTURE_BREAKING_CHANGES #undef PROTOBUF_FUTURE_BREAKING_CHANGES #undef PROTOBUF_FUTURE_REMOVE_CLEARED_API +#undef PROTOBUF_FUTURE_DESCRIPTOR_EXTENSION_DECL #endif // Restore macros that may have been #undef'd in port_def.inc.