diff --git a/lib/message_generator.dart b/lib/message_generator.dart index f7ec14f..f6cff19 100644 --- a/lib/message_generator.dart +++ b/lib/message_generator.dart @@ -7,6 +7,15 @@ part of protoc; const String SP = ' '; class MessageGenerator extends ProtobufContainer { + // List of Dart language reserved words in names which cannot be used in a + // subclass of GeneratedMessage. + static final List reservedWords = + ['assert', 'break', 'case', 'catch', 'class', 'const', 'continue', + 'default', 'do', 'else', 'enum', 'extends', 'false', 'final', + 'finally', 'for', 'if', 'in', 'is', 'new', 'null', 'rethrow', 'return', + 'super', 'switch', 'this', 'throw', 'true', 'try', 'var', 'void', + 'while', 'with']; + // List of names which cannot be used in a subclass of GeneratedMessage. static final List reservedNames = ['hashCode', 'noSuchMethod','runtimeType', 'toString', @@ -70,6 +79,7 @@ class MessageGenerator extends ProtobufContainer { void generate(IndentingWriter out) { _methodNames.clear(); + _methodNames.addAll(reservedWords); _methodNames.addAll(reservedNames); for (EnumGenerator e in _enumGenerators) { diff --git a/test/generated_message_test.dart b/test/generated_message_test.dart index 0b47d2e..eaa1824 100755 --- a/test/generated_message_test.dart +++ b/test/generated_message_test.dart @@ -592,6 +592,117 @@ void main() { message.clearX53 = 1; }); + test('testReservedWordsOptional', () { + ReservedWordsOptional message = new ReservedWordsOptional(); + message.assert_1 = 1; + message.break_2 = 1; + message.case_3 = 1; + message.catch_4 = 1; + message.class_5 = 1; + message.const_6 = 1; + message.continue_7 = 1; + message.default_8 = 1; + message.do_9 = 1; + message.else_10 = 1; + message.enum_11 = 1; + message.extends_12 = 1; + message.false_13 = 1; + message.final_14 = 1; + message.finally_15 = 1; + message.for_16 = 1; + message.if_17 = 1; + message.in_18 = 1; + message.is_19 = 1; + message.new_20 = 1; + message.null_21 = 1; + message.rethrow_22 = 1; + message.return_23 = 1; + message.super_24 = 1; + message.switch_25 = 1; + message.this_26 = 1; + message.throw_27 = 1; + message.true_28 = 1; + message.try_29 = 1; + message.var_30 = 1; + message.void_31 = 1; + message.while_32 = 1; + message.with_33 = 1; + }); + + test('testReservedWordsRepeated', () { + ReservedWordsRepeated message = new ReservedWordsRepeated(); + message.assert_1.clear(); + message.break_2.clear(); + message.case_3.clear(); + message.catch_4.clear(); + message.class_5.clear(); + message.const_6.clear(); + message.continue_7.clear(); + message.default_8.clear(); + message.do_9.clear(); + message.else_10.clear(); + message.enum_11.clear(); + message.extends_12.clear(); + message.false_13.clear(); + message.final_14.clear(); + message.finally_15.clear(); + message.for_16.clear(); + message.if_17.clear(); + message.in_18.clear(); + message.is_19.clear(); + message.new_20.clear(); + message.null_21.clear(); + message.rethrow_22.clear(); + message.return_23.clear(); + message.super_24.clear(); + message.switch_25.clear(); + message.this_26.clear(); + message.throw_27.clear(); + message.true_28.clear(); + message.try_29.clear(); + message.var_30.clear(); + message.void_31.clear(); + message.while_32.clear(); + message.with_33.clear(); + }); + + test('testReservedWordsRequired', () { + ReservedWordsRequired message = new ReservedWordsRequired(); + message.assert_1 = 1; + message.break_2 = 1; + message.case_3 = 1; + message.catch_4 = 1; + message.class_5 = 1; + message.const_6 = 1; + message.continue_7 = 1; + message.default_8 = 1; + message.do_9 = 1; + message.else_10 = 1; + message.enum_11 = 1; + message.extends_12 = 1; + message.false_13 = 1; + message.final_14 = 1; + message.finally_15 = 1; + message.for_16 = 1; + message.if_17 = 1; + message.in_18 = 1; + message.is_19 = 1; + message.new_20 = 1; + message.null_21 = 1; + message.rethrow_22 = 1; + message.return_23 = 1; + message.super_24 = 1; + message.switch_25 = 1; + message.this_26 = 1; + message.throw_27 = 1; + message.true_28 = 1; + message.try_29 = 1; + message.var_30 = 1; + message.void_31 = 1; + message.while_32 = 1; + message.with_33 = 1; + }); + test('testImportDuplicatenames', () { M message = new M(); message.m1 = new p1.M(); diff --git a/test/protos/reserved_names.proto b/test/protos/reserved_names.proto index a59e62b..2052eb9 100644 --- a/test/protos/reserved_names.proto +++ b/test/protos/reserved_names.proto @@ -137,3 +137,111 @@ message ReservedNamesRequired { required int32 has_x_51 = 54; required int32 clear_x_53 = 55; } + +message ReservedWordsOptional { + optional int32 assert = 1; + optional int32 break = 2; + optional int32 case = 3; + optional int32 catch = 4; + optional int32 class = 5; + optional int32 const = 6; + optional int32 continue = 7; + optional int32 default = 8; + optional int32 do = 9; + optional int32 else = 10; + optional int32 enum = 11; + optional int32 extends = 12; + optional int32 false = 13; + optional int32 final = 14; + optional int32 finally = 15; + optional int32 for = 16; + optional int32 if = 17; + optional int32 in = 18; + optional int32 is = 19; + optional int32 new = 20; + optional int32 null = 21; + optional int32 rethrow = 22; + optional int32 return = 23; + optional int32 super = 24; + optional int32 switch = 25; + optional int32 this = 26; + optional int32 throw = 27; + optional int32 true = 28; + optional int32 try = 29; + optional int32 var = 30; + optional int32 void = 31; + optional int32 while = 32; + optional int32 with = 33; +} + +message ReservedWordsRepeated { + repeated int32 assert = 1; + repeated int32 break = 2; + repeated int32 case = 3; + repeated int32 catch = 4; + repeated int32 class = 5; + repeated int32 const = 6; + repeated int32 continue = 7; + repeated int32 default = 8; + repeated int32 do = 9; + repeated int32 else = 10; + repeated int32 enum = 11; + repeated int32 extends = 12; + repeated int32 false = 13; + repeated int32 final = 14; + repeated int32 finally = 15; + repeated int32 for = 16; + repeated int32 if = 17; + repeated int32 in = 18; + repeated int32 is = 19; + repeated int32 new = 20; + repeated int32 null = 21; + repeated int32 rethrow = 22; + repeated int32 return = 23; + repeated int32 super = 24; + repeated int32 switch = 25; + repeated int32 this = 26; + repeated int32 throw = 27; + repeated int32 true = 28; + repeated int32 try = 29; + repeated int32 var = 30; + repeated int32 void = 31; + repeated int32 while = 32; + repeated int32 with = 33; +} + +message ReservedWordsRequired { + required int32 assert = 1; + required int32 break = 2; + required int32 case = 3; + required int32 catch = 4; + required int32 class = 5; + required int32 const = 6; + required int32 continue = 7; + required int32 default = 8; + required int32 do = 9; + required int32 else = 10; + required int32 enum = 11; + required int32 extends = 12; + required int32 false = 13; + required int32 final = 14; + required int32 finally = 15; + required int32 for = 16; + required int32 if = 17; + required int32 in = 18; + required int32 is = 19; + required int32 new = 20; + required int32 null = 21; + required int32 rethrow = 22; + required int32 return = 23; + required int32 super = 24; + required int32 switch = 25; + required int32 this = 26; + required int32 throw = 27; + required int32 true = 28; + required int32 try = 29; + required int32 var = 30; + required int32 void = 31; + required int32 while = 32; + required int32 with = 33; +}