Skip to content
This repository was archived by the owner on Jan 26, 2021. It is now read-only.

Commit

Permalink
Include the Dart reserved words in the reserved names handling
Browse files Browse the repository at this point in the history
The list of reserved words is from 'The Dart Programming Language
Specification (1.2)'.

[email protected]

Review URL: https://chromiumcodereview.appspot.com//210843002
  • Loading branch information
sgjesse committed Mar 25, 2014
1 parent e84e3e8 commit d75f477
Show file tree
Hide file tree
Showing 3 changed files with 229 additions and 0 deletions.
10 changes: 10 additions & 0 deletions lib/message_generator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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<String> 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<String> reservedNames =
['hashCode', 'noSuchMethod','runtimeType', 'toString',
Expand Down Expand Up @@ -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) {
Expand Down
111 changes: 111 additions & 0 deletions test/generated_message_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
108 changes: 108 additions & 0 deletions test/protos/reserved_names.proto
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

0 comments on commit d75f477

Please sign in to comment.