From a967e6a811757507c8c69a4f3c364264427f54a7 Mon Sep 17 00:00:00 2001 From: egorm Date: Fri, 10 Mar 2023 15:12:28 -0800 Subject: [PATCH 1/5] Add 'static' keyword for enums defined inside the class --- generator/js_generator.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generator/js_generator.cc b/generator/js_generator.cc index cba9aaf..63ecc81 100644 --- a/generator/js_generator.cc +++ b/generator/js_generator.cc @@ -3622,7 +3622,7 @@ void Generator::GenerateEnum(const GeneratorOptions& options, const EnumDescriptor* enumdesc) const { const bool is_toplevel = enumdesc->containing_type() == nullptr; - const std::string enumNamePrefix = is_toplevel ? "export const " : ""; + const std::string enumNamePrefix = is_toplevel ? "export const " : "static "; // TODO(reddaly): If the enum is defined at top-level, we need // 'const = ' instead of ' = ' From e50f363b588eb6d696f7bb1bb4a9ffc5de56af4f Mon Sep 17 00:00:00 2001 From: egorm Date: Fri, 10 Mar 2023 15:34:11 -0800 Subject: [PATCH 2/5] Add 'static' keyword for enums generatef from oneof fields --- generator/js_generator.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generator/js_generator.cc b/generator/js_generator.cc index 63ecc81..41f4c48 100644 --- a/generator/js_generator.cc +++ b/generator/js_generator.cc @@ -2259,7 +2259,7 @@ void Generator::GenerateOneofCaseDefinition( const std::string className = GetMessagePath(options, oneof->containing_type()); const std::string oneofCaseName = options.WantEs6() ? ( - JSOneofName(oneof) + "Case" + "static " + JSOneofName(oneof) + "Case" ) : ( className + "." + JSOneofName(oneof) + "Case" ); From f832f18370a2e30feda9c20dd775e33a471d4bcd Mon Sep 17 00:00:00 2001 From: egorm Date: Mon, 13 Mar 2023 15:45:34 -0700 Subject: [PATCH 3/5] Fix js path of oneof field --- generator/js_generator.cc | 6 +++--- generator/js_generator.h | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/generator/js_generator.cc b/generator/js_generator.cc index d73b805..c450605 100644 --- a/generator/js_generator.cc +++ b/generator/js_generator.cc @@ -2237,7 +2237,7 @@ void Generator::GenerateClassFieldInfo(const GeneratorOptions& options, if (IgnoreOneof(desc->oneof_decl(i))) { continue; } - GenerateOneofCaseDefinition(options, printer, desc->oneof_decl(i)); + GenerateOneofCaseDefinition(options, printer, desc->oneof_decl(i), desc); } } } @@ -2254,7 +2254,7 @@ void Generator::GenerateClassXid(const GeneratorOptions& options, void Generator::GenerateOneofCaseDefinition( const GeneratorOptions& options, io::Printer* printer, - const OneofDescriptor* oneof) const { + const OneofDescriptor* oneof, const Descriptor* desc) const { const std::string className = GetMessagePath(options, oneof->containing_type()); @@ -2302,7 +2302,7 @@ void Generator::GenerateOneofCaseDefinition( "() {\n" " return /** @type {$class$.$oneof$Case} */(jspb.Message." "computeOneofCase(this, $class$.oneofGroups_[$oneofindex$]));\n", - "class", className, + "class", desc->name(), "oneof", JSOneofName(oneof), "oneofindex", JSOneofIndex(oneof)); GenerateMethodEnd(options, printer); diff --git a/generator/js_generator.h b/generator/js_generator.h index 40198f2..eec4e0a 100644 --- a/generator/js_generator.h +++ b/generator/js_generator.h @@ -366,7 +366,8 @@ class PROTOC_EXPORT Generator : public CodeGenerator { const Descriptor* desc) const; void GenerateOneofCaseDefinition(const GeneratorOptions& options, io::Printer* printer, - const OneofDescriptor* oneof) const; + const OneofDescriptor* oneof, + const Descriptor* desc) const; void GenerateObjectTypedef(const GeneratorOptions& options, io::Printer* printer, const Descriptor* desc) const; From 70c3f63fa9ccd7a88496565419adfc4d81f85092 Mon Sep 17 00:00:00 2001 From: egorm Date: Mon, 13 Mar 2023 16:06:52 -0700 Subject: [PATCH 4/5] Simplify the fix --- generator/js_generator.cc | 6 +++--- generator/js_generator.h | 3 +-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/generator/js_generator.cc b/generator/js_generator.cc index c450605..ea5ad1a 100644 --- a/generator/js_generator.cc +++ b/generator/js_generator.cc @@ -2237,7 +2237,7 @@ void Generator::GenerateClassFieldInfo(const GeneratorOptions& options, if (IgnoreOneof(desc->oneof_decl(i))) { continue; } - GenerateOneofCaseDefinition(options, printer, desc->oneof_decl(i), desc); + GenerateOneofCaseDefinition(options, printer, desc->oneof_decl(i)); } } } @@ -2254,7 +2254,7 @@ void Generator::GenerateClassXid(const GeneratorOptions& options, void Generator::GenerateOneofCaseDefinition( const GeneratorOptions& options, io::Printer* printer, - const OneofDescriptor* oneof, const Descriptor* desc) const { + const OneofDescriptor* oneof) const { const std::string className = GetMessagePath(options, oneof->containing_type()); @@ -2302,7 +2302,7 @@ void Generator::GenerateOneofCaseDefinition( "() {\n" " return /** @type {$class$.$oneof$Case} */(jspb.Message." "computeOneofCase(this, $class$.oneofGroups_[$oneofindex$]));\n", - "class", desc->name(), + "class", oneof->containing_type()->name(), "oneof", JSOneofName(oneof), "oneofindex", JSOneofIndex(oneof)); GenerateMethodEnd(options, printer); diff --git a/generator/js_generator.h b/generator/js_generator.h index eec4e0a..40198f2 100644 --- a/generator/js_generator.h +++ b/generator/js_generator.h @@ -366,8 +366,7 @@ class PROTOC_EXPORT Generator : public CodeGenerator { const Descriptor* desc) const; void GenerateOneofCaseDefinition(const GeneratorOptions& options, io::Printer* printer, - const OneofDescriptor* oneof, - const Descriptor* desc) const; + const OneofDescriptor* oneof) const; void GenerateObjectTypedef(const GeneratorOptions& options, io::Printer* printer, const Descriptor* desc) const; From 3f6734fe2a8748c49f82337930128b8e53a27eda Mon Sep 17 00:00:00 2001 From: egorm Date: Thu, 16 Mar 2023 20:02:19 -0700 Subject: [PATCH 5/5] Add tests for clean and has methods --- generator/js_generator.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generator/js_generator.cc b/generator/js_generator.cc index ea5ad1a..ef1988a 100644 --- a/generator/js_generator.cc +++ b/generator/js_generator.cc @@ -3109,7 +3109,7 @@ const char * methodEndBrace = options.WantEs6() ? "}" : "};"; if (HasFieldPresence(options, field)) { const std::string haserName = "has" + JSGetterName(options, field); const std::string haserMethodStart = MethodStart( - options, classSymbol.c_str(), clearerName.c_str()); + options, classSymbol.c_str(), haserName.c_str()); printer->Print( "/**\n"