PROTOBUF_SYNC_PIPER
pull/10457/head
Mike Kruskal 2 years ago
parent a3c8e2deb0
commit c4e3ccca9d
  1. 3
      src/google/protobuf/compiler/java/context.h
  2. 4
      src/google/protobuf/compiler/java/enum.h
  3. 19
      src/google/protobuf/compiler/java/enum_field.h
  4. 20
      src/google/protobuf/compiler/java/enum_field_lite.h
  5. 4
      src/google/protobuf/compiler/java/enum_lite.h
  6. 11
      src/google/protobuf/compiler/java/extension.h
  7. 6
      src/google/protobuf/compiler/java/extension_lite.h
  8. 15
      src/google/protobuf/compiler/java/field.h
  9. 4
      src/google/protobuf/compiler/java/file.h
  10. 3
      src/google/protobuf/compiler/java/generator.h
  11. 9
      src/google/protobuf/compiler/java/generator_factory.h
  12. 2
      src/google/protobuf/compiler/java/helpers.cc
  13. 5
      src/google/protobuf/compiler/java/kotlin_generator.h
  14. 10
      src/google/protobuf/compiler/java/message.h
  15. 4
      src/google/protobuf/compiler/java/message_builder.h
  16. 5
      src/google/protobuf/compiler/java/message_builder_lite.h
  17. 19
      src/google/protobuf/compiler/java/message_field.h
  18. 18
      src/google/protobuf/compiler/java/message_field_lite.h
  19. 5
      src/google/protobuf/compiler/java/message_lite.h
  20. 3
      src/google/protobuf/compiler/java/message_serialization_unittest.cc
  21. 20
      src/google/protobuf/compiler/java/primitive_field.h
  22. 20
      src/google/protobuf/compiler/java/primitive_field_lite.h
  23. 9
      src/google/protobuf/compiler/java/service.h
  24. 3
      src/google/protobuf/compiler/java/shared_code_generator.h
  25. 18
      src/google/protobuf/compiler/java/string_field.h
  26. 19
      src/google/protobuf/compiler/java/string_field_lite.h
  27. 64
      src/google/protobuf/message.cc
  28. 2
      src/google/protobuf/port.h
  29. 1
      src/google/protobuf/unittest_drop_unknown_fields.proto
  30. 1
      src/google/protobuf/unittest_preserve_unknown_enum.proto
  31. 17
      src/google/protobuf/util/field_comparator.cc
  32. 25
      src/google/protobuf/util/field_mask_util.cc

@ -65,6 +65,8 @@ struct OneofGeneratorInfo;
class Context {
public:
Context(const FileDescriptor* file, const Options& options);
Context(const Context&) = delete;
Context& operator=(const Context&) = delete;
~Context();
// Get the name resolver associated with this context. The resolver
@ -102,7 +104,6 @@ class Context {
absl::flat_hash_map<const OneofDescriptor*, OneofGeneratorInfo>
oneof_generator_info_map_;
Options options_;
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Context);
};
} // namespace java

@ -62,6 +62,8 @@ class EnumGenerator {
public:
EnumGenerator(const EnumDescriptor* descriptor, bool immutable_api,
Context* context);
EnumGenerator(const EnumGenerator&) = delete;
EnumGenerator& operator=(const EnumGenerator&) = delete;
~EnumGenerator();
void Generate(io::Printer* printer);
@ -88,8 +90,6 @@ class EnumGenerator {
ClassNameResolver* name_resolver_;
bool CanUseEnumValues();
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(EnumGenerator);
};
} // namespace java

