Prepare the code for migrating return types from `const std::string&` to
`absl::string_view`.
PiperOrigin-RevId: 651520812
diff --git a/hpb_generator/BUILD b/hpb_generator/BUILD
index 63cfe8b..7ca5c59 100644
--- a/hpb_generator/BUILD
+++ b/hpb_generator/BUILD
@@ -103,5 +103,6 @@
":output",
"//src/google/protobuf",
"//upb_generator:keywords",
+ "@com_google_absl//absl/strings:string_view",
],
)
diff --git a/hpb_generator/gen_utils.cc b/hpb_generator/gen_utils.cc
index 3827425..f89afc9 100644
--- a/hpb_generator/gen_utils.cc
+++ b/hpb_generator/gen_utils.cc
@@ -12,6 +12,7 @@
#include <vector>
#include "absl/strings/ascii.h"
+#include "absl/strings/string_view.h"
namespace google::protobuf::hpb_generator {
@@ -102,7 +103,7 @@
return fields;
}
-std::string ToCamelCase(const std::string& input, bool lower_first) {
+std::string ToCamelCase(const absl::string_view input, bool lower_first) {
bool capitalize_next = !lower_first;
std::string result;
result.reserve(input.size());
diff --git a/hpb_generator/gen_utils.h b/hpb_generator/gen_utils.h
index 3cf8a85..a83500c 100644
--- a/hpb_generator/gen_utils.h
+++ b/hpb_generator/gen_utils.h
@@ -12,6 +12,7 @@
#include <vector>
#include "google/protobuf/descriptor.pb.h"
+#include "absl/strings/string_view.h"
#include "google/protobuf/compiler/code_generator.h"
#include "google/protobuf/descriptor.h"
@@ -38,7 +39,7 @@
std::vector<const protobuf::FieldDescriptor*> FieldNumberOrder(
const protobuf::Descriptor* message);
-std::string ToCamelCase(const std::string& input, bool lower_first);
+std::string ToCamelCase(absl::string_view input, bool lower_first);
} // namespace protobuf
} // namespace google::hpb_generator
diff --git a/hpb_generator/names.cc b/hpb_generator/names.cc
index b3145f3..5ea3da9 100644
--- a/hpb_generator/names.cc
+++ b/hpb_generator/names.cc
@@ -9,6 +9,7 @@
#include <string>
+#include "absl/strings/string_view.h"
#include "upb_generator/keywords.h"
namespace google::protobuf::hpb_generator {
@@ -21,11 +22,11 @@
"::protos");
}
-std::string DotsToColons(const std::string& name) {
+std::string DotsToColons(const absl::string_view name) {
return absl::StrReplaceAll(name, {{".", "::"}});
}
-std::string Namespace(const std::string& package) {
+std::string Namespace(const absl::string_view package) {
if (package.empty()) return "";
return "::" + DotsToColons(package);
}
diff --git a/src/google/protobuf/compiler/command_line_interface.cc b/src/google/protobuf/compiler/command_line_interface.cc
index 1ee01f5..cd95c8b 100644
--- a/src/google/protobuf/compiler/command_line_interface.cc
+++ b/src/google/protobuf/compiler/command_line_interface.cc
@@ -11,32 +11,23 @@
#include "google/protobuf/compiler/command_line_interface.h"
-#include <cstdint>
-#include <cstdlib>
-#include <cstring>
-
-#include "absl/algorithm/container.h"
-#include "absl/base/attributes.h"
-#include "absl/base/log_severity.h"
-#include "absl/container/btree_map.h"
-#include "absl/container/btree_set.h"
-#include "absl/container/flat_hash_map.h"
-#include "absl/log/globals.h"
-#include "absl/status/status.h"
-#include "absl/status/statusor.h"
-#include "absl/strings/str_cat.h"
-#include "absl/types/span.h"
-#include "google/protobuf/compiler/versions.h"
-#include "google/protobuf/descriptor_database.h"
-#include "google/protobuf/descriptor_visitor.h"
-#include "google/protobuf/feature_resolver.h"
-#include "google/protobuf/io/zero_copy_stream_impl_lite.h"
-
-#include "google/protobuf/stubs/platform_macros.h"
-
+#include <errno.h>
+#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
+
+#include <algorithm>
+#include <cstdint>
+#include <cstdlib>
+#include <cstring>
+#include <fstream>
+#include <iostream>
+#include <memory>
+#include <ostream>
+#include <string>
+#include <utility>
+#include <vector>
#ifdef major
#undef major
#endif
@@ -45,20 +36,10 @@
#endif
#include <fcntl.h>
#include <sys/stat.h>
+
#ifndef _MSC_VER
#include <unistd.h>
#endif
-#include <errno.h>
-
-#include <fstream>
-#include <iostream>
-
-#include <limits.h> // For PATH_MAX
-
-#include <memory>
-#include <string>
-#include <utility>
-#include <vector>
#if defined(__APPLE__)
#include <mach-o/dyld.h>
@@ -66,27 +47,44 @@
#include <sys/sysctl.h>
#endif
+#include "absl/algorithm/container.h"
+#include "absl/base/attributes.h"
+#include "absl/base/log_severity.h"
+#include "absl/container/btree_map.h"
+#include "absl/container/btree_set.h"
+#include "absl/container/flat_hash_map.h"
+#include "absl/container/flat_hash_set.h"
#include "absl/log/absl_check.h"
#include "absl/log/absl_log.h"
-#include "absl/container/flat_hash_set.h"
+#include "absl/log/globals.h"
+#include "absl/status/status.h"
+#include "absl/status/statusor.h"
+#include "absl/strings/ascii.h"
#include "absl/strings/match.h"
+#include "absl/strings/str_cat.h"
#include "absl/strings/str_format.h"
#include "absl/strings/str_replace.h"
#include "absl/strings/str_split.h"
#include "absl/strings/string_view.h"
#include "absl/strings/substitute.h"
+#include "absl/types/span.h"
#include "google/protobuf/compiler/code_generator.h"
#include "google/protobuf/compiler/importer.h"
#include "google/protobuf/compiler/plugin.pb.h"
#include "google/protobuf/compiler/retention.h"
#include "google/protobuf/compiler/subprocess.h"
+#include "google/protobuf/compiler/versions.h"
#include "google/protobuf/compiler/zip_writer.h"
#include "google/protobuf/descriptor.h"
#include "google/protobuf/descriptor.pb.h"
+#include "google/protobuf/descriptor_database.h"
+#include "google/protobuf/descriptor_visitor.h"
#include "google/protobuf/dynamic_message.h"
+#include "google/protobuf/feature_resolver.h"
#include "google/protobuf/io/coded_stream.h"
#include "google/protobuf/io/printer.h"
#include "google/protobuf/io/zero_copy_stream_impl.h"
+#include "google/protobuf/io/zero_copy_stream_impl_lite.h"
#include "google/protobuf/text_format.h"
@@ -94,9 +92,7 @@
#include "google/protobuf/io/io_win32.h"
#endif
-#if defined(_WIN32) || defined(__CYGWIN__)
-#include "absl/strings/ascii.h"
-#endif
+#include "google/protobuf/stubs/platform_macros.h"
// Must be included last.
#include "google/protobuf/port_def.inc"
@@ -3168,10 +3164,10 @@
// Utility function for PrintFreeFieldNumbers.
// Actually prints the formatted free field numbers for given message name and
// occupied ranges.
-void FormatFreeFieldNumbers(const std::string& name,
+void FormatFreeFieldNumbers(absl::string_view name,
const absl::btree_set<FieldRange>& ranges) {
std::string output;
- absl::StrAppendFormat(&output, "%-35s free:", name.c_str());
+ absl::StrAppendFormat(&output, "%-35s free:", name);
int next_free_number = 1;
for (const auto& range : ranges) {
// This happens when groups re-use parent field numbers, in which
diff --git a/src/google/protobuf/compiler/cpp/enum.cc b/src/google/protobuf/compiler/cpp/enum.cc
index d61a622..c40a5df 100644
--- a/src/google/protobuf/compiler/cpp/enum.cc
+++ b/src/google/protobuf/compiler/cpp/enum.cc
@@ -41,7 +41,7 @@
const EnumValueDescriptor* min, const EnumValueDescriptor* max) {
auto classname = ClassName(enum_, false);
return {
- {"Enum", enum_->name()},
+ {"Enum", std::string(enum_->name())},
{"Enum_", ResolveKeyword(enum_->name())},
{"Msg_Enum", classname},
{"::Msg_Enum", QualifiedClassName(enum_, options)},
diff --git a/src/google/protobuf/compiler/cpp/extension.cc b/src/google/protobuf/compiler/cpp/extension.cc
index 1d95d61..4dbfe5a 100644
--- a/src/google/protobuf/compiler/cpp/extension.cc
+++ b/src/google/protobuf/compiler/cpp/extension.cc
@@ -63,8 +63,7 @@
variables_["extendee"] =
QualifiedClassName(descriptor_->containing_type(), options_);
variables_["type_traits"] = type_traits_;
- std::string name = descriptor_->name();
- variables_["name"] = ResolveKeyword(name);
+ variables_["name"] = ResolveKeyword(descriptor_->name());
variables_["constant_name"] = FieldConstantName(descriptor_);
variables_["field_type"] =
absl::StrCat(static_cast<int>(descriptor_->type()));
diff --git a/src/google/protobuf/compiler/cpp/file.cc b/src/google/protobuf/compiler/cpp/file.cc
index aeca550..246e09f 100644
--- a/src/google/protobuf/compiler/cpp/file.cc
+++ b/src/google/protobuf/compiler/cpp/file.cc
@@ -59,7 +59,7 @@
absl::flat_hash_map<absl::string_view, std::string> FileVars(
const FileDescriptor* file, const Options& options) {
return {
- {"filename", file->name()},
+ {"filename", std::string(file->name())},
{"package_ns", Namespace(file, options)},
{"tablename", UniqueName("TableStruct", file, options)},
{"desc_table", DescriptorTableName(file, options)},
@@ -1833,3 +1833,5 @@
} // namespace compiler
} // namespace protobuf
} // namespace google
+
+#include "google/protobuf/port_undef.inc"
diff --git a/src/google/protobuf/compiler/cpp/helpers.cc b/src/google/protobuf/compiler/cpp/helpers.cc
index f221614..c6a6c56 100644
--- a/src/google/protobuf/compiler/cpp/helpers.cc
+++ b/src/google/protobuf/compiler/cpp/helpers.cc
@@ -529,7 +529,7 @@
}
std::string FieldName(const FieldDescriptor* field) {
- std::string result = field->name();
+ std::string result = std::string(field->name());
absl::AsciiStrToLower(&result);
if (Keywords().count(result) > 0) {
result.append("_");
@@ -563,7 +563,7 @@
}
std::string EnumValueName(const EnumValueDescriptor* enum_value) {
- std::string result = enum_value->name();
+ std::string result = std::string(enum_value->name());
if (Keywords().count(result) > 0) {
result.append("_");
}
@@ -902,7 +902,7 @@
const FieldDescriptor* field,
absl::string_view prefix) {
// Do not use FieldName() since it will escape keywords.
- std::string name = field->name();
+ std::string name = std::string(field->name());
absl::AsciiStrToLower(&name);
std::string function_name = absl::StrCat(prefix, name);
if (descriptor->FindFieldByName(function_name)) {
diff --git a/src/google/protobuf/compiler/cpp/helpers.h b/src/google/protobuf/compiler/cpp/helpers.h
index 1aadfbe..95c2b6b 100644
--- a/src/google/protobuf/compiler/cpp/helpers.h
+++ b/src/google/protobuf/compiler/cpp/helpers.h
@@ -583,7 +583,7 @@
extension = ".proto.static_reflection.h";
}
std::string filename_identifier =
- FilenameIdentifier(file->name() + extension);
+ FilenameIdentifier(absl::StrCat(file->name(), extension));
if (IsWellKnownMessage(file)) {
// For well-known messages we need third_party/protobuf and net/proto2 to
@@ -1022,7 +1022,7 @@
template <typename T>
std::string FieldComment(const T* field, const Options& options) {
if (options.strip_nonfunctional_codegen) {
- return field->name();
+ return std::string(field->name());
}
// Print the field's (or oneof's) proto-syntax definition as a comment.
// We don't want to print group bodies so we cut off after the first
diff --git a/src/google/protobuf/compiler/cpp/unittest.inc b/src/google/protobuf/compiler/cpp/unittest.inc
index b08cc95..a6552e1 100644
--- a/src/google/protobuf/compiler/cpp/unittest.inc
+++ b/src/google/protobuf/compiler/cpp/unittest.inc
@@ -40,8 +40,8 @@
#include "google/protobuf/compiler/cpp/helpers.h"
#include "google/protobuf/unittest_no_generic_services.pb.h"
#include "google/protobuf/descriptor.pb.h"
-#include "google/protobuf/testing/googletest.h"
#include <gtest/gtest.h>
+#include <gmock/gmock.h>
#include "absl/base/casts.h"
#include "absl/strings/substitute.h"
#include "google/protobuf/arena.h"
@@ -66,6 +66,8 @@
// Can't use an anonymous namespace here due to brokenness of Tru64 compiler.
namespace cpp_unittest {
+using ::testing::UnorderedElementsAre;
+
void DoNothing() {}
@@ -2080,19 +2082,18 @@
UNITTEST::TestMutualRecursionA a;
MessageSCCAnalyzer scc_analyzer((Options()));
const SCC* scc = scc_analyzer.GetSCC(a.GetDescriptor());
- std::vector<std::string> names;
+ std::vector<absl::string_view> names;
names.reserve(scc->descriptors.size());
for (int i = 0; i < scc->descriptors.size(); i++) {
names.push_back(scc->descriptors[i]->full_name());
}
- std::string package = a.GetDescriptor()->file()->package();
- ASSERT_EQ(names.size(), 4);
- std::sort(names.begin(), names.end());
- EXPECT_EQ(names[0], absl::StrCat(package, ".TestMutualRecursionA"));
- EXPECT_EQ(names[1], absl::StrCat(package, ".TestMutualRecursionA.SubGroup"));
- EXPECT_EQ(names[2],
- absl::StrCat(package, ".TestMutualRecursionA.SubMessage"));
- EXPECT_EQ(names[3], absl::StrCat(package, ".TestMutualRecursionB"));
+ const absl::string_view package = a.GetDescriptor()->file()->package();
+ EXPECT_THAT(names,
+ UnorderedElementsAre(
+ absl::StrCat(package, ".TestMutualRecursionA"),
+ absl::StrCat(package, ".TestMutualRecursionA.SubGroup"),
+ absl::StrCat(package, ".TestMutualRecursionA.SubMessage"),
+ absl::StrCat(package, ".TestMutualRecursionB")));
MessageAnalysis result = scc_analyzer.GetSCCAnalysis(scc);
EXPECT_EQ(result.is_recursive, true);
diff --git a/src/google/protobuf/compiler/csharp/csharp_enum.cc b/src/google/protobuf/compiler/csharp/csharp_enum.cc
index 7f2626c..ac03775 100644
--- a/src/google/protobuf/compiler/csharp/csharp_enum.cc
+++ b/src/google/protobuf/compiler/csharp/csharp_enum.cc
@@ -50,7 +50,7 @@
if (descriptor_->value(i)->options().deprecated()) {
printer->Print("[global::System.ObsoleteAttribute]\n");
}
- std::string original_name = descriptor_->value(i)->name();
+ const absl::string_view original_name = descriptor_->value(i)->name();
std::string name =
GetEnumValueName(descriptor_->name(), descriptor_->value(i)->name());
// Make sure we don't get any duplicate names due to prefix removal.
diff --git a/src/google/protobuf/compiler/csharp/csharp_helpers.cc b/src/google/protobuf/compiler/csharp/csharp_helpers.cc
index 7a6a4b9..2058865 100644
--- a/src/google/protobuf/compiler/csharp/csharp_helpers.cc
+++ b/src/google/protobuf/compiler/csharp/csharp_helpers.cc
@@ -208,9 +208,9 @@
// editions are like groups, but have a real name, so we use that.
std::string GetFieldName(const FieldDescriptor* descriptor) {
if (internal::cpp::IsGroupLike(*descriptor)) {
- return descriptor->message_type()->name();
+ return std::string(descriptor->message_type()->name());
} else {
- return descriptor->name();
+ return std::string(descriptor->name());
}
}
diff --git a/src/google/protobuf/compiler/csharp/csharp_helpers.h b/src/google/protobuf/compiler/csharp/csharp_helpers.h
index a7158d2..a97a16a 100644
--- a/src/google/protobuf/compiler/csharp/csharp_helpers.h
+++ b/src/google/protobuf/compiler/csharp/csharp_helpers.h
@@ -98,7 +98,7 @@
if (!IsDescriptorProto(descriptor->file())) {
return false;
}
- const std::string name = descriptor->name();
+ const absl::string_view name = descriptor->name();
return name == "FileOptions" ||
name == "MessageOptions" ||
name == "FieldOptions" ||
diff --git a/src/google/protobuf/compiler/csharp/csharp_message.cc b/src/google/protobuf/compiler/csharp/csharp_message.cc
index f8d57cf..9cc2376 100644
--- a/src/google/protobuf/compiler/csharp/csharp_message.cc
+++ b/src/google/protobuf/compiler/csharp/csharp_message.cc
@@ -9,6 +9,7 @@
#include <algorithm>
#include <sstream>
+#include <string>
#include "google/protobuf/compiler/code_generator.h"
#include "absl/container/flat_hash_map.h"
@@ -65,7 +66,9 @@
MessageGenerator::~MessageGenerator() {}
-std::string MessageGenerator::class_name() { return descriptor_->name(); }
+std::string MessageGenerator::class_name() {
+ return std::string(descriptor_->name());
+}
std::string MessageGenerator::full_class_name() {
return GetClassName(descriptor_);
diff --git a/src/google/protobuf/compiler/csharp/names.cc b/src/google/protobuf/compiler/csharp/names.cc
index 7e9e345..8d7f752 100644
--- a/src/google/protobuf/compiler/csharp/names.cc
+++ b/src/google/protobuf/compiler/csharp/names.cc
@@ -38,10 +38,10 @@
// Returns the Pascal-cased last part of the proto file. For example,
// input of "google/protobuf/foo_bar.proto" would result in "FooBar".
std::string GetFileNameBase(const FileDescriptor* descriptor) {
- std::string proto_file = descriptor->name();
- int lastslash = proto_file.find_last_of('/');
- std::string base = proto_file.substr(lastslash + 1);
- return UnderscoresToPascalCase(StripDotProto(base));
+ const absl::string_view proto_file = descriptor->name();
+ int lastslash = proto_file.find_last_of('/');
+ const absl::string_view base = proto_file.substr(lastslash + 1);
+ return UnderscoresToPascalCase(StripDotProto(base));
}
std::string ToCSharpName(absl::string_view name, const FileDescriptor* file) {
diff --git a/src/google/protobuf/compiler/java/doc_comment.cc b/src/google/protobuf/compiler/java/doc_comment.cc
index 2e194dd..ee4bc73 100644
--- a/src/google/protobuf/compiler/java/doc_comment.cc
+++ b/src/google/protobuf/compiler/java/doc_comment.cc
@@ -19,6 +19,7 @@
#include <vector>
#include "absl/strings/str_split.h"
+#include "absl/strings/string_view.h"
#include "google/protobuf/compiler/java/options.h"
#include "google/protobuf/descriptor.h"
#include "google/protobuf/descriptor.pb.h"
@@ -29,7 +30,7 @@
namespace compiler {
namespace java {
-std::string EscapeJavadoc(const std::string& input) {
+std::string EscapeJavadoc(absl::string_view input) {
std::string result;
result.reserve(input.size() * 2);
@@ -87,7 +88,7 @@
return result;
}
-static std::string EscapeKdoc(const std::string& input) {
+static std::string EscapeKdoc(absl::string_view input) {
std::string result;
result.reserve(input.size() * 2);
@@ -142,7 +143,7 @@
comments = EscapeJavadoc(comments);
}
- std::vector<std::string> lines = absl::StrSplit(comments, "\n");
+ std::vector<std::string> lines = absl::StrSplit(comments, '\n');
while (!lines.empty() && lines.back().empty()) {
lines.pop_back();
}
diff --git a/src/google/protobuf/compiler/java/doc_comment.h b/src/google/protobuf/compiler/java/doc_comment.h
index 0820b16..41c4d31 100644
--- a/src/google/protobuf/compiler/java/doc_comment.h
+++ b/src/google/protobuf/compiler/java/doc_comment.h
@@ -12,6 +12,7 @@
#ifndef GOOGLE_PROTOBUF_COMPILER_JAVA_DOC_COMMENT_H__
#define GOOGLE_PROTOBUF_COMPILER_JAVA_DOC_COMMENT_H__
+#include "absl/strings/string_view.h"
#include "google/protobuf/compiler/java/options.h"
#include "google/protobuf/descriptor.h"
@@ -71,7 +72,7 @@
// Exposed for testing only.
// Also called by proto1-Java code generator.
-PROTOC_EXPORT std::string EscapeJavadoc(const std::string& input);
+PROTOC_EXPORT std::string EscapeJavadoc(absl::string_view input);
} // namespace java
} // namespace compiler
diff --git a/src/google/protobuf/compiler/java/helpers.h b/src/google/protobuf/compiler/java/helpers.h
index d99e085..3cd40e2 100644
--- a/src/google/protobuf/compiler/java/helpers.h
+++ b/src/google/protobuf/compiler/java/helpers.h
@@ -108,7 +108,7 @@
// Get the unqualified Java class name for mutable messages. i.e. without
// package or outer classnames.
inline std::string ShortMutableJavaClassName(const Descriptor* descriptor) {
- return descriptor->name();
+ return std::string(descriptor->name());
}
// Whether the given descriptor is for one of the core descriptor protos. We
diff --git a/src/google/protobuf/compiler/java/lite/message.cc b/src/google/protobuf/compiler/java/lite/message.cc
index 1d24067..39222bb 100644
--- a/src/google/protobuf/compiler/java/lite/message.cc
+++ b/src/google/protobuf/compiler/java/lite/message.cc
@@ -95,7 +95,7 @@
{"deprecation",
descriptor_->options().deprecated() ? "@java.lang.Deprecated " : ""},
{"extra_interfaces", ExtraMessageOrBuilderInterfaces(descriptor_)},
- {"classname", descriptor_->name()},
+ {"classname", std::string(descriptor_->name())},
};
if (!context_->options().opensource_runtime) {
diff --git a/src/google/protobuf/compiler/java/name_resolver.cc b/src/google/protobuf/compiler/java/name_resolver.cc
index 5d270c2..0446173 100644
--- a/src/google/protobuf/compiler/java/name_resolver.cc
+++ b/src/google/protobuf/compiler/java/name_resolver.cc
@@ -55,7 +55,7 @@
}
std::string ClassNameWithoutPackageKotlin(const Descriptor* descriptor) {
- std::string result = descriptor->name();
+ std::string result = std::string(descriptor->name());
const Descriptor* temp = descriptor->containing_type();
while (temp) {
@@ -71,7 +71,7 @@
// Doesn't append "Mutable" for enum type's name.
const Descriptor* message_descriptor = descriptor->containing_type();
if (message_descriptor == nullptr) {
- return descriptor->name();
+ return std::string(descriptor->name());
} else {
return absl::StrCat(ClassNameWithoutPackage(message_descriptor, immutable),
".", descriptor->name());
diff --git a/src/google/protobuf/compiler/java/shared_code_generator.cc b/src/google/protobuf/compiler/java/shared_code_generator.cc
index d2bb9a5..ddbdda5 100644
--- a/src/google/protobuf/compiler/java/shared_code_generator.cc
+++ b/src/google/protobuf/compiler/java/shared_code_generator.cc
@@ -10,6 +10,7 @@
#include "google/protobuf/compiler/java/shared_code_generator.h"
#include <memory>
+#include <utility>
#include "absl/strings/escaping.h"
#include "absl/strings/str_cat.h"
@@ -17,6 +18,7 @@
#include "google/protobuf/compiler/java/helpers.h"
#include "google/protobuf/compiler/java/name_resolver.h"
#include "google/protobuf/compiler/java/names.h"
+#include "google/protobuf/compiler/java/options.h"
#include "google/protobuf/compiler/retention.h"
#include "google/protobuf/compiler/versions.h"
#include "google/protobuf/descriptor.h"
@@ -166,7 +168,7 @@
// Find out all dependencies.
std::vector<std::pair<std::string, std::string> > dependencies;
for (int i = 0; i < file_->dependency_count(); i++) {
- std::string filename = file_->dependency(i)->name();
+ const absl::string_view filename = file_->dependency(i)->name();
std::string package = FileJavaPackage(file_->dependency(i), true, options_);
std::string classname =
name_resolver_->GetDescriptorClassName(file_->dependency(i));
@@ -176,7 +178,7 @@
} else {
full_name = absl::StrCat(package, ".", classname);
}
- dependencies.push_back(std::make_pair(filename, full_name));
+ dependencies.push_back(std::make_pair(std::string(filename), full_name));
}
// -----------------------------------------------------------------
diff --git a/src/google/protobuf/compiler/objectivec/enum.cc b/src/google/protobuf/compiler/objectivec/enum.cc
index c8bfcbc..1c4b86f 100644
--- a/src/google/protobuf/compiler/objectivec/enum.cc
+++ b/src/google/protobuf/compiler/objectivec/enum.cc
@@ -170,7 +170,7 @@
text_blob += short_name + '\0';
if (UnCamelCaseEnumShortName(short_name) != v->name()) {
text_format_decode_data.AddString(enum_value_description_key, short_name,
- v->name());
+ std::string(v->name()));
}
}
diff --git a/src/google/protobuf/compiler/objectivec/field.cc b/src/google/protobuf/compiler/objectivec/field.cc
index c60158a..f72b6a9 100644
--- a/src/google/protobuf/compiler/objectivec/field.cc
+++ b/src/google/protobuf/compiler/objectivec/field.cc
@@ -137,8 +137,7 @@
case FieldDescriptor::CPPTYPE_BOOL:
return field->default_value_bool();
case FieldDescriptor::CPPTYPE_STRING: {
- const std::string& default_string = field->default_value_string();
- return !default_string.empty();
+ return !field->default_value_string().empty();
}
case FieldDescriptor::CPPTYPE_ENUM:
// The default value for an enum field is the first enum value, so there
diff --git a/src/google/protobuf/compiler/objectivec/file.cc b/src/google/protobuf/compiler/objectivec/file.cc
index fdd0670..6020d41 100644
--- a/src/google/protobuf/compiler/objectivec/file.cc
+++ b/src/google/protobuf/compiler/objectivec/file.cc
@@ -530,7 +530,7 @@
// #import the headers for anything that a plain dependency of this
// proto file (that means they were just an include, not a "public"
// include).
- absl::flat_hash_set<std::string> public_import_names;
+ absl::flat_hash_set<absl::string_view> public_import_names;
for (int i = 0; i < file_->public_dependency_count(); i++) {
public_import_names.insert(file_->public_dependency(i)->name());
}
diff --git a/src/google/protobuf/compiler/objectivec/helpers.cc b/src/google/protobuf/compiler/objectivec/helpers.cc
index 12608f4..02d5db0 100644
--- a/src/google/protobuf/compiler/objectivec/helpers.cc
+++ b/src/google/protobuf/compiler/objectivec/helpers.cc
@@ -405,7 +405,7 @@
// We don't check the name prefix or proto package because some files
// (descriptor.proto), aren't shipped generated by the library, so this
// seems to be the safest way to only catch the ones shipped.
- const std::string name = file->name();
+ const absl::string_view name = file->name();
if (name == "google/protobuf/any.proto" ||
name == "google/protobuf/duration.proto" ||
name == "google/protobuf/timestamp.proto") {
@@ -419,7 +419,7 @@
if (!HasWKTWithObjCCategory(descriptor->file())) {
return false;
}
- const std::string full_name = descriptor->full_name();
+ const absl::string_view full_name = descriptor->full_name();
if (full_name == "google.protobuf.Any" ||
full_name == "google.protobuf.Duration" ||
full_name == "google.protobuf.Timestamp") {
diff --git a/src/google/protobuf/compiler/objectivec/names.cc b/src/google/protobuf/compiler/objectivec/names.cc
index 597e0ec..01fdbfc 100644
--- a/src/google/protobuf/compiler/objectivec/names.cc
+++ b/src/google/protobuf/compiler/objectivec/names.cc
@@ -163,11 +163,12 @@
}
}
- const std::string package = file->package();
+ const absl::string_view package = file->package();
// For files without packages, the can be registered as "no_package:PATH",
// allowing the expected prefixes file.
const std::string lookup_key =
- package.empty() ? absl::StrCat(kNoPackagePrefix, file->name()) : package;
+ package.empty() ? absl::StrCat(kNoPackagePrefix, file->name())
+ : std::string(package);
auto prefix_lookup = package_to_prefix_map_.find(lookup_key);
@@ -574,9 +575,9 @@
std::string NameFromFieldDescriptor(const FieldDescriptor* field) {
if (internal::cpp::IsGroupLike(*field)) {
- return field->message_type()->name();
+ return std::string(field->message_type()->name());
} else {
- return field->name();
+ return std::string(field->name());
}
}
@@ -1179,7 +1180,7 @@
// We don't check the name prefix or proto package because some files
// (descriptor.proto), aren't shipped generated by the library, so this
// seems to be the safest way to only catch the ones shipped.
- const std::string name = file->name();
+ const absl::string_view name = file->name();
if (name == "google/protobuf/any.proto" ||
name == "google/protobuf/api.proto" ||
name == "google/protobuf/duration.proto" ||
@@ -1241,12 +1242,13 @@
bool has_prefix = file->options().has_objc_class_prefix();
bool have_expected_prefix_file = !expected_prefixes_path.empty();
- const std::string prefix = file->options().objc_class_prefix();
- const std::string package = file->package();
+ const absl::string_view prefix = file->options().objc_class_prefix();
+ const absl::string_view package = file->package();
// For files without packages, the can be registered as "no_package:PATH",
// allowing the expected prefixes file.
const std::string lookup_key =
- package.empty() ? absl::StrCat(kNoPackagePrefix, file->name()) : package;
+ package.empty() ? absl::StrCat(kNoPackagePrefix, file->name())
+ : std::string(package);
// NOTE: src/google/protobuf/compiler/plugin.cc makes use of cerr for some
// error cases, so it seems to be ok to use as a back door for warnings.
diff --git a/src/google/protobuf/compiler/php/names.cc b/src/google/protobuf/compiler/php/names.cc
index 135b55b..79371ab 100644
--- a/src/google/protobuf/compiler/php/names.cc
+++ b/src/google/protobuf/compiler/php/names.cc
@@ -49,7 +49,7 @@
return false;
}
-std::string ReservedNamePrefix(const std::string& classname,
+std::string ReservedNamePrefix(const absl::string_view classname,
const FileDescriptor* file) {
if (IsReservedName(classname)) {
if (file->package() == "google.protobuf") {
@@ -65,7 +65,7 @@
namespace {
template <typename DescriptorType>
-std::string ClassNamePrefixImpl(const std::string& classname,
+std::string ClassNamePrefixImpl(const absl::string_view classname,
const DescriptorType* desc) {
const std::string& prefix = (desc->file()->options()).php_class_prefix();
if (!prefix.empty()) {
@@ -77,19 +77,20 @@
template <typename DescriptorType>
std::string GeneratedClassNameImpl(const DescriptorType* desc) {
- std::string classname = ClassNamePrefixImpl(desc->name(), desc) + desc->name();
+ std::string classname =
+ absl::StrCat(ClassNamePrefixImpl(desc->name(), desc), desc->name());
const Descriptor* containing = desc->containing_type();
while (containing != nullptr) {
- classname = ClassNamePrefixImpl(containing->name(), desc) + containing->name()
- + '\\' + classname;
+ classname = absl::StrCat(ClassNamePrefixImpl(containing->name(), desc),
+ containing->name(), "\\", classname);
containing = containing->containing_type();
}
return classname;
}
std::string GeneratedClassNameImpl(const ServiceDescriptor* desc) {
- std::string classname = desc->name();
- return ClassNamePrefixImpl(classname, desc) + classname;
+ const absl::string_view classname = desc->name();
+ return absl::StrCat(ClassNamePrefixImpl(classname, desc), classname);
}
} // namespace
diff --git a/src/google/protobuf/compiler/php/names.h b/src/google/protobuf/compiler/php/names.h
index 76220f8..1d37488 100644
--- a/src/google/protobuf/compiler/php/names.h
+++ b/src/google/protobuf/compiler/php/names.h
@@ -24,13 +24,13 @@
PROTOC_EXPORT bool IsReservedName(absl::string_view name);
// A prefix to stick in front of reserved names to avoid clashes.
-PROTOC_EXPORT std::string ReservedNamePrefix(const std::string& classname,
+PROTOC_EXPORT std::string ReservedNamePrefix(absl::string_view classname,
const FileDescriptor* file);
// A prefix to stick in front of all class names.
-PROTOC_EXPORT std::string ClassNamePrefix(const std::string& classname,
+PROTOC_EXPORT std::string ClassNamePrefix(absl::string_view classname,
const Descriptor* desc);
-PROTOC_EXPORT std::string ClassNamePrefix(const std::string& classname,
+PROTOC_EXPORT std::string ClassNamePrefix(absl::string_view classname,
const EnumDescriptor* desc);
// To skip reserved keywords in php, some generated classname are prefixed.
diff --git a/src/google/protobuf/compiler/php/php_generator.cc b/src/google/protobuf/compiler/php/php_generator.cc
index 006d6de..ef8cdce 100644
--- a/src/google/protobuf/compiler/php/php_generator.cc
+++ b/src/google/protobuf/compiler/php/php_generator.cc
@@ -752,9 +752,10 @@
for (int i = 0; i < en->value_count(); i++) {
const EnumValueDescriptor* value = en->value(i);
- printer->Print("->value(\"^name^\", ^number^)\n", "name",
- ConstantNamePrefix(value->name()) + value->name(), "number",
- IntToString(value->number()));
+ printer->Print(
+ "->value(\"^name^\", ^number^)\n", "name",
+ absl::StrCat(ConstantNamePrefix(value->name()), value->name()),
+ "number", IntToString(value->number()));
}
printer->Print("->finalizeToPool();\n\n");
Outdent(printer);
@@ -1172,17 +1173,19 @@
hasReserved = true;
}
- printer.Print("const ^name^ = ^number^;\n", "name", prefix + value->name(),
- "number", IntToString(value->number()));
+ printer.Print("const ^name^ = ^number^;\n", "name",
+ absl::StrCat(prefix, value->name()), "number",
+ IntToString(value->number()));
}
printer.Print("\nprivate static $valueToName = [\n");
Indent(&printer);
for (int i = 0; i < en->value_count(); i++) {
const EnumValueDescriptor* value = en->value(i);
- printer.Print("self::^constant^ => '^name^',\n", "constant",
- ConstantNamePrefix(value->name()) + value->name(), "name",
- value->name());
+ printer.Print(
+ "self::^constant^ => '^name^',\n", "constant",
+ absl::StrCat(ConstantNamePrefix(value->name()), value->name()), "name",
+ value->name());
}
Outdent(&printer);
printer.Print("];\n");
diff --git a/src/google/protobuf/compiler/python/generator.cc b/src/google/protobuf/compiler/python/generator.cc
index dc4ac83..41be7df 100644
--- a/src/google/protobuf/compiler/python/generator.cc
+++ b/src/google/protobuf/compiler/python/generator.cc
@@ -1433,7 +1433,7 @@
PrintDescriptorOptionsFixingCode(
value_descriptor, proto.value(i),
absl::StrFormat("%s.values_by_name[\"%s\"]", descriptor_name.c_str(),
- value_descriptor.name().c_str()));
+ value_descriptor.name()));
}
}
diff --git a/src/google/protobuf/compiler/python/helpers.cc b/src/google/protobuf/compiler/python/helpers.cc
index 0a6a806..63cc7ae 100644
--- a/src/google/protobuf/compiler/python/helpers.cc
+++ b/src/google/protobuf/compiler/python/helpers.cc
@@ -94,7 +94,7 @@
template <typename DescriptorT>
std::string NamePrefixedWithNestedTypes(const DescriptorT& descriptor,
absl::string_view separator) {
- std::string name = descriptor.name();
+ std::string name = std::string(descriptor.name());
const Descriptor* parent = descriptor.containing_type();
if (parent != nullptr) {
std::string prefix = NamePrefixedWithNestedTypes(*parent, separator);
diff --git a/src/google/protobuf/compiler/python/pyi_generator.cc b/src/google/protobuf/compiler/python/pyi_generator.cc
index 7f7bfed..323f93e 100644
--- a/src/google/protobuf/compiler/python/pyi_generator.cc
+++ b/src/google/protobuf/compiler/python/pyi_generator.cc
@@ -39,7 +39,7 @@
std::string name = NamePrefixedWithNestedTypes(descriptor, ".");
if (descriptor.file() != file_) {
std::string module_alias;
- std::string filename = descriptor.file()->name();
+ const absl::string_view filename = descriptor.file()->name();
if (import_map_.find(filename) == import_map_.end()) {
std::string module_name = ModuleName(descriptor.file()->name());
std::vector<absl::string_view> tokens = absl::StrSplit(module_name, '.');
@@ -71,7 +71,7 @@
};
// Checks whether a descriptor name matches a well-known type.
-bool IsWellKnownType(const std::string& name) {
+bool IsWellKnownType(const absl::string_view name) {
// LINT.IfChange(wktbases)
return (name == "google.protobuf.Any" ||
name == "google.protobuf.Duration" ||
@@ -132,7 +132,7 @@
void PyiGenerator::PrintImportForDescriptor(
const FileDescriptor& desc, absl::flat_hash_set<std::string>* seen_aliases,
bool* has_importlib) const {
- const std::string& filename = desc.name();
+ const absl::string_view filename = desc.name();
std::string module_name_owned = StrippedModuleName(filename);
absl::string_view module_name(module_name_owned);
size_t last_dot_pos = module_name.rfind('.');
@@ -288,7 +288,7 @@
}
void PyiGenerator::PrintEnum(const EnumDescriptor& enum_descriptor) const {
- std::string enum_name = enum_descriptor.name();
+ const absl::string_view enum_name = enum_descriptor.name();
printer_->Print(
"class $enum_name$(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):\n"
" __slots__ = ()\n",
@@ -385,7 +385,7 @@
if (!is_nested) {
printer_->Print("\n");
}
- std::string class_name = message_descriptor.name();
+ const absl::string_view class_name = message_descriptor.name();
std::string extra_base;
// A well-known type needs to inherit from its corresponding base class in
// net/proto2/python/internal/well_known_types.
@@ -484,7 +484,7 @@
has_key_words = true;
continue;
}
- std::string field_name = field_des->name();
+ std::string field_name = std::string(field_des->name());
if (is_first && field_name == "self") {
// See b/144146793 for an example of real code that generates a (self,
// self) method signature. Since repeating a parameter name is illegal in