rust-code-analysis 0.0.19

Tool to compute and export code metrics
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
// Code generated; DO NOT EDIT.

#[derive(Clone, Debug, PartialEq)]
pub enum Java {
    End = 0,
    Identifier = 1,
    DecimalIntegerLiteral = 2,
    HexIntegerLiteral = 3,
    OctalIntegerLiteral = 4,
    BinaryIntegerLiteral = 5,
    DecimalFloatingPointLiteral = 6,
    HexFloatingPointLiteral = 7,
    True = 8,
    False = 9,
    CharacterLiteral = 10,
    StringLiteral = 11,
    NullLiteral = 12,
    LPAREN = 13,
    AMP = 14,
    RPAREN = 15,
    EQ = 16,
    PLUSEQ = 17,
    DASHEQ = 18,
    STAREQ = 19,
    SLASHEQ = 20,
    AMPEQ = 21,
    PIPEEQ = 22,
    CARETEQ = 23,
    PERCENTEQ = 24,
    LTLTEQ = 25,
    GTGTEQ = 26,
    GTGTGTEQ = 27,
    GT = 28,
    LT = 29,
    EQEQ = 30,
    GTEQ = 31,
    LTEQ = 32,
    BANGEQ = 33,
    AMPAMP = 34,
    PIPEPIPE = 35,
    PLUS = 36,
    DASH = 37,
    STAR = 38,
    SLASH = 39,
    PIPE = 40,
    CARET = 41,
    PERCENT = 42,
    LTLT = 43,
    GTGT = 44,
    GTGTGT = 45,
    Instanceof = 46,
    DASHGT = 47,
    COMMA = 48,
    QMARK = 49,
    COLON = 50,
    BANG = 51,
    TILDE = 52,
    PLUSPLUS = 53,
    DASHDASH = 54,
    New = 55,
    LBRACK = 56,
    RBRACK = 57,
    DOT = 58,
    Class = 59,
    COLONCOLON = 60,
    Extends = 61,
    SEMI = 62,
    LBRACE = 63,
    RBRACE = 64,
    Assert = 65,
    Switch = 66,
    Case = 67,
    Default = 68,
    Do = 69,
    While = 70,
    Break = 71,
    Continue = 72,
    Return = 73,
    Synchronized = 74,
    Throw = 75,
    Try = 76,
    Catch = 77,
    Finally = 78,
    If = 79,
    Else = 80,
    For = 81,
    AT = 82,
    Open = 83,
    Module = 84,
    Requires = 85,
    Exports = 86,
    To = 87,
    Opens = 88,
    Uses = 89,
    Provides = 90,
    With = 91,
    Transitive = 92,
    Static = 93,
    Package = 94,
    Import = 95,
    Enum = 96,
    Public = 97,
    Protected = 98,
    Private = 99,
    Abstract = 100,
    Final = 101,
    Strictfp = 102,
    Native = 103,
    Transient = 104,
    Volatile = 105,
    Implements = 106,
    ATinterface = 107,
    Interface = 108,
    Byte = 109,
    Short = 110,
    Int = 111,
    Long = 112,
    Char = 113,
    Float = 114,
    Double = 115,
    BooleanType = 116,
    VoidType = 117,
    DOTDOTDOT = 118,
    Throws2 = 119,
    This = 120,
    Super = 121,
    Comment = 122,
    Program = 123,
    Literal = 124,
    Expression = 125,
    CastExpression = 126,
    AssignmentExpression = 127,
    BinaryExpression = 128,
    InstanceofExpression = 129,
    LambdaExpression = 130,
    InferredParameters = 131,
    TernaryExpression = 132,
    UnaryExpression = 133,
    UpdateExpression = 134,
    Primary = 135,
    ArrayCreationExpression = 136,
    DimensionsExpr = 137,
    ParenthesizedExpression = 138,
    ClassLiteral = 139,
    ObjectCreationExpression = 140,
    UnqualifiedObjectCreationExpression = 141,
    FieldAccess = 142,
    ArrayAccess = 143,
    MethodInvocation = 144,
    ArgumentList = 145,
    MethodReference = 146,
    TypeArguments = 147,
    Wildcard = 148,
    WildcardBounds = 149,
    Dimensions = 150,
    Statement = 151,
    Block = 152,
    ExpressionStatement = 153,
    LabeledStatement = 154,
    AssertStatement = 155,
    SwitchStatement = 156,
    SwitchBlock = 157,
    SwitchLabel = 158,
    DoStatement = 159,
    BreakStatement = 160,
    ContinueStatement = 161,
    ReturnStatement = 162,
    SynchronizedStatement = 163,
    ThrowStatement = 164,
    TryStatement = 165,
    CatchClause = 166,
    CatchFormalParameter = 167,
    CatchType = 168,
    FinallyClause = 169,
    TryWithResourcesStatement = 170,
    ResourceSpecification = 171,
    Resource = 172,
    IfStatement = 173,
    WhileStatement = 174,
    ForStatement = 175,
    EnhancedForStatement = 176,
    Annotation = 177,
    MarkerAnnotation = 178,
    Annotation2 = 179,
    AnnotationArgumentList = 180,
    ElementValuePair = 181,
    ElementValue = 182,
    ElementValueArrayInitializer = 183,
    Declaration = 184,
    ModuleDeclaration = 185,
    ModuleBody = 186,
    ModuleDirective = 187,
    RequiresModifier = 188,
    PackageDeclaration = 189,
    ImportDeclaration = 190,
    Asterisk = 191,
    EnumDeclaration = 192,
    EnumBody = 193,
    EnumBodyDeclarations = 194,
    EnumConstant = 195,
    ClassDeclaration = 196,
    Modifiers = 197,
    TypeParameters = 198,
    TypeParameter = 199,
    TypeBound = 200,
    Superclass = 201,
    SuperInterfaces = 202,
    InterfaceTypeList = 203,
    ClassBody = 204,
    StaticInitializer = 205,
    ConstructorDeclaration = 206,
    ConstructorDeclarator = 207,
    ConstructorBody = 208,
    ExplicitConstructorInvocation = 209,
    ScopedIdentifier = 210,
    FieldDeclaration = 211,
    AnnotationTypeDeclaration = 212,
    AnnotationTypeBody = 213,
    AnnotationTypeElementDeclaration = 214,
    DefaultValue = 215,
    InterfaceDeclaration = 216,
    ExtendsInterfaces = 217,
    InterfaceBody = 218,
    ConstantDeclaration = 219,
    VariableDeclaratorList = 220,
    VariableDeclarator = 221,
    VariableDeclaratorId = 222,
    ArrayInitializer = 223,
    Type = 224,
    UnannotatedType = 225,
    AnnotatedType = 226,
    ScopedTypeIdentifier = 227,
    GenericType = 228,
    ArrayType = 229,
    IntegralType = 230,
    FloatingPointType = 231,
    MethodHeader = 232,
    MethodDeclarator = 233,
    FormalParameters = 234,
    FormalParameter = 235,
    ReceiverParameter = 236,
    SpreadParameter = 237,
    Throws = 238,
    LocalVariableDeclaration = 239,
    MethodDeclaration = 240,
    ProgramRepeat1 = 241,
    CastExpressionRepeat1 = 242,
    InferredParametersRepeat1 = 243,
    ArrayCreationExpressionRepeat1 = 244,
    DimensionsExprRepeat1 = 245,
    ArgumentListRepeat1 = 246,
    TypeArgumentsRepeat1 = 247,
    DimensionsRepeat1 = 248,
    SwitchBlockRepeat1 = 249,
    TryStatementRepeat1 = 250,
    CatchTypeRepeat1 = 251,
    ResourceSpecificationRepeat1 = 252,
    ForStatementRepeat1 = 253,
    ForStatementRepeat2 = 254,
    AnnotationArgumentListRepeat1 = 255,
    ElementValueArrayInitializerRepeat1 = 256,
    ModuleBodyRepeat1 = 257,
    ModuleDirectiveRepeat1 = 258,
    ModuleDirectiveRepeat2 = 259,
    EnumBodyRepeat1 = 260,
    EnumBodyDeclarationsRepeat1 = 261,
    ModifiersRepeat1 = 262,
    TypeParametersRepeat1 = 263,
    TypeBoundRepeat1 = 264,
    InterfaceTypeListRepeat1 = 265,
    AnnotationTypeBodyRepeat1 = 266,
    InterfaceBodyRepeat1 = 267,
    VariableDeclaratorListRepeat1 = 268,
    ArrayInitializerRepeat1 = 269,
    FormalParametersRepeat1 = 270,
    TypeIdentifier = 271,
    Error = 272,
}