@ -61,6 +61,9 @@ class ImmutableEnumFieldGenerator : public ImmutableFieldGenerator {
explicit ImmutableEnumFieldGenerator(const FieldDescriptor* descriptor,
int messageBitIndex, int builderBitIndex,
Context* context);
ImmutableEnumFieldGenerator(const ImmutableEnumFieldGenerator&) = delete;
ImmutableEnumFieldGenerator& operator=(const ImmutableEnumFieldGenerator&) =
delete;
~ImmutableEnumFieldGenerator() override;
// implements ImmutableFieldGenerator
@ -90,9 +93,6 @@ class ImmutableEnumFieldGenerator : public ImmutableFieldGenerator {
const FieldDescriptor* descriptor_;
std::map<std::string, std::string> variables_;
ClassNameResolver* name_resolver_;
private:
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableEnumFieldGenerator);
};
class ImmutableEnumOneofFieldGenerator : public ImmutableEnumFieldGenerator {
@ -100,6 +100,10 @@ class ImmutableEnumOneofFieldGenerator : public ImmutableEnumFieldGenerator {
ImmutableEnumOneofFieldGenerator(const FieldDescriptor* descriptor,
int messageBitIndex, int builderBitIndex,
Context* context);
ImmutableEnumOneofFieldGenerator(const ImmutableEnumOneofFieldGenerator&) =
delete;
ImmutableEnumOneofFieldGenerator& operator=(
const ImmutableEnumOneofFieldGenerator&) = delete;
~ImmutableEnumOneofFieldGenerator() override;
void GenerateMembers(io::Printer* printer) const override;
@ -111,9 +115,6 @@ class ImmutableEnumOneofFieldGenerator : public ImmutableEnumFieldGenerator {
void GenerateSerializedSizeCode(io::Printer* printer) const override;
void GenerateEqualsCode(io::Printer* printer) const override;
void GenerateHashCode(io::Printer* printer) const override;
private:
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableEnumOneofFieldGenerator);
};
class RepeatedImmutableEnumFieldGenerator : public ImmutableFieldGenerator {
@ -121,6 +122,10 @@ class RepeatedImmutableEnumFieldGenerator : public ImmutableFieldGenerator {
explicit RepeatedImmutableEnumFieldGenerator(
const FieldDescriptor* descriptor, int messageBitIndex,
int builderBitIndex, Context* context);
RepeatedImmutableEnumFieldGenerator(
const RepeatedImmutableEnumFieldGenerator&) = delete;
RepeatedImmutableEnumFieldGenerator& operator=(
const RepeatedImmutableEnumFieldGenerator&) = delete;
~RepeatedImmutableEnumFieldGenerator() override;
// implements ImmutableFieldGenerator ---------------------------------------
@ -150,8 +155,6 @@ class RepeatedImmutableEnumFieldGenerator : public ImmutableFieldGenerator {
const FieldDescriptor* descriptor_;
std::map<std::string, std::string> variables_;
ClassNameResolver* name_resolver_;
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(RepeatedImmutableEnumFieldGenerator);
};
} // namespace java

@ -62,6 +62,10 @@ class ImmutableEnumFieldLiteGenerator : public ImmutableFieldLiteGenerator {
explicit ImmutableEnumFieldLiteGenerator(const FieldDescriptor* descriptor,
int messageBitIndex,
Context* context);
ImmutableEnumFieldLiteGenerator(const ImmutableEnumFieldLiteGenerator&) =
delete;
ImmutableEnumFieldLiteGenerator& operator=(
const ImmutableEnumFieldLiteGenerator&) = delete;
~ImmutableEnumFieldLiteGenerator() override;
// implements ImmutableFieldLiteGenerator
@ -83,9 +87,6 @@ class ImmutableEnumFieldLiteGenerator : public ImmutableFieldLiteGenerator {
const int messageBitIndex_;
Context* context_;
ClassNameResolver* name_resolver_;
private:
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableEnumFieldLiteGenerator);
};
class ImmutableEnumOneofFieldLiteGenerator
@ -93,15 +94,16 @@ class ImmutableEnumOneofFieldLiteGenerator
public:
ImmutableEnumOneofFieldLiteGenerator(const FieldDescriptor* descriptor,
int messageBitIndex, Context* context);
ImmutableEnumOneofFieldLiteGenerator(
const ImmutableEnumOneofFieldLiteGenerator&) = delete;
ImmutableEnumOneofFieldLiteGenerator& operator=(
const ImmutableEnumOneofFieldLiteGenerator&) = delete;
~ImmutableEnumOneofFieldLiteGenerator() override;
void GenerateMembers(io::Printer* printer) const override;
void GenerateBuilderMembers(io::Printer* printer) const override;
void GenerateFieldInfo(io::Printer* printer,
std::vector<uint16_t>* output) const override;
private:
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableEnumOneofFieldLiteGenerator);
};
class RepeatedImmutableEnumFieldLiteGenerator
@ -109,6 +111,10 @@ class RepeatedImmutableEnumFieldLiteGenerator
public:
explicit RepeatedImmutableEnumFieldLiteGenerator(
const FieldDescriptor* descriptor, int messageBitIndex, Context* context);
RepeatedImmutableEnumFieldLiteGenerator(
const RepeatedImmutableEnumFieldLiteGenerator&) = delete;
RepeatedImmutableEnumFieldLiteGenerator& operator=(
const RepeatedImmutableEnumFieldLiteGenerator&) = delete;
~RepeatedImmutableEnumFieldLiteGenerator() override;
// implements ImmutableFieldLiteGenerator ------------------------------------
@ -128,8 +134,6 @@ class RepeatedImmutableEnumFieldLiteGenerator
std::map<std::string, std::string> variables_;
Context* context_;
ClassNameResolver* name_resolver_;
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(RepeatedImmutableEnumFieldLiteGenerator);
};
} // namespace java

@ -62,6 +62,8 @@ class EnumLiteGenerator {
public:
EnumLiteGenerator(const EnumDescriptor* descriptor, bool immutable_api,
Context* context);
EnumLiteGenerator(const EnumLiteGenerator&) = delete;
EnumLiteGenerator& operator=(const EnumLiteGenerator&) = delete;
~EnumLiteGenerator();
void Generate(io::Printer* printer);
@ -86,8 +88,6 @@ class EnumLiteGenerator {
Context* context_;
ClassNameResolver* name_resolver_;
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(EnumLiteGenerator);
};
} // namespace java

@ -66,6 +66,8 @@ namespace java {
class ExtensionGenerator {
public:
explicit ExtensionGenerator() {}
ExtensionGenerator(const ExtensionGenerator&) = delete;
ExtensionGenerator& operator=(const ExtensionGenerator&) = delete;
virtual ~ExtensionGenerator() {}
virtual void Generate(io::Printer* printer) = 0;
@ -84,15 +86,15 @@ class ExtensionGenerator {
ClassNameResolver* name_resolver,
std::map<std::string, std::string>* vars_pointer,
Context* context);
private:
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ExtensionGenerator);
};
class ImmutableExtensionGenerator : public ExtensionGenerator {
public:
explicit ImmutableExtensionGenerator(const FieldDescriptor* descriptor,
Context* context);
ImmutableExtensionGenerator(const ImmutableExtensionGenerator&) = delete;
ImmutableExtensionGenerator& operator=(const ImmutableExtensionGenerator&) =
delete;
~ImmutableExtensionGenerator() override;
void Generate(io::Printer* printer) override;
@ -104,9 +106,6 @@ class ImmutableExtensionGenerator : public ExtensionGenerator {
ClassNameResolver* name_resolver_;
std::string scope_;
Context* context_;
private:
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableExtensionGenerator);
};
} // namespace java

@ -49,6 +49,10 @@ class ImmutableExtensionLiteGenerator : public ExtensionGenerator {
public:
explicit ImmutableExtensionLiteGenerator(const FieldDescriptor* descriptor,
Context* context);
ImmutableExtensionLiteGenerator(const ImmutableExtensionLiteGenerator&) =
delete;
ImmutableExtensionLiteGenerator& operator=(
const ImmutableExtensionLiteGenerator&) = delete;
~ImmutableExtensionLiteGenerator() override;
void Generate(io::Printer* printer) override;
@ -64,8 +68,6 @@ class ImmutableExtensionLiteGenerator : public ExtensionGenerator {
ClassNameResolver* name_resolver_;
std::string scope_;
Context* context_;
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableExtensionLiteGenerator);
};
} // namespace java

