Skip to content

Commit 37a2b7d

Browse files
committed
Ruby: Add more call graph tests for private methods
1 parent 9979fa3 commit 37a2b7d

File tree

6 files changed

+156
-22
lines changed

6 files changed

+156
-22
lines changed

ruby/ql/test/library-tests/modules/ancestors.expected

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,3 +187,9 @@ private.rb:
187187
#-----| super -> Object
188188

189189
# 42| F
190+
191+
# 62| PrivateOverride1
192+
#-----| super -> Object
193+
194+
# 76| PrivateOverride2
195+
#-----| super -> PrivateOverride1

ruby/ql/test/library-tests/modules/callgraph.expected

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,16 @@ getTarget
186186
| private.rb:43:3:44:5 | call to private | calls.rb:109:5:109:20 | private |
187187
| private.rb:51:3:51:19 | call to private | calls.rb:109:5:109:20 | private |
188188
| private.rb:53:3:53:9 | call to private | calls.rb:109:5:109:20 | private |
189+
| private.rb:63:3:65:5 | call to private | calls.rb:109:5:109:20 | private |
190+
| private.rb:64:7:64:32 | call to puts | calls.rb:102:5:102:30 | puts |
191+
| private.rb:67:3:69:5 | call to private | calls.rb:109:5:109:20 | private |
192+
| private.rb:68:7:68:32 | call to puts | calls.rb:102:5:102:30 | puts |
193+
| private.rb:77:3:81:5 | call to private | calls.rb:109:5:109:20 | private |
194+
| private.rb:78:7:78:32 | call to puts | calls.rb:102:5:102:30 | puts |
195+
| private.rb:80:7:80:26 | call to new | calls.rb:114:5:114:16 | new |
196+
| private.rb:84:1:84:20 | call to new | calls.rb:114:5:114:16 | new |
197+
| private.rb:84:1:84:28 | call to call_m1 | private.rb:71:3:73:5 | call_m1 |
198+
| private.rb:85:1:85:20 | call to new | calls.rb:114:5:114:16 | new |
189199
unresolvedCall
190200
| calls.rb:26:9:26:18 | call to instance_m |
191201
| calls.rb:29:5:29:14 | call to instance_m |
@@ -230,6 +240,10 @@ unresolvedCall
230240
| private.rb:35:1:35:14 | call to private2 |
231241
| private.rb:36:1:36:14 | call to private3 |
232242
| private.rb:37:1:37:14 | call to private4 |
243+
| private.rb:72:7:72:8 | call to m1 |
244+
| private.rb:79:7:79:8 | call to m2 |
245+
| private.rb:80:7:80:29 | call to m1 |
246+
| private.rb:85:1:85:23 | call to m1 |
233247
privateMethod
234248
| calls.rb:1:1:3:3 | foo |
235249
| calls.rb:39:1:41:3 | call_instance_m |
@@ -253,3 +267,6 @@ privateMethod
253267
| private.rb:49:3:50:5 | private2 |
254268
| private.rb:55:3:56:5 | private3 |
255269
| private.rb:58:3:59:5 | private4 |
270+
| private.rb:63:11:65:5 | m1 |
271+
| private.rb:67:11:69:5 | m2 |
272+
| private.rb:77:11:81:5 | m1 |