impl Into<&'static str> for Java {
    fn into(self) -> &'static str {
        match self {
            Java::End => "end",
            Java::Identifier => "identifier",
            Java::DecimalIntegerLiteral => "decimal_integer_literal",
            Java::HexIntegerLiteral => "hex_integer_literal",
            Java::OctalIntegerLiteral => "octal_integer_literal",
            Java::BinaryIntegerLiteral => "binary_integer_literal",
            Java::DecimalFloatingPointLiteral => "decimal_floating_point_literal",
            Java::HexFloatingPointLiteral => "hex_floating_point_literal",
            Java::True => "true",
            Java::False => "false",
            Java::CharacterLiteral => "character_literal",
            Java::StringLiteral => "string_literal",
            Java::NullLiteral => "null_literal",
            Java::LPAREN => "(",
            Java::AMP => "&",
            Java::RPAREN => ")",
            Java::EQ => "=",
            Java::PLUSEQ => "+=",
            Java::DASHEQ => "-=",
            Java::STAREQ => "*=",
            Java::SLASHEQ => "/=",
            Java::AMPEQ => "&=",
            Java::PIPEEQ => "|=",
            Java::CARETEQ => "^=",
            Java::PERCENTEQ => "%=",
            Java::LTLTEQ => "<<=",
            Java::GTGTEQ => ">>=",
            Java::GTGTGTEQ => ">>>=",
            Java::GT => ">",
            Java::LT => "<",
            Java::EQEQ => "==",
            Java::GTEQ => ">=",
            Java::LTEQ => "<=",
            Java::BANGEQ => "!=",
            Java::AMPAMP => "&&",
            Java::PIPEPIPE => "||",
            Java::PLUS => "+",
            Java::DASH => "-",
            Java::STAR => "*",
            Java::SLASH => "/",
            Java::PIPE => "|",
            Java::CARET => "^",
            Java::PERCENT => "%",
            Java::LTLT => "<<",
            Java::GTGT => ">>",
            Java::GTGTGT => ">>>",
            Java::Instanceof => "instanceof",
            Java::DASHGT => "->",
            Java::COMMA => ",",
            Java::QMARK => "?",
            Java::COLON => ":",
            Java::BANG => "!",
            Java::TILDE => "~",
            Java::PLUSPLUS => "++",
            Java::DASHDASH => "--",
            Java::New => "new",
            Java::LBRACK => "[",
            Java::RBRACK => "]",
            Java::DOT => ".",
            Java::Class => "class",
            Java::COLONCOLON => "::",
            Java::Extends => "extends",
            Java::SEMI => ";",
            Java::LBRACE => "{",
            Java::RBRACE => "}",
            Java::Assert => "assert",
            Java::Switch => "switch",
            Java::Case => "case",
            Java::Default => "default",
            Java::Do => "do",
            Java::While => "while",
            Java::Break => "break",
            Java::Continue => "continue",
            Java::Return => "return",
            Java::Synchronized => "synchronized",
            Java::Throw => "throw",
            Java::Try => "try",
            Java::Catch => "catch",
            Java::Finally => "finally",
            Java::If => "if",
            Java::Else => "else",
            Java::For => "for",
            Java::AT => "@",
            Java::Open => "open",
            Java::Module => "module",
            Java::Requires => "requires",
            Java::Exports => "exports",
            Java::To => "to",
            Java::Opens => "opens",
            Java::Uses => "uses",
            Java::Provides => "provides",
            Java::With => "with",
            Java::Transitive => "transitive",
            Java::Static => "static",
            Java::Package => "package",
            Java::Import => "import",
            Java::Enum => "enum",
            Java::Public => "public",
            Java::Protected => "protected",
            Java::Private => "private",
            Java::Abstract => "abstract",
            Java::Final => "final",
            Java::Strictfp => "strictfp",
            Java::Native => "native",
            Java::Transient => "transient",
            Java::Volatile => "volatile",
            Java::Implements => "implements",
            Java::ATinterface => "@interface",
            Java::Interface => "interface",
            Java::Byte => "byte",
            Java::Short => "short",
            Java::Int => "int",
            Java::Long => "long",
            Java::Char => "char",
            Java::Float => "float",
            Java::Double => "double",
            Java::BooleanType => "boolean_type",
            Java::VoidType => "void_type",
            Java::DOTDOTDOT => "...",
            Java::Throws2 => "throws",
            Java::This => "this",
            Java::Super => "super",
            Java::Comment => "comment",
            Java::Program => "program",
            Java::Literal => "_literal",
            Java::Expression => "_expression",
            Java::CastExpression => "cast_expression",
            Java::AssignmentExpression => "assignment_expression",
            Java::BinaryExpression => "binary_expression",
            Java::InstanceofExpression => "instanceof_expression",
            Java::LambdaExpression => "lambda_expression",
            Java::InferredParameters => "inferred_parameters",
            Java::TernaryExpression => "ternary_expression",
            Java::UnaryExpression => "unary_expression",
            Java::UpdateExpression => "update_expression",
            Java::Primary => "_primary",
            Java::ArrayCreationExpression => "array_creation_expression",
            Java::DimensionsExpr => "dimensions_expr",
            Java::ParenthesizedExpression => "parenthesized_expression",
            Java::ClassLiteral => "class_literal",
            Java::ObjectCreationExpression => "object_creation_expression",
            Java::UnqualifiedObjectCreationExpression => "_unqualified_object_creation_expression",
            Java::FieldAccess => "field_access",
            Java::ArrayAccess => "array_access",
            Java::MethodInvocation => "method_invocation",
            Java::ArgumentList => "argument_list",
            Java::MethodReference => "method_reference",
            Java::TypeArguments => "type_arguments",
            Java::Wildcard => "wildcard",
            Java::WildcardBounds => "_wildcard_bounds",
            Java::Dimensions => "dimensions",
            Java::Statement => "_statement",
            Java::Block => "block",
            Java::ExpressionStatement => "expression_statement",
            Java::LabeledStatement => "labeled_statement",
            Java::AssertStatement => "assert_statement",
            Java::SwitchStatement => "switch_statement",
            Java::SwitchBlock => "switch_block",
            Java::SwitchLabel => "switch_label",
            Java::DoStatement => "do_statement",
            Java::BreakStatement => "break_statement",
            Java::ContinueStatement => "continue_statement",
            Java::ReturnStatement => "return_statement",
            Java::SynchronizedStatement => "synchronized_statement",
            Java::ThrowStatement => "throw_statement",
            Java::TryStatement => "try_statement",
            Java::CatchClause => "catch_clause",
            Java::CatchFormalParameter => "catch_formal_parameter",
            Java::CatchType => "catch_type",
            Java::FinallyClause => "finally_clause",
            Java::TryWithResourcesStatement => "try_with_resources_statement",
            Java::ResourceSpecification => "resource_specification",
            Java::Resource => "resource",
            Java::IfStatement => "if_statement",
            Java::WhileStatement => "while_statement",
            Java::ForStatement => "for_statement",
            Java::EnhancedForStatement => "enhanced_for_statement",
            Java::Annotation => "_annotation",
            Java::MarkerAnnotation => "marker_annotation",
            Java::Annotation2 => "annotation",
            Java::AnnotationArgumentList => "annotation_argument_list",
            Java::ElementValuePair => "element_value_pair",
            Java::ElementValue => "_element_value",
            Java::ElementValueArrayInitializer => "element_value_array_initializer",
            Java::Declaration => "_declaration",
            Java::ModuleDeclaration => "module_declaration",
            Java::ModuleBody => "module_body",
            Java::ModuleDirective => "module_directive",
            Java::RequiresModifier => "requires_modifier",
            Java::PackageDeclaration => "package_declaration",
            Java::ImportDeclaration => "import_declaration",
            Java::Asterisk => "asterisk",
            Java::EnumDeclaration => "enum_declaration",
            Java::EnumBody => "enum_body",
            Java::EnumBodyDeclarations => "enum_body_declarations",
            Java::EnumConstant => "enum_constant",
            Java::ClassDeclaration => "class_declaration",
            Java::Modifiers => "modifiers",
            Java::TypeParameters => "type_parameters",
            Java::TypeParameter => "type_parameter",
            Java::TypeBound => "type_bound",
            Java::Superclass => "superclass",
            Java::SuperInterfaces => "super_interfaces",
            Java::InterfaceTypeList => "interface_type_list",
            Java::ClassBody => "class_body",
            Java::StaticInitializer => "static_initializer",
            Java::ConstructorDeclaration => "constructor_declaration",
            Java::ConstructorDeclarator => "_constructor_declarator",
            Java::ConstructorBody => "constructor_body",
            Java::ExplicitConstructorInvocation => "explicit_constructor_invocation",
            Java::ScopedIdentifier => "scoped_identifier",
            Java::FieldDeclaration => "field_declaration",
            Java::AnnotationTypeDeclaration => "annotation_type_declaration",
            Java::AnnotationTypeBody => "annotation_type_body",
            Java::AnnotationTypeElementDeclaration => "annotation_type_element_declaration",
            Java::DefaultValue => "_default_value",
            Java::InterfaceDeclaration => "interface_declaration",
            Java::ExtendsInterfaces => "extends_interfaces",
            Java::InterfaceBody => "interface_body",
            Java::ConstantDeclaration => "constant_declaration",
            Java::VariableDeclaratorList => "_variable_declarator_list",
            Java::VariableDeclarator => "variable_declarator",
            Java::VariableDeclaratorId => "_variable_declarator_id",
            Java::ArrayInitializer => "array_initializer",
            Java::Type => "_type",
            Java::UnannotatedType => "_unannotated_type",
            Java::AnnotatedType => "annotated_type",
            Java::ScopedTypeIdentifier => "scoped_type_identifier",
            Java::GenericType => "generic_type",
            Java::ArrayType => "array_type",
            Java::IntegralType => "integral_type",
            Java::FloatingPointType => "floating_point_type",
            Java::MethodHeader => "_method_header",
            Java::MethodDeclarator => "_method_declarator",
            Java::FormalParameters => "formal_parameters",
            Java::FormalParameter => "formal_parameter",
            Java::ReceiverParameter => "receiver_parameter",
            Java::SpreadParameter => "spread_parameter",
            Java::Throws => "throws",
            Java::LocalVariableDeclaration => "local_variable_declaration",
            Java::MethodDeclaration => "method_declaration",
            Java::ProgramRepeat1 => "program_repeat1",
            Java::CastExpressionRepeat1 => "cast_expression_repeat1",
            Java::InferredParametersRepeat1 => "inferred_parameters_repeat1",
            Java::ArrayCreationExpressionRepeat1 => "array_creation_expression_repeat1",
            Java::DimensionsExprRepeat1 => "dimensions_expr_repeat1",
            Java::ArgumentListRepeat1 => "argument_list_repeat1",
            Java::TypeArgumentsRepeat1 => "type_arguments_repeat1",
            Java::DimensionsRepeat1 => "dimensions_repeat1",
            Java::SwitchBlockRepeat1 => "switch_block_repeat1",
            Java::TryStatementRepeat1 => "try_statement_repeat1",
            Java::CatchTypeRepeat1 => "catch_type_repeat1",
            Java::ResourceSpecificationRepeat1 => "resource_specification_repeat1",
            Java::ForStatementRepeat1 => "for_statement_repeat1",
            Java::ForStatementRepeat2 => "for_statement_repeat2",
            Java::AnnotationArgumentListRepeat1 => "annotation_argument_list_repeat1",
            Java::ElementValueArrayInitializerRepeat1 => "element_value_array_initializer_repeat1",
            Java::ModuleBodyRepeat1 => "module_body_repeat1",
            Java::ModuleDirectiveRepeat1 => "module_directive_repeat1",
            Java::ModuleDirectiveRepeat2 => "module_directive_repeat2",
            Java::EnumBodyRepeat1 => "enum_body_repeat1",
            Java::EnumBodyDeclarationsRepeat1 => "enum_body_declarations_repeat1",
            Java::ModifiersRepeat1 => "modifiers_repeat1",
            Java::TypeParametersRepeat1 => "type_parameters_repeat1",
            Java::TypeBoundRepeat1 => "type_bound_repeat1",
            Java::InterfaceTypeListRepeat1 => "interface_type_list_repeat1",
            Java::AnnotationTypeBodyRepeat1 => "annotation_type_body_repeat1",
            Java::InterfaceBodyRepeat1 => "interface_body_repeat1",
            Java::VariableDeclaratorListRepeat1 => "_variable_declarator_list_repeat1",
            Java::ArrayInitializerRepeat1 => "array_initializer_repeat1",
            Java::FormalParametersRepeat1 => "formal_parameters_repeat1",
            Java::TypeIdentifier => "type_identifier",
            Java::Error => "ERROR",
        }
    }
}