@ -66,6 +66,8 @@ namespace java {
class ImmutableFieldGenerator {
public:
ImmutableFieldGenerator() {}
ImmutableFieldGenerator(const ImmutableFieldGenerator&) = delete;
ImmutableFieldGenerator& operator=(const ImmutableFieldGenerator&) = delete;
virtual ~ImmutableFieldGenerator();
virtual int GetNumBitsForMessage() const = 0;
@ -90,14 +92,14 @@ class ImmutableFieldGenerator {
virtual void GenerateHashCode(io::Printer* printer) const = 0;
virtual std::string GetBoxedType() const = 0;
private:
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableFieldGenerator);
};
class ImmutableFieldLiteGenerator {
public:
ImmutableFieldLiteGenerator() {}
ImmutableFieldLiteGenerator(const ImmutableFieldLiteGenerator&) = delete;
ImmutableFieldLiteGenerator& operator=(const ImmutableFieldLiteGenerator&) =
delete;
virtual ~ImmutableFieldLiteGenerator();
virtual int GetNumBitsForMessage() const = 0;
@ -110,9 +112,6 @@ class ImmutableFieldLiteGenerator {
virtual void GenerateKotlinDslMembers(io::Printer* printer) const = 0;
virtual std::string GetBoxedType() const = 0;
private:
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableFieldLiteGenerator);
};
@ -121,6 +120,8 @@ template <typename FieldGeneratorType>
class FieldGeneratorMap {
public:
explicit FieldGeneratorMap(const Descriptor* descriptor, Context* context);
FieldGeneratorMap(const FieldGeneratorMap&) = delete;
FieldGeneratorMap& operator=(const FieldGeneratorMap&) = delete;
~FieldGeneratorMap();
const FieldGeneratorType& get(const FieldDescriptor* field) const;
@ -128,8 +129,6 @@ class FieldGeneratorMap {
private:
const Descriptor* descriptor_;
std::vector<std::unique_ptr<FieldGeneratorType>> field_generators_;
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FieldGeneratorMap);
};
template <typename FieldGeneratorType>

@ -70,6 +70,8 @@ class FileGenerator {
public:
FileGenerator(const FileDescriptor* file, const Options& options,
bool immutable_api = true);
FileGenerator(const FileGenerator&) = delete;
FileGenerator& operator=(const FileGenerator&) = delete;
~FileGenerator();
// Checks for problems that would otherwise lead to cryptic compile errors.
@ -114,8 +116,6 @@ class FileGenerator {
ClassNameResolver* name_resolver_;
const Options options_;
bool immutable_api_;
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FileGenerator);
};
} // namespace java

