Skip to content

Commit 30962d1

Browse files
authored
Merge pull request #112 from raghav-deepsource/sealed-classes
Sealed classes
2 parents 39a11c8 + 2d800aa commit 30962d1

File tree

8 files changed

+36400
-32668
lines changed

8 files changed

+36400
-32668
lines changed

grammar.js

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -763,6 +763,7 @@ module.exports = grammar({
763763
optional(field('type_parameters', $.type_parameters)),
764764
optional(field('superclass', $.superclass)),
765765
optional(field('interfaces', $.super_interfaces)),
766+
optional(field('permits', $.permits)),
766767
field('body', $.class_body)
767768
),
768769

@@ -779,7 +780,9 @@ module.exports = grammar({
779780
'synchronized',
780781
'native',
781782
'transient',
782-
'volatile'
783+
'volatile',
784+
'sealed',
785+
'non-sealed',
783786
)),
784787

785788
type_parameters: $ => seq(
@@ -801,14 +804,19 @@ module.exports = grammar({
801804

802805
super_interfaces: $ => seq(
803806
'implements',
804-
$.interface_type_list
807+
$.type_list
805808
),
806809

807-
interface_type_list: $ => seq(
810+
type_list: $ => seq(
808811
$._type,
809812
repeat(seq(',', $._type))
810813
),
811814

815+
permits: $ => seq(
816+
'permits',
817+
$.type_list
818+
),
819+
812820
class_body: $ => seq(
813821
'{',
814822
repeat($._class_body_declaration),
@@ -937,12 +945,13 @@ module.exports = grammar({
937945
field('name', $.identifier),
938946
field('type_parameters', optional($.type_parameters)),
939947
optional($.extends_interfaces),
948+
optional(field('permits', $.permits)),
940949
field('body', $.interface_body)
941950
),
942951

943952
extends_interfaces: $ => seq(
944953
'extends',
945-
$.interface_type_list
954+
$.type_list
946955
),
947956

948957
interface_body: $ => seq(

queries/highlights.scm

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@
112112
"module"
113113
"native"
114114
"new"
115+
"non-sealed"
115116
"open"
116117
"opens"
117118
"package"
@@ -121,6 +122,7 @@
121122
"public"
122123
"requires"
123124
"return"
125+
"sealed"
124126
"static"
125127
"strictfp"
126128
"switch"

queries/tags.scm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
(interface_declaration
1212
name: (identifier) @name) @definition.interface
1313

14-
(interface_type_list
14+
(type_list
1515
(type_identifier) @name) @reference.implementation
1616

1717
(object_creation_expression

src/grammar.json

Lines changed: 56 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5066,6 +5066,22 @@
50665066
}
50675067
]
50685068
},
5069+
{
5070+
"type": "CHOICE",
5071+
"members": [
5072+
{
5073+
"type": "FIELD",
5074+
"name": "permits",
5075+
"content": {
5076+
"type": "SYMBOL",
5077+
"name": "permits"
5078+
}
5079+
},
5080+
{
5081+
"type": "BLANK"
5082+
}
5083+
]
5084+
},
50695085
{
50705086
"type": "FIELD",
50715087
"name": "body",
@@ -5132,6 +5148,14 @@
51325148
{
51335149
"type": "STRING",
51345150
"value": "volatile"
5151+
},
5152+
{
5153+
"type": "STRING",
5154+
"value": "sealed"
5155+
},
5156+
{
5157+
"type": "STRING",
5158+
"value": "non-sealed"
51355159
}
51365160
]
51375161
}
@@ -5258,11 +5282,11 @@
52585282
},
52595283
{
52605284
"type": "SYMBOL",
5261-
"name": "interface_type_list"
5285+
"name": "type_list"
52625286
}
52635287
]
52645288
},
5265-
"interface_type_list": {
5289+
"type_list": {
52665290
"type": "SEQ",
52675291
"members": [
52685292
{
@@ -5287,6 +5311,19 @@
52875311
}
52885312
]
52895313
},
5314+
"permits": {
5315+
"type": "SEQ",
5316+
"members": [
5317+
{
5318+
"type": "STRING",
5319+
"value": "permits"
5320+
},
5321+
{
5322+
"type": "SYMBOL",
5323+
"name": "type_list"
5324+
}
5325+
]
5326+
},
52905327
"class_body": {
52915328
"type": "SEQ",
52925329
"members": [
@@ -5928,6 +5965,22 @@
59285965
}
59295966
]
59305967
},
5968+
{
5969+
"type": "CHOICE",
5970+
"members": [
5971+
{
5972+
"type": "FIELD",
5973+
"name": "permits",
5974+
"content": {
5975+
"type": "SYMBOL",
5976+
"name": "permits"
5977+
}
5978+
},
5979+
{
5980+
"type": "BLANK"
5981+
}
5982+
]
5983+
},
59315984
{
59325985
"type": "FIELD",
59335986
"name": "body",
@@ -5947,7 +6000,7 @@
59476000
},
59486001
{
59496002
"type": "SYMBOL",
5950-
"name": "interface_type_list"
6003+
"name": "type_list"
59516004
}
59526005
]
59536006
},

src/node-types.json

Lines changed: 64 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1158,6 +1158,16 @@
11581158
}
11591159
]
11601160
},
1161+
"permits": {
1162+
"multiple": false,
1163+
"required": false,
1164+
"types": [
1165+
{
1166+
"type": "permits",
1167+
"named": true
1168+
}
1169+
]
1170+
},
11611171
"superclass": {
11621172
"multiple": false,
11631173
"required": false,
@@ -1804,7 +1814,7 @@
18041814
"required": true,
18051815
"types": [
18061816
{
1807-
"type": "interface_type_list",
1817+
"type": "type_list",
18081818
"named": true
18091819
}
18101820
]
@@ -2216,6 +2226,16 @@
22162226
}
22172227
]
22182228
},
2229+
"permits": {
2230+
"multiple": false,
2231+
"required": false,
2232+
"types": [
2233+
{
2234+
"type": "permits",
2235+
"named": true
2236+
}
2237+
]
2238+
},
22192239
"type_parameters": {
22202240
"multiple": false,
22212241
"required": false,
@@ -2242,21 +2262,6 @@
22422262
]
22432263
}
22442264
},
2245-
{
2246-
"type": "interface_type_list",
2247-
"named": true,
2248-
"fields": {},
2249-
"children": {
2250-
"multiple": true,
2251-
"required": true,
2252-
"types": [
2253-
{
2254-
"type": "_type",
2255-
"named": true
2256-
}
2257-
]
2258-
}
2259-
},
22602265
{
22612266
"type": "labeled_statement",
22622267
"named": true,
@@ -2749,6 +2754,21 @@
27492754
]
27502755
}
27512756
},
2757+
{
2758+
"type": "permits",
2759+
"named": true,
2760+
"fields": {},
2761+
"children": {
2762+
"multiple": false,
2763+
"required": true,
2764+
"types": [
2765+
{
2766+
"type": "type_list",
2767+
"named": true
2768+
}
2769+
]
2770+
}
2771+
},
27522772
{
27532773
"type": "program",
27542774
"named": true,
@@ -3126,7 +3146,7 @@
31263146
"required": true,
31273147
"types": [
31283148
{
3129-
"type": "interface_type_list",
3149+
"type": "type_list",
31303150
"named": true
31313151
}
31323152
]
@@ -3449,6 +3469,21 @@
34493469
]
34503470
}
34513471
},
3472+
{
3473+
"type": "type_list",
3474+
"named": true,
3475+
"fields": {},
3476+
"children": {
3477+
"multiple": true,
3478+
"required": true,
3479+
"types": [
3480+
{
3481+
"type": "_type",
3482+
"named": true
3483+
}
3484+
]
3485+
}
3486+
},
34523487
{
34533488
"type": "type_parameter",
34543489
"named": true,
@@ -4016,6 +4051,10 @@
40164051
"type": "new",
40174052
"named": false
40184053
},
4054+
{
4055+
"type": "non-sealed",
4056+
"named": false
4057+
},
40194058
{
40204059
"type": "null_literal",
40214060
"named": true
@@ -4036,6 +4075,10 @@
40364075
"type": "package",
40374076
"named": false
40384077
},
4078+
{
4079+
"type": "permits",
4080+
"named": false
4081+
},
40394082
{
40404083
"type": "private",
40414084
"named": false
@@ -4064,6 +4107,10 @@
40644107
"type": "return",
40654108
"named": false
40664109
},
4110+
{
4111+
"type": "sealed",
4112+
"named": false
4113+
},
40674114
{
40684115
"type": "short",
40694116
"named": false

0 commit comments

Comments
 (0)