#[allow(clippy::unreadable_literal)]
static KEYS: phf::Map<&'static str, Java> = ::phf::Map {
    key: 3213172566270843353,
    disps: ::phf::Slice::Static(&[
        (0, 8),
        (0, 9),
        (0, 2),
        (2, 205),
        (1, 143),
        (0, 18),
        (0, 155),
        (3, 62),
        (0, 56),
        (0, 4),
        (0, 7),
        (0, 31),
        (0, 9),
        (2, 140),
        (0, 1),
        (0, 0),
        (0, 2),
        (0, 237),
        (0, 27),
        (7, 152),
        (0, 0),
        (0, 43),
        (2, 95),
        (2, 261),
        (0, 2),
        (4, 251),
        (5, 198),
        (0, 207),
        (11, 91),
        (0, 11),
        (3, 90),
        (0, 183),
        (3, 35),
        (0, 1),
        (16, 128),
        (10, 182),
        (4, 158),
        (0, 17),
        (14, 72),
        (1, 39),
        (0, 60),
        (1, 138),
        (0, 3),
        (0, 0),
        (3, 258),
        (3, 238),
        (0, 85),
        (0, 132),
        (23, 197),
        (0, 8),
        (0, 31),
        (58, 78),
        (0, 3),
        (1, 219),
        (0, 206),
    ]),
    entries: ::phf::Slice::Static(&[
        ("field_declaration", Java::FieldDeclaration),
        ("&&", Java::AMPAMP),
        ("enum", Java::Enum),
        (
            "explicit_constructor_invocation",
            Java::ExplicitConstructorInvocation,
        ),
        ("class_body", Java::ClassBody),
        ("scoped_identifier", Java::ScopedIdentifier),
        ("long", Java::Long),
        ("]", Java::RBRACK),
        ("class_literal", Java::ClassLiteral),
        ("module_directive", Java::ModuleDirective),
        ("module_directive_repeat2", Java::ModuleDirectiveRepeat2),
        (
            "enum_body_declarations_repeat1",
            Java::EnumBodyDeclarationsRepeat1,
        ),
        ("do", Java::Do),
        ("%", Java::PERCENT),
        ("module", Java::Module),
        ("char", Java::Char),
        ("octal_integer_literal", Java::OctalIntegerLiteral),
        ("interface_body", Java::InterfaceBody),
        ("static_initializer", Java::StaticInitializer),
        ("_type", Java::Type),
        ("_literal", Java::Literal),
        ("import_declaration", Java::ImportDeclaration),
        ("transient", Java::Transient),
        (
            "annotation_type_declaration",
            Java::AnnotationTypeDeclaration,
        ),
        ("package_declaration", Java::PackageDeclaration),
        ("comment", Java::Comment),
        ("_constructor_declarator", Java::ConstructorDeclarator),
        ("short", Java::Short),
        ("requires_modifier", Java::RequiresModifier),
        ("catch", Java::Catch),
        (":", Java::COLON),
        ("type_bound_repeat1", Java::TypeBoundRepeat1),
        ("::", Java::COLONCOLON),
        ("field_access", Java::FieldAccess),
        ("switch", Java::Switch),
        (">>>", Java::GTGTGT),
        ("array_initializer", Java::ArrayInitializer),
        ("assignment_expression", Java::AssignmentExpression),
        ("default", Java::Default),
        ("asterisk", Java::Asterisk),
        ("*", Java::STAR),
        ("character_literal", Java::CharacterLiteral),
        ("protected", Java::Protected),
        ("element_value_pair", Java::ElementValuePair),
        ("!=", Java::BANGEQ),
        ("unary_expression", Java::UnaryExpression),
        ("_declaration", Java::Declaration),
        ("{", Java::LBRACE),
        ("+", Java::PLUS),
        ("end", Java::End),
        ("break", Java::Break),
        ("assert_statement", Java::AssertStatement),
        ("integral_type", Java::IntegralType),
        ("catch_type_repeat1", Java::CatchTypeRepeat1),
        ("@interface", Java::ATinterface),
        ("method_reference", Java::MethodReference),
        ("++", Java::PLUSPLUS),
        ("super", Java::Super),
        ("&", Java::AMP),
        ("marker_annotation", Java::MarkerAnnotation),
        ("variable_declarator", Java::VariableDeclarator),
        ("throw", Java::Throw),
        ("_expression", Java::Expression),
        ("/=", Java::SLASHEQ),
        (
            "array_creation_expression_repeat1",
            Java::ArrayCreationExpressionRepeat1,
        ),
        ("update_expression", Java::UpdateExpression),
        ("annotation_argument_list", Java::AnnotationArgumentList),
        ("to", Java::To),
        ("<<", Java::LTLT),
        ("provides", Java::Provides),
        ("enum_constant", Java::EnumConstant),
        ("switch_statement", Java::SwitchStatement),
        (">>>=", Java::GTGTGTEQ),
        ("+=", Java::PLUSEQ),
        ("else", Java::Else),
        ("~", Java::TILDE),
        ("|", Java::PIPE),
        ("type_arguments_repeat1", Java::TypeArgumentsRepeat1),
        (
            "_unqualified_object_creation_expression",
            Java::UnqualifiedObjectCreationExpression,
        ),
        (
            "_variable_declarator_list_repeat1",
            Java::VariableDeclaratorListRepeat1,
        ),
        ("cast_expression_repeat1", Java::CastExpressionRepeat1),
        ("_default_value", Java::DefaultValue),
        ("}", Java::RBRACE),
        ("switch_block", Java::SwitchBlock),
        ("--", Java::DASHDASH),
        ("==", Java::EQEQ),
        ("switch_block_repeat1", Java::SwitchBlockRepeat1),
        ("catch_clause", Java::CatchClause),
        ("_method_declarator", Java::MethodDeclarator),
        ("inferred_parameters", Java::InferredParameters),
        (
            "annotation_type_body_repeat1",
            Java::AnnotationTypeBodyRepeat1,
        ),
        ("expression_statement", Java::ExpressionStatement),
        ("array_creation_expression", Java::ArrayCreationExpression),
        ("native", Java::Native),
        ("decimal_integer_literal", Java::DecimalIntegerLiteral),
        ("true", Java::True),
        (".", Java::DOT),
        ("instanceof_expression", Java::InstanceofExpression),
        ("formal_parameters_repeat1", Java::FormalParametersRepeat1),
        ("new", Java::New),
        ("final", Java::Final),
        ("requires", Java::Requires),
        ("while", Java::While),
        ("hex_integer_literal", Java::HexIntegerLiteral),
        ("%=", Java::PERCENTEQ),
        ("extends_interfaces", Java::ExtendsInterfaces),
        (
            "element_value_array_initializer",
            Java::ElementValueArrayInitializer,
        ),
        ("annotated_type", Java::AnnotatedType),
        ("class", Java::Class),
        ("|=", Java::PIPEEQ),
        ("array_access", Java::ArrayAccess),
        (";", Java::SEMI),
        ("scoped_type_identifier", Java::ScopedTypeIdentifier),
        ("for_statement_repeat1", Java::ForStatementRepeat1),
        ("import", Java::Import),
        ("-", Java::DASH),
        ("if", Java::If),
        ("...", Java::DOTDOTDOT),
        ("=", Java::EQ),
        ("ternary_expression", Java::TernaryExpression),
        ("parenthesized_expression", Java::ParenthesizedExpression),
        ("generic_type", Java::GenericType),
        ("continue_statement", Java::ContinueStatement),
        ("constructor_declaration", Java::ConstructorDeclaration),
        ("formal_parameters", Java::FormalParameters),
        (">", Java::GT),
        ("for_statement", Java::ForStatement),
        ("resource_specification", Java::ResourceSpecification),
        ("constant_declaration", Java::ConstantDeclaration),
        ("instanceof", Java::Instanceof),
        ("local_variable_declaration", Java::LocalVariableDeclaration),
        ("<", Java::LT),
        ("@", Java::AT),
        ("catch_formal_parameter", Java::CatchFormalParameter),
        ("byte", Java::Byte),
        ("enum_body_repeat1", Java::EnumBodyRepeat1),
        ("dimensions_expr", Java::DimensionsExpr),
        ("extends", Java::Extends),
        ("uses", Java::Uses),
        ("modifiers", Java::Modifiers),
        ("interface_body_repeat1", Java::InterfaceBodyRepeat1),
        ("boolean_type", Java::BooleanType),
        ("type_bound", Java::TypeBound),
        ("volatile", Java::Volatile),
        ("object_creation_expression", Java::ObjectCreationExpression),
        ("->", Java::DASHGT),
        ("^", Java::CARET),
        (
            "element_value_array_initializer_repeat1",
            Java::ElementValueArrayInitializerRepeat1,
        ),
        ("formal_parameter", Java::FormalParameter),
        ("try", Java::Try),
        ("module_body", Java::ModuleBody),
        ("superclass", Java::Superclass),
        (
            "decimal_floating_point_literal",
            Java::DecimalFloatingPointLiteral,
        ),
        ("case", Java::Case),
        ("finally_clause", Java::FinallyClause),
        ("int", Java::Int),
        (",", Java::COMMA),
        (">>", Java::GTGT),
        ("abstract", Java::Abstract),
        ("labeled_statement", Java::LabeledStatement),
        ("enum_declaration", Java::EnumDeclaration),
        ("wildcard", Java::Wildcard),
        ("method_invocation", Java::MethodInvocation),
        ("argument_list_repeat1", Java::ArgumentListRepeat1),
        ("<<=", Java::LTLTEQ),
        ("||", Java::PIPEPIPE),
        ("finally", Java::Finally),
        ("type_parameter", Java::TypeParameter),
        ("throws", Java::Throws),
        ("!", Java::BANG),
        ("interface", Java::Interface),
        ("void_type", Java::VoidType),
        ("type_arguments", Java::TypeArguments),
        ("try_statement", Java::TryStatement),
        ("return_statement", Java::ReturnStatement),
        (">>=", Java::GTGTEQ),
        ("catch_type", Java::CatchType),
        ("_statement", Java::Statement),
        ("*=", Java::STAREQ),
        ("?", Java::QMARK),
        ("_variable_declarator_id", Java::VariableDeclaratorId),
        ("with", Java::With),
        ("binary_integer_literal", Java::BinaryIntegerLiteral),
        (">=", Java::GTEQ),
        ("module_declaration", Java::ModuleDeclaration),
        ("double", Java::Double),
        ("floating_point_type", Java::FloatingPointType),
        ("for", Java::For),
        ("dimensions_expr_repeat1", Java::DimensionsExprRepeat1),
        ("_variable_declarator_list", Java::VariableDeclaratorList),
        ("exports", Java::Exports),
        ("interface_declaration", Java::InterfaceDeclaration),
        ("strictfp", Java::Strictfp),
        ("modifiers_repeat1", Java::ModifiersRepeat1),
        (
            "annotation_argument_list_repeat1",
            Java::AnnotationArgumentListRepeat1,
        ),
        ("transitive", Java::Transitive),
        ("synchronized", Java::Synchronized),
        ("annotation_type_body", Java::AnnotationTypeBody),
        ("break_statement", Java::BreakStatement),
        ("identifier", Java::Identifier),
        ("hex_floating_point_literal", Java::HexFloatingPointLiteral),
        ("float", Java::Float),
        ("dimensions_repeat1", Java::DimensionsRepeat1),
        ("continue", Java::Continue),
        ("interface_type_list", Java::InterfaceTypeList),
        (
            "annotation_type_element_declaration",
            Java::AnnotationTypeElementDeclaration,
        ),
        ("public", Java::Public),
        (
            "interface_type_list_repeat1",
            Java::InterfaceTypeListRepeat1,
        ),
        ("enum_body", Java::EnumBody),
        ("program", Java::Program),
        ("spread_parameter", Java::SpreadParameter),
        (
            "resource_specification_repeat1",
            Java::ResourceSpecificationRepeat1,
        ),
        ("method_declaration", Java::MethodDeclaration),
        ("enhanced_for_statement", Java::EnhancedForStatement),
        ("enum_body_declarations", Java::EnumBodyDeclarations),
        ("module_body_repeat1", Java::ModuleBodyRepeat1),
        ("for_statement_repeat2", Java::ForStatementRepeat2),
        ("array_type", Java::ArrayType),
        ("implements", Java::Implements),
        ("[", Java::LBRACK),
        ("constructor_body", Java::ConstructorBody),
        ("argument_list", Java::ArgumentList),
        ("while_statement", Java::WhileStatement),
        ("receiver_parameter", Java::ReceiverParameter),
        ("try_statement_repeat1", Java::TryStatementRepeat1),
        ("_annotation", Java::Annotation),
        ("package", Java::Package),
        ("switch_label", Java::SwitchLabel),
        ("_primary", Java::Primary),
        ("open", Java::Open),
        ("ERROR", Java::Error),
        ("_wildcard_bounds", Java::WildcardBounds),
        ("binary_expression", Java::BinaryExpression),
        ("type_identifier", Java::TypeIdentifier),
        ("_method_header", Java::MethodHeader),
        ("synchronized_statement", Java::SynchronizedStatement),
        ("null_literal", Java::NullLiteral),
        ("resource", Java::Resource),
        ("<=", Java::LTEQ),
        ("dimensions", Java::Dimensions),
        ("class_declaration", Java::ClassDeclaration),
        ("return", Java::Return),
        (")", Java::RPAREN),
        ("private", Java::Private),
        ("(", Java::LPAREN),
        ("&=", Java::AMPEQ),
        ("array_initializer_repeat1", Java::ArrayInitializerRepeat1),
        ("cast_expression", Java::CastExpression),
        ("do_statement", Java::DoStatement),
        ("-=", Java::DASHEQ),
        ("throw_statement", Java::ThrowStatement),
        ("lambda_expression", Java::LambdaExpression),
        (
            "try_with_resources_statement",
            Java::TryWithResourcesStatement,
        ),
        ("string_literal", Java::StringLiteral),
        ("/", Java::SLASH),
        ("_element_value", Java::ElementValue),
        ("this", Java::This),
        ("super_interfaces", Java::SuperInterfaces),
        ("assert", Java::Assert),
        ("^=", Java::CARETEQ),
        (
            "inferred_parameters_repeat1",
            Java::InferredParametersRepeat1,
        ),
        ("_unannotated_type", Java::UnannotatedType),
        ("type_parameters", Java::TypeParameters),
        ("block", Java::Block),
        ("false", Java::False),
        ("if_statement", Java::IfStatement),
        ("type_parameters_repeat1", Java::TypeParametersRepeat1),
        ("opens", Java::Opens),
        ("program_repeat1", Java::ProgramRepeat1),
        ("static", Java::Static),
        ("module_directive_repeat1", Java::ModuleDirectiveRepeat1),
    ]),
};

impl From<&str> for Java {
    #[inline(always)]
    fn from(key: &str) -> Self {
        KEYS.get(key).unwrap().clone()
    }
}

impl From<u16> for Java {
    #[inline(always)]
    fn from(x: u16) -> Self {
        unsafe { std::mem::transmute(x) }
    }
}

// Java == u16
impl PartialEq<u16> for Java {
    #[inline(always)]
    fn eq(&self, x: &u16) -> bool {
        *self == Java::from(*x)
    }
}

// u16 == Java
impl PartialEq<Java> for u16 {
    #[inline(always)]
    fn eq(&self, x: &Java) -> bool {
        *x == *self
    }
}