ruby/ql/test/library-tests/modules/methods.expected

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ getMethod
5454
| private.rb:42:1:60:3 | F | private3 | private.rb:55:3:56:5 | private3 |
5555
| private.rb:42:1:60:3 | F | private4 | private.rb:58:3:59:5 | private4 |
5656
| private.rb:42:1:60:3 | F | public | private.rb:46:3:47:5 | public |
57+
| private.rb:62:1:74:3 | PrivateOverride1 | call_m1 | private.rb:71:3:73:5 | call_m1 |
5758
lookupMethod
5859
| calls.rb:21:1:34:3 | M | instance_m | calls.rb:22:5:24:7 | instance_m |
5960
| calls.rb:43:1:58:3 | C | add_singleton | calls.rb:364:1:368:3 | add_singleton |
@@ -416,6 +417,16 @@ lookupMethod
416417
| private.rb:42:1:60:3 | F | private3 | private.rb:55:3:56:5 | private3 |
417418
| private.rb:42:1:60:3 | F | private4 | private.rb:58:3:59:5 | private4 |
418419
| private.rb:42:1:60:3 | F | public | private.rb:46:3:47:5 | public |
420+
| private.rb:62:1:74:3 | PrivateOverride1 | call_m1 | private.rb:71:3:73:5 | call_m1 |
421+
| private.rb:62:1:74:3 | PrivateOverride1 | new | calls.rb:114:5:114:16 | new |
422+
| private.rb:62:1:74:3 | PrivateOverride1 | private_on_main | private.rb:31:1:32:3 | private_on_main |
423+
| private.rb:62:1:74:3 | PrivateOverride1 | puts | calls.rb:102:5:102:30 | puts |
424+
| private.rb:62:1:74:3 | PrivateOverride1 | to_s | calls.rb:169:5:170:7 | to_s |
425+
| private.rb:76:1:82:3 | PrivateOverride2 | call_m1 | private.rb:71:3:73:5 | call_m1 |
426+
| private.rb:76:1:82:3 | PrivateOverride2 | new | calls.rb:114:5:114:16 | new |
427+
| private.rb:76:1:82:3 | PrivateOverride2 | private_on_main | private.rb:31:1:32:3 | private_on_main |
428+
| private.rb:76:1:82:3 | PrivateOverride2 | puts | calls.rb:102:5:102:30 | puts |
429+
| private.rb:76:1:82:3 | PrivateOverride2 | to_s | calls.rb:169:5:170:7 | to_s |
419430
enclosingMethod
420431
| calls.rb:2:5:2:14 | call to puts | calls.rb:1:1:3:3 | foo |
421432
| calls.rb:2:5:2:14 | self | calls.rb:1:1:3:3 | foo |
@@ -703,3 +714,22 @@ enclosingMethod
703714
| hello.rb:20:30:20:34 | self | hello.rb:19:5:21:7 | message |
704715
| hello.rb:20:38:20:40 | "!" | hello.rb:19:5:21:7 | message |
705716
| hello.rb:20:39:20:39 | ! | hello.rb:19:5:21:7 | message |
717+
| private.rb:64:7:64:32 | call to puts | private.rb:63:11:65:5 | m1 |
718+
| private.rb:64:7:64:32 | self | private.rb:63:11:65:5 | m1 |
719+
| private.rb:64:12:64:32 | "PrivateOverride1#m1" | private.rb:63:11:65:5 | m1 |
720+
| private.rb:64:13:64:31 | PrivateOverride1#m1 | private.rb:63:11:65:5 | m1 |
721+
| private.rb:68:7:68:32 | call to puts | private.rb:67:11:69:5 | m2 |
722+
| private.rb:68:7:68:32 | self | private.rb:67:11:69:5 | m2 |
723+
| private.rb:68:12:68:32 | "PrivateOverride1#m2" | private.rb:67:11:69:5 | m2 |
724+
| private.rb:68:13:68:31 | PrivateOverride1#m2 | private.rb:67:11:69:5 | m2 |
725+
| private.rb:72:7:72:8 | call to m1 | private.rb:71:3:73:5 | call_m1 |
726+
| private.rb:72:7:72:8 | self | private.rb:71:3:73:5 | call_m1 |
727+
| private.rb:78:7:78:32 | call to puts | private.rb:77:11:81:5 | m1 |
728+
| private.rb:78:7:78:32 | self | private.rb:77:11:81:5 | m1 |
729+
| private.rb:78:12:78:32 | "PrivateOverride2#m1" | private.rb:77:11:81:5 | m1 |
730+
| private.rb:78:13:78:31 | PrivateOverride2#m1 | private.rb:77:11:81:5 | m1 |
731+
| private.rb:79:7:79:8 | call to m2 | private.rb:77:11:81:5 | m1 |
732+
| private.rb:79:7:79:8 | self | private.rb:77:11:81:5 | m1 |
733+
| private.rb:80:7:80:22 | PrivateOverride1 | private.rb:77:11:81:5 | m1 |
734+
| private.rb:80:7:80:26 | call to new | private.rb:77:11:81:5 | m1 |
735+
| private.rb:80:7:80:29 | call to m1 | private.rb:77:11:81:5 | m1 |