@ -55,6 +55,8 @@ namespace java {
class PROTOC_EXPORT JavaGenerator : public CodeGenerator {
public:
JavaGenerator();
JavaGenerator(const JavaGenerator&) = delete;
JavaGenerator& operator=(const JavaGenerator&) = delete;
~JavaGenerator() override;
// implements CodeGenerator ----------------------------------------
@ -69,7 +71,6 @@ class PROTOC_EXPORT JavaGenerator : public CodeGenerator {
private:
bool opensource_runtime_ = PROTO2_IS_OSS;
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(JavaGenerator);
};
} // namespace java

@ -59,6 +59,8 @@ namespace java {
class GeneratorFactory {
public:
GeneratorFactory();
GeneratorFactory(const GeneratorFactory&) = delete;
GeneratorFactory& operator=(const GeneratorFactory&) = delete;
virtual ~GeneratorFactory();
virtual MessageGenerator* NewMessageGenerator(
@ -69,15 +71,15 @@ class GeneratorFactory {
virtual ServiceGenerator* NewServiceGenerator(
const ServiceDescriptor* descriptor) const = 0;
private:
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(GeneratorFactory);
};
// Factory that creates generators for immutable-default messages.
class ImmutableGeneratorFactory : public GeneratorFactory {
public:
ImmutableGeneratorFactory(Context* context);
ImmutableGeneratorFactory(const ImmutableGeneratorFactory&) = delete;
ImmutableGeneratorFactory& operator=(const ImmutableGeneratorFactory&) =
delete;
~ImmutableGeneratorFactory() override;
MessageGenerator* NewMessageGenerator(
@ -91,7 +93,6 @@ class ImmutableGeneratorFactory : public GeneratorFactory {
private:
Context* context_;
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableGeneratorFactory);
};

@ -109,7 +109,7 @@ const std::unordered_set<std::string>* kReservedNames =
});
bool IsForbidden(const std::string& field_name) {
for (int i = 0; i < GOOGLE_ARRAYSIZE(kForbiddenWordList); ++i) {
for (size_t i = 0; i < ABSL_ARRAYSIZE(kForbiddenWordList); ++i) {
if (UnderscoresToCamelCase(field_name, true) == kForbiddenWordList[i]) {
return true;
}

@ -52,6 +52,8 @@ namespace java {
class PROTOC_EXPORT KotlinGenerator : public CodeGenerator {
public:
KotlinGenerator();
KotlinGenerator(const KotlinGenerator&) = delete;
KotlinGenerator& operator=(const KotlinGenerator&) = delete;
~KotlinGenerator() override;
// implements CodeGenerator ----------------------------------------
@ -59,9 +61,6 @@ class PROTOC_EXPORT KotlinGenerator : public CodeGenerator {
GeneratorContext* context, std::string* error) const override;
uint64_t GetSupportedFeatures() const override;
private:
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(KotlinGenerator);
};
} // namespace java

@ -64,6 +64,8 @@ static const int kMaxStaticSize = 1 << 15; // aka 32k
class MessageGenerator {
public:
explicit MessageGenerator(const Descriptor* descriptor);
MessageGenerator(const MessageGenerator&) = delete;
MessageGenerator& operator=(const MessageGenerator&) = delete;
virtual ~MessageGenerator();
// All static variables have to be declared at the top-level of the file
@ -93,14 +95,14 @@ class MessageGenerator {
protected:
const Descriptor* descriptor_;
std::set<const OneofDescriptor*> oneofs_;
private:
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MessageGenerator);
};
class ImmutableMessageGenerator : public MessageGenerator {
public:
ImmutableMessageGenerator(const Descriptor* descriptor, Context* context);
ImmutableMessageGenerator(const ImmutableMessageGenerator&) = delete;
ImmutableMessageGenerator& operator=(const ImmutableMessageGenerator&) =
delete;
~ImmutableMessageGenerator() override;
void Generate(io::Printer* printer) override;
@ -139,8 +141,6 @@ class ImmutableMessageGenerator : public MessageGenerator {
Context* context_;
ClassNameResolver* name_resolver_;
FieldGeneratorMap<ImmutableFieldGenerator> field_generators_;
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableMessageGenerator);
};
} // namespace java

@ -63,6 +63,8 @@ class MessageBuilderGenerator {
public:
explicit MessageBuilderGenerator(const Descriptor* descriptor,
Context* context);
MessageBuilderGenerator(const MessageBuilderGenerator&) = delete;
MessageBuilderGenerator& operator=(const MessageBuilderGenerator&) = delete;
virtual ~MessageBuilderGenerator();
virtual void Generate(io::Printer* printer);
@ -78,8 +80,6 @@ class MessageBuilderGenerator {
ClassNameResolver* name_resolver_;
FieldGeneratorMap<ImmutableFieldGenerator> field_generators_;
std::set<const OneofDescriptor*> oneofs_;
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MessageBuilderGenerator);
};
} // namespace java

@ -63,6 +63,9 @@ class MessageBuilderLiteGenerator {
public:
explicit MessageBuilderLiteGenerator(const Descriptor* descriptor,
Context* context);
MessageBuilderLiteGenerator(const MessageBuilderLiteGenerator&) = delete;
MessageBuilderLiteGenerator& operator=(const MessageBuilderLiteGenerator&) =
delete;
virtual ~MessageBuilderLiteGenerator();
virtual void Generate(io::Printer* printer);
@ -75,8 +78,6 @@ class MessageBuilderLiteGenerator {
ClassNameResolver* name_resolver_;
FieldGeneratorMap<ImmutableFieldLiteGenerator> field_generators_;
std::set<const OneofDescriptor*> oneofs_;
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MessageBuilderLiteGenerator);
};
} // namespace java

@ -62,6 +62,10 @@ class ImmutableMessageFieldGenerator : public ImmutableFieldGenerator {
int messageBitIndex,
int builderBitIndex,
Context* context);
ImmutableMessageFieldGenerator(const ImmutableMessageFieldGenerator&) =
delete;
ImmutableMessageFieldGenerator& operator=(
const ImmutableMessageFieldGenerator&) = delete;
~ImmutableMessageFieldGenerator() override;
// implements ImmutableFieldGenerator
@ -103,7 +107,6 @@ class ImmutableMessageFieldGenerator : public ImmutableFieldGenerator {
const char* trailing_code) const;
private:
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableMessageFieldGenerator);
void GenerateKotlinOrNull(io::Printer* printer) const;
};
@ -113,6 +116,10 @@ class ImmutableMessageOneofFieldGenerator
ImmutableMessageOneofFieldGenerator(const FieldDescriptor* descriptor,
int messageBitIndex, int builderBitIndex,
Context* context);
ImmutableMessageOneofFieldGenerator(
const ImmutableMessageOneofFieldGenerator&) = delete;
ImmutableMessageOneofFieldGenerator& operator=(
const ImmutableMessageOneofFieldGenerator&) = delete;
~ImmutableMessageOneofFieldGenerator() override;
void GenerateMembers(io::Printer* printer) const override;
@ -122,9 +129,6 @@ class ImmutableMessageOneofFieldGenerator
void GenerateParsingCode(io::Printer* printer) const override;
void GenerateSerializationCode(io::Printer* printer) const override;
void GenerateSerializedSizeCode(io::Printer* printer) const override;
private:
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableMessageOneofFieldGenerator);
};
class RepeatedImmutableMessageFieldGenerator : public ImmutableFieldGenerator {
@ -132,6 +136,10 @@ class RepeatedImmutableMessageFieldGenerator : public ImmutableFieldGenerator {
explicit RepeatedImmutableMessageFieldGenerator(
const FieldDescriptor* descriptor, int messageBitIndex,
int builderBitIndex, Context* context);
RepeatedImmutableMessageFieldGenerator(
const RepeatedImmutableMessageFieldGenerator&) = delete;
RepeatedImmutableMessageFieldGenerator& operator=(
const RepeatedImmutableMessageFieldGenerator&) = delete;
~RepeatedImmutableMessageFieldGenerator() override;
// implements ImmutableFieldGenerator ---------------------------------------
@ -169,9 +177,6 @@ class RepeatedImmutableMessageFieldGenerator : public ImmutableFieldGenerator {
const char* regular_case,
const char* nested_builder_case,
const char* trailing_code) const;
private:
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(RepeatedImmutableMessageFieldGenerator);
};
} // namespace java

@ -62,6 +62,10 @@ class ImmutableMessageFieldLiteGenerator : public ImmutableFieldLiteGenerator {
explicit ImmutableMessageFieldLiteGenerator(const FieldDescriptor* descriptor,
int messageBitIndex,
Context* context);
ImmutableMessageFieldLiteGenerator(
const ImmutableMessageFieldLiteGenerator&) = delete;
ImmutableMessageFieldLiteGenerator& operator=(
const ImmutableMessageFieldLiteGenerator&) = delete;
~ImmutableMessageFieldLiteGenerator() override;
// implements ImmutableFieldLiteGenerator
@ -85,7 +89,6 @@ class ImmutableMessageFieldLiteGenerator : public ImmutableFieldLiteGenerator {
Context* context_;
private:
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableMessageFieldLiteGenerator);
void GenerateKotlinOrNull(io::Printer* printer) const;
};
@ -95,6 +98,10 @@ class ImmutableMessageOneofFieldLiteGenerator
ImmutableMessageOneofFieldLiteGenerator(const FieldDescriptor* descriptor,
int messageBitIndex,
Context* context);
ImmutableMessageOneofFieldLiteGenerator(
const ImmutableMessageOneofFieldLiteGenerator&) = delete;
ImmutableMessageOneofFieldLiteGenerator& operator=(
const ImmutableMessageOneofFieldLiteGenerator&) = delete;
~ImmutableMessageOneofFieldLiteGenerator() override;
void GenerateMembers(io::Printer* printer) const override;
@ -102,8 +109,6 @@ class ImmutableMessageOneofFieldLiteGenerator
void GenerateFieldInfo(io::Printer* printer,
std::vector<uint16_t>* output) const override;
private:
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableMessageOneofFieldLiteGenerator);
};
class RepeatedImmutableMessageFieldLiteGenerator
@ -111,6 +116,10 @@ class RepeatedImmutableMessageFieldLiteGenerator
public:
explicit RepeatedImmutableMessageFieldLiteGenerator(
const FieldDescriptor* descriptor, int messageBitIndex, Context* context);
RepeatedImmutableMessageFieldLiteGenerator(
const RepeatedImmutableMessageFieldLiteGenerator&) = delete;
RepeatedImmutableMessageFieldLiteGenerator& operator=(
const RepeatedImmutableMessageFieldLiteGenerator&) = delete;
~RepeatedImmutableMessageFieldLiteGenerator() override;
// implements ImmutableFieldLiteGenerator ------------------------------------
@ -130,9 +139,6 @@ class RepeatedImmutableMessageFieldLiteGenerator
std::map<std::string, std::string> variables_;
ClassNameResolver* name_resolver_;
Context* context_;
private:
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(RepeatedImmutableMessageFieldLiteGenerator);
};
} // namespace java

