Skip to content

Commit f5bb21d

Browse files
feat: support reserved enum values (#688)
Signed-off-by: Anthony Petrov <anthony@swirldslabs.com>
1 parent 6b108a7 commit f5bb21d

File tree

9 files changed

+41
-5
lines changed

9 files changed

+41
-5
lines changed

pbj-core/pbj-compiler/src/main/antlr/com/hedera/hashgraph/protoparser/grammar/Protobuf3.g4

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ enumElement
170170
: optionStatement
171171
| optionComment
172172
| enumField
173+
| reserved
173174
| emptyStatement_
174175
;
175176

@@ -205,6 +206,7 @@ messageElement
205206
| mapField
206207
| reserved
207208
| emptyStatement_
209+
| DOC_COMMENT
208210
;
209211

210212
// service

pbj-core/pbj-compiler/src/main/java/com/hedera/pbj/compiler/impl/generators/EnumGenerator.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ public static void generateEnum(
8484
System.err.printf(
8585
"Unhandled Option: %s%n", item.optionStatement().getText());
8686
}
87+
} else if (item.reserved() != null) {
88+
// Ignore reserved enum values
8789
} else {
8890
System.err.printf("EnumGenerator Warning - Unknown element: %s -- %s%n", item, item.getText());
8991
}

pbj-core/pbj-compiler/src/main/java/com/hedera/pbj/compiler/impl/generators/ModelGenerator.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,10 @@ public void generate(
9797

9898
// Iterate over all the items in the protobuf schema
9999
for (final var item : msgDef.messageBody().messageElement()) {
100-
if (item.messageDef() != null) { // process sub messages down below in generateClass()
100+
if (item.messageDef() != null
101+
|| item.enumDef() != null
102+
|| item.DOC_COMMENT()
103+
!= null) { // process sub messages and inner enums down below in generateClass()
101104
} else if (item.oneof() != null) { // process one ofs
102105
oneofGetters.addAll(generateCodeForOneOf(
103106
lookupHelper, item, javaRecordName, writer::addImport, oneofEnums, fields));

pbj-core/pbj-compiler/src/main/java/com/hedera/pbj/compiler/impl/generators/SchemaGenerator.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ public void generate(
3232
final String schemaClassName = lookupHelper.getUnqualifiedClassForMessage(FileType.SCHEMA, msgDef);
3333
final List<Field> fields = new ArrayList<>();
3434
for (final var item : msgDef.messageBody().messageElement()) {
35-
if (item.messageDef() != null) { // process sub messages down below
35+
if (item.messageDef() != null
36+
|| item.enumDef() != null
37+
|| item.DOC_COMMENT() != null) { // process sub messages down below
3638
} else if (item.oneof() != null) { // process one ofs
3739
final var field = new OneOfField(item.oneof(), modelClassName, lookupHelper);
3840
fields.add(field);

pbj-core/pbj-compiler/src/main/java/com/hedera/pbj/compiler/impl/generators/ServiceGenerator.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -475,6 +475,8 @@ public static void generateService(
475475
System.err.printf(
476476
"Unhandled Option: %s%n", item.optionStatement().getText());
477477
}
478+
} else if (item.optionComment() != null || item.emptyStatement_() != null) {
479+
// Ignore these
478480
} else {
479481
System.err.printf("ServiceGenerator Warning - Unknown element: %s -- %s%n", item, item.getText());
480482
}

pbj-core/pbj-compiler/src/main/java/com/hedera/pbj/compiler/impl/generators/TestGenerator.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@ public void generate(
4545
writer.addImport(lookupHelper.getPackage(FileType.MODEL, msgDef) + ".*");
4646

4747
for (final var item : msgDef.messageBody().messageElement()) {
48-
if (item.messageDef() != null) { // process sub messages down below
48+
if (item.messageDef() != null
49+
|| item.enumDef() != null
50+
|| item.DOC_COMMENT() != null) { // process sub messages down below
4951
} else if (item.oneof() != null) { // process one ofs
5052
final var field = new OneOfField(item.oneof(), modelClassName, lookupHelper);
5153
fields.add(field);

pbj-core/pbj-compiler/src/main/java/com/hedera/pbj/compiler/impl/generators/json/JsonCodecGenerator.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,9 @@ public void generate(
3636
writer.addImport(lookupHelper.getPackage(FileType.SCHEMA, msgDef) + ".*");
3737

3838
for (var item : msgDef.messageBody().messageElement()) {
39-
if (item.messageDef() != null) { // process sub messages down below
39+
if (item.messageDef() != null
40+
|| item.enumDef() != null
41+
|| item.DOC_COMMENT() != null) { // process sub messages down below
4042
} else if (item.oneof() != null) { // process one ofs
4143
final var field = new OneOfField(item.oneof(), modelClassName, lookupHelper);
4244
fields.add(field);

pbj-core/pbj-compiler/src/main/java/com/hedera/pbj/compiler/impl/generators/protobuf/CodecGenerator.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@ public void generate(
4040
writer.addImport(lookupHelper.getPackage(FileType.SCHEMA, msgDef) + ".*");
4141

4242
for (var item : msgDef.messageBody().messageElement()) {
43-
if (item.messageDef() != null) { // process sub messages down below
43+
if (item.messageDef() != null
44+
|| item.enumDef() != null
45+
|| item.DOC_COMMENT() != null) { // process sub messages down below
4446
} else if (item.oneof() != null) { // process one ofs
4547
final var field = new OneOfField(item.oneof(), modelClassName, lookupHelper);
4648
fields.add(field);
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
syntax = "proto3";
3+
package pbj.integ.test.enumeration.reserved;
4+
option java_multiple_files = true;
5+
6+
enum PbjEnumReserved {
7+
reserved 6;
8+
9+
READ_STREAM_UNKNOWN_TEST = 0;
10+
READ_STREAM_INSUFFICIENT_BALANCE_TEST = 1;
11+
READ_STREAM_SUCCESS_TEST = 2;
12+
READ_STREAM_INVALID_START_BLOCK_NUMBER_TEST = 3;
13+
READ_STREAM_INVALID_END_BLOCK_NUMBER_TEST = 4;
14+
READ_STREAM_NOT_AVAILABLE_TEST = 5;
15+
}
16+
17+
message MessageWithReservedEnum {
18+
PbjEnumReserved the_enum_with_reserved_values = 1;
19+
}

0 commit comments

Comments
 (0)