ruby/ql/test/library-tests/modules/modules.expected

Lines changed: 71 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ getModule
6767
| modules_rec.rb:4:1:5:3 | A::B |
6868
| private.rb:1:1:29:3 | E |
6969
| private.rb:42:1:60:3 | F |
70+
| private.rb:62:1:74:3 | PrivateOverride1 |
71+
| private.rb:76:1:82:3 | PrivateOverride2 |
7072
getADeclaration
7173
| calls.rb:21:1:34:3 | M | calls.rb:21:1:34:3 | M |
7274
| calls.rb:43:1:58:3 | C | calls.rb:43:1:58:3 | C |
@@ -80,7 +82,7 @@ getADeclaration
8082
| calls.rb:112:1:115:3 | Object | hello.rb:1:1:22:3 | hello.rb |
8183
| calls.rb:112:1:115:3 | Object | modules.rb:1:1:129:4 | modules.rb |
8284
| calls.rb:112:1:115:3 | Object | modules_rec.rb:1:1:11:26 | modules_rec.rb |
83-
| calls.rb:112:1:115:3 | Object | private.rb:1:1:60:3 | private.rb |
85+
| calls.rb:112:1:115:3 | Object | private.rb:1:1:85:40 | private.rb |
8486
| calls.rb:117:1:120:3 | Hash | calls.rb:117:1:120:3 | Hash |
8587
| calls.rb:122:1:135:3 | Array | calls.rb:122:1:135:3 | Array |
8688
| calls.rb:162:1:166:3 | S | calls.rb:162:1:166:3 | S |
@@ -134,6 +136,8 @@ getADeclaration
134136
| modules_rec.rb:4:1:5:3 | A::B | modules_rec.rb:4:1:5:3 | B |
135137
| private.rb:1:1:29:3 | E | private.rb:1:1:29:3 | E |
136138
| private.rb:42:1:60:3 | F | private.rb:42:1:60:3 | F |
139+
| private.rb:62:1:74:3 | PrivateOverride1 | private.rb:62:1:74:3 | PrivateOverride1 |
140+
| private.rb:76:1:82:3 | PrivateOverride2 | private.rb:76:1:82:3 | PrivateOverride2 |
137141
getSuperClass
138142
| calls.rb:43:1:58:3 | C | calls.rb:112:1:115:3 | Object |
139143
| calls.rb:65:1:69:3 | D | calls.rb:43:1:58:3 | C |
@@ -176,6 +180,8 @@ getSuperClass
176180
| modules_rec.rb:1:1:2:3 | B::A | calls.rb:112:1:115:3 | Object |
177181
| modules_rec.rb:4:1:5:3 | A::B | calls.rb:112:1:115:3 | Object |
178182
| private.rb:1:1:29:3 | E | calls.rb:112:1:115:3 | Object |
183+
| private.rb:62:1:74:3 | PrivateOverride1 | calls.rb:112:1:115:3 | Object |
184+
| private.rb:76:1:82:3 | PrivateOverride2 | private.rb:62:1:74:3 | PrivateOverride1 |
179185
getAPrependedModule
180186
| calls.rb:112:1:115:3 | Object | calls.rb:168:1:171:3 | A |
181187
| calls.rb:168:1:171:3 | A | modules_rec.rb:4:1:5:3 | A::B |
@@ -268,6 +274,10 @@ resolveConstantReadAccess
268274
| private.rb:36:1:36:1 | E | E |
269275
| private.rb:37:1:37:1 | E | E |
270276
| private.rb:38:1:38:1 | E | E |
277+
| private.rb:76:26:76:41 | PrivateOverride1 | PrivateOverride1 |
278+
| private.rb:80:7:80:22 | PrivateOverride1 | PrivateOverride1 |
279+
| private.rb:84:1:84:16 | PrivateOverride2 | PrivateOverride2 |
280+
| private.rb:85:1:85:16 | PrivateOverride2 | PrivateOverride2 |
271281
resolveConstantWriteAccess
272282
| calls.rb:21:1:34:3 | M | M |
273283
| calls.rb:43:1:58:3 | C | C |
@@ -340,6 +350,8 @@ resolveConstantWriteAccess
340350
| modules_rec.rb:7:1:9:3 | A | A |
341351
| private.rb:1:1:29:3 | E | E |
342352
| private.rb:42:1:60:3 | F | F |
353+
| private.rb:62:1:74:3 | PrivateOverride1 | PrivateOverride1 |
354+
| private.rb:76:1:82:3 | PrivateOverride2 | PrivateOverride2 |
343355
enclosingModule
344356
| calls.rb:1:1:3:3 | foo | calls.rb:1:1:412:35 | calls.rb |
345357
| calls.rb:2:5:2:14 | call to puts | calls.rb:1:1:412:35 | calls.rb |
@@ -1153,7 +1165,7 @@ enclosingModule
11531165
| modules_rec.rb:11:1:11:9 | call to prepend | modules_rec.rb:1:1:11:26 | modules_rec.rb |
11541166
| modules_rec.rb:11:1:11:9 | self | modules_rec.rb:1:1:11:26 | modules_rec.rb |
11551167
| modules_rec.rb:11:9:11:9 | A | modules_rec.rb:1:1:11:26 | modules_rec.rb |
1156-
| private.rb:1:1:29:3 | E | private.rb:1:1:60:3 | private.rb |
1168+
| private.rb:1:1:29:3 | E | private.rb:1:1:85:40 | private.rb |
11571169
| private.rb:2:3:3:5 | call to private | private.rb:1:1:29:3 | E |
11581170
| private.rb:2:3:3:5 | self | private.rb:1:1:29:3 | E |
11591171
| private.rb:2:11:3:5 | private1 | private.rb:1:1:29:3 | E |
@@ -1179,25 +1191,25 @@ enclosingModule
11791191
| private.rb:28:3:28:32 | self | private.rb:1:1:29:3 | E |
11801192
| private.rb:28:24:28:32 | :private6 | private.rb:1:1:29:3 | E |
11811193
| private.rb:28:24:28:32 | private6 | private.rb:1:1:29:3 | E |
1182-
| private.rb:31:1:32:3 | private_on_main | private.rb:1:1:60:3 | private.rb |
1183-
| private.rb:34:1:34:1 | E | private.rb:1:1:60:3 | private.rb |
1184-
| private.rb:34:1:34:5 | call to new | private.rb:1:1:60:3 | private.rb |
1185-
| private.rb:34:1:34:14 | call to private1 | private.rb:1:1:60:3 | private.rb |
1186-
| private.rb:35:1:35:1 | E | private.rb:1:1:60:3 | private.rb |
1187-
| private.rb:35:1:35:5 | call to new | private.rb:1:1:60:3 | private.rb |
1188-
| private.rb:35:1:35:14 | call to private2 | private.rb:1:1:60:3 | private.rb |
1189-
| private.rb:36:1:36:1 | E | private.rb:1:1:60:3 | private.rb |
1190-
| private.rb:36:1:36:5 | call to new | private.rb:1:1:60:3 | private.rb |
1191-
| private.rb:36:1:36:14 | call to private3 | private.rb:1:1:60:3 | private.rb |
1192-
| private.rb:37:1:37:1 | E | private.rb:1:1:60:3 | private.rb |
1193-
| private.rb:37:1:37:5 | call to new | private.rb:1:1:60:3 | private.rb |
1194-
| private.rb:37:1:37:14 | call to private4 | private.rb:1:1:60:3 | private.rb |
1195-
| private.rb:38:1:38:1 | E | private.rb:1:1:60:3 | private.rb |
1196-
| private.rb:38:1:38:5 | call to new | private.rb:1:1:60:3 | private.rb |
1197-
| private.rb:38:1:38:12 | call to public | private.rb:1:1:60:3 | private.rb |
1198-
| private.rb:40:1:40:15 | call to private_on_main | private.rb:1:1:60:3 | private.rb |
1199-
| private.rb:40:1:40:15 | self | private.rb:1:1:60:3 | private.rb |
1200-
| private.rb:42:1:60:3 | F | private.rb:1:1:60:3 | private.rb |
1194+
| private.rb:31:1:32:3 | private_on_main | private.rb:1:1:85:40 | private.rb |
1195+
| private.rb:34:1:34:1 | E | private.rb:1:1:85:40 | private.rb |
1196+
| private.rb:34:1:34:5 | call to new | private.rb:1:1:85:40 | private.rb |
1197+
| private.rb:34:1:34:14 | call to private1 | private.rb:1:1:85:40 | private.rb |
1198+
| private.rb:35:1:35:1 | E | private.rb:1:1:85:40 | private.rb |
1199+
| private.rb:35:1:35:5 | call to new | private.rb:1:1:85:40 | private.rb |
1200+
| private.rb:35:1:35:14 | call to private2 | private.rb:1:1:85:40 | private.rb |
1201+
| private.rb:36:1:36:1 | E | private.rb:1:1:85:40 | private.rb |
1202+
| private.rb:36:1:36:5 | call to new | private.rb:1:1:85:40 | private.rb |
1203+
| private.rb:36:1:36:14 | call to private3 | private.rb:1:1:85:40 | private.rb |
1204+
| private.rb:37:1:37:1 | E | private.rb:1:1:85:40 | private.rb |
1205+
| private.rb:37:1:37:5 | call to new | private.rb:1:1:85:40 | private.rb |
1206+
| private.rb:37:1:37:14 | call to private4 | private.rb:1:1:85:40 | private.rb |
1207+
| private.rb:38:1:38:1 | E | private.rb:1:1:85:40 | private.rb |
1208+
| private.rb:38:1:38:5 | call to new | private.rb:1:1:85:40 | private.rb |
1209+
| private.rb:38:1:38:12 | call to public | private.rb:1:1:85:40 | private.rb |
1210+
| private.rb:40:1:40:15 | call to private_on_main | private.rb:1:1:85:40 | private.rb |
1211+
| private.rb:40:1:40:15 | self | private.rb:1:1:85:40 | private.rb |
1212+
| private.rb:42:1:60:3 | F | private.rb:1:1:85:40 | private.rb |
12011213
| private.rb:43:3:44:5 | call to private | private.rb:42:1:60:3 | F |
12021214
| private.rb:43:3:44:5 | self | private.rb:42:1:60:3 | F |
12031215
| private.rb:43:11:44:5 | private1 | private.rb:42:1:60:3 | F |
@@ -1211,3 +1223,41 @@ enclosingModule
12111223
| private.rb:53:3:53:9 | self | private.rb:42:1:60:3 | F |
12121224
| private.rb:55:3:56:5 | private3 | private.rb:42:1:60:3 | F |
12131225
| private.rb:58:3:59:5 | private4 | private.rb:42:1:60:3 | F |
1226+
| private.rb:62:1:74:3 | PrivateOverride1 | private.rb:1:1:85:40 | private.rb |
1227+
| private.rb:63:3:65:5 | call to private | private.rb:62:1:74:3 | PrivateOverride1 |
1228+
| private.rb:63:3:65:5 | self | private.rb:62:1:74:3 | PrivateOverride1 |
1229+
| private.rb:63:11:65:5 | m1 | private.rb:62:1:74:3 | PrivateOverride1 |
1230+
| private.rb:64:7:64:32 | call to puts | private.rb:62:1:74:3 | PrivateOverride1 |
1231+
| private.rb:64:7:64:32 | self | private.rb:62:1:74:3 | PrivateOverride1 |
1232+
| private.rb:64:12:64:32 | "PrivateOverride1#m1" | private.rb:62:1:74:3 | PrivateOverride1 |
1233+
| private.rb:64:13:64:31 | PrivateOverride1#m1 | private.rb:62:1:74:3 | PrivateOverride1 |
1234+
| private.rb:67:3:69:5 | call to private | private.rb:62:1:74:3 | PrivateOverride1 |
1235+
| private.rb:67:3:69:5 | self | private.rb:62:1:74:3 | PrivateOverride1 |
1236+
| private.rb:67:11:69:5 | m2 | private.rb:62:1:74:3 | PrivateOverride1 |
1237+
| private.rb:68:7:68:32 | call to puts | private.rb:62:1:74:3 | PrivateOverride1 |
1238+
| private.rb:68:7:68:32 | self | private.rb:62:1:74:3 | PrivateOverride1 |
1239+
| private.rb:68:12:68:32 | "PrivateOverride1#m2" | private.rb:62:1:74:3 | PrivateOverride1 |
1240+
| private.rb:68:13:68:31 | PrivateOverride1#m2 | private.rb:62:1:74:3 | PrivateOverride1 |
1241+
| private.rb:71:3:73:5 | call_m1 | private.rb:62:1:74:3 | PrivateOverride1 |
1242+
| private.rb:72:7:72:8 | call to m1 | private.rb:62:1:74:3 | PrivateOverride1 |
1243+
| private.rb:72:7:72:8 | self | private.rb:62:1:74:3 | PrivateOverride1 |
1244+
| private.rb:76:1:82:3 | PrivateOverride2 | private.rb:1:1:85:40 | private.rb |
1245+
| private.rb:76:26:76:41 | PrivateOverride1 | private.rb:1:1:85:40 | private.rb |
1246+
| private.rb:77:3:81:5 | call to private | private.rb:76:1:82:3 | PrivateOverride2 |
1247+
| private.rb:77:3:81:5 | self | private.rb:76:1:82:3 | PrivateOverride2 |
1248+
| private.rb:77:11:81:5 | m1 | private.rb:76:1:82:3 | PrivateOverride2 |
1249+
| private.rb:78:7:78:32 | call to puts | private.rb:76:1:82:3 | PrivateOverride2 |
1250+
| private.rb:78:7:78:32 | self | private.rb:76:1:82:3 | PrivateOverride2 |
1251+
| private.rb:78:12:78:32 | "PrivateOverride2#m1" | private.rb:76:1:82:3 | PrivateOverride2 |
1252+
| private.rb:78:13:78:31 | PrivateOverride2#m1 | private.rb:76:1:82:3 | PrivateOverride2 |
1253+
| private.rb:79:7:79:8 | call to m2 | private.rb:76:1:82:3 | PrivateOverride2 |
1254+
| private.rb:79:7:79:8 | self | private.rb:76:1:82:3 | PrivateOverride2 |
1255+
| private.rb:80:7:80:22 | PrivateOverride1 | private.rb:76:1:82:3 | PrivateOverride2 |
1256+
| private.rb:80:7:80:26 | call to new | private.rb:76:1:82:3 | PrivateOverride2 |
1257+
| private.rb:80:7:80:29 | call to m1 | private.rb:76:1:82:3 | PrivateOverride2 |
1258+
| private.rb:84:1:84:16 | PrivateOverride2 | private.rb:1:1:85:40 | private.rb |
1259+
| private.rb:84:1:84:20 | call to new | private.rb:1:1:85:40 | private.rb |
1260+
| private.rb:84:1:84:28 | call to call_m1 | private.rb:1:1:85:40 | private.rb |
1261+
| private.rb:85:1:85:16 | PrivateOverride2 | private.rb:1:1:85:40 | private.rb |
1262+
| private.rb:85:1:85:20 | call to new | private.rb:1:1:85:40 | private.rb |
1263+
| private.rb:85:1:85:23 | call to m1 | private.rb:1:1:85:40 | private.rb |

ruby/ql/test/library-tests/modules/private.rb

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,29 @@ def private3
5757

5858
def private4
5959
end
60-
end
60+
end
61+
62+
class PrivateOverride1
63+
private def m1
64+
puts "PrivateOverride1#m1"
65+
end
66+
67+
private def m2
68+
puts "PrivateOverride1#m2"
69+
end
70+
71+
def call_m1
72+
m1
73+
end
74+
end
75+
76+
class PrivateOverride2 < PrivateOverride1
77+
private def m1
78+
puts "PrivateOverride2#m1"
79+
m2
80+
PrivateOverride1.new.m1 # NoMethodError
81+
end
82+
end
83+
84+
PrivateOverride2.new.call_m1
85+
PrivateOverride2.new.m1 # NoMethodError

ruby/ql/test/library-tests/modules/superclasses.expected

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,3 +179,9 @@ private.rb:
179179
#-----| -> Object
180180

181181
# 42| F
182+
183+
# 62| PrivateOverride1
184+
#-----| -> Object
185+
186+
# 76| PrivateOverride2
187+
#-----| -> PrivateOverride1

0 commit comments

Comments
 (0)