@ -46,6 +46,9 @@ namespace java {
class ImmutableMessageLiteGenerator : public MessageGenerator {
public:
ImmutableMessageLiteGenerator(const Descriptor* descriptor, Context* context);
ImmutableMessageLiteGenerator(const ImmutableMessageLiteGenerator&) = delete;
ImmutableMessageLiteGenerator& operator=(
const ImmutableMessageLiteGenerator&) = delete;
~ImmutableMessageLiteGenerator() override;
void Generate(io::Printer* printer) override;
@ -73,8 +76,6 @@ class ImmutableMessageLiteGenerator : public MessageGenerator {
Context* context_;
ClassNameResolver* name_resolver_;
FieldGeneratorMap<ImmutableFieldLiteGenerator> field_generators_;
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableMessageLiteGenerator);
};
} // namespace java

@ -73,8 +73,7 @@ int CompileJavaProto(std::string proto_file_name) {
proto_file_name.c_str(),
};
// Open-source codebase does not support ABSL_ARRAYSIZE.
return cli.Run(sizeof(argv) / sizeof(*argv), argv);
return cli.Run(4, argv);
}
TEST(MessageSerializationTest, CollapseAdjacentExtensionRanges) {

@ -62,6 +62,10 @@ class ImmutablePrimitiveFieldGenerator : public ImmutableFieldGenerator {
int messageBitIndex,
int builderBitIndex,
Context* context);
ImmutablePrimitiveFieldGenerator(const ImmutablePrimitiveFieldGenerator&) =
delete;
ImmutablePrimitiveFieldGenerator& operator=(
const ImmutablePrimitiveFieldGenerator&) = delete;
~ImmutablePrimitiveFieldGenerator() override;
// implements ImmutableFieldGenerator
@ -91,9 +95,6 @@ class ImmutablePrimitiveFieldGenerator : public ImmutableFieldGenerator {
const FieldDescriptor* descriptor_;
std::map<std::string, std::string> variables_;
ClassNameResolver* name_resolver_;
private:
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutablePrimitiveFieldGenerator);
};
class ImmutablePrimitiveOneofFieldGenerator
@ -102,6 +103,10 @@ class ImmutablePrimitiveOneofFieldGenerator
ImmutablePrimitiveOneofFieldGenerator(const FieldDescriptor* descriptor,
int messageBitIndex,
int builderBitIndex, Context* context);
ImmutablePrimitiveOneofFieldGenerator(
const ImmutablePrimitiveOneofFieldGenerator&) = delete;
ImmutablePrimitiveOneofFieldGenerator& operator=(
const ImmutablePrimitiveOneofFieldGenerator&) = delete;
~ImmutablePrimitiveOneofFieldGenerator() override;
void GenerateMembers(io::Printer* printer) const override;
@ -111,9 +116,6 @@ class ImmutablePrimitiveOneofFieldGenerator
void GenerateParsingCode(io::Printer* printer) const override;
void GenerateSerializationCode(io::Printer* printer) const override;
void GenerateSerializedSizeCode(io::Printer* printer) const override;
private:
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutablePrimitiveOneofFieldGenerator);
};
class RepeatedImmutablePrimitiveFieldGenerator
@ -122,6 +124,10 @@ class RepeatedImmutablePrimitiveFieldGenerator
explicit RepeatedImmutablePrimitiveFieldGenerator(
const FieldDescriptor* descriptor, int messageBitIndex,
int builderBitIndex, Context* context);
RepeatedImmutablePrimitiveFieldGenerator(
const RepeatedImmutablePrimitiveFieldGenerator&) = delete;
RepeatedImmutablePrimitiveFieldGenerator& operator=(
const RepeatedImmutablePrimitiveFieldGenerator&) = delete;
~RepeatedImmutablePrimitiveFieldGenerator() override;
// implements ImmutableFieldGenerator ---------------------------------------
@ -151,8 +157,6 @@ class RepeatedImmutablePrimitiveFieldGenerator
const FieldDescriptor* descriptor_;
std::map<std::string, std::string> variables_;
ClassNameResolver* name_resolver_;
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(RepeatedImmutablePrimitiveFieldGenerator);
};
} // namespace java

