aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/google/protobuf/compiler/js/js_generator.cc
diff options
context:
space:
mode:
authorGravatar Marcus Longmuir <marcus.longmuir@improbable.io>2017-01-07 00:59:47 +0000
committerGravatar Joshua Haberman <jhaberman@gmail.com>2017-01-06 16:59:47 -0800
commit2c16f6979a03be84e359a09b92b28c87d57e5afc (patch)
treea027a15ee4a32367e613dd1bdcf716c49f23a136 /src/google/protobuf/compiler/js/js_generator.cc
parentffa71f80070fde3eb8e6a5779df951c4fe0729e0 (diff)
Fix generation of extending nested messages in JavaScript (#2439)
* Fix generation of extending nested messages in JavaScript * Added missing test8.proto to build
Diffstat (limited to 'src/google/protobuf/compiler/js/js_generator.cc')
-rwxr-xr-xsrc/google/protobuf/compiler/js/js_generator.cc19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/google/protobuf/compiler/js/js_generator.cc b/src/google/protobuf/compiler/js/js_generator.cc
index e6571f6f..727ed090 100755
--- a/src/google/protobuf/compiler/js/js_generator.cc
+++ b/src/google/protobuf/compiler/js/js_generator.cc
@@ -1865,7 +1865,19 @@ void Generator::GenerateClass(const GeneratorOptions& options,
// objects.
GenerateClassDeserializeBinary(options, printer, desc);
GenerateClassSerializeBinary(options, printer, desc);
+ }
+
+ // Recurse on nested types. These must come *before* the extension-field
+ // info generation in GenerateClassRegistration so that extensions that
+ // reference nested types proceed the definitions of the nested types.
+ for (int i = 0; i < desc->enum_type_count(); i++) {
+ GenerateEnum(options, printer, desc->enum_type(i));
+ }
+ for (int i = 0; i < desc->nested_type_count(); i++) {
+ GenerateClass(options, printer, desc->nested_type(i));
+ }
+ if (!NamespaceOnly(desc)) {
GenerateClassRegistration(options, printer, desc);
GenerateClassFields(options, printer, desc);
if (IsExtendable(desc) && desc->full_name() != "google.protobuf.bridge.MessageSet") {
@@ -1879,13 +1891,6 @@ void Generator::GenerateClass(const GeneratorOptions& options,
}
}
- // Recurse on nested types.
- for (int i = 0; i < desc->enum_type_count(); i++) {
- GenerateEnum(options, printer, desc->enum_type(i));
- }
- for (int i = 0; i < desc->nested_type_count(); i++) {
- GenerateClass(options, printer, desc->nested_type(i));
- }
}
void Generator::GenerateClassConstructor(const GeneratorOptions& options,