@ -62,6 +62,10 @@ class ImmutablePrimitiveFieldLiteGenerator
public:
explicit ImmutablePrimitiveFieldLiteGenerator(
const FieldDescriptor* descriptor, int messageBitIndex, Context* context);
ImmutablePrimitiveFieldLiteGenerator(
const ImmutablePrimitiveFieldLiteGenerator&) = delete;
ImmutablePrimitiveFieldLiteGenerator& operator=(
const ImmutablePrimitiveFieldLiteGenerator&) = delete;
~ImmutablePrimitiveFieldLiteGenerator() override;
// implements ImmutableFieldLiteGenerator
@ -83,9 +87,6 @@ class ImmutablePrimitiveFieldLiteGenerator
const int messageBitIndex_;
Context* context_;
ClassNameResolver* name_resolver_;
private:
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutablePrimitiveFieldLiteGenerator);
};
class ImmutablePrimitiveOneofFieldLiteGenerator
@ -94,6 +95,10 @@ class ImmutablePrimitiveOneofFieldLiteGenerator
ImmutablePrimitiveOneofFieldLiteGenerator(const FieldDescriptor* descriptor,
int messageBitIndex,
Context* context);
ImmutablePrimitiveOneofFieldLiteGenerator(
const ImmutablePrimitiveOneofFieldLiteGenerator&) = delete;
ImmutablePrimitiveOneofFieldLiteGenerator& operator=(
const ImmutablePrimitiveOneofFieldLiteGenerator&) = delete;
~ImmutablePrimitiveOneofFieldLiteGenerator() override;
void GenerateMembers(io::Printer* printer) const override;
@ -101,9 +106,6 @@ class ImmutablePrimitiveOneofFieldLiteGenerator
void GenerateFieldInfo(io::Printer* printer,
std::vector<uint16_t>* output) const override;
private:
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutablePrimitiveOneofFieldLiteGenerator);
};
class RepeatedImmutablePrimitiveFieldLiteGenerator
@ -111,6 +113,10 @@ class RepeatedImmutablePrimitiveFieldLiteGenerator
public:
explicit RepeatedImmutablePrimitiveFieldLiteGenerator(
const FieldDescriptor* descriptor, int messageBitIndex, Context* context);
RepeatedImmutablePrimitiveFieldLiteGenerator(
const RepeatedImmutablePrimitiveFieldLiteGenerator&) = delete;
RepeatedImmutablePrimitiveFieldLiteGenerator& operator=(
const RepeatedImmutablePrimitiveFieldLiteGenerator&) = delete;
~RepeatedImmutablePrimitiveFieldLiteGenerator() override;
// implements ImmutableFieldLiteGenerator ------------------------------------
@ -130,8 +136,6 @@ class RepeatedImmutablePrimitiveFieldLiteGenerator
std::map<std::string, std::string> variables_;
Context* context_;
ClassNameResolver* name_resolver_;
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(RepeatedImmutablePrimitiveFieldLiteGenerator);
};
} // namespace java

@ -60,6 +60,8 @@ namespace java {
class ServiceGenerator {
public:
explicit ServiceGenerator(const ServiceDescriptor* descriptor);
ServiceGenerator(const ServiceGenerator&) = delete;
ServiceGenerator& operator=(const ServiceGenerator&) = delete;
virtual ~ServiceGenerator();
virtual void Generate(io::Printer* printer) = 0;
@ -69,15 +71,15 @@ class ServiceGenerator {
protected:
const ServiceDescriptor* descriptor_;
private:
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ServiceGenerator);
};
class ImmutableServiceGenerator : public ServiceGenerator {
public:
ImmutableServiceGenerator(const ServiceDescriptor* descriptor,
Context* context);
ImmutableServiceGenerator(const ImmutableServiceGenerator&) = delete;
ImmutableServiceGenerator& operator=(const ImmutableServiceGenerator&) =
delete;
~ImmutableServiceGenerator() override;
void Generate(io::Printer* printer) override;
@ -128,7 +130,6 @@ class ImmutableServiceGenerator : public ServiceGenerator {
Context* context_;
ClassNameResolver* name_resolver_;
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableServiceGenerator);
};
} // namespace java

@ -67,6 +67,8 @@ namespace java {
class SharedCodeGenerator {
public:
SharedCodeGenerator(const FileDescriptor* file, const Options& options);
SharedCodeGenerator(const SharedCodeGenerator&) = delete;
SharedCodeGenerator& operator=(const SharedCodeGenerator&) = delete;
~SharedCodeGenerator();
void Generate(GeneratorContext* generator_context,
@ -79,7 +81,6 @@ class SharedCodeGenerator {
std::unique_ptr<ClassNameResolver> name_resolver_;
const FileDescriptor* file_;
const Options options_;
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(SharedCodeGenerator);
};
} // namespace java

@ -62,6 +62,9 @@ class ImmutableStringFieldGenerator : public ImmutableFieldGenerator {
explicit ImmutableStringFieldGenerator(const FieldDescriptor* descriptor,
int messageBitIndex,
int builderBitIndex, Context* context);
ImmutableStringFieldGenerator(const ImmutableStringFieldGenerator&) = delete;
ImmutableStringFieldGenerator& operator=(
const ImmutableStringFieldGenerator&) = delete;
~ImmutableStringFieldGenerator() override;
// implements ImmutableFieldGenerator
@ -91,9 +94,6 @@ class ImmutableStringFieldGenerator : public ImmutableFieldGenerator {
const FieldDescriptor* descriptor_;
std::map<std::string, std::string> variables_;
ClassNameResolver* name_resolver_;
private:
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableStringFieldGenerator);
};
class ImmutableStringOneofFieldGenerator
@ -102,6 +102,10 @@ class ImmutableStringOneofFieldGenerator
ImmutableStringOneofFieldGenerator(const FieldDescriptor* descriptor,
int messageBitIndex, int builderBitIndex,
Context* context);
ImmutableStringOneofFieldGenerator(
const ImmutableStringOneofFieldGenerator&) = delete;
ImmutableStringOneofFieldGenerator& operator=(
const ImmutableStringOneofFieldGenerator&) = delete;
~ImmutableStringOneofFieldGenerator() override;
private:
@ -112,8 +116,6 @@ class ImmutableStringOneofFieldGenerator
void GenerateParsingCode(io::Printer* printer) const override;
void GenerateSerializationCode(io::Printer* printer) const override;
void GenerateSerializedSizeCode(io::Printer* printer) const override;
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableStringOneofFieldGenerator);
};
class RepeatedImmutableStringFieldGenerator : public ImmutableFieldGenerator {
@ -121,6 +123,10 @@ class RepeatedImmutableStringFieldGenerator : public ImmutableFieldGenerator {
explicit RepeatedImmutableStringFieldGenerator(
const FieldDescriptor* descriptor, int messageBitIndex,
int builderBitIndex, Context* context);
RepeatedImmutableStringFieldGenerator(
const RepeatedImmutableStringFieldGenerator&) = delete;
RepeatedImmutableStringFieldGenerator& operator=(
const RepeatedImmutableStringFieldGenerator&) = delete;
~RepeatedImmutableStringFieldGenerator() override;
// implements ImmutableFieldGenerator ---------------------------------------
@ -149,8 +155,6 @@ class RepeatedImmutableStringFieldGenerator : public ImmutableFieldGenerator {
const FieldDescriptor* descriptor_;
std::map<std::string, std::string> variables_;
ClassNameResolver* name_resolver_;
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(RepeatedImmutableStringFieldGenerator);
};
} // namespace java

@ -63,6 +63,10 @@ class ImmutableStringFieldLiteGenerator : public ImmutableFieldLiteGenerator {
explicit ImmutableStringFieldLiteGenerator(const FieldDescriptor* descriptor,
int messageBitIndex,
Context* context);
ImmutableStringFieldLiteGenerator(const ImmutableStringFieldLiteGenerator&) =
delete;
ImmutableStringFieldLiteGenerator& operator=(
const ImmutableStringFieldLiteGenerator&) = delete;
~ImmutableStringFieldLiteGenerator() override;
// implements ImmutableFieldLiteGenerator
@ -84,9 +88,6 @@ class ImmutableStringFieldLiteGenerator : public ImmutableFieldLiteGenerator {
const int messageBitIndex_;
ClassNameResolver* name_resolver_;
Context* context_;
private:
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableStringFieldLiteGenerator);
};
class ImmutableStringOneofFieldLiteGenerator
@ -94,6 +95,10 @@ class ImmutableStringOneofFieldLiteGenerator
public:
ImmutableStringOneofFieldLiteGenerator(const FieldDescriptor* descriptor,
int messageBitIndex, Context* context);
ImmutableStringOneofFieldLiteGenerator(
const ImmutableStringOneofFieldLiteGenerator&) = delete;
ImmutableStringOneofFieldLiteGenerator& operator=(
const ImmutableStringOneofFieldLiteGenerator&) = delete;
~ImmutableStringOneofFieldLiteGenerator() override;
private:
@ -101,8 +106,6 @@ class ImmutableStringOneofFieldLiteGenerator
void GenerateBuilderMembers(io::Printer* printer) const override;
void GenerateFieldInfo(io::Printer* printer,
std::vector<uint16_t>* output) const override;
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableStringOneofFieldLiteGenerator);
};
class RepeatedImmutableStringFieldLiteGenerator
@ -110,6 +113,10 @@ class RepeatedImmutableStringFieldLiteGenerator
public:
explicit RepeatedImmutableStringFieldLiteGenerator(
const FieldDescriptor* descriptor, int messageBitIndex, Context* context);
RepeatedImmutableStringFieldLiteGenerator(
const RepeatedImmutableStringFieldLiteGenerator&) = delete;
RepeatedImmutableStringFieldLiteGenerator& operator=(
const RepeatedImmutableStringFieldLiteGenerator&) = delete;
~RepeatedImmutableStringFieldLiteGenerator() override;
// implements ImmutableFieldLiteGenerator ------------------------------------
@ -129,8 +136,6 @@ class RepeatedImmutableStringFieldLiteGenerator
std::map<std::string, std::string> variables_;
ClassNameResolver* name_resolver_;
Context* context_;
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(RepeatedImmutableStringFieldLiteGenerator);
};
} // namespace java

@ -44,6 +44,7 @@
#include <google/protobuf/io/zero_copy_stream_impl.h>
#include "absl/base/casts.h"
#include "absl/container/flat_hash_map.h"
#include "absl/container/flat_hash_set.h"
#include "absl/strings/str_join.h"
#include "absl/strings/string_view.h"
#include "absl/synchronization/mutex.h"
@ -60,7 +61,6 @@
#include <google/protobuf/unknown_field_set.h>
#include <google/protobuf/wire_format.h>
#include <google/protobuf/wire_format_lite.h>
#include <google/protobuf/stubs/map_util.h>
#include <google/protobuf/stubs/stl_util.h>
@ -255,10 +255,54 @@ class GeneratedMessageFactory final : public MessageFactory {
const Message* GetPrototype(const Descriptor* type) override;
private:
const Message* FindInTypeMap(const Descriptor* type)
ABSL_SHARED_LOCKS_REQUIRED(mutex_)
{
auto it = type_map_.find(type);
if (it == type_map_.end()) return nullptr;
return it->second;
}
const google::protobuf::internal::DescriptorTable* FindInFileMap(
absl::string_view name) {
auto it = files_.find(name);
if (it == files_.end()) return nullptr;
return *it;
}
struct DescriptorByNameHash {
using is_transparent = void;
size_t operator()(const google::protobuf::internal::DescriptorTable* t) const {
return absl::HashOf(absl::string_view{t->filename});
}
size_t operator()(absl::string_view name) const {
return absl::HashOf(name);
}
};
struct DescriptorByNameEq {
using is_transparent = void;
bool operator()(const google::protobuf::internal::DescriptorTable* lhs,
const google::protobuf::internal::DescriptorTable* rhs) const {
return lhs == rhs || (*this)(lhs->filename, rhs->filename);
}
bool operator()(absl::string_view lhs,
const google::protobuf::internal::DescriptorTable* rhs) const {
return (*this)(lhs, rhs->filename);
}
bool operator()(const google::protobuf::internal::DescriptorTable* lhs,
absl::string_view rhs) const {
return (*this)(lhs->filename, rhs);
}
bool operator()(absl::string_view lhs, absl::string_view rhs) const {
return lhs == rhs;
}
};
// Only written at static init time, so does not require locking.
absl::flat_hash_map<absl::string_view,
const google::protobuf::internal::DescriptorTable*>
file_map_;
absl::flat_hash_set<const google::protobuf::internal::DescriptorTable*,
DescriptorByNameHash, DescriptorByNameEq>
files_;
absl::Mutex mutex_;
absl::flat_hash_map<const Descriptor*, const Message*> type_map_
@ -273,7 +317,7 @@ GeneratedMessageFactory* GeneratedMessageFactory::singleton() {
void GeneratedMessageFactory::RegisterFile(
const google::protobuf::internal::DescriptorTable* table) {
if (!InsertIfNotPresent(&file_map_, table->filename, table)) {
if (!files_.insert(table).second) {
GOOGLE_LOG(FATAL) << "File is already registered: " << table->filename;
}
}
@ -288,7 +332,7 @@ void GeneratedMessageFactory::RegisterType(const Descriptor* descriptor,
// function during GetPrototype(), in which case we already have locked
// the mutex.
mutex_.AssertHeld();
if (!InsertIfNotPresent(&type_map_, descriptor, prototype)) {
if (!type_map_.try_emplace(descriptor, prototype).second) {
GOOGLE_LOG(DFATAL) << "Type is already registered: " << descriptor->full_name();
}
}
@ -297,7 +341,7 @@ void GeneratedMessageFactory::RegisterType(const Descriptor* descriptor,
const Message* GeneratedMessageFactory::GetPrototype(const Descriptor* type) {
{
absl::ReaderMutexLock lock(&mutex_);
const Message* result = FindPtrOrNull(type_map_, type);
const Message* result = FindInTypeMap(type);
if (result != nullptr) return result;
}
@ -307,7 +351,7 @@ const Message* GeneratedMessageFactory::GetPrototype(const Descriptor* type) {
// Apparently the file hasn't been registered yet. Let's do that now.
const internal::DescriptorTable* registration_data =
FindPtrOrNull(file_map_, type->file()->name());
FindInFileMap(type->file()->name());
if (registration_data == nullptr) {
GOOGLE_LOG(DFATAL) << "File appears to be in generated pool but wasn't "
"registered: "
@ -318,12 +362,12 @@ const Message* GeneratedMessageFactory::GetPrototype(const Descriptor* type) {
absl::WriterMutexLock lock(&mutex_);
// Check if another thread preempted us.
const Message* result = FindPtrOrNull(type_map_, type);
const Message* result = FindInTypeMap(type);
if (result == nullptr) {
// Nope. OK, register everything.
internal::RegisterFileLevelMetadata(registration_data);
// Should be here now.
result = FindPtrOrNull(type_map_, type);
result = FindInTypeMap(type);
}
if (result == nullptr) {

@ -47,8 +47,6 @@
namespace google {
namespace protobuf {
namespace internal {

@ -32,6 +32,7 @@ syntax = "proto3";
package unittest_drop_unknown_fields;
option objc_class_prefix = "DropUnknowns";
option csharp_namespace = "Google.Protobuf.TestProtos";
message Foo {

@ -31,6 +31,7 @@
syntax = "proto3";
package proto3_preserve_unknown_enum_unittest;
option objc_class_prefix = "UnknownEnums";
option csharp_namespace = "Google.Protobuf.TestProtos";

@ -38,7 +38,6 @@
#include <google/protobuf/descriptor.h>
#include <google/protobuf/message.h>
#include <google/protobuf/util/message_differencer.h>
#include <google/protobuf/stubs/map_util.h>
#include <google/protobuf/stubs/mathutil.h>
namespace google {
@ -183,19 +182,23 @@ bool SimpleFieldComparator::CompareDoubleOrFloat(const FieldDescriptor& field,
return true;
}
// float_comparison_ == APPROXIMATE covers two use cases.
Tolerance* tolerance = FindOrNull(map_tolerance_, &field);
if (tolerance == NULL && has_default_tolerance_) {
tolerance = &default_tolerance_;
Tolerance* tolerance = nullptr;
if (has_default_tolerance_) tolerance = &default_tolerance_;
auto it = map_tolerance_.find(&field);
if (it != map_tolerance_.end()) {
tolerance = &it->second;
}
if (tolerance == NULL) {
return MathUtil::AlmostEquals(value_1, value_2);
} else {
if (tolerance != nullptr) {
// Use user-provided fraction and margin. Since they are stored as
// doubles, we explicitly cast them to types of values provided. This
// is very likely to fail if provided values are not numeric.
return MathUtil::WithinFractionOrMargin(
value_1, value_2, static_cast<T>(tolerance->fraction),
static_cast<T>(tolerance->margin));
} else {
return MathUtil::AlmostEquals(value_1, value_2);
}
}
}

@ -35,7 +35,6 @@
#include <google/protobuf/stubs/strutil.h>
#include "absl/strings/str_join.h"
#include <google/protobuf/message.h>
#include <google/protobuf/stubs/map_util.h>
// Must be included last.
#include <google/protobuf/port_def.inc>
@ -251,9 +250,8 @@ class FieldMaskTree {
~Node() { ClearChildren(); }
void ClearChildren() {
for (std::map<std::string, Node*>::iterator it = children.begin();
it != children.end(); ++it) {
delete it->second;
for (auto& p : children) {
delete p.second;
}
children.clear();
}
@ -390,14 +388,11 @@ void FieldMaskTree::RemovePath(const std::string& path,
node->children[current_descriptor->field(j)->name()] = new Node();
}
}
if (ContainsKey(node->children, parts[i])) {
node = node->children[parts[i]];
if (field_descriptor->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) {
current_descriptor = field_descriptor->message_type();
}
} else {
// Path does not exist.
return;
auto it = node->children.find(parts[i]);
if (it == node->children.end()) return;
node = it->second;
if (field_descriptor->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) {
current_descriptor = field_descriptor->message_type();
}
}
// Remove path.
@ -423,12 +418,12 @@ void FieldMaskTree::IntersectPath(const std::string& path, FieldMaskTree* out) {
}
return;
}
const Node* result = FindPtrOrNull(node->children, node_name);
if (result == nullptr) {
auto it = node->children.find(node_name);
if (it == node->children.end()) {
// No intersection found.
return;
}
node = result;
node = it->second;
}
// Now we found a matching node with the given path. Add all leaf nodes
// to out.

Loading…
Cancel
Save