From bc11c23f081a3746079ac92d5b93bc51d2ddf6ef Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 23 Jan 2025 13:33:53 +0100 Subject: [PATCH 1/8] C#: Add dispatch tests for overload resolution and update line numbers for existing test cases. --- .../dispatch/CallContext.expected | 44 +- .../library-tests/dispatch/CallGraph.expected | 468 +++++----- .../dispatch/GetADynamicTarget.expected | 884 +++++++++--------- .../library-tests/dispatch/ViableCallable.cs | 69 ++ .../dispatch/viableCallable.expected | 606 ++++++------ 5 files changed, 1070 insertions(+), 1001 deletions(-) diff --git a/csharp/ql/test/library-tests/dispatch/CallContext.expected b/csharp/ql/test/library-tests/dispatch/CallContext.expected index b5f75b4f265c..f3824ab52e17 100644 --- a/csharp/ql/test/library-tests/dispatch/CallContext.expected +++ b/csharp/ql/test/library-tests/dispatch/CallContext.expected @@ -3,27 +3,27 @@ getADynamicTargetInCallContext | TypeFlow.cs:33:9:33:18 | call to method Method | TypeFlow.cs:17:30:17:35 | Method | TypeFlow.cs:7:7:7:23 | call to method Run | mayBenefitFromCallContext | TypeFlow.cs:33:9:33:18 | call to method Method | -| ViableCallable.cs:12:9:12:28 | call to method M | -| ViableCallable.cs:14:9:14:15 | access to property Prop | -| ViableCallable.cs:14:19:14:25 | access to property Prop | -| ViableCallable.cs:16:9:16:23 | access to indexer | -| ViableCallable.cs:16:27:16:41 | access to indexer | -| ViableCallable.cs:18:9:18:16 | access to event Event | +| ViableCallable.cs:13:9:13:28 | call to method M | +| ViableCallable.cs:15:9:15:15 | access to property Prop | +| ViableCallable.cs:15:19:15:25 | access to property Prop | +| ViableCallable.cs:17:9:17:23 | access to indexer | +| ViableCallable.cs:17:27:17:41 | access to indexer | | ViableCallable.cs:19:9:19:16 | access to event Event | -| ViableCallable.cs:22:9:22:30 | call to method M | -| ViableCallable.cs:24:9:24:15 | access to property Prop | -| ViableCallable.cs:24:19:24:25 | access to property Prop | -| ViableCallable.cs:26:9:26:23 | access to indexer | -| ViableCallable.cs:26:27:26:41 | access to indexer | -| ViableCallable.cs:28:9:28:16 | access to event Event | +| ViableCallable.cs:20:9:20:16 | access to event Event | +| ViableCallable.cs:23:9:23:30 | call to method M | +| ViableCallable.cs:25:9:25:15 | access to property Prop | +| ViableCallable.cs:25:19:25:25 | access to property Prop | +| ViableCallable.cs:27:9:27:23 | access to indexer | +| ViableCallable.cs:27:27:27:41 | access to indexer | | ViableCallable.cs:29:9:29:16 | access to event Event | -| ViableCallable.cs:244:9:244:15 | call to method M | -| ViableCallable.cs:293:9:293:15 | call to method M | -| ViableCallable.cs:296:9:296:20 | call to method M | -| ViableCallable.cs:424:9:424:18 | call to method M | -| ViableCallable.cs:468:9:468:30 | call to method M2 | -| ViableCallable.cs:474:9:474:30 | call to method M2 | -| ViableCallable.cs:576:18:576:22 | call to operator / | -| ViableCallable.cs:579:26:579:30 | call to operator checked / | -| ViableCallable.cs:585:9:585:15 | call to method M12 | -| ViableCallable.cs:618:9:618:13 | call to method M | +| ViableCallable.cs:30:9:30:16 | access to event Event | +| ViableCallable.cs:245:9:245:15 | call to method M | +| ViableCallable.cs:294:9:294:15 | call to method M | +| ViableCallable.cs:297:9:297:20 | call to method M | +| ViableCallable.cs:425:9:425:18 | call to method M | +| ViableCallable.cs:469:9:469:30 | call to method M2 | +| ViableCallable.cs:475:9:475:30 | call to method M2 | +| ViableCallable.cs:577:18:577:22 | call to operator / | +| ViableCallable.cs:580:26:580:30 | call to operator checked / | +| ViableCallable.cs:586:9:586:15 | call to method M12 | +| ViableCallable.cs:619:9:619:13 | call to method M | diff --git a/csharp/ql/test/library-tests/dispatch/CallGraph.expected b/csharp/ql/test/library-tests/dispatch/CallGraph.expected index f1fc555f5203..abe1b5a39ac4 100644 --- a/csharp/ql/test/library-tests/dispatch/CallGraph.expected +++ b/csharp/ql/test/library-tests/dispatch/CallGraph.expected @@ -28,237 +28,237 @@ | TypeFlow.cs:24:10:24:12 | Run | TypeFlow.cs:12:29:12:34 | Method | | TypeFlow.cs:24:10:24:12 | Run | TypeFlow.cs:17:30:17:35 | Method | | TypeFlow.cs:24:10:24:12 | Run | TypeFlow.cs:22:15:22:17 | get_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ExactCallable.cs:128:25:128:26 | M3 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ExactCallable.cs:147:29:147:30 | M3 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:212:21:212:27 | Mock> | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:212:21:212:27 | Mock> | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:212:21:212:27 | Mock> | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:212:21:212:27 | Mock> | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:212:21:212:27 | Mock | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:212:21:212:27 | Mock>> | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:212:21:212:27 | Mock>> | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:212:21:212:27 | Mock> | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:250:23:250:27 | M`1 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:250:23:250:27 | M`1 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:250:23:250:27 | M`1 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:250:23:250:27 | M`1 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:251:35:251:37 | get_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:251:35:251:37 | get_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:251:35:251:37 | get_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:251:35:251:37 | get_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:251:40:251:42 | set_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:251:40:251:42 | set_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:251:40:251:42 | set_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:251:40:251:42 | set_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:252:40:252:42 | get_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:252:40:252:42 | get_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:252:40:252:42 | get_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:252:40:252:42 | get_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:252:71:252:73 | set_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:252:71:252:73 | set_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:252:71:252:73 | set_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:252:71:252:73 | set_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:253:56:253:58 | add_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:253:56:253:58 | add_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:253:56:253:58 | add_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:253:56:253:58 | add_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:253:64:253:69 | remove_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:253:64:253:69 | remove_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:253:64:253:69 | remove_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:253:64:253:69 | remove_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:258:29:258:33 | M`1 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:259:35:259:37 | get_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:259:40:259:42 | set_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:260:46:260:48 | get_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:260:77:260:79 | set_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:261:56:261:58 | add_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:261:64:261:69 | remove_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:266:26:266:30 | M`1 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:266:26:266:30 | M`1 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:267:32:267:34 | get_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:267:32:267:34 | get_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:267:37:267:39 | set_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:267:37:267:39 | set_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:268:40:268:42 | get_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:268:40:268:42 | get_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:268:71:268:73 | set_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:268:71:268:73 | set_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:269:53:269:55 | add_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:269:53:269:55 | add_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:269:61:269:66 | remove_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:269:61:269:66 | remove_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:274:26:274:30 | M`1 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:275:24:275:24 | M | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:276:35:276:37 | get_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:276:40:276:42 | set_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:277:39:277:41 | set_Prop2 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:278:43:278:45 | get_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:278:74:278:76 | set_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:279:56:279:58 | add_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:279:64:279:69 | remove_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:280:55:280:57 | add_Event2 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:280:63:280:68 | remove_Event2 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:285:24:285:28 | M`1 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:285:24:285:28 | M`1 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:285:24:285:28 | M`1 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:285:24:285:28 | M`1 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:285:24:285:28 | M`1 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:285:24:285:28 | M`1 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:285:24:285:28 | M`1 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:285:24:285:28 | M`1 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:285:24:285:28 | M`1 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:286:31:286:33 | get_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:286:31:286:33 | get_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:286:31:286:33 | get_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:286:31:286:33 | get_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:286:31:286:33 | get_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:286:31:286:33 | get_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:286:31:286:33 | get_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:286:31:286:33 | get_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:286:31:286:33 | get_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:286:36:286:38 | set_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:286:36:286:38 | set_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:286:36:286:38 | set_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:286:36:286:38 | set_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:286:36:286:38 | set_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:286:36:286:38 | set_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:286:36:286:38 | set_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:286:36:286:38 | set_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:286:36:286:38 | set_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:287:37:287:39 | get_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:287:37:287:39 | get_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:287:37:287:39 | get_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:287:37:287:39 | get_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:287:37:287:39 | get_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:287:37:287:39 | get_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:287:37:287:39 | get_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:287:37:287:39 | get_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:287:37:287:39 | get_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:287:68:287:70 | set_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:287:68:287:70 | set_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:287:68:287:70 | set_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:287:68:287:70 | set_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:287:68:287:70 | set_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:287:68:287:70 | set_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:287:68:287:70 | set_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:287:68:287:70 | set_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:287:68:287:70 | set_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:288:52:288:54 | add_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:288:52:288:54 | add_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:288:52:288:54 | add_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:288:52:288:54 | add_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:288:52:288:54 | add_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:288:52:288:54 | add_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:288:52:288:54 | add_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:288:52:288:54 | add_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:288:52:288:54 | add_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:288:60:288:65 | remove_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:288:60:288:65 | remove_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:288:60:288:65 | remove_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:288:60:288:65 | remove_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:288:60:288:65 | remove_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:288:60:288:65 | remove_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:288:60:288:65 | remove_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:288:60:288:65 | remove_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:288:60:288:65 | remove_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:302:26:302:30 | M`1 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:302:26:302:30 | M`1 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:303:31:303:33 | get_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:303:31:303:33 | get_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:303:36:303:38 | set_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:303:36:303:38 | set_Prop | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:304:39:304:41 | get_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:304:39:304:41 | get_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:304:70:304:72 | set_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:304:70:304:72 | set_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:305:52:305:54 | add_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:305:52:305:54 | add_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:305:60:305:65 | remove_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:305:60:305:65 | remove_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:322:25:322:25 | M | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:323:24:323:28 | M2 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:323:24:323:28 | M2 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:324:17:324:18 | M3 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:325:17:325:18 | M4 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:326:17:326:18 | M5 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:336:26:336:26 | M | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:337:17:337:18 | M3 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:338:17:338:18 | M5 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:347:17:347:18 | M3 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:348:17:348:18 | M5 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:349:32:349:32 | + | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:351:34:351:36 | get_Prop3 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:351:39:351:41 | set_Prop3 | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:352:31:352:33 | get_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:352:53:352:55 | set_Item | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:353:45:353:47 | add_Event | -| ViableCallable.cs:9:17:9:31 | Run`3 | ViableCallable.cs:353:53:353:58 | remove_Event | -| ViableCallable.cs:241:17:241:19 | Run | ViableCallable.cs:250:23:250:27 | M`1 | -| ViableCallable.cs:241:17:241:19 | Run | ViableCallable.cs:250:23:250:27 | M`1 | -| ViableCallable.cs:241:17:241:19 | Run | ViableCallable.cs:250:23:250:27 | M`1 | -| ViableCallable.cs:241:17:241:19 | Run | ViableCallable.cs:250:23:250:27 | M`1 | -| ViableCallable.cs:241:17:241:19 | Run | ViableCallable.cs:258:29:258:33 | M`1 | -| ViableCallable.cs:241:17:241:19 | Run | ViableCallable.cs:266:26:266:30 | M`1 | -| ViableCallable.cs:241:17:241:19 | Run | ViableCallable.cs:266:26:266:30 | M`1 | -| ViableCallable.cs:241:17:241:19 | Run | ViableCallable.cs:274:26:274:30 | M`1 | -| ViableCallable.cs:241:17:241:19 | Run | ViableCallable.cs:285:24:285:28 | M`1 | -| ViableCallable.cs:241:17:241:19 | Run | ViableCallable.cs:285:24:285:28 | M`1 | -| ViableCallable.cs:241:17:241:19 | Run | ViableCallable.cs:285:24:285:28 | M`1 | -| ViableCallable.cs:241:17:241:19 | Run | ViableCallable.cs:285:24:285:28 | M`1 | -| ViableCallable.cs:241:17:241:19 | Run | ViableCallable.cs:285:24:285:28 | M`1 | -| ViableCallable.cs:241:17:241:19 | Run | ViableCallable.cs:285:24:285:28 | M`1 | -| ViableCallable.cs:241:17:241:19 | Run | ViableCallable.cs:285:24:285:28 | M`1 | -| ViableCallable.cs:241:17:241:19 | Run | ViableCallable.cs:285:24:285:28 | M`1 | -| ViableCallable.cs:241:17:241:19 | Run | ViableCallable.cs:285:24:285:28 | M`1 | -| ViableCallable.cs:241:17:241:19 | Run | ViableCallable.cs:302:26:302:30 | M`1 | -| ViableCallable.cs:241:17:241:19 | Run | ViableCallable.cs:302:26:302:30 | M`1 | -| ViableCallable.cs:290:17:290:19 | Run | ViableCallable.cs:285:24:285:28 | M`1 | -| ViableCallable.cs:290:17:290:19 | Run | ViableCallable.cs:302:26:302:30 | M`1 | -| ViableCallable.cs:290:17:290:19 | Run | ViableCallable.cs:302:26:302:30 | M`1 | -| ViableCallable.cs:307:17:307:19 | Run | ViableCallable.cs:285:24:285:28 | M`1 | -| ViableCallable.cs:307:17:307:19 | Run | ViableCallable.cs:302:26:302:30 | M`1 | -| ViableCallable.cs:360:17:360:19 | Run | ViableCallable.cs:358:10:358:10 | M | -| ViableCallable.cs:360:17:360:19 | Run | ViableCallable.cs:374:5:374:7 | C11 | -| ViableCallable.cs:388:10:388:16 | Run`1 | ViableCallable.cs:384:33:384:33 | M | -| ViableCallable.cs:394:10:394:17 | Run2`1 | ViableCallable.cs:388:10:388:16 | Run | -| ViableCallable.cs:399:10:399:13 | Run3 | ViableCallable.cs:394:10:394:17 | Run2 | -| ViableCallable.cs:421:10:421:12 | Run | ViableCallable.cs:212:21:212:27 | Mock | -| ViableCallable.cs:421:10:421:12 | Run | ViableCallable.cs:409:36:409:40 | M`1 | -| ViableCallable.cs:421:10:421:12 | Run | ViableCallable.cs:415:53:415:57 | M`1 | -| ViableCallable.cs:421:10:421:12 | Run | ViableCallable.cs:417:42:417:46 | M`1 | -| ViableCallable.cs:443:22:443:26 | M2`1 | ViableCallable.cs:468:14:468:29 | (...) => ... | -| ViableCallable.cs:443:22:443:26 | M2`1 | ViableCallable.cs:474:14:474:29 | (...) => ... | -| ViableCallable.cs:448:10:448:11 | M1 | ViableCallable.cs:442:23:442:24 | M1 | -| ViableCallable.cs:448:10:448:11 | M1 | ViableCallable.cs:457:23:457:27 | M2`1 | -| ViableCallable.cs:457:23:457:27 | M2`1 | ViableCallable.cs:454:17:454:23 | (...) => ... | -| ViableCallable.cs:457:23:457:27 | M2`1 | ViableCallable.cs:462:14:462:20 | (...) => ... | -| ViableCallable.cs:457:23:457:27 | M2`1 | ViableCallable.cs:468:14:468:29 | (...) => ... | -| ViableCallable.cs:457:23:457:27 | M2`1 | ViableCallable.cs:474:14:474:29 | (...) => ... | -| ViableCallable.cs:459:10:459:14 | M3`1 | ViableCallable.cs:457:23:457:27 | M2`1 | -| ViableCallable.cs:465:10:465:14 | M4`1 | ViableCallable.cs:443:22:443:26 | M2`1 | -| ViableCallable.cs:465:10:465:14 | M4`1 | ViableCallable.cs:457:23:457:27 | M2`1 | -| ViableCallable.cs:471:10:471:14 | M5`1 | ViableCallable.cs:443:22:443:26 | M2`1 | -| ViableCallable.cs:471:10:471:14 | M5`1 | ViableCallable.cs:457:23:457:27 | M2`1 | -| ViableCallable.cs:488:10:488:12 | Run | ViableCallable.cs:481:10:481:11 | M2 | -| ViableCallable.cs:488:10:488:12 | Run | ViableCallable.cs:486:17:486:18 | M1 | -| ViableCallable.cs:505:10:505:12 | Run | ViableCallable.cs:500:32:500:32 | + | -| ViableCallable.cs:505:10:505:12 | Run | ViableCallable.cs:501:40:501:40 | checked + | -| ViableCallable.cs:505:10:505:12 | Run | ViableCallable.cs:502:28:502:35 | explicit conversion | -| ViableCallable.cs:505:10:505:12 | Run | ViableCallable.cs:503:28:503:35 | checked explicit conversion | -| ViableCallable.cs:555:10:555:15 | Run`1 | ViableCallable.cs:527:39:527:39 | checked - | -| ViableCallable.cs:555:10:555:15 | Run`1 | ViableCallable.cs:529:31:529:31 | * | -| ViableCallable.cs:555:10:555:15 | Run`1 | ViableCallable.cs:530:39:530:39 | checked * | -| ViableCallable.cs:555:10:555:15 | Run`1 | ViableCallable.cs:532:31:532:31 | / | -| ViableCallable.cs:555:10:555:15 | Run`1 | ViableCallable.cs:533:39:533:39 | checked / | -| ViableCallable.cs:555:10:555:15 | Run`1 | ViableCallable.cs:537:18:537:20 | M12 | -| ViableCallable.cs:555:10:555:15 | Run`1 | ViableCallable.cs:539:18:539:20 | M13 | -| ViableCallable.cs:555:10:555:15 | Run`1 | ViableCallable.cs:544:32:544:32 | + | -| ViableCallable.cs:555:10:555:15 | Run`1 | ViableCallable.cs:545:40:545:40 | checked + | -| ViableCallable.cs:555:10:555:15 | Run`1 | ViableCallable.cs:547:32:547:32 | - | -| ViableCallable.cs:555:10:555:15 | Run`1 | ViableCallable.cs:549:32:549:32 | / | -| ViableCallable.cs:555:10:555:15 | Run`1 | ViableCallable.cs:550:40:550:40 | checked / | -| ViableCallable.cs:555:10:555:15 | Run`1 | ViableCallable.cs:552:17:552:19 | M11 | -| ViableCallable.cs:555:10:555:15 | Run`1 | ViableCallable.cs:553:17:553:19 | M12 | -| ViableCallable.cs:609:17:609:23 | Run1`1 | ViableCallable.cs:601:21:601:21 | M | -| ViableCallable.cs:615:17:615:23 | Run2`1 | ViableCallable.cs:601:21:601:21 | M | -| ViableCallable.cs:615:17:615:23 | Run2`1 | ViableCallable.cs:606:21:606:21 | M | +| ViableCallable.cs:10:17:10:31 | Run`3 | ExactCallable.cs:128:25:128:26 | M3 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ExactCallable.cs:147:29:147:30 | M3 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:213:21:213:27 | Mock> | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:213:21:213:27 | Mock> | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:213:21:213:27 | Mock> | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:213:21:213:27 | Mock> | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:213:21:213:27 | Mock | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:213:21:213:27 | Mock>> | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:213:21:213:27 | Mock>> | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:213:21:213:27 | Mock> | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:251:23:251:27 | M`1 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:251:23:251:27 | M`1 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:251:23:251:27 | M`1 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:251:23:251:27 | M`1 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:252:35:252:37 | get_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:252:35:252:37 | get_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:252:35:252:37 | get_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:252:35:252:37 | get_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:252:40:252:42 | set_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:252:40:252:42 | set_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:252:40:252:42 | set_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:252:40:252:42 | set_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:253:40:253:42 | get_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:253:40:253:42 | get_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:253:40:253:42 | get_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:253:40:253:42 | get_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:253:71:253:73 | set_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:253:71:253:73 | set_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:253:71:253:73 | set_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:253:71:253:73 | set_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:254:56:254:58 | add_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:254:56:254:58 | add_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:254:56:254:58 | add_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:254:56:254:58 | add_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:254:64:254:69 | remove_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:254:64:254:69 | remove_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:254:64:254:69 | remove_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:254:64:254:69 | remove_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:259:29:259:33 | M`1 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:260:35:260:37 | get_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:260:40:260:42 | set_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:261:46:261:48 | get_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:261:77:261:79 | set_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:262:56:262:58 | add_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:262:64:262:69 | remove_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:267:26:267:30 | M`1 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:267:26:267:30 | M`1 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:268:32:268:34 | get_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:268:32:268:34 | get_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:268:37:268:39 | set_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:268:37:268:39 | set_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:269:40:269:42 | get_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:269:40:269:42 | get_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:269:71:269:73 | set_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:269:71:269:73 | set_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:270:53:270:55 | add_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:270:53:270:55 | add_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:270:61:270:66 | remove_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:270:61:270:66 | remove_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:275:26:275:30 | M`1 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:276:24:276:24 | M | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:277:35:277:37 | get_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:277:40:277:42 | set_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:278:39:278:41 | set_Prop2 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:279:43:279:45 | get_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:279:74:279:76 | set_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:280:56:280:58 | add_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:280:64:280:69 | remove_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:281:55:281:57 | add_Event2 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:281:63:281:68 | remove_Event2 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:286:24:286:28 | M`1 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:286:24:286:28 | M`1 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:286:24:286:28 | M`1 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:286:24:286:28 | M`1 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:286:24:286:28 | M`1 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:286:24:286:28 | M`1 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:286:24:286:28 | M`1 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:286:24:286:28 | M`1 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:286:24:286:28 | M`1 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:287:31:287:33 | get_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:287:31:287:33 | get_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:287:31:287:33 | get_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:287:31:287:33 | get_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:287:31:287:33 | get_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:287:31:287:33 | get_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:287:31:287:33 | get_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:287:31:287:33 | get_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:287:31:287:33 | get_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:287:36:287:38 | set_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:287:36:287:38 | set_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:287:36:287:38 | set_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:287:36:287:38 | set_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:287:36:287:38 | set_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:287:36:287:38 | set_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:287:36:287:38 | set_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:287:36:287:38 | set_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:287:36:287:38 | set_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:288:37:288:39 | get_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:288:37:288:39 | get_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:288:37:288:39 | get_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:288:37:288:39 | get_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:288:37:288:39 | get_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:288:37:288:39 | get_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:288:37:288:39 | get_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:288:37:288:39 | get_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:288:37:288:39 | get_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:288:68:288:70 | set_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:288:68:288:70 | set_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:288:68:288:70 | set_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:288:68:288:70 | set_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:288:68:288:70 | set_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:288:68:288:70 | set_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:288:68:288:70 | set_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:288:68:288:70 | set_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:288:68:288:70 | set_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:289:52:289:54 | add_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:289:52:289:54 | add_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:289:52:289:54 | add_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:289:52:289:54 | add_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:289:52:289:54 | add_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:289:52:289:54 | add_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:289:52:289:54 | add_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:289:52:289:54 | add_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:289:52:289:54 | add_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:289:60:289:65 | remove_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:289:60:289:65 | remove_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:289:60:289:65 | remove_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:289:60:289:65 | remove_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:289:60:289:65 | remove_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:289:60:289:65 | remove_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:289:60:289:65 | remove_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:289:60:289:65 | remove_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:289:60:289:65 | remove_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:303:26:303:30 | M`1 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:303:26:303:30 | M`1 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:304:31:304:33 | get_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:304:31:304:33 | get_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:304:36:304:38 | set_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:304:36:304:38 | set_Prop | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:305:39:305:41 | get_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:305:39:305:41 | get_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:305:70:305:72 | set_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:305:70:305:72 | set_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:306:52:306:54 | add_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:306:52:306:54 | add_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:306:60:306:65 | remove_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:306:60:306:65 | remove_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:323:25:323:25 | M | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:324:24:324:28 | M2 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:324:24:324:28 | M2 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:325:17:325:18 | M3 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:326:17:326:18 | M4 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:327:17:327:18 | M5 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:337:26:337:26 | M | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:338:17:338:18 | M3 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:339:17:339:18 | M5 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:348:17:348:18 | M3 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:349:17:349:18 | M5 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:350:32:350:32 | + | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:352:34:352:36 | get_Prop3 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:352:39:352:41 | set_Prop3 | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:353:31:353:33 | get_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:353:53:353:55 | set_Item | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:354:45:354:47 | add_Event | +| ViableCallable.cs:10:17:10:31 | Run`3 | ViableCallable.cs:354:53:354:58 | remove_Event | +| ViableCallable.cs:242:17:242:19 | Run | ViableCallable.cs:251:23:251:27 | M`1 | +| ViableCallable.cs:242:17:242:19 | Run | ViableCallable.cs:251:23:251:27 | M`1 | +| ViableCallable.cs:242:17:242:19 | Run | ViableCallable.cs:251:23:251:27 | M`1 | +| ViableCallable.cs:242:17:242:19 | Run | ViableCallable.cs:251:23:251:27 | M`1 | +| ViableCallable.cs:242:17:242:19 | Run | ViableCallable.cs:259:29:259:33 | M`1 | +| ViableCallable.cs:242:17:242:19 | Run | ViableCallable.cs:267:26:267:30 | M`1 | +| ViableCallable.cs:242:17:242:19 | Run | ViableCallable.cs:267:26:267:30 | M`1 | +| ViableCallable.cs:242:17:242:19 | Run | ViableCallable.cs:275:26:275:30 | M`1 | +| ViableCallable.cs:242:17:242:19 | Run | ViableCallable.cs:286:24:286:28 | M`1 | +| ViableCallable.cs:242:17:242:19 | Run | ViableCallable.cs:286:24:286:28 | M`1 | +| ViableCallable.cs:242:17:242:19 | Run | ViableCallable.cs:286:24:286:28 | M`1 | +| ViableCallable.cs:242:17:242:19 | Run | ViableCallable.cs:286:24:286:28 | M`1 | +| ViableCallable.cs:242:17:242:19 | Run | ViableCallable.cs:286:24:286:28 | M`1 | +| ViableCallable.cs:242:17:242:19 | Run | ViableCallable.cs:286:24:286:28 | M`1 | +| ViableCallable.cs:242:17:242:19 | Run | ViableCallable.cs:286:24:286:28 | M`1 | +| ViableCallable.cs:242:17:242:19 | Run | ViableCallable.cs:286:24:286:28 | M`1 | +| ViableCallable.cs:242:17:242:19 | Run | ViableCallable.cs:286:24:286:28 | M`1 | +| ViableCallable.cs:242:17:242:19 | Run | ViableCallable.cs:303:26:303:30 | M`1 | +| ViableCallable.cs:242:17:242:19 | Run | ViableCallable.cs:303:26:303:30 | M`1 | +| ViableCallable.cs:291:17:291:19 | Run | ViableCallable.cs:286:24:286:28 | M`1 | +| ViableCallable.cs:291:17:291:19 | Run | ViableCallable.cs:303:26:303:30 | M`1 | +| ViableCallable.cs:291:17:291:19 | Run | ViableCallable.cs:303:26:303:30 | M`1 | +| ViableCallable.cs:308:17:308:19 | Run | ViableCallable.cs:286:24:286:28 | M`1 | +| ViableCallable.cs:308:17:308:19 | Run | ViableCallable.cs:303:26:303:30 | M`1 | +| ViableCallable.cs:361:17:361:19 | Run | ViableCallable.cs:359:10:359:10 | M | +| ViableCallable.cs:361:17:361:19 | Run | ViableCallable.cs:375:5:375:7 | C11 | +| ViableCallable.cs:389:10:389:16 | Run`1 | ViableCallable.cs:385:33:385:33 | M | +| ViableCallable.cs:395:10:395:17 | Run2`1 | ViableCallable.cs:389:10:389:16 | Run | +| ViableCallable.cs:400:10:400:13 | Run3 | ViableCallable.cs:395:10:395:17 | Run2 | +| ViableCallable.cs:422:10:422:12 | Run | ViableCallable.cs:213:21:213:27 | Mock | +| ViableCallable.cs:422:10:422:12 | Run | ViableCallable.cs:410:36:410:40 | M`1 | +| ViableCallable.cs:422:10:422:12 | Run | ViableCallable.cs:416:53:416:57 | M`1 | +| ViableCallable.cs:422:10:422:12 | Run | ViableCallable.cs:418:42:418:46 | M`1 | +| ViableCallable.cs:444:22:444:26 | M2`1 | ViableCallable.cs:469:14:469:29 | (...) => ... | +| ViableCallable.cs:444:22:444:26 | M2`1 | ViableCallable.cs:475:14:475:29 | (...) => ... | +| ViableCallable.cs:449:10:449:11 | M1 | ViableCallable.cs:443:23:443:24 | M1 | +| ViableCallable.cs:449:10:449:11 | M1 | ViableCallable.cs:458:23:458:27 | M2`1 | +| ViableCallable.cs:458:23:458:27 | M2`1 | ViableCallable.cs:455:17:455:23 | (...) => ... | +| ViableCallable.cs:458:23:458:27 | M2`1 | ViableCallable.cs:463:14:463:20 | (...) => ... | +| ViableCallable.cs:458:23:458:27 | M2`1 | ViableCallable.cs:469:14:469:29 | (...) => ... | +| ViableCallable.cs:458:23:458:27 | M2`1 | ViableCallable.cs:475:14:475:29 | (...) => ... | +| ViableCallable.cs:460:10:460:14 | M3`1 | ViableCallable.cs:458:23:458:27 | M2`1 | +| ViableCallable.cs:466:10:466:14 | M4`1 | ViableCallable.cs:444:22:444:26 | M2`1 | +| ViableCallable.cs:466:10:466:14 | M4`1 | ViableCallable.cs:458:23:458:27 | M2`1 | +| ViableCallable.cs:472:10:472:14 | M5`1 | ViableCallable.cs:444:22:444:26 | M2`1 | +| ViableCallable.cs:472:10:472:14 | M5`1 | ViableCallable.cs:458:23:458:27 | M2`1 | +| ViableCallable.cs:489:10:489:12 | Run | ViableCallable.cs:482:10:482:11 | M2 | +| ViableCallable.cs:489:10:489:12 | Run | ViableCallable.cs:487:17:487:18 | M1 | +| ViableCallable.cs:506:10:506:12 | Run | ViableCallable.cs:501:32:501:32 | + | +| ViableCallable.cs:506:10:506:12 | Run | ViableCallable.cs:502:40:502:40 | checked + | +| ViableCallable.cs:506:10:506:12 | Run | ViableCallable.cs:503:28:503:35 | explicit conversion | +| ViableCallable.cs:506:10:506:12 | Run | ViableCallable.cs:504:28:504:35 | checked explicit conversion | +| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:528:39:528:39 | checked - | +| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:530:31:530:31 | * | +| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:531:39:531:39 | checked * | +| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:533:31:533:31 | / | +| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:534:39:534:39 | checked / | +| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:538:18:538:20 | M12 | +| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:540:18:540:20 | M13 | +| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:545:32:545:32 | + | +| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:546:40:546:40 | checked + | +| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:548:32:548:32 | - | +| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:550:32:550:32 | / | +| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:551:40:551:40 | checked / | +| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:553:17:553:19 | M11 | +| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:554:17:554:19 | M12 | +| ViableCallable.cs:610:17:610:23 | Run1`1 | ViableCallable.cs:602:21:602:21 | M | +| ViableCallable.cs:616:17:616:23 | Run2`1 | ViableCallable.cs:602:21:602:21 | M | +| ViableCallable.cs:616:17:616:23 | Run2`1 | ViableCallable.cs:607:21:607:21 | M | diff --git a/csharp/ql/test/library-tests/dispatch/GetADynamicTarget.expected b/csharp/ql/test/library-tests/dispatch/GetADynamicTarget.expected index c31cd923d9d6..d51378904d20 100644 --- a/csharp/ql/test/library-tests/dispatch/GetADynamicTarget.expected +++ b/csharp/ql/test/library-tests/dispatch/GetADynamicTarget.expected @@ -66,445 +66,445 @@ | TypeFlow.cs:33:9:33:18 | call to method Method | TypeFlow+C2.Method() | | TypeFlow.cs:37:11:37:26 | call to method Method | TypeFlow+C2.Method() | | TypeFlow.cs:40:9:40:18 | call to method Method | TypeFlow+C2.Method() | -| ViableCallable.cs:12:9:12:28 | call to method M | C2.M(string, T3) | -| ViableCallable.cs:12:9:12:28 | call to method M | C2.M(string, T3) | -| ViableCallable.cs:12:9:12:28 | call to method M | C2.M(string, T3) | -| ViableCallable.cs:12:9:12:28 | call to method M | C2`1.M(string, T3) | -| ViableCallable.cs:12:9:12:28 | call to method M | C3.M(string, T3) | -| ViableCallable.cs:12:9:12:28 | call to method M | C4.M(Int32[], T3) | -| ViableCallable.cs:12:9:12:28 | call to method M | C4`1.M(T[], T3) | -| ViableCallable.cs:12:9:12:28 | call to method M | C5.M(string, T3) | -| ViableCallable.cs:12:9:12:28 | call to method M | C6.M(bool, T3) | -| ViableCallable.cs:12:9:12:28 | call to method M | C6.M(Int32[], T3) | -| ViableCallable.cs:12:9:12:28 | call to method M | C6.M(string, T3) | -| ViableCallable.cs:12:9:12:28 | call to method M | C6.M(string, T3) | -| ViableCallable.cs:12:9:12:28 | call to method M | C6.M(string, T3) | -| ViableCallable.cs:12:9:12:28 | call to method M | C6.M(T1, T3) | -| ViableCallable.cs:12:9:12:28 | call to method M | C6.M(T1, T3) | -| ViableCallable.cs:12:9:12:28 | call to method M | C6`2.M(T1, T3) | -| ViableCallable.cs:12:9:12:28 | call to method M | C7.M(bool, T3) | -| ViableCallable.cs:12:9:12:28 | call to method M | C7`1.M(T1, T3) | -| ViableCallable.cs:14:9:14:15 | access to property Prop | C2.set_Prop(string) | -| ViableCallable.cs:14:9:14:15 | access to property Prop | C2.set_Prop(string) | -| ViableCallable.cs:14:9:14:15 | access to property Prop | C2.set_Prop(string) | -| ViableCallable.cs:14:9:14:15 | access to property Prop | C2`1.set_Prop(string) | -| ViableCallable.cs:14:9:14:15 | access to property Prop | C3.set_Prop(string) | -| ViableCallable.cs:14:9:14:15 | access to property Prop | C4.set_Prop(Int32[]) | -| ViableCallable.cs:14:9:14:15 | access to property Prop | C4`1.set_Prop(T[]) | -| ViableCallable.cs:14:9:14:15 | access to property Prop | C5.set_Prop(string) | -| ViableCallable.cs:14:9:14:15 | access to property Prop | C6.set_Prop(bool) | -| ViableCallable.cs:14:9:14:15 | access to property Prop | C6.set_Prop(Int32[]) | -| ViableCallable.cs:14:9:14:15 | access to property Prop | C6.set_Prop(string) | -| ViableCallable.cs:14:9:14:15 | access to property Prop | C6.set_Prop(string) | -| ViableCallable.cs:14:9:14:15 | access to property Prop | C6.set_Prop(string) | -| ViableCallable.cs:14:9:14:15 | access to property Prop | C6.set_Prop(T1) | -| ViableCallable.cs:14:9:14:15 | access to property Prop | C6.set_Prop(T1) | -| ViableCallable.cs:14:9:14:15 | access to property Prop | C6`2.set_Prop(T1) | -| ViableCallable.cs:14:9:14:15 | access to property Prop | C7.set_Prop(bool) | -| ViableCallable.cs:14:9:14:15 | access to property Prop | C7`1.set_Prop(T1) | -| ViableCallable.cs:14:19:14:25 | access to property Prop | C2.get_Prop() | -| ViableCallable.cs:14:19:14:25 | access to property Prop | C2.get_Prop() | -| ViableCallable.cs:14:19:14:25 | access to property Prop | C2.get_Prop() | -| ViableCallable.cs:14:19:14:25 | access to property Prop | C2`1.get_Prop() | -| ViableCallable.cs:14:19:14:25 | access to property Prop | C3.get_Prop() | -| ViableCallable.cs:14:19:14:25 | access to property Prop | C4.get_Prop() | -| ViableCallable.cs:14:19:14:25 | access to property Prop | C4`1.get_Prop() | -| ViableCallable.cs:14:19:14:25 | access to property Prop | C5.get_Prop() | -| ViableCallable.cs:14:19:14:25 | access to property Prop | C6.get_Prop() | -| ViableCallable.cs:14:19:14:25 | access to property Prop | C6.get_Prop() | -| ViableCallable.cs:14:19:14:25 | access to property Prop | C6.get_Prop() | -| ViableCallable.cs:14:19:14:25 | access to property Prop | C6.get_Prop() | -| ViableCallable.cs:14:19:14:25 | access to property Prop | C6.get_Prop() | -| ViableCallable.cs:14:19:14:25 | access to property Prop | C6.get_Prop() | -| ViableCallable.cs:14:19:14:25 | access to property Prop | C6.get_Prop() | -| ViableCallable.cs:14:19:14:25 | access to property Prop | C6`2.get_Prop() | -| ViableCallable.cs:14:19:14:25 | access to property Prop | C7.get_Prop() | -| ViableCallable.cs:14:19:14:25 | access to property Prop | C7`1.get_Prop() | -| ViableCallable.cs:16:9:16:23 | access to indexer | C2.set_Item(bool, string) | -| ViableCallable.cs:16:9:16:23 | access to indexer | C2.set_Item(decimal, string) | -| ViableCallable.cs:16:9:16:23 | access to indexer | C2.set_Item(int, string) | -| ViableCallable.cs:16:9:16:23 | access to indexer | C2`1.set_Item(T, string) | -| ViableCallable.cs:16:9:16:23 | access to indexer | C3.set_Item(decimal, string) | -| ViableCallable.cs:16:9:16:23 | access to indexer | C4.set_Item(bool, Int32[]) | -| ViableCallable.cs:16:9:16:23 | access to indexer | C4`1.set_Item(bool, T[]) | -| ViableCallable.cs:16:9:16:23 | access to indexer | C5.set_Item(bool, string) | -| ViableCallable.cs:16:9:16:23 | access to indexer | C6.set_Item(byte, bool) | -| ViableCallable.cs:16:9:16:23 | access to indexer | C6.set_Item(bool, Int32[]) | -| ViableCallable.cs:16:9:16:23 | access to indexer | C6.set_Item(bool, string) | -| ViableCallable.cs:16:9:16:23 | access to indexer | C6.set_Item(decimal, string) | -| ViableCallable.cs:16:9:16:23 | access to indexer | C6.set_Item(int, string) | -| ViableCallable.cs:16:9:16:23 | access to indexer | C6.set_Item(bool, T1) | -| ViableCallable.cs:16:9:16:23 | access to indexer | C6.set_Item(byte, T1) | -| ViableCallable.cs:16:9:16:23 | access to indexer | C6`2.set_Item(T2, T1) | -| ViableCallable.cs:16:9:16:23 | access to indexer | C7.set_Item(byte, bool) | -| ViableCallable.cs:16:9:16:23 | access to indexer | C7`1.set_Item(byte, T1) | -| ViableCallable.cs:16:27:16:41 | access to indexer | C2.get_Item(bool) | -| ViableCallable.cs:16:27:16:41 | access to indexer | C2.get_Item(decimal) | -| ViableCallable.cs:16:27:16:41 | access to indexer | C2.get_Item(int) | -| ViableCallable.cs:16:27:16:41 | access to indexer | C2`1.get_Item(T) | -| ViableCallable.cs:16:27:16:41 | access to indexer | C3.get_Item(decimal) | -| ViableCallable.cs:16:27:16:41 | access to indexer | C4.get_Item(bool) | -| ViableCallable.cs:16:27:16:41 | access to indexer | C4`1.get_Item(bool) | -| ViableCallable.cs:16:27:16:41 | access to indexer | C5.get_Item(bool) | -| ViableCallable.cs:16:27:16:41 | access to indexer | C6.get_Item(byte) | -| ViableCallable.cs:16:27:16:41 | access to indexer | C6.get_Item(bool) | -| ViableCallable.cs:16:27:16:41 | access to indexer | C6.get_Item(bool) | -| ViableCallable.cs:16:27:16:41 | access to indexer | C6.get_Item(decimal) | -| ViableCallable.cs:16:27:16:41 | access to indexer | C6.get_Item(int) | -| ViableCallable.cs:16:27:16:41 | access to indexer | C6.get_Item(bool) | -| ViableCallable.cs:16:27:16:41 | access to indexer | C6.get_Item(byte) | -| ViableCallable.cs:16:27:16:41 | access to indexer | C6`2.get_Item(T2) | -| ViableCallable.cs:16:27:16:41 | access to indexer | C7.get_Item(byte) | -| ViableCallable.cs:16:27:16:41 | access to indexer | C7`1.get_Item(byte) | -| ViableCallable.cs:18:9:18:16 | access to event Event | C2.add_Event(EventHandler) | -| ViableCallable.cs:18:9:18:16 | access to event Event | C2.add_Event(EventHandler) | -| ViableCallable.cs:18:9:18:16 | access to event Event | C2.add_Event(EventHandler) | -| ViableCallable.cs:18:9:18:16 | access to event Event | C2`1.add_Event(EventHandler) | -| ViableCallable.cs:18:9:18:16 | access to event Event | C3.add_Event(EventHandler) | -| ViableCallable.cs:18:9:18:16 | access to event Event | C4.add_Event(EventHandler) | -| ViableCallable.cs:18:9:18:16 | access to event Event | C4`1.add_Event(EventHandler) | -| ViableCallable.cs:18:9:18:16 | access to event Event | C5.add_Event(EventHandler) | -| ViableCallable.cs:18:9:18:16 | access to event Event | C6.add_Event(EventHandler) | -| ViableCallable.cs:18:9:18:16 | access to event Event | C6.add_Event(EventHandler) | -| ViableCallable.cs:18:9:18:16 | access to event Event | C6.add_Event(EventHandler) | -| ViableCallable.cs:18:9:18:16 | access to event Event | C6.add_Event(EventHandler) | -| ViableCallable.cs:18:9:18:16 | access to event Event | C6.add_Event(EventHandler) | -| ViableCallable.cs:18:9:18:16 | access to event Event | C6.add_Event(EventHandler) | -| ViableCallable.cs:18:9:18:16 | access to event Event | C6.add_Event(EventHandler) | -| ViableCallable.cs:18:9:18:16 | access to event Event | C6`2.add_Event(EventHandler) | -| ViableCallable.cs:18:9:18:16 | access to event Event | C7.add_Event(EventHandler) | -| ViableCallable.cs:18:9:18:16 | access to event Event | C7`1.add_Event(EventHandler) | -| ViableCallable.cs:19:9:19:16 | access to event Event | C2.remove_Event(EventHandler) | -| ViableCallable.cs:19:9:19:16 | access to event Event | C2.remove_Event(EventHandler) | -| ViableCallable.cs:19:9:19:16 | access to event Event | C2.remove_Event(EventHandler) | -| ViableCallable.cs:19:9:19:16 | access to event Event | C2`1.remove_Event(EventHandler) | -| ViableCallable.cs:19:9:19:16 | access to event Event | C3.remove_Event(EventHandler) | -| ViableCallable.cs:19:9:19:16 | access to event Event | C4.remove_Event(EventHandler) | -| ViableCallable.cs:19:9:19:16 | access to event Event | C4`1.remove_Event(EventHandler) | -| ViableCallable.cs:19:9:19:16 | access to event Event | C5.remove_Event(EventHandler) | -| ViableCallable.cs:19:9:19:16 | access to event Event | C6.remove_Event(EventHandler) | -| ViableCallable.cs:19:9:19:16 | access to event Event | C6.remove_Event(EventHandler) | -| ViableCallable.cs:19:9:19:16 | access to event Event | C6.remove_Event(EventHandler) | -| ViableCallable.cs:19:9:19:16 | access to event Event | C6.remove_Event(EventHandler) | -| ViableCallable.cs:19:9:19:16 | access to event Event | C6.remove_Event(EventHandler) | -| ViableCallable.cs:19:9:19:16 | access to event Event | C6.remove_Event(EventHandler) | -| ViableCallable.cs:19:9:19:16 | access to event Event | C6.remove_Event(EventHandler) | -| ViableCallable.cs:19:9:19:16 | access to event Event | C6`2.remove_Event(EventHandler) | -| ViableCallable.cs:19:9:19:16 | access to event Event | C7.remove_Event(EventHandler) | -| ViableCallable.cs:19:9:19:16 | access to event Event | C7`1.remove_Event(EventHandler) | -| ViableCallable.cs:22:9:22:30 | call to method M | C4.M(Int32[], T3) | -| ViableCallable.cs:22:9:22:30 | call to method M | C4`1.M(T[], T3) | -| ViableCallable.cs:22:9:22:30 | call to method M | C6.M(Int32[], T3) | -| ViableCallable.cs:24:9:24:15 | access to property Prop | C4.set_Prop(Int32[]) | -| ViableCallable.cs:24:9:24:15 | access to property Prop | C4`1.set_Prop(T[]) | -| ViableCallable.cs:24:9:24:15 | access to property Prop | C6.set_Prop(Int32[]) | -| ViableCallable.cs:24:19:24:25 | access to property Prop | C4.get_Prop() | -| ViableCallable.cs:24:19:24:25 | access to property Prop | C4`1.get_Prop() | -| ViableCallable.cs:24:19:24:25 | access to property Prop | C6.get_Prop() | -| ViableCallable.cs:26:9:26:23 | access to indexer | C4.set_Item(bool, Int32[]) | -| ViableCallable.cs:26:9:26:23 | access to indexer | C4`1.set_Item(bool, T[]) | -| ViableCallable.cs:26:9:26:23 | access to indexer | C6.set_Item(bool, Int32[]) | -| ViableCallable.cs:26:27:26:41 | access to indexer | C4.get_Item(bool) | -| ViableCallable.cs:26:27:26:41 | access to indexer | C4`1.get_Item(bool) | -| ViableCallable.cs:26:27:26:41 | access to indexer | C6.get_Item(bool) | -| ViableCallable.cs:28:9:28:16 | access to event Event | C4.add_Event(EventHandler) | -| ViableCallable.cs:28:9:28:16 | access to event Event | C4`1.add_Event(EventHandler) | -| ViableCallable.cs:28:9:28:16 | access to event Event | C6.add_Event(EventHandler) | -| ViableCallable.cs:29:9:29:16 | access to event Event | C4.remove_Event(EventHandler) | -| ViableCallable.cs:29:9:29:16 | access to event Event | C4`1.remove_Event(EventHandler) | -| ViableCallable.cs:29:9:29:16 | access to event Event | C6.remove_Event(EventHandler) | -| ViableCallable.cs:32:30:32:52 | call to method Mock> | ViableCallable.Mock>() | -| ViableCallable.cs:33:9:33:23 | call to method M | C2.M(string, T3) | -| ViableCallable.cs:33:9:33:23 | call to method M | C6.M(string, T3) | -| ViableCallable.cs:35:9:35:15 | access to property Prop | C2.set_Prop(string) | -| ViableCallable.cs:35:9:35:15 | access to property Prop | C6.set_Prop(string) | -| ViableCallable.cs:35:19:35:25 | access to property Prop | C2.get_Prop() | -| ViableCallable.cs:35:19:35:25 | access to property Prop | C6.get_Prop() | -| ViableCallable.cs:37:9:37:13 | access to indexer | C2.set_Item(int, string) | -| ViableCallable.cs:37:9:37:13 | access to indexer | C6.set_Item(int, string) | -| ViableCallable.cs:37:17:37:21 | access to indexer | C2.get_Item(int) | -| ViableCallable.cs:37:17:37:21 | access to indexer | C6.get_Item(int) | -| ViableCallable.cs:39:9:39:16 | access to event Event | C2.add_Event(EventHandler) | -| ViableCallable.cs:39:9:39:16 | access to event Event | C6.add_Event(EventHandler) | -| ViableCallable.cs:40:9:40:16 | access to event Event | C2.remove_Event(EventHandler) | -| ViableCallable.cs:40:9:40:16 | access to event Event | C6.remove_Event(EventHandler) | -| ViableCallable.cs:43:34:43:60 | call to method Mock> | ViableCallable.Mock>() | -| ViableCallable.cs:44:9:44:24 | call to method M | C2.M(string, T3) | -| ViableCallable.cs:44:9:44:24 | call to method M | C3.M(string, T3) | -| ViableCallable.cs:44:9:44:24 | call to method M | C6.M(string, T3) | -| ViableCallable.cs:46:9:46:15 | access to property Prop | C2.set_Prop(string) | -| ViableCallable.cs:46:9:46:15 | access to property Prop | C3.set_Prop(string) | -| ViableCallable.cs:46:9:46:15 | access to property Prop | C6.set_Prop(string) | -| ViableCallable.cs:46:19:46:25 | access to property Prop | C2.get_Prop() | -| ViableCallable.cs:46:19:46:25 | access to property Prop | C3.get_Prop() | -| ViableCallable.cs:46:19:46:25 | access to property Prop | C6.get_Prop() | -| ViableCallable.cs:48:9:48:14 | access to indexer | C2.set_Item(decimal, string) | -| ViableCallable.cs:48:9:48:14 | access to indexer | C3.set_Item(decimal, string) | -| ViableCallable.cs:48:9:48:14 | access to indexer | C6.set_Item(decimal, string) | -| ViableCallable.cs:48:18:48:23 | access to indexer | C2.get_Item(decimal) | -| ViableCallable.cs:48:18:48:23 | access to indexer | C3.get_Item(decimal) | -| ViableCallable.cs:48:18:48:23 | access to indexer | C6.get_Item(decimal) | -| ViableCallable.cs:50:9:50:16 | access to event Event | C2.add_Event(EventHandler) | -| ViableCallable.cs:50:9:50:16 | access to event Event | C3.add_Event(EventHandler) | -| ViableCallable.cs:50:9:50:16 | access to event Event | C6.add_Event(EventHandler) | -| ViableCallable.cs:51:9:51:16 | access to event Event | C2.remove_Event(EventHandler) | -| ViableCallable.cs:51:9:51:16 | access to event Event | C3.remove_Event(EventHandler) | -| ViableCallable.cs:51:9:51:16 | access to event Event | C6.remove_Event(EventHandler) | -| ViableCallable.cs:54:30:54:52 | call to method Mock> | ViableCallable.Mock>() | -| ViableCallable.cs:55:9:55:44 | call to method M | C4.M(Int32[], T3) | -| ViableCallable.cs:55:9:55:44 | call to method M | C6.M(Int32[], T3) | -| ViableCallable.cs:57:9:57:15 | access to property Prop | C4.set_Prop(Int32[]) | -| ViableCallable.cs:57:9:57:15 | access to property Prop | C6.set_Prop(Int32[]) | -| ViableCallable.cs:57:19:57:25 | access to property Prop | C4.get_Prop() | -| ViableCallable.cs:57:19:57:25 | access to property Prop | C6.get_Prop() | -| ViableCallable.cs:59:9:59:17 | access to indexer | C4.set_Item(bool, Int32[]) | -| ViableCallable.cs:59:9:59:17 | access to indexer | C6.set_Item(bool, Int32[]) | -| ViableCallable.cs:59:21:59:29 | access to indexer | C4.get_Item(bool) | -| ViableCallable.cs:59:21:59:29 | access to indexer | C6.get_Item(bool) | -| ViableCallable.cs:61:9:61:16 | access to event Event | C4.add_Event(EventHandler) | -| ViableCallable.cs:61:9:61:16 | access to event Event | C6.add_Event(EventHandler) | -| ViableCallable.cs:62:9:62:16 | access to event Event | C4.remove_Event(EventHandler) | -| ViableCallable.cs:62:9:62:16 | access to event Event | C6.remove_Event(EventHandler) | -| ViableCallable.cs:65:31:65:54 | call to method Mock> | ViableCallable.Mock>() | -| ViableCallable.cs:66:9:66:30 | call to method M | C2.M(string, T3) | -| ViableCallable.cs:66:9:66:30 | call to method M | C5.M(string, T3) | -| ViableCallable.cs:66:9:66:30 | call to method M | C6.M(string, T3) | -| ViableCallable.cs:68:9:68:15 | access to property Prop | C2.set_Prop(string) | -| ViableCallable.cs:68:9:68:15 | access to property Prop | C5.set_Prop(string) | -| ViableCallable.cs:68:9:68:15 | access to property Prop | C6.set_Prop(string) | -| ViableCallable.cs:68:19:68:25 | access to property Prop | C2.get_Prop() | -| ViableCallable.cs:68:19:68:25 | access to property Prop | C5.get_Prop() | -| ViableCallable.cs:68:19:68:25 | access to property Prop | C6.get_Prop() | -| ViableCallable.cs:70:9:70:17 | access to indexer | C2.set_Item(bool, string) | -| ViableCallable.cs:70:9:70:17 | access to indexer | C5.set_Item(bool, string) | -| ViableCallable.cs:70:9:70:17 | access to indexer | C6.set_Item(bool, string) | -| ViableCallable.cs:70:21:70:29 | access to indexer | C2.get_Item(bool) | -| ViableCallable.cs:70:21:70:29 | access to indexer | C5.get_Item(bool) | -| ViableCallable.cs:70:21:70:29 | access to indexer | C6.get_Item(bool) | -| ViableCallable.cs:72:9:72:16 | access to event Event | C2.add_Event(EventHandler) | -| ViableCallable.cs:72:9:72:16 | access to event Event | C5.add_Event(EventHandler) | -| ViableCallable.cs:72:9:72:16 | access to event Event | C6.add_Event(EventHandler) | -| ViableCallable.cs:73:9:73:16 | access to event Event | C2.remove_Event(EventHandler) | -| ViableCallable.cs:73:9:73:16 | access to event Event | C5.remove_Event(EventHandler) | -| ViableCallable.cs:73:9:73:16 | access to event Event | C6.remove_Event(EventHandler) | -| ViableCallable.cs:77:9:77:29 | call to method M | C6.M(T1, T3) | -| ViableCallable.cs:79:9:79:15 | access to property Prop | C6.set_Prop(T1) | -| ViableCallable.cs:79:19:79:25 | access to property Prop | C6.get_Prop() | -| ViableCallable.cs:81:9:81:17 | access to indexer | C6.set_Item(bool, T1) | -| ViableCallable.cs:81:21:81:29 | access to indexer | C6.get_Item(bool) | -| ViableCallable.cs:83:9:83:16 | access to event Event | C6.add_Event(EventHandler) | -| ViableCallable.cs:84:9:84:16 | access to event Event | C6.remove_Event(EventHandler) | -| ViableCallable.cs:87:21:87:30 | call to method Mock | ViableCallable.Mock() | -| ViableCallable.cs:88:9:88:44 | dynamic call to method M | C8.M(IEnumerable>) | -| ViableCallable.cs:88:9:88:44 | dynamic call to method M | C9`1.M(IEnumerable>) | -| ViableCallable.cs:88:13:88:43 | call to method Mock>> | ViableCallable.Mock>>() | -| ViableCallable.cs:90:9:90:15 | dynamic access to member Prop1 | C8.set_Prop1(string) | -| ViableCallable.cs:90:9:90:15 | dynamic access to member Prop1 | C9`1.set_Prop1(string) | -| ViableCallable.cs:90:19:90:25 | dynamic access to member Prop1 | C8.get_Prop1() | -| ViableCallable.cs:90:19:90:25 | dynamic access to member Prop1 | C9`1.get_Prop1() | -| ViableCallable.cs:92:9:92:12 | dynamic access to element | C8.set_Item(int, string) | -| ViableCallable.cs:92:9:92:12 | dynamic access to element | C9`1.set_Item(int, string) | -| ViableCallable.cs:92:16:92:19 | dynamic access to element | C8.get_Item(int) | -| ViableCallable.cs:92:16:92:19 | dynamic access to element | C9`1.get_Item(int) | -| ViableCallable.cs:95:13:95:40 | call to method Mock>> | ViableCallable.Mock>>() | -| ViableCallable.cs:99:9:99:15 | dynamic call to method M | C5.M(int) | -| ViableCallable.cs:102:9:102:16 | access to property Prop2 | C5.set_Prop2(string) | -| ViableCallable.cs:105:9:105:17 | access to event Event2 | C5.add_Event2(EventHandler) | -| ViableCallable.cs:106:9:106:17 | access to event Event2 | C5.remove_Event2(EventHandler) | -| ViableCallable.cs:120:9:120:25 | dynamic call to method M2 | C8.M2(Decimal[]) | -| ViableCallable.cs:124:9:124:24 | dynamic call to method M2 | C8.M2(String[]) | -| ViableCallable.cs:132:9:132:28 | dynamic call to method M | C6.M(bool, T3) | -| ViableCallable.cs:132:9:132:28 | dynamic call to method M | C6.M(T1, T3) | -| ViableCallable.cs:134:9:134:14 | dynamic access to member Prop | C6.set_Prop(bool) | -| ViableCallable.cs:134:9:134:14 | dynamic access to member Prop | C6.set_Prop(T1) | -| ViableCallable.cs:134:18:134:23 | dynamic access to member Prop | C6.get_Prop() | -| ViableCallable.cs:134:18:134:23 | dynamic access to member Prop | C6.get_Prop() | -| ViableCallable.cs:136:9:136:18 | dynamic access to element | C6.set_Item(byte, bool) | -| ViableCallable.cs:136:9:136:18 | dynamic access to element | C6.set_Item(byte, T1) | -| ViableCallable.cs:136:22:136:31 | dynamic access to element | C6.get_Item(byte) | -| ViableCallable.cs:136:22:136:31 | dynamic access to element | C6.get_Item(byte) | -| ViableCallable.cs:138:9:138:52 | ... += ... | C6.add_Event(EventHandler) | -| ViableCallable.cs:139:9:139:52 | ... -= ... | C6.remove_Event(EventHandler) | -| ViableCallable.cs:142:13:142:22 | call to method Mock | ViableCallable.Mock() | -| ViableCallable.cs:143:9:143:14 | dynamic call to method M3 | C8.M3(params Double[]) | -| ViableCallable.cs:143:9:143:14 | dynamic call to method M3 | C9`1.M3(params T[]) | -| ViableCallable.cs:144:9:144:15 | dynamic call to method M3 | C8.M3(params Double[]) | -| ViableCallable.cs:144:9:144:15 | dynamic call to method M3 | C9`1.M3(params T[]) | -| ViableCallable.cs:145:9:145:20 | dynamic call to method M3 | C8.M3(params Double[]) | -| ViableCallable.cs:145:9:145:20 | dynamic call to method M3 | C9`1.M3(params T[]) | -| ViableCallable.cs:148:13:148:22 | call to method Mock | ViableCallable.Mock() | -| ViableCallable.cs:149:9:149:14 | dynamic call to method M5 | C8.M5(params IEnumerable) | -| ViableCallable.cs:149:9:149:14 | dynamic call to method M5 | C9`1.M5(params IEnumerable) | -| ViableCallable.cs:150:9:150:15 | dynamic call to method M5 | C8.M5(params IEnumerable) | -| ViableCallable.cs:150:9:150:15 | dynamic call to method M5 | C9`1.M5(params IEnumerable) | -| ViableCallable.cs:151:9:151:20 | dynamic call to method M5 | C8.M5(params IEnumerable) | -| ViableCallable.cs:151:9:151:20 | dynamic call to method M5 | C9`1.M5(params IEnumerable) | -| ViableCallable.cs:154:9:154:16 | dynamic call to method M3 | C8.M3(params Double[]) | -| ViableCallable.cs:154:9:154:16 | dynamic call to method M3 | C9`1.M3(params T[]) | -| ViableCallable.cs:154:9:154:16 | dynamic call to method M3 | C10.M3(params Double[]) | -| ViableCallable.cs:154:9:154:16 | dynamic call to method M3 | Test.MainClass+ImplAlpha.M3() | -| ViableCallable.cs:154:9:154:16 | dynamic call to method M3 | Test.MainClass+SecondLevelImpl.M3() | -| ViableCallable.cs:155:9:155:17 | dynamic call to method M3 | C8.M3(params Double[]) | -| ViableCallable.cs:155:9:155:17 | dynamic call to method M3 | C9`1.M3(params T[]) | -| ViableCallable.cs:155:9:155:17 | dynamic call to method M3 | C10.M3(params Double[]) | -| ViableCallable.cs:156:9:156:22 | dynamic call to method M3 | C8.M3(params Double[]) | -| ViableCallable.cs:156:9:156:22 | dynamic call to method M3 | C9`1.M3(params T[]) | -| ViableCallable.cs:156:9:156:22 | dynamic call to method M3 | C10.M3(params Double[]) | -| ViableCallable.cs:158:9:158:16 | dynamic call to method M5 | C8.M5(params IEnumerable) | -| ViableCallable.cs:158:9:158:16 | dynamic call to method M5 | C9`1.M5(params IEnumerable) | -| ViableCallable.cs:158:9:158:16 | dynamic call to method M5 | C10.M5(params IEnumerable) | -| ViableCallable.cs:159:9:159:17 | dynamic call to method M5 | C8.M5(params IEnumerable) | -| ViableCallable.cs:159:9:159:17 | dynamic call to method M5 | C9`1.M5(params IEnumerable) | -| ViableCallable.cs:159:9:159:17 | dynamic call to method M5 | C10.M5(params IEnumerable) | -| ViableCallable.cs:160:9:160:22 | dynamic call to method M5 | C8.M5(params IEnumerable) | -| ViableCallable.cs:160:9:160:22 | dynamic call to method M5 | C9`1.M5(params IEnumerable) | -| ViableCallable.cs:160:9:160:22 | dynamic call to method M5 | C10.M5(params IEnumerable) | -| ViableCallable.cs:162:9:162:17 | dynamic access to member Prop1 | C8.set_Prop1(string) | -| ViableCallable.cs:162:9:162:17 | dynamic access to member Prop1 | C9`1.set_Prop1(string) | -| ViableCallable.cs:162:9:162:17 | dynamic access to member Prop1 | C10.set_Prop1(bool) | -| ViableCallable.cs:162:21:162:29 | dynamic access to member Prop1 | C8.get_Prop1() | -| ViableCallable.cs:162:21:162:29 | dynamic access to member Prop1 | C9`1.get_Prop1() | -| ViableCallable.cs:162:21:162:29 | dynamic access to member Prop1 | C10.get_Prop1() | -| ViableCallable.cs:164:9:164:14 | dynamic access to element | C2.set_Item(decimal, string) | -| ViableCallable.cs:164:9:164:14 | dynamic access to element | C2.set_Item(int, string) | -| ViableCallable.cs:164:9:164:14 | dynamic access to element | C2`1.set_Item(T, string) | -| ViableCallable.cs:164:9:164:14 | dynamic access to element | C3.set_Item(decimal, string) | -| ViableCallable.cs:164:9:164:14 | dynamic access to element | C6.set_Item(byte, bool) | -| ViableCallable.cs:164:9:164:14 | dynamic access to element | C6.set_Item(decimal, string) | -| ViableCallable.cs:164:9:164:14 | dynamic access to element | C6.set_Item(int, string) | -| ViableCallable.cs:164:9:164:14 | dynamic access to element | C6.set_Item(byte, T1) | -| ViableCallable.cs:164:9:164:14 | dynamic access to element | C6`2.set_Item(T2, T1) | -| ViableCallable.cs:164:9:164:14 | dynamic access to element | C7.set_Item(byte, bool) | -| ViableCallable.cs:164:9:164:14 | dynamic access to element | C7`1.set_Item(byte, T1) | -| ViableCallable.cs:164:9:164:14 | dynamic access to element | C8.set_Item(int, string) | -| ViableCallable.cs:164:9:164:14 | dynamic access to element | C9`1.set_Item(int, string) | -| ViableCallable.cs:164:9:164:14 | dynamic access to element | C10.set_Item(int, bool) | -| ViableCallable.cs:164:18:164:23 | dynamic access to element | C2.get_Item(decimal) | -| ViableCallable.cs:164:18:164:23 | dynamic access to element | C2.get_Item(int) | -| ViableCallable.cs:164:18:164:23 | dynamic access to element | C2`1.get_Item(T) | -| ViableCallable.cs:164:18:164:23 | dynamic access to element | C3.get_Item(decimal) | -| ViableCallable.cs:164:18:164:23 | dynamic access to element | C6.get_Item(byte) | -| ViableCallable.cs:164:18:164:23 | dynamic access to element | C6.get_Item(decimal) | -| ViableCallable.cs:164:18:164:23 | dynamic access to element | C6.get_Item(int) | -| ViableCallable.cs:164:18:164:23 | dynamic access to element | C6.get_Item(byte) | -| ViableCallable.cs:164:18:164:23 | dynamic access to element | C6`2.get_Item(T2) | -| ViableCallable.cs:164:18:164:23 | dynamic access to element | C7.get_Item(byte) | -| ViableCallable.cs:164:18:164:23 | dynamic access to element | C7`1.get_Item(byte) | -| ViableCallable.cs:164:18:164:23 | dynamic access to element | C8.get_Item(int) | -| ViableCallable.cs:164:18:164:23 | dynamic access to element | C9`1.get_Item(int) | -| ViableCallable.cs:164:18:164:23 | dynamic access to element | C10.get_Item(int) | -| ViableCallable.cs:166:9:166:54 | ... += ... | C2.add_Event(EventHandler) | -| ViableCallable.cs:166:9:166:54 | ... += ... | C2.add_Event(EventHandler) | -| ViableCallable.cs:166:9:166:54 | ... += ... | C2.add_Event(EventHandler) | -| ViableCallable.cs:166:9:166:54 | ... += ... | C2`1.add_Event(EventHandler) | -| ViableCallable.cs:166:9:166:54 | ... += ... | C3.add_Event(EventHandler) | -| ViableCallable.cs:166:9:166:54 | ... += ... | C5.add_Event(EventHandler) | -| ViableCallable.cs:166:9:166:54 | ... += ... | C6.add_Event(EventHandler) | -| ViableCallable.cs:166:9:166:54 | ... += ... | C6.add_Event(EventHandler) | -| ViableCallable.cs:166:9:166:54 | ... += ... | C6.add_Event(EventHandler) | -| ViableCallable.cs:166:9:166:54 | ... += ... | C6.add_Event(EventHandler) | -| ViableCallable.cs:166:9:166:54 | ... += ... | C6.add_Event(EventHandler) | -| ViableCallable.cs:166:9:166:54 | ... += ... | C6`2.add_Event(EventHandler) | -| ViableCallable.cs:166:9:166:54 | ... += ... | C7`1.add_Event(EventHandler) | -| ViableCallable.cs:166:9:166:54 | ... += ... | C8.add_Event(EventHandler) | -| ViableCallable.cs:166:9:166:54 | ... += ... | C9`1.add_Event(EventHandler) | -| ViableCallable.cs:167:9:167:54 | ... -= ... | C2.remove_Event(EventHandler) | -| ViableCallable.cs:167:9:167:54 | ... -= ... | C2.remove_Event(EventHandler) | -| ViableCallable.cs:167:9:167:54 | ... -= ... | C2.remove_Event(EventHandler) | -| ViableCallable.cs:167:9:167:54 | ... -= ... | C2`1.remove_Event(EventHandler) | -| ViableCallable.cs:167:9:167:54 | ... -= ... | C3.remove_Event(EventHandler) | -| ViableCallable.cs:167:9:167:54 | ... -= ... | C5.remove_Event(EventHandler) | -| ViableCallable.cs:167:9:167:54 | ... -= ... | C6.remove_Event(EventHandler) | -| ViableCallable.cs:167:9:167:54 | ... -= ... | C6.remove_Event(EventHandler) | -| ViableCallable.cs:167:9:167:54 | ... -= ... | C6.remove_Event(EventHandler) | -| ViableCallable.cs:167:9:167:54 | ... -= ... | C6.remove_Event(EventHandler) | -| ViableCallable.cs:167:9:167:54 | ... -= ... | C6.remove_Event(EventHandler) | -| ViableCallable.cs:167:9:167:54 | ... -= ... | C6`2.remove_Event(EventHandler) | -| ViableCallable.cs:167:9:167:54 | ... -= ... | C7`1.remove_Event(EventHandler) | -| ViableCallable.cs:167:9:167:54 | ... -= ... | C8.remove_Event(EventHandler) | -| ViableCallable.cs:167:9:167:54 | ... -= ... | C9`1.remove_Event(EventHandler) | -| ViableCallable.cs:170:9:170:40 | dynamic call to method M4 | C8.M4(byte, IEnumerable) | -| ViableCallable.cs:170:19:170:39 | call to method Mock> | ViableCallable.Mock>() | -| ViableCallable.cs:171:9:171:38 | dynamic call to method M4 | C8.M4(byte, IEnumerable) | -| ViableCallable.cs:174:9:174:17 | dynamic access to member Prop1 | C10.set_Prop1(bool) | -| ViableCallable.cs:184:9:184:15 | dynamic access to element | C2`1.set_Item(T, string) | -| ViableCallable.cs:184:9:184:15 | dynamic access to element | C6`2.set_Item(T2, T1) | -| ViableCallable.cs:184:19:184:25 | dynamic access to element | C2`1.get_Item(T) | -| ViableCallable.cs:184:19:184:25 | dynamic access to element | C6`2.get_Item(T2) | -| ViableCallable.cs:196:9:196:153 | call to method InvokeMember | C10.+(C10, C10) | -| ViableCallable.cs:199:9:199:143 | call to method InvokeMember | C10.get_Prop3() | -| ViableCallable.cs:200:9:200:149 | call to method InvokeMember | C10.set_Prop3(string) | -| ViableCallable.cs:203:9:203:146 | call to method InvokeMember | C10.get_Item(int) | -| ViableCallable.cs:204:9:204:152 | call to method InvokeMember | C10.set_Item(int, bool) | -| ViableCallable.cs:208:9:208:147 | call to method InvokeMember | C10.add_Event(EventHandler) | -| ViableCallable.cs:209:9:209:150 | call to method InvokeMember | C10.remove_Event(EventHandler) | -| ViableCallable.cs:244:9:244:15 | call to method M | C2.M(string, T3) | -| ViableCallable.cs:244:9:244:15 | call to method M | C2.M(string, T3) | -| ViableCallable.cs:244:9:244:15 | call to method M | C2.M(string, T3) | -| ViableCallable.cs:244:9:244:15 | call to method M | C2`1.M(string, T3) | -| ViableCallable.cs:244:9:244:15 | call to method M | C3.M(string, T3) | -| ViableCallable.cs:244:9:244:15 | call to method M | C4.M(Int32[], T3) | -| ViableCallable.cs:244:9:244:15 | call to method M | C4`1.M(T[], T3) | -| ViableCallable.cs:244:9:244:15 | call to method M | C5.M(string, T3) | -| ViableCallable.cs:244:9:244:15 | call to method M | C6.M(bool, T3) | -| ViableCallable.cs:244:9:244:15 | call to method M | C6.M(Int32[], T3) | -| ViableCallable.cs:244:9:244:15 | call to method M | C6.M(string, T3) | -| ViableCallable.cs:244:9:244:15 | call to method M | C6.M(string, T3) | -| ViableCallable.cs:244:9:244:15 | call to method M | C6.M(string, T3) | -| ViableCallable.cs:244:9:244:15 | call to method M | C6.M(T1, T3) | -| ViableCallable.cs:244:9:244:15 | call to method M | C6.M(T1, T3) | -| ViableCallable.cs:244:9:244:15 | call to method M | C6`2.M(T1, T3) | -| ViableCallable.cs:244:9:244:15 | call to method M | C7.M(bool, T3) | -| ViableCallable.cs:244:9:244:15 | call to method M | C7`1.M(T1, T3) | -| ViableCallable.cs:293:9:293:15 | call to method M | C6`2.M(T1, T3) | -| ViableCallable.cs:293:9:293:15 | call to method M | C7.M(bool, T3) | -| ViableCallable.cs:293:9:293:15 | call to method M | C7`1.M(T1, T3) | -| ViableCallable.cs:296:9:296:20 | call to method M | C6`2.M(T1, T3) | -| ViableCallable.cs:296:9:296:20 | call to method M | C7.M(bool, T3) | -| ViableCallable.cs:296:9:296:20 | call to method M | C7`1.M(T1, T3) | -| ViableCallable.cs:310:9:310:15 | call to method M | C7`1.M(T1, T3) | -| ViableCallable.cs:313:9:313:20 | call to method M | C7`1.M(T1, T3) | -| ViableCallable.cs:316:9:316:20 | call to method M | C6.M(T1, T3) | -| ViableCallable.cs:366:9:366:14 | dynamic call to method M | C11.M(dynamic) | -| ViableCallable.cs:368:9:368:18 | dynamic object creation of type C11 | C11.C11(C11) | -| ViableCallable.cs:391:9:391:13 | call to method M | C12+C13.M() | -| ViableCallable.cs:396:9:396:14 | call to method Run | C12.Run(T2) | -| ViableCallable.cs:401:9:401:23 | call to method Run2 | C12.Run2(C13) | -| ViableCallable.cs:424:9:424:18 | call to method M | C15+A1.M() | -| ViableCallable.cs:424:9:424:18 | call to method M | C15+A4.M() | -| ViableCallable.cs:424:9:424:18 | call to method M | C15+A5.M() | -| ViableCallable.cs:428:9:428:19 | call to method M | C15+A1.M() | -| ViableCallable.cs:432:9:432:21 | call to method M | C15+A4.M() | -| ViableCallable.cs:434:13:434:37 | call to method Mock | ViableCallable.Mock() | -| ViableCallable.cs:436:9:436:21 | call to method M | C15+A4.M() | -| ViableCallable.cs:436:9:436:21 | call to method M | C15+A5.M() | -| ViableCallable.cs:451:9:451:19 | call to method M1 | C16.M1(string) | -| ViableCallable.cs:454:9:454:24 | call to method M2 | C17.M2(Func) | -| ViableCallable.cs:462:9:462:21 | call to method M2 | C17.M2(Func) | -| ViableCallable.cs:468:9:468:30 | call to method M2 | C16.M2(Func) | -| ViableCallable.cs:468:9:468:30 | call to method M2 | C17.M2(Func) | -| ViableCallable.cs:474:9:474:30 | call to method M2 | C16.M2(Func) | -| ViableCallable.cs:474:9:474:30 | call to method M2 | C17.M2(Func) | -| ViableCallable.cs:491:9:491:14 | call to method M1 | C18.M1() | -| ViableCallable.cs:494:9:494:14 | call to method M2 | I2.M2() | -| ViableCallable.cs:508:18:508:22 | call to operator + | C19.+(C19, C19) | -| ViableCallable.cs:511:26:511:30 | call to operator checked + | C19.checked +(C19, C19) | -| ViableCallable.cs:514:18:514:23 | call to operator explicit conversion | C19.explicit conversion(C19) | -| ViableCallable.cs:517:26:517:31 | call to operator checked explicit conversion | C19.checked explicit conversion(C19) | -| ViableCallable.cs:558:18:558:22 | call to operator + | C20.+(C20, C20) | -| ViableCallable.cs:561:26:561:30 | call to operator checked + | C20.checked +(C20, C20) | -| ViableCallable.cs:564:18:564:22 | call to operator - | C20.-(C20, C20) | -| ViableCallable.cs:567:26:567:30 | call to operator checked - | I3.checked -(T, T) | -| ViableCallable.cs:570:18:570:22 | call to operator * | I3.*(T, T) | -| ViableCallable.cs:573:26:573:30 | call to operator checked * | I3.checked *(T, T) | -| ViableCallable.cs:576:18:576:22 | call to operator / | C20./(C20, C20) | -| ViableCallable.cs:576:18:576:22 | call to operator / | I3./(T, T) | -| ViableCallable.cs:579:26:579:30 | call to operator checked / | C20.checked /(C20, C20) | -| ViableCallable.cs:579:26:579:30 | call to operator checked / | I3.checked /(T, T) | -| ViableCallable.cs:582:9:582:15 | call to method M11 | C20.M11() | -| ViableCallable.cs:585:9:585:15 | call to method M12 | C20.M12() | -| ViableCallable.cs:585:9:585:15 | call to method M12 | I3.M12() | -| ViableCallable.cs:588:9:588:15 | call to method M13 | I3.M13() | -| ViableCallable.cs:612:9:612:13 | call to method M | C21+A1.M() | -| ViableCallable.cs:618:9:618:13 | call to method M | C21+A1.M() | -| ViableCallable.cs:618:9:618:13 | call to method M | C21+A2.M() | +| ViableCallable.cs:13:9:13:28 | call to method M | C2.M(string, T3) | +| ViableCallable.cs:13:9:13:28 | call to method M | C2.M(string, T3) | +| ViableCallable.cs:13:9:13:28 | call to method M | C2.M(string, T3) | +| ViableCallable.cs:13:9:13:28 | call to method M | C2`1.M(string, T3) | +| ViableCallable.cs:13:9:13:28 | call to method M | C3.M(string, T3) | +| ViableCallable.cs:13:9:13:28 | call to method M | C4.M(Int32[], T3) | +| ViableCallable.cs:13:9:13:28 | call to method M | C4`1.M(T[], T3) | +| ViableCallable.cs:13:9:13:28 | call to method M | C5.M(string, T3) | +| ViableCallable.cs:13:9:13:28 | call to method M | C6.M(bool, T3) | +| ViableCallable.cs:13:9:13:28 | call to method M | C6.M(Int32[], T3) | +| ViableCallable.cs:13:9:13:28 | call to method M | C6.M(string, T3) | +| ViableCallable.cs:13:9:13:28 | call to method M | C6.M(string, T3) | +| ViableCallable.cs:13:9:13:28 | call to method M | C6.M(string, T3) | +| ViableCallable.cs:13:9:13:28 | call to method M | C6.M(T1, T3) | +| ViableCallable.cs:13:9:13:28 | call to method M | C6.M(T1, T3) | +| ViableCallable.cs:13:9:13:28 | call to method M | C6`2.M(T1, T3) | +| ViableCallable.cs:13:9:13:28 | call to method M | C7.M(bool, T3) | +| ViableCallable.cs:13:9:13:28 | call to method M | C7`1.M(T1, T3) | +| ViableCallable.cs:15:9:15:15 | access to property Prop | C2.set_Prop(string) | +| ViableCallable.cs:15:9:15:15 | access to property Prop | C2.set_Prop(string) | +| ViableCallable.cs:15:9:15:15 | access to property Prop | C2.set_Prop(string) | +| ViableCallable.cs:15:9:15:15 | access to property Prop | C2`1.set_Prop(string) | +| ViableCallable.cs:15:9:15:15 | access to property Prop | C3.set_Prop(string) | +| ViableCallable.cs:15:9:15:15 | access to property Prop | C4.set_Prop(Int32[]) | +| ViableCallable.cs:15:9:15:15 | access to property Prop | C4`1.set_Prop(T[]) | +| ViableCallable.cs:15:9:15:15 | access to property Prop | C5.set_Prop(string) | +| ViableCallable.cs:15:9:15:15 | access to property Prop | C6.set_Prop(bool) | +| ViableCallable.cs:15:9:15:15 | access to property Prop | C6.set_Prop(Int32[]) | +| ViableCallable.cs:15:9:15:15 | access to property Prop | C6.set_Prop(string) | +| ViableCallable.cs:15:9:15:15 | access to property Prop | C6.set_Prop(string) | +| ViableCallable.cs:15:9:15:15 | access to property Prop | C6.set_Prop(string) | +| ViableCallable.cs:15:9:15:15 | access to property Prop | C6.set_Prop(T1) | +| ViableCallable.cs:15:9:15:15 | access to property Prop | C6.set_Prop(T1) | +| ViableCallable.cs:15:9:15:15 | access to property Prop | C6`2.set_Prop(T1) | +| ViableCallable.cs:15:9:15:15 | access to property Prop | C7.set_Prop(bool) | +| ViableCallable.cs:15:9:15:15 | access to property Prop | C7`1.set_Prop(T1) | +| ViableCallable.cs:15:19:15:25 | access to property Prop | C2.get_Prop() | +| ViableCallable.cs:15:19:15:25 | access to property Prop | C2.get_Prop() | +| ViableCallable.cs:15:19:15:25 | access to property Prop | C2.get_Prop() | +| ViableCallable.cs:15:19:15:25 | access to property Prop | C2`1.get_Prop() | +| ViableCallable.cs:15:19:15:25 | access to property Prop | C3.get_Prop() | +| ViableCallable.cs:15:19:15:25 | access to property Prop | C4.get_Prop() | +| ViableCallable.cs:15:19:15:25 | access to property Prop | C4`1.get_Prop() | +| ViableCallable.cs:15:19:15:25 | access to property Prop | C5.get_Prop() | +| ViableCallable.cs:15:19:15:25 | access to property Prop | C6.get_Prop() | +| ViableCallable.cs:15:19:15:25 | access to property Prop | C6.get_Prop() | +| ViableCallable.cs:15:19:15:25 | access to property Prop | C6.get_Prop() | +| ViableCallable.cs:15:19:15:25 | access to property Prop | C6.get_Prop() | +| ViableCallable.cs:15:19:15:25 | access to property Prop | C6.get_Prop() | +| ViableCallable.cs:15:19:15:25 | access to property Prop | C6.get_Prop() | +| ViableCallable.cs:15:19:15:25 | access to property Prop | C6.get_Prop() | +| ViableCallable.cs:15:19:15:25 | access to property Prop | C6`2.get_Prop() | +| ViableCallable.cs:15:19:15:25 | access to property Prop | C7.get_Prop() | +| ViableCallable.cs:15:19:15:25 | access to property Prop | C7`1.get_Prop() | +| ViableCallable.cs:17:9:17:23 | access to indexer | C2.set_Item(bool, string) | +| ViableCallable.cs:17:9:17:23 | access to indexer | C2.set_Item(decimal, string) | +| ViableCallable.cs:17:9:17:23 | access to indexer | C2.set_Item(int, string) | +| ViableCallable.cs:17:9:17:23 | access to indexer | C2`1.set_Item(T, string) | +| ViableCallable.cs:17:9:17:23 | access to indexer | C3.set_Item(decimal, string) | +| ViableCallable.cs:17:9:17:23 | access to indexer | C4.set_Item(bool, Int32[]) | +| ViableCallable.cs:17:9:17:23 | access to indexer | C4`1.set_Item(bool, T[]) | +| ViableCallable.cs:17:9:17:23 | access to indexer | C5.set_Item(bool, string) | +| ViableCallable.cs:17:9:17:23 | access to indexer | C6.set_Item(byte, bool) | +| ViableCallable.cs:17:9:17:23 | access to indexer | C6.set_Item(bool, Int32[]) | +| ViableCallable.cs:17:9:17:23 | access to indexer | C6.set_Item(bool, string) | +| ViableCallable.cs:17:9:17:23 | access to indexer | C6.set_Item(decimal, string) | +| ViableCallable.cs:17:9:17:23 | access to indexer | C6.set_Item(int, string) | +| ViableCallable.cs:17:9:17:23 | access to indexer | C6.set_Item(bool, T1) | +| ViableCallable.cs:17:9:17:23 | access to indexer | C6.set_Item(byte, T1) | +| ViableCallable.cs:17:9:17:23 | access to indexer | C6`2.set_Item(T2, T1) | +| ViableCallable.cs:17:9:17:23 | access to indexer | C7.set_Item(byte, bool) | +| ViableCallable.cs:17:9:17:23 | access to indexer | C7`1.set_Item(byte, T1) | +| ViableCallable.cs:17:27:17:41 | access to indexer | C2.get_Item(bool) | +| ViableCallable.cs:17:27:17:41 | access to indexer | C2.get_Item(decimal) | +| ViableCallable.cs:17:27:17:41 | access to indexer | C2.get_Item(int) | +| ViableCallable.cs:17:27:17:41 | access to indexer | C2`1.get_Item(T) | +| ViableCallable.cs:17:27:17:41 | access to indexer | C3.get_Item(decimal) | +| ViableCallable.cs:17:27:17:41 | access to indexer | C4.get_Item(bool) | +| ViableCallable.cs:17:27:17:41 | access to indexer | C4`1.get_Item(bool) | +| ViableCallable.cs:17:27:17:41 | access to indexer | C5.get_Item(bool) | +| ViableCallable.cs:17:27:17:41 | access to indexer | C6.get_Item(byte) | +| ViableCallable.cs:17:27:17:41 | access to indexer | C6.get_Item(bool) | +| ViableCallable.cs:17:27:17:41 | access to indexer | C6.get_Item(bool) | +| ViableCallable.cs:17:27:17:41 | access to indexer | C6.get_Item(decimal) | +| ViableCallable.cs:17:27:17:41 | access to indexer | C6.get_Item(int) | +| ViableCallable.cs:17:27:17:41 | access to indexer | C6.get_Item(bool) | +| ViableCallable.cs:17:27:17:41 | access to indexer | C6.get_Item(byte) | +| ViableCallable.cs:17:27:17:41 | access to indexer | C6`2.get_Item(T2) | +| ViableCallable.cs:17:27:17:41 | access to indexer | C7.get_Item(byte) | +| ViableCallable.cs:17:27:17:41 | access to indexer | C7`1.get_Item(byte) | +| ViableCallable.cs:19:9:19:16 | access to event Event | C2.add_Event(EventHandler) | +| ViableCallable.cs:19:9:19:16 | access to event Event | C2.add_Event(EventHandler) | +| ViableCallable.cs:19:9:19:16 | access to event Event | C2.add_Event(EventHandler) | +| ViableCallable.cs:19:9:19:16 | access to event Event | C2`1.add_Event(EventHandler) | +| ViableCallable.cs:19:9:19:16 | access to event Event | C3.add_Event(EventHandler) | +| ViableCallable.cs:19:9:19:16 | access to event Event | C4.add_Event(EventHandler) | +| ViableCallable.cs:19:9:19:16 | access to event Event | C4`1.add_Event(EventHandler) | +| ViableCallable.cs:19:9:19:16 | access to event Event | C5.add_Event(EventHandler) | +| ViableCallable.cs:19:9:19:16 | access to event Event | C6.add_Event(EventHandler) | +| ViableCallable.cs:19:9:19:16 | access to event Event | C6.add_Event(EventHandler) | +| ViableCallable.cs:19:9:19:16 | access to event Event | C6.add_Event(EventHandler) | +| ViableCallable.cs:19:9:19:16 | access to event Event | C6.add_Event(EventHandler) | +| ViableCallable.cs:19:9:19:16 | access to event Event | C6.add_Event(EventHandler) | +| ViableCallable.cs:19:9:19:16 | access to event Event | C6.add_Event(EventHandler) | +| ViableCallable.cs:19:9:19:16 | access to event Event | C6.add_Event(EventHandler) | +| ViableCallable.cs:19:9:19:16 | access to event Event | C6`2.add_Event(EventHandler) | +| ViableCallable.cs:19:9:19:16 | access to event Event | C7.add_Event(EventHandler) | +| ViableCallable.cs:19:9:19:16 | access to event Event | C7`1.add_Event(EventHandler) | +| ViableCallable.cs:20:9:20:16 | access to event Event | C2.remove_Event(EventHandler) | +| ViableCallable.cs:20:9:20:16 | access to event Event | C2.remove_Event(EventHandler) | +| ViableCallable.cs:20:9:20:16 | access to event Event | C2.remove_Event(EventHandler) | +| ViableCallable.cs:20:9:20:16 | access to event Event | C2`1.remove_Event(EventHandler) | +| ViableCallable.cs:20:9:20:16 | access to event Event | C3.remove_Event(EventHandler) | +| ViableCallable.cs:20:9:20:16 | access to event Event | C4.remove_Event(EventHandler) | +| ViableCallable.cs:20:9:20:16 | access to event Event | C4`1.remove_Event(EventHandler) | +| ViableCallable.cs:20:9:20:16 | access to event Event | C5.remove_Event(EventHandler) | +| ViableCallable.cs:20:9:20:16 | access to event Event | C6.remove_Event(EventHandler) | +| ViableCallable.cs:20:9:20:16 | access to event Event | C6.remove_Event(EventHandler) | +| ViableCallable.cs:20:9:20:16 | access to event Event | C6.remove_Event(EventHandler) | +| ViableCallable.cs:20:9:20:16 | access to event Event | C6.remove_Event(EventHandler) | +| ViableCallable.cs:20:9:20:16 | access to event Event | C6.remove_Event(EventHandler) | +| ViableCallable.cs:20:9:20:16 | access to event Event | C6.remove_Event(EventHandler) | +| ViableCallable.cs:20:9:20:16 | access to event Event | C6.remove_Event(EventHandler) | +| ViableCallable.cs:20:9:20:16 | access to event Event | C6`2.remove_Event(EventHandler) | +| ViableCallable.cs:20:9:20:16 | access to event Event | C7.remove_Event(EventHandler) | +| ViableCallable.cs:20:9:20:16 | access to event Event | C7`1.remove_Event(EventHandler) | +| ViableCallable.cs:23:9:23:30 | call to method M | C4.M(Int32[], T3) | +| ViableCallable.cs:23:9:23:30 | call to method M | C4`1.M(T[], T3) | +| ViableCallable.cs:23:9:23:30 | call to method M | C6.M(Int32[], T3) | +| ViableCallable.cs:25:9:25:15 | access to property Prop | C4.set_Prop(Int32[]) | +| ViableCallable.cs:25:9:25:15 | access to property Prop | C4`1.set_Prop(T[]) | +| ViableCallable.cs:25:9:25:15 | access to property Prop | C6.set_Prop(Int32[]) | +| ViableCallable.cs:25:19:25:25 | access to property Prop | C4.get_Prop() | +| ViableCallable.cs:25:19:25:25 | access to property Prop | C4`1.get_Prop() | +| ViableCallable.cs:25:19:25:25 | access to property Prop | C6.get_Prop() | +| ViableCallable.cs:27:9:27:23 | access to indexer | C4.set_Item(bool, Int32[]) | +| ViableCallable.cs:27:9:27:23 | access to indexer | C4`1.set_Item(bool, T[]) | +| ViableCallable.cs:27:9:27:23 | access to indexer | C6.set_Item(bool, Int32[]) | +| ViableCallable.cs:27:27:27:41 | access to indexer | C4.get_Item(bool) | +| ViableCallable.cs:27:27:27:41 | access to indexer | C4`1.get_Item(bool) | +| ViableCallable.cs:27:27:27:41 | access to indexer | C6.get_Item(bool) | +| ViableCallable.cs:29:9:29:16 | access to event Event | C4.add_Event(EventHandler) | +| ViableCallable.cs:29:9:29:16 | access to event Event | C4`1.add_Event(EventHandler) | +| ViableCallable.cs:29:9:29:16 | access to event Event | C6.add_Event(EventHandler) | +| ViableCallable.cs:30:9:30:16 | access to event Event | C4.remove_Event(EventHandler) | +| ViableCallable.cs:30:9:30:16 | access to event Event | C4`1.remove_Event(EventHandler) | +| ViableCallable.cs:30:9:30:16 | access to event Event | C6.remove_Event(EventHandler) | +| ViableCallable.cs:33:30:33:52 | call to method Mock> | ViableCallable.Mock>() | +| ViableCallable.cs:34:9:34:23 | call to method M | C2.M(string, T3) | +| ViableCallable.cs:34:9:34:23 | call to method M | C6.M(string, T3) | +| ViableCallable.cs:36:9:36:15 | access to property Prop | C2.set_Prop(string) | +| ViableCallable.cs:36:9:36:15 | access to property Prop | C6.set_Prop(string) | +| ViableCallable.cs:36:19:36:25 | access to property Prop | C2.get_Prop() | +| ViableCallable.cs:36:19:36:25 | access to property Prop | C6.get_Prop() | +| ViableCallable.cs:38:9:38:13 | access to indexer | C2.set_Item(int, string) | +| ViableCallable.cs:38:9:38:13 | access to indexer | C6.set_Item(int, string) | +| ViableCallable.cs:38:17:38:21 | access to indexer | C2.get_Item(int) | +| ViableCallable.cs:38:17:38:21 | access to indexer | C6.get_Item(int) | +| ViableCallable.cs:40:9:40:16 | access to event Event | C2.add_Event(EventHandler) | +| ViableCallable.cs:40:9:40:16 | access to event Event | C6.add_Event(EventHandler) | +| ViableCallable.cs:41:9:41:16 | access to event Event | C2.remove_Event(EventHandler) | +| ViableCallable.cs:41:9:41:16 | access to event Event | C6.remove_Event(EventHandler) | +| ViableCallable.cs:44:34:44:60 | call to method Mock> | ViableCallable.Mock>() | +| ViableCallable.cs:45:9:45:24 | call to method M | C2.M(string, T3) | +| ViableCallable.cs:45:9:45:24 | call to method M | C3.M(string, T3) | +| ViableCallable.cs:45:9:45:24 | call to method M | C6.M(string, T3) | +| ViableCallable.cs:47:9:47:15 | access to property Prop | C2.set_Prop(string) | +| ViableCallable.cs:47:9:47:15 | access to property Prop | C3.set_Prop(string) | +| ViableCallable.cs:47:9:47:15 | access to property Prop | C6.set_Prop(string) | +| ViableCallable.cs:47:19:47:25 | access to property Prop | C2.get_Prop() | +| ViableCallable.cs:47:19:47:25 | access to property Prop | C3.get_Prop() | +| ViableCallable.cs:47:19:47:25 | access to property Prop | C6.get_Prop() | +| ViableCallable.cs:49:9:49:14 | access to indexer | C2.set_Item(decimal, string) | +| ViableCallable.cs:49:9:49:14 | access to indexer | C3.set_Item(decimal, string) | +| ViableCallable.cs:49:9:49:14 | access to indexer | C6.set_Item(decimal, string) | +| ViableCallable.cs:49:18:49:23 | access to indexer | C2.get_Item(decimal) | +| ViableCallable.cs:49:18:49:23 | access to indexer | C3.get_Item(decimal) | +| ViableCallable.cs:49:18:49:23 | access to indexer | C6.get_Item(decimal) | +| ViableCallable.cs:51:9:51:16 | access to event Event | C2.add_Event(EventHandler) | +| ViableCallable.cs:51:9:51:16 | access to event Event | C3.add_Event(EventHandler) | +| ViableCallable.cs:51:9:51:16 | access to event Event | C6.add_Event(EventHandler) | +| ViableCallable.cs:52:9:52:16 | access to event Event | C2.remove_Event(EventHandler) | +| ViableCallable.cs:52:9:52:16 | access to event Event | C3.remove_Event(EventHandler) | +| ViableCallable.cs:52:9:52:16 | access to event Event | C6.remove_Event(EventHandler) | +| ViableCallable.cs:55:30:55:52 | call to method Mock> | ViableCallable.Mock>() | +| ViableCallable.cs:56:9:56:44 | call to method M | C4.M(Int32[], T3) | +| ViableCallable.cs:56:9:56:44 | call to method M | C6.M(Int32[], T3) | +| ViableCallable.cs:58:9:58:15 | access to property Prop | C4.set_Prop(Int32[]) | +| ViableCallable.cs:58:9:58:15 | access to property Prop | C6.set_Prop(Int32[]) | +| ViableCallable.cs:58:19:58:25 | access to property Prop | C4.get_Prop() | +| ViableCallable.cs:58:19:58:25 | access to property Prop | C6.get_Prop() | +| ViableCallable.cs:60:9:60:17 | access to indexer | C4.set_Item(bool, Int32[]) | +| ViableCallable.cs:60:9:60:17 | access to indexer | C6.set_Item(bool, Int32[]) | +| ViableCallable.cs:60:21:60:29 | access to indexer | C4.get_Item(bool) | +| ViableCallable.cs:60:21:60:29 | access to indexer | C6.get_Item(bool) | +| ViableCallable.cs:62:9:62:16 | access to event Event | C4.add_Event(EventHandler) | +| ViableCallable.cs:62:9:62:16 | access to event Event | C6.add_Event(EventHandler) | +| ViableCallable.cs:63:9:63:16 | access to event Event | C4.remove_Event(EventHandler) | +| ViableCallable.cs:63:9:63:16 | access to event Event | C6.remove_Event(EventHandler) | +| ViableCallable.cs:66:31:66:54 | call to method Mock> | ViableCallable.Mock>() | +| ViableCallable.cs:67:9:67:30 | call to method M | C2.M(string, T3) | +| ViableCallable.cs:67:9:67:30 | call to method M | C5.M(string, T3) | +| ViableCallable.cs:67:9:67:30 | call to method M | C6.M(string, T3) | +| ViableCallable.cs:69:9:69:15 | access to property Prop | C2.set_Prop(string) | +| ViableCallable.cs:69:9:69:15 | access to property Prop | C5.set_Prop(string) | +| ViableCallable.cs:69:9:69:15 | access to property Prop | C6.set_Prop(string) | +| ViableCallable.cs:69:19:69:25 | access to property Prop | C2.get_Prop() | +| ViableCallable.cs:69:19:69:25 | access to property Prop | C5.get_Prop() | +| ViableCallable.cs:69:19:69:25 | access to property Prop | C6.get_Prop() | +| ViableCallable.cs:71:9:71:17 | access to indexer | C2.set_Item(bool, string) | +| ViableCallable.cs:71:9:71:17 | access to indexer | C5.set_Item(bool, string) | +| ViableCallable.cs:71:9:71:17 | access to indexer | C6.set_Item(bool, string) | +| ViableCallable.cs:71:21:71:29 | access to indexer | C2.get_Item(bool) | +| ViableCallable.cs:71:21:71:29 | access to indexer | C5.get_Item(bool) | +| ViableCallable.cs:71:21:71:29 | access to indexer | C6.get_Item(bool) | +| ViableCallable.cs:73:9:73:16 | access to event Event | C2.add_Event(EventHandler) | +| ViableCallable.cs:73:9:73:16 | access to event Event | C5.add_Event(EventHandler) | +| ViableCallable.cs:73:9:73:16 | access to event Event | C6.add_Event(EventHandler) | +| ViableCallable.cs:74:9:74:16 | access to event Event | C2.remove_Event(EventHandler) | +| ViableCallable.cs:74:9:74:16 | access to event Event | C5.remove_Event(EventHandler) | +| ViableCallable.cs:74:9:74:16 | access to event Event | C6.remove_Event(EventHandler) | +| ViableCallable.cs:78:9:78:29 | call to method M | C6.M(T1, T3) | +| ViableCallable.cs:80:9:80:15 | access to property Prop | C6.set_Prop(T1) | +| ViableCallable.cs:80:19:80:25 | access to property Prop | C6.get_Prop() | +| ViableCallable.cs:82:9:82:17 | access to indexer | C6.set_Item(bool, T1) | +| ViableCallable.cs:82:21:82:29 | access to indexer | C6.get_Item(bool) | +| ViableCallable.cs:84:9:84:16 | access to event Event | C6.add_Event(EventHandler) | +| ViableCallable.cs:85:9:85:16 | access to event Event | C6.remove_Event(EventHandler) | +| ViableCallable.cs:88:21:88:30 | call to method Mock | ViableCallable.Mock() | +| ViableCallable.cs:89:9:89:44 | dynamic call to method M | C8.M(IEnumerable>) | +| ViableCallable.cs:89:9:89:44 | dynamic call to method M | C9`1.M(IEnumerable>) | +| ViableCallable.cs:89:13:89:43 | call to method Mock>> | ViableCallable.Mock>>() | +| ViableCallable.cs:91:9:91:15 | dynamic access to member Prop1 | C8.set_Prop1(string) | +| ViableCallable.cs:91:9:91:15 | dynamic access to member Prop1 | C9`1.set_Prop1(string) | +| ViableCallable.cs:91:19:91:25 | dynamic access to member Prop1 | C8.get_Prop1() | +| ViableCallable.cs:91:19:91:25 | dynamic access to member Prop1 | C9`1.get_Prop1() | +| ViableCallable.cs:93:9:93:12 | dynamic access to element | C8.set_Item(int, string) | +| ViableCallable.cs:93:9:93:12 | dynamic access to element | C9`1.set_Item(int, string) | +| ViableCallable.cs:93:16:93:19 | dynamic access to element | C8.get_Item(int) | +| ViableCallable.cs:93:16:93:19 | dynamic access to element | C9`1.get_Item(int) | +| ViableCallable.cs:96:13:96:40 | call to method Mock>> | ViableCallable.Mock>>() | +| ViableCallable.cs:100:9:100:15 | dynamic call to method M | C5.M(int) | +| ViableCallable.cs:103:9:103:16 | access to property Prop2 | C5.set_Prop2(string) | +| ViableCallable.cs:106:9:106:17 | access to event Event2 | C5.add_Event2(EventHandler) | +| ViableCallable.cs:107:9:107:17 | access to event Event2 | C5.remove_Event2(EventHandler) | +| ViableCallable.cs:121:9:121:25 | dynamic call to method M2 | C8.M2(Decimal[]) | +| ViableCallable.cs:125:9:125:24 | dynamic call to method M2 | C8.M2(String[]) | +| ViableCallable.cs:133:9:133:28 | dynamic call to method M | C6.M(bool, T3) | +| ViableCallable.cs:133:9:133:28 | dynamic call to method M | C6.M(T1, T3) | +| ViableCallable.cs:135:9:135:14 | dynamic access to member Prop | C6.set_Prop(bool) | +| ViableCallable.cs:135:9:135:14 | dynamic access to member Prop | C6.set_Prop(T1) | +| ViableCallable.cs:135:18:135:23 | dynamic access to member Prop | C6.get_Prop() | +| ViableCallable.cs:135:18:135:23 | dynamic access to member Prop | C6.get_Prop() | +| ViableCallable.cs:137:9:137:18 | dynamic access to element | C6.set_Item(byte, bool) | +| ViableCallable.cs:137:9:137:18 | dynamic access to element | C6.set_Item(byte, T1) | +| ViableCallable.cs:137:22:137:31 | dynamic access to element | C6.get_Item(byte) | +| ViableCallable.cs:137:22:137:31 | dynamic access to element | C6.get_Item(byte) | +| ViableCallable.cs:139:9:139:52 | ... += ... | C6.add_Event(EventHandler) | +| ViableCallable.cs:140:9:140:52 | ... -= ... | C6.remove_Event(EventHandler) | +| ViableCallable.cs:143:13:143:22 | call to method Mock | ViableCallable.Mock() | +| ViableCallable.cs:144:9:144:14 | dynamic call to method M3 | C8.M3(params Double[]) | +| ViableCallable.cs:144:9:144:14 | dynamic call to method M3 | C9`1.M3(params T[]) | +| ViableCallable.cs:145:9:145:15 | dynamic call to method M3 | C8.M3(params Double[]) | +| ViableCallable.cs:145:9:145:15 | dynamic call to method M3 | C9`1.M3(params T[]) | +| ViableCallable.cs:146:9:146:20 | dynamic call to method M3 | C8.M3(params Double[]) | +| ViableCallable.cs:146:9:146:20 | dynamic call to method M3 | C9`1.M3(params T[]) | +| ViableCallable.cs:149:13:149:22 | call to method Mock | ViableCallable.Mock() | +| ViableCallable.cs:150:9:150:14 | dynamic call to method M5 | C8.M5(params IEnumerable) | +| ViableCallable.cs:150:9:150:14 | dynamic call to method M5 | C9`1.M5(params IEnumerable) | +| ViableCallable.cs:151:9:151:15 | dynamic call to method M5 | C8.M5(params IEnumerable) | +| ViableCallable.cs:151:9:151:15 | dynamic call to method M5 | C9`1.M5(params IEnumerable) | +| ViableCallable.cs:152:9:152:20 | dynamic call to method M5 | C8.M5(params IEnumerable) | +| ViableCallable.cs:152:9:152:20 | dynamic call to method M5 | C9`1.M5(params IEnumerable) | +| ViableCallable.cs:155:9:155:16 | dynamic call to method M3 | C8.M3(params Double[]) | +| ViableCallable.cs:155:9:155:16 | dynamic call to method M3 | C9`1.M3(params T[]) | +| ViableCallable.cs:155:9:155:16 | dynamic call to method M3 | C10.M3(params Double[]) | +| ViableCallable.cs:155:9:155:16 | dynamic call to method M3 | Test.MainClass+ImplAlpha.M3() | +| ViableCallable.cs:155:9:155:16 | dynamic call to method M3 | Test.MainClass+SecondLevelImpl.M3() | +| ViableCallable.cs:156:9:156:17 | dynamic call to method M3 | C8.M3(params Double[]) | +| ViableCallable.cs:156:9:156:17 | dynamic call to method M3 | C9`1.M3(params T[]) | +| ViableCallable.cs:156:9:156:17 | dynamic call to method M3 | C10.M3(params Double[]) | +| ViableCallable.cs:157:9:157:22 | dynamic call to method M3 | C8.M3(params Double[]) | +| ViableCallable.cs:157:9:157:22 | dynamic call to method M3 | C9`1.M3(params T[]) | +| ViableCallable.cs:157:9:157:22 | dynamic call to method M3 | C10.M3(params Double[]) | +| ViableCallable.cs:159:9:159:16 | dynamic call to method M5 | C8.M5(params IEnumerable) | +| ViableCallable.cs:159:9:159:16 | dynamic call to method M5 | C9`1.M5(params IEnumerable) | +| ViableCallable.cs:159:9:159:16 | dynamic call to method M5 | C10.M5(params IEnumerable) | +| ViableCallable.cs:160:9:160:17 | dynamic call to method M5 | C8.M5(params IEnumerable) | +| ViableCallable.cs:160:9:160:17 | dynamic call to method M5 | C9`1.M5(params IEnumerable) | +| ViableCallable.cs:160:9:160:17 | dynamic call to method M5 | C10.M5(params IEnumerable) | +| ViableCallable.cs:161:9:161:22 | dynamic call to method M5 | C8.M5(params IEnumerable) | +| ViableCallable.cs:161:9:161:22 | dynamic call to method M5 | C9`1.M5(params IEnumerable) | +| ViableCallable.cs:161:9:161:22 | dynamic call to method M5 | C10.M5(params IEnumerable) | +| ViableCallable.cs:163:9:163:17 | dynamic access to member Prop1 | C8.set_Prop1(string) | +| ViableCallable.cs:163:9:163:17 | dynamic access to member Prop1 | C9`1.set_Prop1(string) | +| ViableCallable.cs:163:9:163:17 | dynamic access to member Prop1 | C10.set_Prop1(bool) | +| ViableCallable.cs:163:21:163:29 | dynamic access to member Prop1 | C8.get_Prop1() | +| ViableCallable.cs:163:21:163:29 | dynamic access to member Prop1 | C9`1.get_Prop1() | +| ViableCallable.cs:163:21:163:29 | dynamic access to member Prop1 | C10.get_Prop1() | +| ViableCallable.cs:165:9:165:14 | dynamic access to element | C2.set_Item(decimal, string) | +| ViableCallable.cs:165:9:165:14 | dynamic access to element | C2.set_Item(int, string) | +| ViableCallable.cs:165:9:165:14 | dynamic access to element | C2`1.set_Item(T, string) | +| ViableCallable.cs:165:9:165:14 | dynamic access to element | C3.set_Item(decimal, string) | +| ViableCallable.cs:165:9:165:14 | dynamic access to element | C6.set_Item(byte, bool) | +| ViableCallable.cs:165:9:165:14 | dynamic access to element | C6.set_Item(decimal, string) | +| ViableCallable.cs:165:9:165:14 | dynamic access to element | C6.set_Item(int, string) | +| ViableCallable.cs:165:9:165:14 | dynamic access to element | C6.set_Item(byte, T1) | +| ViableCallable.cs:165:9:165:14 | dynamic access to element | C6`2.set_Item(T2, T1) | +| ViableCallable.cs:165:9:165:14 | dynamic access to element | C7.set_Item(byte, bool) | +| ViableCallable.cs:165:9:165:14 | dynamic access to element | C7`1.set_Item(byte, T1) | +| ViableCallable.cs:165:9:165:14 | dynamic access to element | C8.set_Item(int, string) | +| ViableCallable.cs:165:9:165:14 | dynamic access to element | C9`1.set_Item(int, string) | +| ViableCallable.cs:165:9:165:14 | dynamic access to element | C10.set_Item(int, bool) | +| ViableCallable.cs:165:18:165:23 | dynamic access to element | C2.get_Item(decimal) | +| ViableCallable.cs:165:18:165:23 | dynamic access to element | C2.get_Item(int) | +| ViableCallable.cs:165:18:165:23 | dynamic access to element | C2`1.get_Item(T) | +| ViableCallable.cs:165:18:165:23 | dynamic access to element | C3.get_Item(decimal) | +| ViableCallable.cs:165:18:165:23 | dynamic access to element | C6.get_Item(byte) | +| ViableCallable.cs:165:18:165:23 | dynamic access to element | C6.get_Item(decimal) | +| ViableCallable.cs:165:18:165:23 | dynamic access to element | C6.get_Item(int) | +| ViableCallable.cs:165:18:165:23 | dynamic access to element | C6.get_Item(byte) | +| ViableCallable.cs:165:18:165:23 | dynamic access to element | C6`2.get_Item(T2) | +| ViableCallable.cs:165:18:165:23 | dynamic access to element | C7.get_Item(byte) | +| ViableCallable.cs:165:18:165:23 | dynamic access to element | C7`1.get_Item(byte) | +| ViableCallable.cs:165:18:165:23 | dynamic access to element | C8.get_Item(int) | +| ViableCallable.cs:165:18:165:23 | dynamic access to element | C9`1.get_Item(int) | +| ViableCallable.cs:165:18:165:23 | dynamic access to element | C10.get_Item(int) | +| ViableCallable.cs:167:9:167:54 | ... += ... | C2.add_Event(EventHandler) | +| ViableCallable.cs:167:9:167:54 | ... += ... | C2.add_Event(EventHandler) | +| ViableCallable.cs:167:9:167:54 | ... += ... | C2.add_Event(EventHandler) | +| ViableCallable.cs:167:9:167:54 | ... += ... | C2`1.add_Event(EventHandler) | +| ViableCallable.cs:167:9:167:54 | ... += ... | C3.add_Event(EventHandler) | +| ViableCallable.cs:167:9:167:54 | ... += ... | C5.add_Event(EventHandler) | +| ViableCallable.cs:167:9:167:54 | ... += ... | C6.add_Event(EventHandler) | +| ViableCallable.cs:167:9:167:54 | ... += ... | C6.add_Event(EventHandler) | +| ViableCallable.cs:167:9:167:54 | ... += ... | C6.add_Event(EventHandler) | +| ViableCallable.cs:167:9:167:54 | ... += ... | C6.add_Event(EventHandler) | +| ViableCallable.cs:167:9:167:54 | ... += ... | C6.add_Event(EventHandler) | +| ViableCallable.cs:167:9:167:54 | ... += ... | C6`2.add_Event(EventHandler) | +| ViableCallable.cs:167:9:167:54 | ... += ... | C7`1.add_Event(EventHandler) | +| ViableCallable.cs:167:9:167:54 | ... += ... | C8.add_Event(EventHandler) | +| ViableCallable.cs:167:9:167:54 | ... += ... | C9`1.add_Event(EventHandler) | +| ViableCallable.cs:168:9:168:54 | ... -= ... | C2.remove_Event(EventHandler) | +| ViableCallable.cs:168:9:168:54 | ... -= ... | C2.remove_Event(EventHandler) | +| ViableCallable.cs:168:9:168:54 | ... -= ... | C2.remove_Event(EventHandler) | +| ViableCallable.cs:168:9:168:54 | ... -= ... | C2`1.remove_Event(EventHandler) | +| ViableCallable.cs:168:9:168:54 | ... -= ... | C3.remove_Event(EventHandler) | +| ViableCallable.cs:168:9:168:54 | ... -= ... | C5.remove_Event(EventHandler) | +| ViableCallable.cs:168:9:168:54 | ... -= ... | C6.remove_Event(EventHandler) | +| ViableCallable.cs:168:9:168:54 | ... -= ... | C6.remove_Event(EventHandler) | +| ViableCallable.cs:168:9:168:54 | ... -= ... | C6.remove_Event(EventHandler) | +| ViableCallable.cs:168:9:168:54 | ... -= ... | C6.remove_Event(EventHandler) | +| ViableCallable.cs:168:9:168:54 | ... -= ... | C6.remove_Event(EventHandler) | +| ViableCallable.cs:168:9:168:54 | ... -= ... | C6`2.remove_Event(EventHandler) | +| ViableCallable.cs:168:9:168:54 | ... -= ... | C7`1.remove_Event(EventHandler) | +| ViableCallable.cs:168:9:168:54 | ... -= ... | C8.remove_Event(EventHandler) | +| ViableCallable.cs:168:9:168:54 | ... -= ... | C9`1.remove_Event(EventHandler) | +| ViableCallable.cs:171:9:171:40 | dynamic call to method M4 | C8.M4(byte, IEnumerable) | +| ViableCallable.cs:171:19:171:39 | call to method Mock> | ViableCallable.Mock>() | +| ViableCallable.cs:172:9:172:38 | dynamic call to method M4 | C8.M4(byte, IEnumerable) | +| ViableCallable.cs:175:9:175:17 | dynamic access to member Prop1 | C10.set_Prop1(bool) | +| ViableCallable.cs:185:9:185:15 | dynamic access to element | C2`1.set_Item(T, string) | +| ViableCallable.cs:185:9:185:15 | dynamic access to element | C6`2.set_Item(T2, T1) | +| ViableCallable.cs:185:19:185:25 | dynamic access to element | C2`1.get_Item(T) | +| ViableCallable.cs:185:19:185:25 | dynamic access to element | C6`2.get_Item(T2) | +| ViableCallable.cs:197:9:197:153 | call to method InvokeMember | C10.+(C10, C10) | +| ViableCallable.cs:200:9:200:143 | call to method InvokeMember | C10.get_Prop3() | +| ViableCallable.cs:201:9:201:149 | call to method InvokeMember | C10.set_Prop3(string) | +| ViableCallable.cs:204:9:204:146 | call to method InvokeMember | C10.get_Item(int) | +| ViableCallable.cs:205:9:205:152 | call to method InvokeMember | C10.set_Item(int, bool) | +| ViableCallable.cs:209:9:209:147 | call to method InvokeMember | C10.add_Event(EventHandler) | +| ViableCallable.cs:210:9:210:150 | call to method InvokeMember | C10.remove_Event(EventHandler) | +| ViableCallable.cs:245:9:245:15 | call to method M | C2.M(string, T3) | +| ViableCallable.cs:245:9:245:15 | call to method M | C2.M(string, T3) | +| ViableCallable.cs:245:9:245:15 | call to method M | C2.M(string, T3) | +| ViableCallable.cs:245:9:245:15 | call to method M | C2`1.M(string, T3) | +| ViableCallable.cs:245:9:245:15 | call to method M | C3.M(string, T3) | +| ViableCallable.cs:245:9:245:15 | call to method M | C4.M(Int32[], T3) | +| ViableCallable.cs:245:9:245:15 | call to method M | C4`1.M(T[], T3) | +| ViableCallable.cs:245:9:245:15 | call to method M | C5.M(string, T3) | +| ViableCallable.cs:245:9:245:15 | call to method M | C6.M(bool, T3) | +| ViableCallable.cs:245:9:245:15 | call to method M | C6.M(Int32[], T3) | +| ViableCallable.cs:245:9:245:15 | call to method M | C6.M(string, T3) | +| ViableCallable.cs:245:9:245:15 | call to method M | C6.M(string, T3) | +| ViableCallable.cs:245:9:245:15 | call to method M | C6.M(string, T3) | +| ViableCallable.cs:245:9:245:15 | call to method M | C6.M(T1, T3) | +| ViableCallable.cs:245:9:245:15 | call to method M | C6.M(T1, T3) | +| ViableCallable.cs:245:9:245:15 | call to method M | C6`2.M(T1, T3) | +| ViableCallable.cs:245:9:245:15 | call to method M | C7.M(bool, T3) | +| ViableCallable.cs:245:9:245:15 | call to method M | C7`1.M(T1, T3) | +| ViableCallable.cs:294:9:294:15 | call to method M | C6`2.M(T1, T3) | +| ViableCallable.cs:294:9:294:15 | call to method M | C7.M(bool, T3) | +| ViableCallable.cs:294:9:294:15 | call to method M | C7`1.M(T1, T3) | +| ViableCallable.cs:297:9:297:20 | call to method M | C6`2.M(T1, T3) | +| ViableCallable.cs:297:9:297:20 | call to method M | C7.M(bool, T3) | +| ViableCallable.cs:297:9:297:20 | call to method M | C7`1.M(T1, T3) | +| ViableCallable.cs:311:9:311:15 | call to method M | C7`1.M(T1, T3) | +| ViableCallable.cs:314:9:314:20 | call to method M | C7`1.M(T1, T3) | +| ViableCallable.cs:317:9:317:20 | call to method M | C6.M(T1, T3) | +| ViableCallable.cs:367:9:367:14 | dynamic call to method M | C11.M(dynamic) | +| ViableCallable.cs:369:9:369:18 | dynamic object creation of type C11 | C11.C11(C11) | +| ViableCallable.cs:392:9:392:13 | call to method M | C12+C13.M() | +| ViableCallable.cs:397:9:397:14 | call to method Run | C12.Run(T2) | +| ViableCallable.cs:402:9:402:23 | call to method Run2 | C12.Run2(C13) | +| ViableCallable.cs:425:9:425:18 | call to method M | C15+A1.M() | +| ViableCallable.cs:425:9:425:18 | call to method M | C15+A4.M() | +| ViableCallable.cs:425:9:425:18 | call to method M | C15+A5.M() | +| ViableCallable.cs:429:9:429:19 | call to method M | C15+A1.M() | +| ViableCallable.cs:433:9:433:21 | call to method M | C15+A4.M() | +| ViableCallable.cs:435:13:435:37 | call to method Mock | ViableCallable.Mock() | +| ViableCallable.cs:437:9:437:21 | call to method M | C15+A4.M() | +| ViableCallable.cs:437:9:437:21 | call to method M | C15+A5.M() | +| ViableCallable.cs:452:9:452:19 | call to method M1 | C16.M1(string) | +| ViableCallable.cs:455:9:455:24 | call to method M2 | C17.M2(Func) | +| ViableCallable.cs:463:9:463:21 | call to method M2 | C17.M2(Func) | +| ViableCallable.cs:469:9:469:30 | call to method M2 | C16.M2(Func) | +| ViableCallable.cs:469:9:469:30 | call to method M2 | C17.M2(Func) | +| ViableCallable.cs:475:9:475:30 | call to method M2 | C16.M2(Func) | +| ViableCallable.cs:475:9:475:30 | call to method M2 | C17.M2(Func) | +| ViableCallable.cs:492:9:492:14 | call to method M1 | C18.M1() | +| ViableCallable.cs:495:9:495:14 | call to method M2 | I2.M2() | +| ViableCallable.cs:509:18:509:22 | call to operator + | C19.+(C19, C19) | +| ViableCallable.cs:512:26:512:30 | call to operator checked + | C19.checked +(C19, C19) | +| ViableCallable.cs:515:18:515:23 | call to operator explicit conversion | C19.explicit conversion(C19) | +| ViableCallable.cs:518:26:518:31 | call to operator checked explicit conversion | C19.checked explicit conversion(C19) | +| ViableCallable.cs:559:18:559:22 | call to operator + | C20.+(C20, C20) | +| ViableCallable.cs:562:26:562:30 | call to operator checked + | C20.checked +(C20, C20) | +| ViableCallable.cs:565:18:565:22 | call to operator - | C20.-(C20, C20) | +| ViableCallable.cs:568:26:568:30 | call to operator checked - | I3.checked -(T, T) | +| ViableCallable.cs:571:18:571:22 | call to operator * | I3.*(T, T) | +| ViableCallable.cs:574:26:574:30 | call to operator checked * | I3.checked *(T, T) | +| ViableCallable.cs:577:18:577:22 | call to operator / | C20./(C20, C20) | +| ViableCallable.cs:577:18:577:22 | call to operator / | I3./(T, T) | +| ViableCallable.cs:580:26:580:30 | call to operator checked / | C20.checked /(C20, C20) | +| ViableCallable.cs:580:26:580:30 | call to operator checked / | I3.checked /(T, T) | +| ViableCallable.cs:583:9:583:15 | call to method M11 | C20.M11() | +| ViableCallable.cs:586:9:586:15 | call to method M12 | C20.M12() | +| ViableCallable.cs:586:9:586:15 | call to method M12 | I3.M12() | +| ViableCallable.cs:589:9:589:15 | call to method M13 | I3.M13() | +| ViableCallable.cs:613:9:613:13 | call to method M | C21+A1.M() | +| ViableCallable.cs:619:9:619:13 | call to method M | C21+A1.M() | +| ViableCallable.cs:619:9:619:13 | call to method M | C21+A2.M() | diff --git a/csharp/ql/test/library-tests/dispatch/ViableCallable.cs b/csharp/ql/test/library-tests/dispatch/ViableCallable.cs index 49210d992afc..b6bdc72e3b4d 100644 --- a/csharp/ql/test/library-tests/dispatch/ViableCallable.cs +++ b/csharp/ql/test/library-tests/dispatch/ViableCallable.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Reflection; +using System.Runtime.CompilerServices; public delegate void EventHandler(); @@ -618,3 +619,71 @@ public void Run2(T t) where T : I, allows ref struct t.M(); } } + +public class C22 +{ + public interface I + { + void M(List l); + void M(T[] arr); + void M(IEnumerable l); + void M(ReadOnlySpan s); + } + + public class TestOverloadResolution1 : I + { + public void M(List l) { } + + public void M(T[] arr) { } + + public void M(IEnumerable l) { } + + public void M(ReadOnlySpan s) { } + } + + public class TestOverloadResolution2 : I + { + public void M(List l) { } + + public void M(T[] arr) { } + + [OverloadResolutionPriority(1)] + public void M(IEnumerable l) { } + + [OverloadResolutionPriority(2)] + public void M(ReadOnlySpan s) { } + } + + public void Run1(TestOverloadResolution1 tor) + { + var a = new int[0]; + // Viable callable: C22+TestOverloadResolution1.M(Int32[]) + tor.M(a); + + // Viable callable: C22+TestOverloadResolution1.M(List) + var l = new List(); + tor.M(l); + } + + public void Run2(TestOverloadResolution2 tor) + { + var a = new int[0]; + // Viable callable: C22+TestOverloadResolution2.M(ReadOnlySpan) + tor.M(a); + + var l = new List(); + // Viable callable: C22+TestOverloadResolution2.M(IEnumerable) + tor.M(l); + } + + public void Run3(I tor) + { + var a = new int[0]; + // Viable callables: {C22+TestOverloadResolution1, C22+TestOverloadResolution2}.M(Int32[]) + tor.M(a); + + var l = new List(); + // Viable callables: {C22+TestOverloadResolution1, C22+TestOverloadResolution2}.M(List) + tor.M(l); + } +} diff --git a/csharp/ql/test/library-tests/dispatch/viableCallable.expected b/csharp/ql/test/library-tests/dispatch/viableCallable.expected index 8a499a3769cd..722d07385a5e 100644 --- a/csharp/ql/test/library-tests/dispatch/viableCallable.expected +++ b/csharp/ql/test/library-tests/dispatch/viableCallable.expected @@ -1,303 +1,303 @@ -| ViableCallable.cs:12:9:12:28 | call to method M | M`1 | C2`1 | -| ViableCallable.cs:12:9:12:28 | call to method M | M`1 | C3 | -| ViableCallable.cs:12:9:12:28 | call to method M | M`1 | C4`1 | -| ViableCallable.cs:12:9:12:28 | call to method M | M`1 | C5 | -| ViableCallable.cs:12:9:12:28 | call to method M | M`1 | C6`2 | -| ViableCallable.cs:12:9:12:28 | call to method M | M`1 | C7`1 | -| ViableCallable.cs:14:9:14:15 | access to property Prop | set_Prop | C2`1 | -| ViableCallable.cs:14:9:14:15 | access to property Prop | set_Prop | C3 | -| ViableCallable.cs:14:9:14:15 | access to property Prop | set_Prop | C4`1 | -| ViableCallable.cs:14:9:14:15 | access to property Prop | set_Prop | C5 | -| ViableCallable.cs:14:9:14:15 | access to property Prop | set_Prop | C6`2 | -| ViableCallable.cs:14:9:14:15 | access to property Prop | set_Prop | C7`1 | -| ViableCallable.cs:14:19:14:25 | access to property Prop | get_Prop | C2`1 | -| ViableCallable.cs:14:19:14:25 | access to property Prop | get_Prop | C3 | -| ViableCallable.cs:14:19:14:25 | access to property Prop | get_Prop | C4`1 | -| ViableCallable.cs:14:19:14:25 | access to property Prop | get_Prop | C5 | -| ViableCallable.cs:14:19:14:25 | access to property Prop | get_Prop | C6`2 | -| ViableCallable.cs:14:19:14:25 | access to property Prop | get_Prop | C7`1 | -| ViableCallable.cs:16:9:16:23 | access to indexer | set_Item | C2`1 | -| ViableCallable.cs:16:9:16:23 | access to indexer | set_Item | C3 | -| ViableCallable.cs:16:9:16:23 | access to indexer | set_Item | C4`1 | -| ViableCallable.cs:16:9:16:23 | access to indexer | set_Item | C5 | -| ViableCallable.cs:16:9:16:23 | access to indexer | set_Item | C6`2 | -| ViableCallable.cs:16:9:16:23 | access to indexer | set_Item | C7`1 | -| ViableCallable.cs:16:27:16:41 | access to indexer | get_Item | C2`1 | -| ViableCallable.cs:16:27:16:41 | access to indexer | get_Item | C3 | -| ViableCallable.cs:16:27:16:41 | access to indexer | get_Item | C4`1 | -| ViableCallable.cs:16:27:16:41 | access to indexer | get_Item | C5 | -| ViableCallable.cs:16:27:16:41 | access to indexer | get_Item | C6`2 | -| ViableCallable.cs:16:27:16:41 | access to indexer | get_Item | C7`1 | -| ViableCallable.cs:18:9:18:16 | access to event Event | add_Event | C2`1 | -| ViableCallable.cs:18:9:18:16 | access to event Event | add_Event | C3 | -| ViableCallable.cs:18:9:18:16 | access to event Event | add_Event | C4`1 | -| ViableCallable.cs:18:9:18:16 | access to event Event | add_Event | C5 | -| ViableCallable.cs:18:9:18:16 | access to event Event | add_Event | C6`2 | -| ViableCallable.cs:18:9:18:16 | access to event Event | add_Event | C7`1 | -| ViableCallable.cs:19:9:19:16 | access to event Event | remove_Event | C2`1 | -| ViableCallable.cs:19:9:19:16 | access to event Event | remove_Event | C3 | -| ViableCallable.cs:19:9:19:16 | access to event Event | remove_Event | C4`1 | -| ViableCallable.cs:19:9:19:16 | access to event Event | remove_Event | C5 | -| ViableCallable.cs:19:9:19:16 | access to event Event | remove_Event | C6`2 | -| ViableCallable.cs:19:9:19:16 | access to event Event | remove_Event | C7`1 | -| ViableCallable.cs:22:9:22:30 | call to method M | M`1 | C4`1 | -| ViableCallable.cs:22:9:22:30 | call to method M | M`1 | C6`2 | -| ViableCallable.cs:24:9:24:15 | access to property Prop | set_Prop | C4`1 | -| ViableCallable.cs:24:9:24:15 | access to property Prop | set_Prop | C6`2 | -| ViableCallable.cs:24:19:24:25 | access to property Prop | get_Prop | C4`1 | -| ViableCallable.cs:24:19:24:25 | access to property Prop | get_Prop | C6`2 | -| ViableCallable.cs:26:9:26:23 | access to indexer | set_Item | C4`1 | -| ViableCallable.cs:26:9:26:23 | access to indexer | set_Item | C6`2 | -| ViableCallable.cs:26:27:26:41 | access to indexer | get_Item | C4`1 | -| ViableCallable.cs:26:27:26:41 | access to indexer | get_Item | C6`2 | -| ViableCallable.cs:28:9:28:16 | access to event Event | add_Event | C4`1 | -| ViableCallable.cs:28:9:28:16 | access to event Event | add_Event | C6`2 | -| ViableCallable.cs:29:9:29:16 | access to event Event | remove_Event | C4`1 | -| ViableCallable.cs:29:9:29:16 | access to event Event | remove_Event | C6`2 | -| ViableCallable.cs:33:9:33:23 | call to method M | M`1 | C2`1 | -| ViableCallable.cs:33:9:33:23 | call to method M | M`1 | C6`2 | -| ViableCallable.cs:35:9:35:15 | access to property Prop | set_Prop | C2`1 | -| ViableCallable.cs:35:9:35:15 | access to property Prop | set_Prop | C6`2 | -| ViableCallable.cs:35:19:35:25 | access to property Prop | get_Prop | C2`1 | -| ViableCallable.cs:35:19:35:25 | access to property Prop | get_Prop | C6`2 | -| ViableCallable.cs:37:9:37:13 | access to indexer | set_Item | C2`1 | -| ViableCallable.cs:37:9:37:13 | access to indexer | set_Item | C6`2 | -| ViableCallable.cs:37:17:37:21 | access to indexer | get_Item | C2`1 | -| ViableCallable.cs:37:17:37:21 | access to indexer | get_Item | C6`2 | -| ViableCallable.cs:39:9:39:16 | access to event Event | add_Event | C2`1 | -| ViableCallable.cs:39:9:39:16 | access to event Event | add_Event | C6`2 | -| ViableCallable.cs:40:9:40:16 | access to event Event | remove_Event | C2`1 | -| ViableCallable.cs:40:9:40:16 | access to event Event | remove_Event | C6`2 | -| ViableCallable.cs:44:9:44:24 | call to method M | M`1 | C2`1 | -| ViableCallable.cs:44:9:44:24 | call to method M | M`1 | C3 | -| ViableCallable.cs:44:9:44:24 | call to method M | M`1 | C6`2 | -| ViableCallable.cs:46:9:46:15 | access to property Prop | set_Prop | C2`1 | -| ViableCallable.cs:46:9:46:15 | access to property Prop | set_Prop | C3 | -| ViableCallable.cs:46:9:46:15 | access to property Prop | set_Prop | C6`2 | -| ViableCallable.cs:46:19:46:25 | access to property Prop | get_Prop | C2`1 | -| ViableCallable.cs:46:19:46:25 | access to property Prop | get_Prop | C3 | -| ViableCallable.cs:46:19:46:25 | access to property Prop | get_Prop | C6`2 | -| ViableCallable.cs:48:9:48:14 | access to indexer | set_Item | C2`1 | -| ViableCallable.cs:48:9:48:14 | access to indexer | set_Item | C3 | -| ViableCallable.cs:48:9:48:14 | access to indexer | set_Item | C6`2 | -| ViableCallable.cs:48:18:48:23 | access to indexer | get_Item | C2`1 | -| ViableCallable.cs:48:18:48:23 | access to indexer | get_Item | C3 | -| ViableCallable.cs:48:18:48:23 | access to indexer | get_Item | C6`2 | -| ViableCallable.cs:50:9:50:16 | access to event Event | add_Event | C2`1 | -| ViableCallable.cs:50:9:50:16 | access to event Event | add_Event | C3 | -| ViableCallable.cs:50:9:50:16 | access to event Event | add_Event | C6`2 | -| ViableCallable.cs:51:9:51:16 | access to event Event | remove_Event | C2`1 | -| ViableCallable.cs:51:9:51:16 | access to event Event | remove_Event | C3 | -| ViableCallable.cs:51:9:51:16 | access to event Event | remove_Event | C6`2 | -| ViableCallable.cs:55:9:55:44 | call to method M | M`1 | C4`1 | -| ViableCallable.cs:55:9:55:44 | call to method M | M`1 | C6`2 | -| ViableCallable.cs:57:9:57:15 | access to property Prop | set_Prop | C4`1 | -| ViableCallable.cs:57:9:57:15 | access to property Prop | set_Prop | C6`2 | -| ViableCallable.cs:57:19:57:25 | access to property Prop | get_Prop | C4`1 | -| ViableCallable.cs:57:19:57:25 | access to property Prop | get_Prop | C6`2 | -| ViableCallable.cs:59:9:59:17 | access to indexer | set_Item | C4`1 | -| ViableCallable.cs:59:9:59:17 | access to indexer | set_Item | C6`2 | -| ViableCallable.cs:59:21:59:29 | access to indexer | get_Item | C4`1 | -| ViableCallable.cs:59:21:59:29 | access to indexer | get_Item | C6`2 | -| ViableCallable.cs:61:9:61:16 | access to event Event | add_Event | C4`1 | -| ViableCallable.cs:61:9:61:16 | access to event Event | add_Event | C6`2 | -| ViableCallable.cs:62:9:62:16 | access to event Event | remove_Event | C4`1 | -| ViableCallable.cs:62:9:62:16 | access to event Event | remove_Event | C6`2 | -| ViableCallable.cs:66:9:66:30 | call to method M | M`1 | C2`1 | -| ViableCallable.cs:66:9:66:30 | call to method M | M`1 | C5 | -| ViableCallable.cs:66:9:66:30 | call to method M | M`1 | C6`2 | -| ViableCallable.cs:68:9:68:15 | access to property Prop | set_Prop | C2`1 | -| ViableCallable.cs:68:9:68:15 | access to property Prop | set_Prop | C5 | -| ViableCallable.cs:68:9:68:15 | access to property Prop | set_Prop | C6`2 | -| ViableCallable.cs:68:19:68:25 | access to property Prop | get_Prop | C2`1 | -| ViableCallable.cs:68:19:68:25 | access to property Prop | get_Prop | C5 | -| ViableCallable.cs:68:19:68:25 | access to property Prop | get_Prop | C6`2 | -| ViableCallable.cs:70:9:70:17 | access to indexer | set_Item | C2`1 | -| ViableCallable.cs:70:9:70:17 | access to indexer | set_Item | C5 | -| ViableCallable.cs:70:9:70:17 | access to indexer | set_Item | C6`2 | -| ViableCallable.cs:70:21:70:29 | access to indexer | get_Item | C2`1 | -| ViableCallable.cs:70:21:70:29 | access to indexer | get_Item | C5 | -| ViableCallable.cs:70:21:70:29 | access to indexer | get_Item | C6`2 | -| ViableCallable.cs:72:9:72:16 | access to event Event | add_Event | C2`1 | -| ViableCallable.cs:72:9:72:16 | access to event Event | add_Event | C5 | -| ViableCallable.cs:72:9:72:16 | access to event Event | add_Event | C6`2 | -| ViableCallable.cs:73:9:73:16 | access to event Event | remove_Event | C2`1 | -| ViableCallable.cs:73:9:73:16 | access to event Event | remove_Event | C5 | -| ViableCallable.cs:73:9:73:16 | access to event Event | remove_Event | C6`2 | -| ViableCallable.cs:76:27:76:44 | object creation of type C6 | C6 | C6`2 | -| ViableCallable.cs:77:9:77:29 | call to method M | M`1 | C6`2 | -| ViableCallable.cs:79:9:79:15 | access to property Prop | set_Prop | C6`2 | -| ViableCallable.cs:79:19:79:25 | access to property Prop | get_Prop | C6`2 | -| ViableCallable.cs:81:9:81:17 | access to indexer | set_Item | C6`2 | -| ViableCallable.cs:81:21:81:29 | access to indexer | get_Item | C6`2 | -| ViableCallable.cs:83:9:83:16 | access to event Event | add_Event | C6`2 | -| ViableCallable.cs:84:9:84:16 | access to event Event | remove_Event | C6`2 | -| ViableCallable.cs:88:9:88:44 | dynamic call to method M | M | C8 | -| ViableCallable.cs:88:9:88:44 | dynamic call to method M | M | C9`1 | -| ViableCallable.cs:90:9:90:15 | dynamic access to member Prop1 | set_Prop1 | C8 | -| ViableCallable.cs:90:9:90:15 | dynamic access to member Prop1 | set_Prop1 | C9`1 | -| ViableCallable.cs:90:19:90:25 | dynamic access to member Prop1 | get_Prop1 | C8 | -| ViableCallable.cs:90:19:90:25 | dynamic access to member Prop1 | get_Prop1 | C9`1 | -| ViableCallable.cs:92:9:92:12 | dynamic access to element | set_Item | C8 | -| ViableCallable.cs:92:9:92:12 | dynamic access to element | set_Item | C9`1 | -| ViableCallable.cs:92:16:92:19 | dynamic access to element | get_Item | C8 | -| ViableCallable.cs:92:16:92:19 | dynamic access to element | get_Item | C9`1 | -| ViableCallable.cs:99:9:99:15 | dynamic call to method M | M | C5 | -| ViableCallable.cs:102:9:102:16 | access to property Prop2 | set_Prop2 | C5 | -| ViableCallable.cs:105:9:105:17 | access to event Event2 | add_Event2 | C5 | -| ViableCallable.cs:106:9:106:17 | access to event Event2 | remove_Event2 | C5 | -| ViableCallable.cs:120:9:120:25 | dynamic call to method M2 | M2`1 | C8 | -| ViableCallable.cs:124:9:124:24 | dynamic call to method M2 | M2`1 | C8 | -| ViableCallable.cs:131:13:131:30 | object creation of type C6 | C6 | C6`2 | -| ViableCallable.cs:132:9:132:28 | dynamic call to method M | M`1 | C6`2 | -| ViableCallable.cs:134:9:134:14 | dynamic access to member Prop | set_Prop | C6`2 | -| ViableCallable.cs:134:18:134:23 | dynamic access to member Prop | get_Prop | C6`2 | -| ViableCallable.cs:136:9:136:18 | dynamic access to element | set_Item | C6`2 | -| ViableCallable.cs:136:22:136:31 | dynamic access to element | get_Item | C6`2 | -| ViableCallable.cs:138:9:138:52 | ... += ... | add_Event | C6`2 | -| ViableCallable.cs:139:9:139:52 | ... -= ... | remove_Event | C6`2 | -| ViableCallable.cs:143:9:143:14 | dynamic call to method M3 | M3 | C8 | -| ViableCallable.cs:143:9:143:14 | dynamic call to method M3 | M3 | C9`1 | -| ViableCallable.cs:144:9:144:15 | dynamic call to method M3 | M3 | C8 | -| ViableCallable.cs:144:9:144:15 | dynamic call to method M3 | M3 | C9`1 | -| ViableCallable.cs:145:9:145:20 | dynamic call to method M3 | M3 | C8 | -| ViableCallable.cs:145:9:145:20 | dynamic call to method M3 | M3 | C9`1 | -| ViableCallable.cs:149:9:149:14 | dynamic call to method M5 | M5 | C8 | -| ViableCallable.cs:149:9:149:14 | dynamic call to method M5 | M5 | C9`1 | -| ViableCallable.cs:150:9:150:15 | dynamic call to method M5 | M5 | C8 | -| ViableCallable.cs:150:9:150:15 | dynamic call to method M5 | M5 | C9`1 | -| ViableCallable.cs:151:9:151:20 | dynamic call to method M5 | M5 | C8 | -| ViableCallable.cs:151:9:151:20 | dynamic call to method M5 | M5 | C9`1 | -| ViableCallable.cs:154:9:154:16 | dynamic call to method M3 | M3 | C8 | -| ViableCallable.cs:154:9:154:16 | dynamic call to method M3 | M3 | C9`1 | -| ViableCallable.cs:154:9:154:16 | dynamic call to method M3 | M3 | C10 | -| ViableCallable.cs:155:9:155:17 | dynamic call to method M3 | M3 | C8 | -| ViableCallable.cs:155:9:155:17 | dynamic call to method M3 | M3 | C9`1 | -| ViableCallable.cs:155:9:155:17 | dynamic call to method M3 | M3 | C10 | -| ViableCallable.cs:156:9:156:22 | dynamic call to method M3 | M3 | C8 | -| ViableCallable.cs:156:9:156:22 | dynamic call to method M3 | M3 | C9`1 | -| ViableCallable.cs:156:9:156:22 | dynamic call to method M3 | M3 | C10 | -| ViableCallable.cs:158:9:158:16 | dynamic call to method M5 | M5 | C8 | -| ViableCallable.cs:158:9:158:16 | dynamic call to method M5 | M5 | C9`1 | -| ViableCallable.cs:158:9:158:16 | dynamic call to method M5 | M5 | C10 | -| ViableCallable.cs:159:9:159:17 | dynamic call to method M5 | M5 | C8 | -| ViableCallable.cs:159:9:159:17 | dynamic call to method M5 | M5 | C9`1 | -| ViableCallable.cs:159:9:159:17 | dynamic call to method M5 | M5 | C10 | -| ViableCallable.cs:160:9:160:22 | dynamic call to method M5 | M5 | C8 | -| ViableCallable.cs:160:9:160:22 | dynamic call to method M5 | M5 | C9`1 | -| ViableCallable.cs:160:9:160:22 | dynamic call to method M5 | M5 | C10 | -| ViableCallable.cs:162:9:162:17 | dynamic access to member Prop1 | set_Prop1 | C8 | -| ViableCallable.cs:162:9:162:17 | dynamic access to member Prop1 | set_Prop1 | C9`1 | -| ViableCallable.cs:162:9:162:17 | dynamic access to member Prop1 | set_Prop1 | C10 | -| ViableCallable.cs:162:21:162:29 | dynamic access to member Prop1 | get_Prop1 | C8 | -| ViableCallable.cs:162:21:162:29 | dynamic access to member Prop1 | get_Prop1 | C9`1 | -| ViableCallable.cs:162:21:162:29 | dynamic access to member Prop1 | get_Prop1 | C10 | -| ViableCallable.cs:164:9:164:14 | dynamic access to element | set_Item | C2`1 | -| ViableCallable.cs:164:9:164:14 | dynamic access to element | set_Item | C3 | -| ViableCallable.cs:164:9:164:14 | dynamic access to element | set_Item | C6`2 | -| ViableCallable.cs:164:9:164:14 | dynamic access to element | set_Item | C7`1 | -| ViableCallable.cs:164:9:164:14 | dynamic access to element | set_Item | C8 | -| ViableCallable.cs:164:9:164:14 | dynamic access to element | set_Item | C9`1 | -| ViableCallable.cs:164:9:164:14 | dynamic access to element | set_Item | C10 | -| ViableCallable.cs:164:18:164:23 | dynamic access to element | get_Item | C2`1 | -| ViableCallable.cs:164:18:164:23 | dynamic access to element | get_Item | C3 | -| ViableCallable.cs:164:18:164:23 | dynamic access to element | get_Item | C6`2 | -| ViableCallable.cs:164:18:164:23 | dynamic access to element | get_Item | C7`1 | -| ViableCallable.cs:164:18:164:23 | dynamic access to element | get_Item | C8 | -| ViableCallable.cs:164:18:164:23 | dynamic access to element | get_Item | C9`1 | -| ViableCallable.cs:164:18:164:23 | dynamic access to element | get_Item | C10 | -| ViableCallable.cs:166:9:166:54 | ... += ... | add_Event | C2`1 | -| ViableCallable.cs:166:9:166:54 | ... += ... | add_Event | C3 | -| ViableCallable.cs:166:9:166:54 | ... += ... | add_Event | C5 | -| ViableCallable.cs:166:9:166:54 | ... += ... | add_Event | C6`2 | -| ViableCallable.cs:166:9:166:54 | ... += ... | add_Event | C7`1 | -| ViableCallable.cs:166:9:166:54 | ... += ... | add_Event | C8 | -| ViableCallable.cs:166:9:166:54 | ... += ... | add_Event | C9`1 | -| ViableCallable.cs:167:9:167:54 | ... -= ... | remove_Event | C2`1 | -| ViableCallable.cs:167:9:167:54 | ... -= ... | remove_Event | C3 | -| ViableCallable.cs:167:9:167:54 | ... -= ... | remove_Event | C5 | -| ViableCallable.cs:167:9:167:54 | ... -= ... | remove_Event | C6`2 | -| ViableCallable.cs:167:9:167:54 | ... -= ... | remove_Event | C7`1 | -| ViableCallable.cs:167:9:167:54 | ... -= ... | remove_Event | C8 | -| ViableCallable.cs:167:9:167:54 | ... -= ... | remove_Event | C9`1 | -| ViableCallable.cs:170:9:170:40 | dynamic call to method M4 | M4 | C8 | -| ViableCallable.cs:171:9:171:38 | dynamic call to method M4 | M4 | C8 | -| ViableCallable.cs:174:9:174:17 | dynamic access to member Prop1 | set_Prop1 | C10 | -| ViableCallable.cs:184:9:184:15 | dynamic access to element | set_Item | C2`1 | -| ViableCallable.cs:184:9:184:15 | dynamic access to element | set_Item | C6`2 | -| ViableCallable.cs:184:19:184:25 | dynamic access to element | get_Item | C2`1 | -| ViableCallable.cs:184:19:184:25 | dynamic access to element | get_Item | C6`2 | -| ViableCallable.cs:188:13:188:17 | dynamic call to operator + | + | Decimal | -| ViableCallable.cs:188:13:188:17 | dynamic call to operator + | + | Double | -| ViableCallable.cs:188:13:188:17 | dynamic call to operator + | + | Int32 | -| ViableCallable.cs:188:13:188:17 | dynamic call to operator + | + | Int64 | -| ViableCallable.cs:188:13:188:17 | dynamic call to operator + | + | Int128 | -| ViableCallable.cs:188:13:188:17 | dynamic call to operator + | + | NFloat | -| ViableCallable.cs:188:13:188:17 | dynamic call to operator + | + | Single | -| ViableCallable.cs:190:13:190:17 | dynamic call to operator - | - | Decimal | -| ViableCallable.cs:190:13:190:17 | dynamic call to operator - | - | Double | -| ViableCallable.cs:190:13:190:17 | dynamic call to operator - | - | Int32 | -| ViableCallable.cs:190:13:190:17 | dynamic call to operator - | - | Int64 | -| ViableCallable.cs:190:13:190:17 | dynamic call to operator - | - | Int128 | -| ViableCallable.cs:190:13:190:17 | dynamic call to operator - | - | NFloat | -| ViableCallable.cs:190:13:190:17 | dynamic call to operator - | - | Single | -| ViableCallable.cs:192:13:192:18 | dynamic call to operator + | + | Decimal | -| ViableCallable.cs:192:13:192:18 | dynamic call to operator + | + | Double | -| ViableCallable.cs:192:13:192:18 | dynamic call to operator + | + | Int32 | -| ViableCallable.cs:192:13:192:18 | dynamic call to operator + | + | Int64 | -| ViableCallable.cs:192:13:192:18 | dynamic call to operator + | + | Int128 | -| ViableCallable.cs:192:13:192:18 | dynamic call to operator + | + | NFloat | -| ViableCallable.cs:192:13:192:18 | dynamic call to operator + | + | Single | -| ViableCallable.cs:195:17:195:25 | object creation of type C10 | C10 | C10 | -| ViableCallable.cs:196:9:196:153 | call to method InvokeMember | + | C10 | -| ViableCallable.cs:199:9:199:143 | call to method InvokeMember | get_Prop3 | C10 | -| ViableCallable.cs:200:9:200:149 | call to method InvokeMember | set_Prop3 | C10 | -| ViableCallable.cs:203:9:203:146 | call to method InvokeMember | get_Item | C10 | -| ViableCallable.cs:204:9:204:152 | call to method InvokeMember | set_Item | C10 | -| ViableCallable.cs:208:9:208:147 | call to method InvokeMember | add_Event | C10 | -| ViableCallable.cs:209:9:209:150 | call to method InvokeMember | remove_Event | C10 | -| ViableCallable.cs:244:9:244:15 | call to method M | M`1 | C2`1 | -| ViableCallable.cs:244:9:244:15 | call to method M | M`1 | C3 | -| ViableCallable.cs:244:9:244:15 | call to method M | M`1 | C4`1 | -| ViableCallable.cs:244:9:244:15 | call to method M | M`1 | C5 | -| ViableCallable.cs:244:9:244:15 | call to method M | M`1 | C6`2 | -| ViableCallable.cs:244:9:244:15 | call to method M | M`1 | C7`1 | -| ViableCallable.cs:293:9:293:15 | call to method M | M`1 | C6`2 | -| ViableCallable.cs:293:9:293:15 | call to method M | M`1 | C7`1 | -| ViableCallable.cs:296:9:296:20 | call to method M | M`1 | C6`2 | -| ViableCallable.cs:296:9:296:20 | call to method M | M`1 | C7`1 | -| ViableCallable.cs:310:9:310:15 | call to method M | M`1 | C7`1 | -| ViableCallable.cs:313:9:313:20 | call to method M | M`1 | C7`1 | -| ViableCallable.cs:316:9:316:20 | call to method M | M`1 | C6`2 | -| ViableCallable.cs:366:9:366:14 | dynamic call to method M | M | C11 | -| ViableCallable.cs:368:9:368:18 | dynamic object creation of type C11 | C11 | C11 | -| ViableCallable.cs:391:9:391:13 | call to method M | M | C13 | -| ViableCallable.cs:424:9:424:18 | call to method M | M`1 | A1 | -| ViableCallable.cs:424:9:424:18 | call to method M | M`1 | A4 | -| ViableCallable.cs:424:9:424:18 | call to method M | M`1 | A5 | -| ViableCallable.cs:426:13:426:20 | object creation of type A3 | A3 | A3 | -| ViableCallable.cs:428:9:428:19 | call to method M | M`1 | A1 | -| ViableCallable.cs:430:13:430:20 | object creation of type A4 | A4 | A4 | -| ViableCallable.cs:432:9:432:21 | call to method M | M`1 | A4 | -| ViableCallable.cs:436:9:436:21 | call to method M | M`1 | A4 | -| ViableCallable.cs:436:9:436:21 | call to method M | M`1 | A5 | -| ViableCallable.cs:491:9:491:14 | call to method M1 | M1 | C18 | -| ViableCallable.cs:494:9:494:14 | call to method M2 | M2 | I2 | -| ViableCallable.cs:508:18:508:22 | call to operator + | + | C19 | -| ViableCallable.cs:511:26:511:30 | call to operator checked + | checked + | C19 | -| ViableCallable.cs:514:18:514:23 | call to operator explicit conversion | explicit conversion | C19 | -| ViableCallable.cs:517:26:517:31 | call to operator checked explicit conversion | checked explicit conversion | C19 | -| ViableCallable.cs:558:18:558:22 | call to operator + | + | C20 | -| ViableCallable.cs:561:26:561:30 | call to operator checked + | checked + | C20 | -| ViableCallable.cs:564:18:564:22 | call to operator - | - | C20 | -| ViableCallable.cs:567:26:567:30 | call to operator checked - | checked - | I3`1 | -| ViableCallable.cs:570:18:570:22 | call to operator * | * | I3`1 | -| ViableCallable.cs:573:26:573:30 | call to operator checked * | checked * | I3`1 | -| ViableCallable.cs:576:18:576:22 | call to operator / | / | C20 | -| ViableCallable.cs:576:18:576:22 | call to operator / | / | I3`1 | -| ViableCallable.cs:579:26:579:30 | call to operator checked / | checked / | C20 | -| ViableCallable.cs:579:26:579:30 | call to operator checked / | checked / | I3`1 | -| ViableCallable.cs:582:9:582:15 | call to method M11 | M11 | C20 | -| ViableCallable.cs:585:9:585:15 | call to method M12 | M12 | C20 | -| ViableCallable.cs:585:9:585:15 | call to method M12 | M12 | I3`1 | -| ViableCallable.cs:588:9:588:15 | call to method M13 | M13 | I3`1 | +| ViableCallable.cs:13:9:13:28 | call to method M | M`1 | C2`1 | +| ViableCallable.cs:13:9:13:28 | call to method M | M`1 | C3 | +| ViableCallable.cs:13:9:13:28 | call to method M | M`1 | C4`1 | +| ViableCallable.cs:13:9:13:28 | call to method M | M`1 | C5 | +| ViableCallable.cs:13:9:13:28 | call to method M | M`1 | C6`2 | +| ViableCallable.cs:13:9:13:28 | call to method M | M`1 | C7`1 | +| ViableCallable.cs:15:9:15:15 | access to property Prop | set_Prop | C2`1 | +| ViableCallable.cs:15:9:15:15 | access to property Prop | set_Prop | C3 | +| ViableCallable.cs:15:9:15:15 | access to property Prop | set_Prop | C4`1 | +| ViableCallable.cs:15:9:15:15 | access to property Prop | set_Prop | C5 | +| ViableCallable.cs:15:9:15:15 | access to property Prop | set_Prop | C6`2 | +| ViableCallable.cs:15:9:15:15 | access to property Prop | set_Prop | C7`1 | +| ViableCallable.cs:15:19:15:25 | access to property Prop | get_Prop | C2`1 | +| ViableCallable.cs:15:19:15:25 | access to property Prop | get_Prop | C3 | +| ViableCallable.cs:15:19:15:25 | access to property Prop | get_Prop | C4`1 | +| ViableCallable.cs:15:19:15:25 | access to property Prop | get_Prop | C5 | +| ViableCallable.cs:15:19:15:25 | access to property Prop | get_Prop | C6`2 | +| ViableCallable.cs:15:19:15:25 | access to property Prop | get_Prop | C7`1 | +| ViableCallable.cs:17:9:17:23 | access to indexer | set_Item | C2`1 | +| ViableCallable.cs:17:9:17:23 | access to indexer | set_Item | C3 | +| ViableCallable.cs:17:9:17:23 | access to indexer | set_Item | C4`1 | +| ViableCallable.cs:17:9:17:23 | access to indexer | set_Item | C5 | +| ViableCallable.cs:17:9:17:23 | access to indexer | set_Item | C6`2 | +| ViableCallable.cs:17:9:17:23 | access to indexer | set_Item | C7`1 | +| ViableCallable.cs:17:27:17:41 | access to indexer | get_Item | C2`1 | +| ViableCallable.cs:17:27:17:41 | access to indexer | get_Item | C3 | +| ViableCallable.cs:17:27:17:41 | access to indexer | get_Item | C4`1 | +| ViableCallable.cs:17:27:17:41 | access to indexer | get_Item | C5 | +| ViableCallable.cs:17:27:17:41 | access to indexer | get_Item | C6`2 | +| ViableCallable.cs:17:27:17:41 | access to indexer | get_Item | C7`1 | +| ViableCallable.cs:19:9:19:16 | access to event Event | add_Event | C2`1 | +| ViableCallable.cs:19:9:19:16 | access to event Event | add_Event | C3 | +| ViableCallable.cs:19:9:19:16 | access to event Event | add_Event | C4`1 | +| ViableCallable.cs:19:9:19:16 | access to event Event | add_Event | C5 | +| ViableCallable.cs:19:9:19:16 | access to event Event | add_Event | C6`2 | +| ViableCallable.cs:19:9:19:16 | access to event Event | add_Event | C7`1 | +| ViableCallable.cs:20:9:20:16 | access to event Event | remove_Event | C2`1 | +| ViableCallable.cs:20:9:20:16 | access to event Event | remove_Event | C3 | +| ViableCallable.cs:20:9:20:16 | access to event Event | remove_Event | C4`1 | +| ViableCallable.cs:20:9:20:16 | access to event Event | remove_Event | C5 | +| ViableCallable.cs:20:9:20:16 | access to event Event | remove_Event | C6`2 | +| ViableCallable.cs:20:9:20:16 | access to event Event | remove_Event | C7`1 | +| ViableCallable.cs:23:9:23:30 | call to method M | M`1 | C4`1 | +| ViableCallable.cs:23:9:23:30 | call to method M | M`1 | C6`2 | +| ViableCallable.cs:25:9:25:15 | access to property Prop | set_Prop | C4`1 | +| ViableCallable.cs:25:9:25:15 | access to property Prop | set_Prop | C6`2 | +| ViableCallable.cs:25:19:25:25 | access to property Prop | get_Prop | C4`1 | +| ViableCallable.cs:25:19:25:25 | access to property Prop | get_Prop | C6`2 | +| ViableCallable.cs:27:9:27:23 | access to indexer | set_Item | C4`1 | +| ViableCallable.cs:27:9:27:23 | access to indexer | set_Item | C6`2 | +| ViableCallable.cs:27:27:27:41 | access to indexer | get_Item | C4`1 | +| ViableCallable.cs:27:27:27:41 | access to indexer | get_Item | C6`2 | +| ViableCallable.cs:29:9:29:16 | access to event Event | add_Event | C4`1 | +| ViableCallable.cs:29:9:29:16 | access to event Event | add_Event | C6`2 | +| ViableCallable.cs:30:9:30:16 | access to event Event | remove_Event | C4`1 | +| ViableCallable.cs:30:9:30:16 | access to event Event | remove_Event | C6`2 | +| ViableCallable.cs:34:9:34:23 | call to method M | M`1 | C2`1 | +| ViableCallable.cs:34:9:34:23 | call to method M | M`1 | C6`2 | +| ViableCallable.cs:36:9:36:15 | access to property Prop | set_Prop | C2`1 | +| ViableCallable.cs:36:9:36:15 | access to property Prop | set_Prop | C6`2 | +| ViableCallable.cs:36:19:36:25 | access to property Prop | get_Prop | C2`1 | +| ViableCallable.cs:36:19:36:25 | access to property Prop | get_Prop | C6`2 | +| ViableCallable.cs:38:9:38:13 | access to indexer | set_Item | C2`1 | +| ViableCallable.cs:38:9:38:13 | access to indexer | set_Item | C6`2 | +| ViableCallable.cs:38:17:38:21 | access to indexer | get_Item | C2`1 | +| ViableCallable.cs:38:17:38:21 | access to indexer | get_Item | C6`2 | +| ViableCallable.cs:40:9:40:16 | access to event Event | add_Event | C2`1 | +| ViableCallable.cs:40:9:40:16 | access to event Event | add_Event | C6`2 | +| ViableCallable.cs:41:9:41:16 | access to event Event | remove_Event | C2`1 | +| ViableCallable.cs:41:9:41:16 | access to event Event | remove_Event | C6`2 | +| ViableCallable.cs:45:9:45:24 | call to method M | M`1 | C2`1 | +| ViableCallable.cs:45:9:45:24 | call to method M | M`1 | C3 | +| ViableCallable.cs:45:9:45:24 | call to method M | M`1 | C6`2 | +| ViableCallable.cs:47:9:47:15 | access to property Prop | set_Prop | C2`1 | +| ViableCallable.cs:47:9:47:15 | access to property Prop | set_Prop | C3 | +| ViableCallable.cs:47:9:47:15 | access to property Prop | set_Prop | C6`2 | +| ViableCallable.cs:47:19:47:25 | access to property Prop | get_Prop | C2`1 | +| ViableCallable.cs:47:19:47:25 | access to property Prop | get_Prop | C3 | +| ViableCallable.cs:47:19:47:25 | access to property Prop | get_Prop | C6`2 | +| ViableCallable.cs:49:9:49:14 | access to indexer | set_Item | C2`1 | +| ViableCallable.cs:49:9:49:14 | access to indexer | set_Item | C3 | +| ViableCallable.cs:49:9:49:14 | access to indexer | set_Item | C6`2 | +| ViableCallable.cs:49:18:49:23 | access to indexer | get_Item | C2`1 | +| ViableCallable.cs:49:18:49:23 | access to indexer | get_Item | C3 | +| ViableCallable.cs:49:18:49:23 | access to indexer | get_Item | C6`2 | +| ViableCallable.cs:51:9:51:16 | access to event Event | add_Event | C2`1 | +| ViableCallable.cs:51:9:51:16 | access to event Event | add_Event | C3 | +| ViableCallable.cs:51:9:51:16 | access to event Event | add_Event | C6`2 | +| ViableCallable.cs:52:9:52:16 | access to event Event | remove_Event | C2`1 | +| ViableCallable.cs:52:9:52:16 | access to event Event | remove_Event | C3 | +| ViableCallable.cs:52:9:52:16 | access to event Event | remove_Event | C6`2 | +| ViableCallable.cs:56:9:56:44 | call to method M | M`1 | C4`1 | +| ViableCallable.cs:56:9:56:44 | call to method M | M`1 | C6`2 | +| ViableCallable.cs:58:9:58:15 | access to property Prop | set_Prop | C4`1 | +| ViableCallable.cs:58:9:58:15 | access to property Prop | set_Prop | C6`2 | +| ViableCallable.cs:58:19:58:25 | access to property Prop | get_Prop | C4`1 | +| ViableCallable.cs:58:19:58:25 | access to property Prop | get_Prop | C6`2 | +| ViableCallable.cs:60:9:60:17 | access to indexer | set_Item | C4`1 | +| ViableCallable.cs:60:9:60:17 | access to indexer | set_Item | C6`2 | +| ViableCallable.cs:60:21:60:29 | access to indexer | get_Item | C4`1 | +| ViableCallable.cs:60:21:60:29 | access to indexer | get_Item | C6`2 | +| ViableCallable.cs:62:9:62:16 | access to event Event | add_Event | C4`1 | +| ViableCallable.cs:62:9:62:16 | access to event Event | add_Event | C6`2 | +| ViableCallable.cs:63:9:63:16 | access to event Event | remove_Event | C4`1 | +| ViableCallable.cs:63:9:63:16 | access to event Event | remove_Event | C6`2 | +| ViableCallable.cs:67:9:67:30 | call to method M | M`1 | C2`1 | +| ViableCallable.cs:67:9:67:30 | call to method M | M`1 | C5 | +| ViableCallable.cs:67:9:67:30 | call to method M | M`1 | C6`2 | +| ViableCallable.cs:69:9:69:15 | access to property Prop | set_Prop | C2`1 | +| ViableCallable.cs:69:9:69:15 | access to property Prop | set_Prop | C5 | +| ViableCallable.cs:69:9:69:15 | access to property Prop | set_Prop | C6`2 | +| ViableCallable.cs:69:19:69:25 | access to property Prop | get_Prop | C2`1 | +| ViableCallable.cs:69:19:69:25 | access to property Prop | get_Prop | C5 | +| ViableCallable.cs:69:19:69:25 | access to property Prop | get_Prop | C6`2 | +| ViableCallable.cs:71:9:71:17 | access to indexer | set_Item | C2`1 | +| ViableCallable.cs:71:9:71:17 | access to indexer | set_Item | C5 | +| ViableCallable.cs:71:9:71:17 | access to indexer | set_Item | C6`2 | +| ViableCallable.cs:71:21:71:29 | access to indexer | get_Item | C2`1 | +| ViableCallable.cs:71:21:71:29 | access to indexer | get_Item | C5 | +| ViableCallable.cs:71:21:71:29 | access to indexer | get_Item | C6`2 | +| ViableCallable.cs:73:9:73:16 | access to event Event | add_Event | C2`1 | +| ViableCallable.cs:73:9:73:16 | access to event Event | add_Event | C5 | +| ViableCallable.cs:73:9:73:16 | access to event Event | add_Event | C6`2 | +| ViableCallable.cs:74:9:74:16 | access to event Event | remove_Event | C2`1 | +| ViableCallable.cs:74:9:74:16 | access to event Event | remove_Event | C5 | +| ViableCallable.cs:74:9:74:16 | access to event Event | remove_Event | C6`2 | +| ViableCallable.cs:77:27:77:44 | object creation of type C6 | C6 | C6`2 | +| ViableCallable.cs:78:9:78:29 | call to method M | M`1 | C6`2 | +| ViableCallable.cs:80:9:80:15 | access to property Prop | set_Prop | C6`2 | +| ViableCallable.cs:80:19:80:25 | access to property Prop | get_Prop | C6`2 | +| ViableCallable.cs:82:9:82:17 | access to indexer | set_Item | C6`2 | +| ViableCallable.cs:82:21:82:29 | access to indexer | get_Item | C6`2 | +| ViableCallable.cs:84:9:84:16 | access to event Event | add_Event | C6`2 | +| ViableCallable.cs:85:9:85:16 | access to event Event | remove_Event | C6`2 | +| ViableCallable.cs:89:9:89:44 | dynamic call to method M | M | C8 | +| ViableCallable.cs:89:9:89:44 | dynamic call to method M | M | C9`1 | +| ViableCallable.cs:91:9:91:15 | dynamic access to member Prop1 | set_Prop1 | C8 | +| ViableCallable.cs:91:9:91:15 | dynamic access to member Prop1 | set_Prop1 | C9`1 | +| ViableCallable.cs:91:19:91:25 | dynamic access to member Prop1 | get_Prop1 | C8 | +| ViableCallable.cs:91:19:91:25 | dynamic access to member Prop1 | get_Prop1 | C9`1 | +| ViableCallable.cs:93:9:93:12 | dynamic access to element | set_Item | C8 | +| ViableCallable.cs:93:9:93:12 | dynamic access to element | set_Item | C9`1 | +| ViableCallable.cs:93:16:93:19 | dynamic access to element | get_Item | C8 | +| ViableCallable.cs:93:16:93:19 | dynamic access to element | get_Item | C9`1 | +| ViableCallable.cs:100:9:100:15 | dynamic call to method M | M | C5 | +| ViableCallable.cs:103:9:103:16 | access to property Prop2 | set_Prop2 | C5 | +| ViableCallable.cs:106:9:106:17 | access to event Event2 | add_Event2 | C5 | +| ViableCallable.cs:107:9:107:17 | access to event Event2 | remove_Event2 | C5 | +| ViableCallable.cs:121:9:121:25 | dynamic call to method M2 | M2`1 | C8 | +| ViableCallable.cs:125:9:125:24 | dynamic call to method M2 | M2`1 | C8 | +| ViableCallable.cs:132:13:132:30 | object creation of type C6 | C6 | C6`2 | +| ViableCallable.cs:133:9:133:28 | dynamic call to method M | M`1 | C6`2 | +| ViableCallable.cs:135:9:135:14 | dynamic access to member Prop | set_Prop | C6`2 | +| ViableCallable.cs:135:18:135:23 | dynamic access to member Prop | get_Prop | C6`2 | +| ViableCallable.cs:137:9:137:18 | dynamic access to element | set_Item | C6`2 | +| ViableCallable.cs:137:22:137:31 | dynamic access to element | get_Item | C6`2 | +| ViableCallable.cs:139:9:139:52 | ... += ... | add_Event | C6`2 | +| ViableCallable.cs:140:9:140:52 | ... -= ... | remove_Event | C6`2 | +| ViableCallable.cs:144:9:144:14 | dynamic call to method M3 | M3 | C8 | +| ViableCallable.cs:144:9:144:14 | dynamic call to method M3 | M3 | C9`1 | +| ViableCallable.cs:145:9:145:15 | dynamic call to method M3 | M3 | C8 | +| ViableCallable.cs:145:9:145:15 | dynamic call to method M3 | M3 | C9`1 | +| ViableCallable.cs:146:9:146:20 | dynamic call to method M3 | M3 | C8 | +| ViableCallable.cs:146:9:146:20 | dynamic call to method M3 | M3 | C9`1 | +| ViableCallable.cs:150:9:150:14 | dynamic call to method M5 | M5 | C8 | +| ViableCallable.cs:150:9:150:14 | dynamic call to method M5 | M5 | C9`1 | +| ViableCallable.cs:151:9:151:15 | dynamic call to method M5 | M5 | C8 | +| ViableCallable.cs:151:9:151:15 | dynamic call to method M5 | M5 | C9`1 | +| ViableCallable.cs:152:9:152:20 | dynamic call to method M5 | M5 | C8 | +| ViableCallable.cs:152:9:152:20 | dynamic call to method M5 | M5 | C9`1 | +| ViableCallable.cs:155:9:155:16 | dynamic call to method M3 | M3 | C8 | +| ViableCallable.cs:155:9:155:16 | dynamic call to method M3 | M3 | C9`1 | +| ViableCallable.cs:155:9:155:16 | dynamic call to method M3 | M3 | C10 | +| ViableCallable.cs:156:9:156:17 | dynamic call to method M3 | M3 | C8 | +| ViableCallable.cs:156:9:156:17 | dynamic call to method M3 | M3 | C9`1 | +| ViableCallable.cs:156:9:156:17 | dynamic call to method M3 | M3 | C10 | +| ViableCallable.cs:157:9:157:22 | dynamic call to method M3 | M3 | C8 | +| ViableCallable.cs:157:9:157:22 | dynamic call to method M3 | M3 | C9`1 | +| ViableCallable.cs:157:9:157:22 | dynamic call to method M3 | M3 | C10 | +| ViableCallable.cs:159:9:159:16 | dynamic call to method M5 | M5 | C8 | +| ViableCallable.cs:159:9:159:16 | dynamic call to method M5 | M5 | C9`1 | +| ViableCallable.cs:159:9:159:16 | dynamic call to method M5 | M5 | C10 | +| ViableCallable.cs:160:9:160:17 | dynamic call to method M5 | M5 | C8 | +| ViableCallable.cs:160:9:160:17 | dynamic call to method M5 | M5 | C9`1 | +| ViableCallable.cs:160:9:160:17 | dynamic call to method M5 | M5 | C10 | +| ViableCallable.cs:161:9:161:22 | dynamic call to method M5 | M5 | C8 | +| ViableCallable.cs:161:9:161:22 | dynamic call to method M5 | M5 | C9`1 | +| ViableCallable.cs:161:9:161:22 | dynamic call to method M5 | M5 | C10 | +| ViableCallable.cs:163:9:163:17 | dynamic access to member Prop1 | set_Prop1 | C8 | +| ViableCallable.cs:163:9:163:17 | dynamic access to member Prop1 | set_Prop1 | C9`1 | +| ViableCallable.cs:163:9:163:17 | dynamic access to member Prop1 | set_Prop1 | C10 | +| ViableCallable.cs:163:21:163:29 | dynamic access to member Prop1 | get_Prop1 | C8 | +| ViableCallable.cs:163:21:163:29 | dynamic access to member Prop1 | get_Prop1 | C9`1 | +| ViableCallable.cs:163:21:163:29 | dynamic access to member Prop1 | get_Prop1 | C10 | +| ViableCallable.cs:165:9:165:14 | dynamic access to element | set_Item | C2`1 | +| ViableCallable.cs:165:9:165:14 | dynamic access to element | set_Item | C3 | +| ViableCallable.cs:165:9:165:14 | dynamic access to element | set_Item | C6`2 | +| ViableCallable.cs:165:9:165:14 | dynamic access to element | set_Item | C7`1 | +| ViableCallable.cs:165:9:165:14 | dynamic access to element | set_Item | C8 | +| ViableCallable.cs:165:9:165:14 | dynamic access to element | set_Item | C9`1 | +| ViableCallable.cs:165:9:165:14 | dynamic access to element | set_Item | C10 | +| ViableCallable.cs:165:18:165:23 | dynamic access to element | get_Item | C2`1 | +| ViableCallable.cs:165:18:165:23 | dynamic access to element | get_Item | C3 | +| ViableCallable.cs:165:18:165:23 | dynamic access to element | get_Item | C6`2 | +| ViableCallable.cs:165:18:165:23 | dynamic access to element | get_Item | C7`1 | +| ViableCallable.cs:165:18:165:23 | dynamic access to element | get_Item | C8 | +| ViableCallable.cs:165:18:165:23 | dynamic access to element | get_Item | C9`1 | +| ViableCallable.cs:165:18:165:23 | dynamic access to element | get_Item | C10 | +| ViableCallable.cs:167:9:167:54 | ... += ... | add_Event | C2`1 | +| ViableCallable.cs:167:9:167:54 | ... += ... | add_Event | C3 | +| ViableCallable.cs:167:9:167:54 | ... += ... | add_Event | C5 | +| ViableCallable.cs:167:9:167:54 | ... += ... | add_Event | C6`2 | +| ViableCallable.cs:167:9:167:54 | ... += ... | add_Event | C7`1 | +| ViableCallable.cs:167:9:167:54 | ... += ... | add_Event | C8 | +| ViableCallable.cs:167:9:167:54 | ... += ... | add_Event | C9`1 | +| ViableCallable.cs:168:9:168:54 | ... -= ... | remove_Event | C2`1 | +| ViableCallable.cs:168:9:168:54 | ... -= ... | remove_Event | C3 | +| ViableCallable.cs:168:9:168:54 | ... -= ... | remove_Event | C5 | +| ViableCallable.cs:168:9:168:54 | ... -= ... | remove_Event | C6`2 | +| ViableCallable.cs:168:9:168:54 | ... -= ... | remove_Event | C7`1 | +| ViableCallable.cs:168:9:168:54 | ... -= ... | remove_Event | C8 | +| ViableCallable.cs:168:9:168:54 | ... -= ... | remove_Event | C9`1 | +| ViableCallable.cs:171:9:171:40 | dynamic call to method M4 | M4 | C8 | +| ViableCallable.cs:172:9:172:38 | dynamic call to method M4 | M4 | C8 | +| ViableCallable.cs:175:9:175:17 | dynamic access to member Prop1 | set_Prop1 | C10 | +| ViableCallable.cs:185:9:185:15 | dynamic access to element | set_Item | C2`1 | +| ViableCallable.cs:185:9:185:15 | dynamic access to element | set_Item | C6`2 | +| ViableCallable.cs:185:19:185:25 | dynamic access to element | get_Item | C2`1 | +| ViableCallable.cs:185:19:185:25 | dynamic access to element | get_Item | C6`2 | +| ViableCallable.cs:189:13:189:17 | dynamic call to operator + | + | Decimal | +| ViableCallable.cs:189:13:189:17 | dynamic call to operator + | + | Double | +| ViableCallable.cs:189:13:189:17 | dynamic call to operator + | + | Int32 | +| ViableCallable.cs:189:13:189:17 | dynamic call to operator + | + | Int64 | +| ViableCallable.cs:189:13:189:17 | dynamic call to operator + | + | Int128 | +| ViableCallable.cs:189:13:189:17 | dynamic call to operator + | + | NFloat | +| ViableCallable.cs:189:13:189:17 | dynamic call to operator + | + | Single | +| ViableCallable.cs:191:13:191:17 | dynamic call to operator - | - | Decimal | +| ViableCallable.cs:191:13:191:17 | dynamic call to operator - | - | Double | +| ViableCallable.cs:191:13:191:17 | dynamic call to operator - | - | Int32 | +| ViableCallable.cs:191:13:191:17 | dynamic call to operator - | - | Int64 | +| ViableCallable.cs:191:13:191:17 | dynamic call to operator - | - | Int128 | +| ViableCallable.cs:191:13:191:17 | dynamic call to operator - | - | NFloat | +| ViableCallable.cs:191:13:191:17 | dynamic call to operator - | - | Single | +| ViableCallable.cs:193:13:193:18 | dynamic call to operator + | + | Decimal | +| ViableCallable.cs:193:13:193:18 | dynamic call to operator + | + | Double | +| ViableCallable.cs:193:13:193:18 | dynamic call to operator + | + | Int32 | +| ViableCallable.cs:193:13:193:18 | dynamic call to operator + | + | Int64 | +| ViableCallable.cs:193:13:193:18 | dynamic call to operator + | + | Int128 | +| ViableCallable.cs:193:13:193:18 | dynamic call to operator + | + | NFloat | +| ViableCallable.cs:193:13:193:18 | dynamic call to operator + | + | Single | +| ViableCallable.cs:196:17:196:25 | object creation of type C10 | C10 | C10 | +| ViableCallable.cs:197:9:197:153 | call to method InvokeMember | + | C10 | +| ViableCallable.cs:200:9:200:143 | call to method InvokeMember | get_Prop3 | C10 | +| ViableCallable.cs:201:9:201:149 | call to method InvokeMember | set_Prop3 | C10 | +| ViableCallable.cs:204:9:204:146 | call to method InvokeMember | get_Item | C10 | +| ViableCallable.cs:205:9:205:152 | call to method InvokeMember | set_Item | C10 | +| ViableCallable.cs:209:9:209:147 | call to method InvokeMember | add_Event | C10 | +| ViableCallable.cs:210:9:210:150 | call to method InvokeMember | remove_Event | C10 | +| ViableCallable.cs:245:9:245:15 | call to method M | M`1 | C2`1 | +| ViableCallable.cs:245:9:245:15 | call to method M | M`1 | C3 | +| ViableCallable.cs:245:9:245:15 | call to method M | M`1 | C4`1 | +| ViableCallable.cs:245:9:245:15 | call to method M | M`1 | C5 | +| ViableCallable.cs:245:9:245:15 | call to method M | M`1 | C6`2 | +| ViableCallable.cs:245:9:245:15 | call to method M | M`1 | C7`1 | +| ViableCallable.cs:294:9:294:15 | call to method M | M`1 | C6`2 | +| ViableCallable.cs:294:9:294:15 | call to method M | M`1 | C7`1 | +| ViableCallable.cs:297:9:297:20 | call to method M | M`1 | C6`2 | +| ViableCallable.cs:297:9:297:20 | call to method M | M`1 | C7`1 | +| ViableCallable.cs:311:9:311:15 | call to method M | M`1 | C7`1 | +| ViableCallable.cs:314:9:314:20 | call to method M | M`1 | C7`1 | +| ViableCallable.cs:317:9:317:20 | call to method M | M`1 | C6`2 | +| ViableCallable.cs:367:9:367:14 | dynamic call to method M | M | C11 | +| ViableCallable.cs:369:9:369:18 | dynamic object creation of type C11 | C11 | C11 | +| ViableCallable.cs:392:9:392:13 | call to method M | M | C13 | +| ViableCallable.cs:425:9:425:18 | call to method M | M`1 | A1 | +| ViableCallable.cs:425:9:425:18 | call to method M | M`1 | A4 | +| ViableCallable.cs:425:9:425:18 | call to method M | M`1 | A5 | +| ViableCallable.cs:427:13:427:20 | object creation of type A3 | A3 | A3 | +| ViableCallable.cs:429:9:429:19 | call to method M | M`1 | A1 | +| ViableCallable.cs:431:13:431:20 | object creation of type A4 | A4 | A4 | +| ViableCallable.cs:433:9:433:21 | call to method M | M`1 | A4 | +| ViableCallable.cs:437:9:437:21 | call to method M | M`1 | A4 | +| ViableCallable.cs:437:9:437:21 | call to method M | M`1 | A5 | +| ViableCallable.cs:492:9:492:14 | call to method M1 | M1 | C18 | +| ViableCallable.cs:495:9:495:14 | call to method M2 | M2 | I2 | +| ViableCallable.cs:509:18:509:22 | call to operator + | + | C19 | +| ViableCallable.cs:512:26:512:30 | call to operator checked + | checked + | C19 | +| ViableCallable.cs:515:18:515:23 | call to operator explicit conversion | explicit conversion | C19 | +| ViableCallable.cs:518:26:518:31 | call to operator checked explicit conversion | checked explicit conversion | C19 | +| ViableCallable.cs:559:18:559:22 | call to operator + | + | C20 | +| ViableCallable.cs:562:26:562:30 | call to operator checked + | checked + | C20 | +| ViableCallable.cs:565:18:565:22 | call to operator - | - | C20 | +| ViableCallable.cs:568:26:568:30 | call to operator checked - | checked - | I3`1 | +| ViableCallable.cs:571:18:571:22 | call to operator * | * | I3`1 | +| ViableCallable.cs:574:26:574:30 | call to operator checked * | checked * | I3`1 | +| ViableCallable.cs:577:18:577:22 | call to operator / | / | C20 | +| ViableCallable.cs:577:18:577:22 | call to operator / | / | I3`1 | +| ViableCallable.cs:580:26:580:30 | call to operator checked / | checked / | C20 | +| ViableCallable.cs:580:26:580:30 | call to operator checked / | checked / | I3`1 | +| ViableCallable.cs:583:9:583:15 | call to method M11 | M11 | C20 | +| ViableCallable.cs:586:9:586:15 | call to method M12 | M12 | C20 | +| ViableCallable.cs:586:9:586:15 | call to method M12 | M12 | I3`1 | +| ViableCallable.cs:589:9:589:15 | call to method M13 | M13 | I3`1 | From d924b1a5361b6c60bbc226772ce1b238dc89aea7 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 23 Jan 2025 13:36:09 +0100 Subject: [PATCH 2/8] C#: Update test expected output. --- .../ql/test/library-tests/dispatch/CallContext.expected | 2 ++ csharp/ql/test/library-tests/dispatch/CallGraph.expected | 8 ++++++++ .../library-tests/dispatch/GetADynamicTarget.expected | 8 ++++++++ 3 files changed, 18 insertions(+) diff --git a/csharp/ql/test/library-tests/dispatch/CallContext.expected b/csharp/ql/test/library-tests/dispatch/CallContext.expected index f3824ab52e17..2ef2223ebd7d 100644 --- a/csharp/ql/test/library-tests/dispatch/CallContext.expected +++ b/csharp/ql/test/library-tests/dispatch/CallContext.expected @@ -27,3 +27,5 @@ mayBenefitFromCallContext | ViableCallable.cs:580:26:580:30 | call to operator checked / | | ViableCallable.cs:586:9:586:15 | call to method M12 | | ViableCallable.cs:619:9:619:13 | call to method M | +| ViableCallable.cs:683:9:683:16 | call to method M | +| ViableCallable.cs:687:9:687:16 | call to method M | diff --git a/csharp/ql/test/library-tests/dispatch/CallGraph.expected b/csharp/ql/test/library-tests/dispatch/CallGraph.expected index abe1b5a39ac4..6ee5e1a8dd8c 100644 --- a/csharp/ql/test/library-tests/dispatch/CallGraph.expected +++ b/csharp/ql/test/library-tests/dispatch/CallGraph.expected @@ -262,3 +262,11 @@ | ViableCallable.cs:610:17:610:23 | Run1`1 | ViableCallable.cs:602:21:602:21 | M | | ViableCallable.cs:616:17:616:23 | Run2`1 | ViableCallable.cs:602:21:602:21 | M | | ViableCallable.cs:616:17:616:23 | Run2`1 | ViableCallable.cs:607:21:607:21 | M | +| ViableCallable.cs:657:17:657:20 | Run1 | ViableCallable.cs:635:21:635:21 | M | +| ViableCallable.cs:657:17:657:20 | Run1 | ViableCallable.cs:637:21:637:21 | M | +| ViableCallable.cs:668:17:668:20 | Run2 | ViableCallable.cs:651:21:651:21 | M | +| ViableCallable.cs:668:17:668:20 | Run2 | ViableCallable.cs:654:21:654:21 | M | +| ViableCallable.cs:679:17:679:20 | Run3 | ViableCallable.cs:635:21:635:21 | M | +| ViableCallable.cs:679:17:679:20 | Run3 | ViableCallable.cs:637:21:637:21 | M | +| ViableCallable.cs:679:17:679:20 | Run3 | ViableCallable.cs:646:21:646:21 | M | +| ViableCallable.cs:679:17:679:20 | Run3 | ViableCallable.cs:648:21:648:21 | M | diff --git a/csharp/ql/test/library-tests/dispatch/GetADynamicTarget.expected b/csharp/ql/test/library-tests/dispatch/GetADynamicTarget.expected index d51378904d20..3075f48595d2 100644 --- a/csharp/ql/test/library-tests/dispatch/GetADynamicTarget.expected +++ b/csharp/ql/test/library-tests/dispatch/GetADynamicTarget.expected @@ -508,3 +508,11 @@ | ViableCallable.cs:613:9:613:13 | call to method M | C21+A1.M() | | ViableCallable.cs:619:9:619:13 | call to method M | C21+A1.M() | | ViableCallable.cs:619:9:619:13 | call to method M | C21+A2.M() | +| ViableCallable.cs:661:9:661:16 | call to method M | C22+TestOverloadResolution1.M(Int32[]) | +| ViableCallable.cs:665:9:665:16 | call to method M | C22+TestOverloadResolution1.M(List) | +| ViableCallable.cs:672:9:672:16 | call to method M | C22+TestOverloadResolution2.M(ReadOnlySpan) | +| ViableCallable.cs:676:9:676:16 | call to method M | C22+TestOverloadResolution2.M(IEnumerable) | +| ViableCallable.cs:683:9:683:16 | call to method M | C22+TestOverloadResolution1.M(Int32[]) | +| ViableCallable.cs:683:9:683:16 | call to method M | C22+TestOverloadResolution2.M(Int32[]) | +| ViableCallable.cs:687:9:687:16 | call to method M | C22+TestOverloadResolution1.M(List) | +| ViableCallable.cs:687:9:687:16 | call to method M | C22+TestOverloadResolution2.M(List) | From 5f7c28d1b9b1fbc9966dc8a8b6485cf303390858 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 23 Jan 2025 13:53:26 +0100 Subject: [PATCH 3/8] C#: Add a using statement to the attributes test file and update test expected output. --- .../attributes/AttributeArguments.expected | 348 ++++---- .../attributes/AttributeComments.expected | 8 +- .../attributes/AttributeElements.expected | 90 +-- .../ExperimentalAttributes.expected | 4 +- .../attributes/PrintAst.expected | 750 +++++++++--------- .../library-tests/attributes/attributes.cs | 1 + 6 files changed, 601 insertions(+), 600 deletions(-) diff --git a/csharp/ql/test/library-tests/attributes/AttributeArguments.expected b/csharp/ql/test/library-tests/attributes/AttributeArguments.expected index 0aed2d13fbe4..e6e2154ea5d1 100644 --- a/csharp/ql/test/library-tests/attributes/AttributeArguments.expected +++ b/csharp/ql/test/library-tests/attributes/AttributeArguments.expected @@ -23,93 +23,93 @@ arguments | Assembly1.dll:0:0:0:0 | [return: Custom(...)] | 3 | Assembly1.dll:0:0:0:0 | (...) ... | | Assembly1.dll:0:0:0:0 | [return: Custom(...)] | 4 | Assembly1.dll:0:0:0:0 | array creation of type Int32[] | | Assembly1.dll:0:0:0:0 | [return: Custom(...)] | 5 | Assembly1.dll:0:0:0:0 | array creation of type Object[] | -| attributes.cs:11:12:11:24 | [assembly: AssemblyTitle(...)] | 0 | attributes.cs:11:26:11:45 | "C# attributes test" | -| attributes.cs:12:12:12:30 | [assembly: AssemblyDescription(...)] | 0 | attributes.cs:12:32:12:56 | "A test of C# attributes" | -| attributes.cs:13:12:13:32 | [assembly: AssemblyConfiguration(...)] | 0 | attributes.cs:13:34:13:35 | "" | -| attributes.cs:14:12:14:26 | [assembly: AssemblyCompany(...)] | 0 | attributes.cs:14:28:14:39 | "Semmle Plc" | -| attributes.cs:15:12:15:26 | [assembly: AssemblyProduct(...)] | 0 | attributes.cs:15:28:15:34 | "Odasa" | -| attributes.cs:16:12:16:28 | [assembly: AssemblyCopyright(...)] | 0 | attributes.cs:16:30:16:54 | "Copyright \u00a9 Semmle 2018" | -| attributes.cs:17:12:17:28 | [assembly: AssemblyTrademark(...)] | 0 | attributes.cs:17:30:17:31 | "" | -| attributes.cs:18:12:18:26 | [assembly: AssemblyCulture(...)] | 0 | attributes.cs:18:28:18:29 | "" | -| attributes.cs:23:12:23:21 | [assembly: ComVisible(...)] | 0 | attributes.cs:23:23:23:27 | false | -| attributes.cs:26:12:26:15 | [assembly: Guid(...)] | 0 | attributes.cs:26:17:26:54 | "2f70fdd6-14aa-4850-b053-d547adb1f476" | -| attributes.cs:38:12:38:26 | [assembly: AssemblyVersion(...)] | 0 | attributes.cs:38:28:38:36 | "1.0.0.0" | -| attributes.cs:39:12:39:30 | [assembly: AssemblyFileVersion(...)] | 0 | attributes.cs:39:32:39:40 | "1.0.0.0" | -| attributes.cs:41:12:41:15 | [assembly: Args(...)] | 0 | attributes.cs:41:17:41:17 | 0 | -| attributes.cs:41:12:41:15 | [assembly: Args(...)] | 1 | attributes.cs:41:20:41:46 | array creation of type Object[] | -| attributes.cs:41:12:41:15 | [assembly: Args(...)] | 2 | attributes.cs:41:49:41:69 | typeof(...) | -| attributes.cs:41:12:41:15 | [assembly: Args(...)] | 3 | attributes.cs:41:72:41:76 | (...) ... | -| attributes.cs:41:12:41:15 | [assembly: Args(...)] | 4 | attributes.cs:41:79:41:82 | null | -| attributes.cs:41:12:41:15 | [assembly: Args(...)] | 5 | attributes.cs:41:92:41:122 | array creation of type Object[] | -| attributes.cs:42:10:42:13 | [module: Args(...)] | 0 | attributes.cs:42:15:42:15 | 0 | -| attributes.cs:42:10:42:13 | [module: Args(...)] | 1 | attributes.cs:42:18:42:44 | array creation of type Object[] | -| attributes.cs:42:10:42:13 | [module: Args(...)] | 2 | attributes.cs:42:47:42:67 | typeof(...) | -| attributes.cs:42:10:42:13 | [module: Args(...)] | 3 | attributes.cs:42:70:42:74 | (...) ... | -| attributes.cs:42:10:42:13 | [module: Args(...)] | 4 | attributes.cs:42:77:42:80 | null | -| attributes.cs:42:10:42:13 | [module: Args(...)] | 5 | attributes.cs:42:90:42:120 | array creation of type Object[] | -| attributes.cs:44:2:44:22 | [AttributeUsage(...)] | 0 | attributes.cs:44:24:44:50 | access to constant All | -| attributes.cs:47:6:47:16 | [Conditional(...)] | 0 | attributes.cs:47:18:47:25 | "DEBUG2" | -| attributes.cs:55:6:55:16 | [My(...)] | 0 | attributes.cs:55:18:55:22 | false | -| attributes.cs:58:6:58:16 | [My(...)] | 0 | attributes.cs:58:18:58:21 | true | -| attributes.cs:58:6:58:16 | [My(...)] | 1 | attributes.cs:58:28:58:29 | "" | -| attributes.cs:58:6:58:16 | [My(...)] | 2 | attributes.cs:58:36:58:36 | 0 | -| attributes.cs:59:6:59:8 | [My2(...)] | 0 | attributes.cs:59:28:59:32 | false | -| attributes.cs:59:6:59:8 | [My2(...)] | 1 | attributes.cs:59:13:59:16 | true | -| attributes.cs:59:6:59:8 | [My2(...)] | 2 | attributes.cs:59:6:59:8 | 12 | -| attributes.cs:59:6:59:8 | [My2(...)] | 3 | attributes.cs:59:22:59:22 | 1 | -| attributes.cs:59:6:59:8 | [My2(...)] | 4 | attributes.cs:59:39:59:40 | 42 | -| attributes.cs:78:2:78:5 | [Args(...)] | 0 | attributes.cs:78:7:78:8 | 42 | -| attributes.cs:78:2:78:5 | [Args(...)] | 1 | attributes.cs:78:11:78:14 | null | -| attributes.cs:78:2:78:5 | [Args(...)] | 2 | attributes.cs:78:17:78:25 | typeof(...) | -| attributes.cs:78:2:78:5 | [Args(...)] | 3 | attributes.cs:78:28:78:30 | access to constant A | -| attributes.cs:78:2:78:5 | [Args(...)] | 4 | attributes.cs:78:33:78:53 | array creation of type Int32[] | -| attributes.cs:78:2:78:5 | [Args(...)] | 5 | attributes.cs:78:63:78:93 | array creation of type Object[] | -| attributes.cs:81:6:81:9 | [Args(...)] | 0 | attributes.cs:81:11:81:16 | ... + ... | -| attributes.cs:81:6:81:9 | [Args(...)] | 1 | attributes.cs:81:19:81:39 | array creation of type Int32[] | -| attributes.cs:81:6:81:9 | [Args(...)] | 2 | attributes.cs:81:42:81:45 | null | -| attributes.cs:81:6:81:9 | [Args(...)] | 3 | attributes.cs:81:48:81:52 | (...) ... | -| attributes.cs:81:6:81:9 | [Args(...)] | 4 | attributes.cs:81:55:81:58 | null | -| attributes.cs:81:6:81:9 | [Args(...)] | 5 | attributes.cs:81:68:81:98 | array creation of type Object[] | -| attributes.cs:82:14:82:17 | [return: Args(...)] | 0 | attributes.cs:82:19:82:24 | ... + ... | -| attributes.cs:82:14:82:17 | [return: Args(...)] | 1 | attributes.cs:82:27:82:47 | array creation of type Int32[] | -| attributes.cs:82:14:82:17 | [return: Args(...)] | 2 | attributes.cs:82:50:82:53 | null | -| attributes.cs:82:14:82:17 | [return: Args(...)] | 3 | attributes.cs:82:56:82:60 | (...) ... | -| attributes.cs:82:14:82:17 | [return: Args(...)] | 4 | attributes.cs:82:63:82:66 | null | -| attributes.cs:82:14:82:17 | [return: Args(...)] | 5 | attributes.cs:82:76:82:106 | array creation of type Object[] | -| attributes.cs:97:2:97:13 | [My3(...)] | 0 | attributes.cs:97:15:97:15 | 1 | -| attributes.cs:98:10:98:21 | [return: My3(...)] | 0 | attributes.cs:98:23:98:23 | 2 | -| attributes.cs:101:10:101:21 | [return: My3(...)] | 0 | attributes.cs:101:23:101:23 | 3 | -| attributes.cs:102:8:102:19 | [My3(...)] | 0 | attributes.cs:102:21:102:21 | 4 | -| attributes.cs:107:6:107:17 | [My3(...)] | 0 | attributes.cs:107:19:107:19 | 5 | -| attributes.cs:108:14:108:25 | [return: My3(...)] | 0 | attributes.cs:108:27:108:27 | 6 | -| attributes.cs:111:6:111:17 | [My3(...)] | 0 | attributes.cs:111:19:111:20 | 15 | -| attributes.cs:114:10:114:21 | [My3(...)] | 0 | attributes.cs:114:23:114:23 | 7 | -| attributes.cs:115:18:115:29 | [return: My3(...)] | 0 | attributes.cs:115:31:115:31 | 8 | -| attributes.cs:118:18:118:29 | [My3(...)] | 0 | attributes.cs:118:31:118:31 | 9 | -| attributes.cs:119:17:119:28 | [My3(...)] | 0 | attributes.cs:119:30:119:31 | 10 | -| attributes.cs:124:6:124:17 | [My3(...)] | 0 | attributes.cs:124:19:124:20 | 16 | -| attributes.cs:127:18:127:29 | [My3(...)] | 0 | attributes.cs:127:31:127:32 | 11 | -| attributes.cs:128:18:128:29 | [return: My3(...)] | 0 | attributes.cs:128:31:128:32 | 12 | -| attributes.cs:131:10:131:21 | [My3(...)] | 0 | attributes.cs:131:23:131:24 | 13 | -| attributes.cs:132:17:132:28 | [My3(...)] | 0 | attributes.cs:132:30:132:31 | 14 | -| attributes.cs:144:6:144:11 | [Params(...)] | 0 | attributes.cs:144:13:144:15 | "a" | -| attributes.cs:144:6:144:11 | [Params(...)] | 1 | attributes.cs:144:18:144:20 | "b" | -| attributes.cs:144:6:144:11 | [Params(...)] | 2 | attributes.cs:144:23:144:23 | 1 | -| attributes.cs:144:6:144:11 | [Params(...)] | 3 | attributes.cs:144:26:144:26 | 2 | -| attributes.cs:144:6:144:11 | [Params(...)] | 4 | attributes.cs:144:29:144:29 | 3 | -| attributes.cs:147:6:147:11 | [Params(...)] | 0 | attributes.cs:147:17:147:19 | "a" | -| attributes.cs:147:6:147:11 | [Params(...)] | 1 | attributes.cs:147:26:147:28 | "b" | -| attributes.cs:147:6:147:11 | [Params(...)] | 2 | attributes.cs:147:31:147:31 | 1 | -| attributes.cs:147:6:147:11 | [Params(...)] | 3 | attributes.cs:147:34:147:34 | 2 | -| attributes.cs:147:6:147:11 | [Params(...)] | 4 | attributes.cs:147:37:147:37 | 3 | -| attributes.cs:150:6:150:11 | [Params(...)] | 0 | attributes.cs:150:35:150:37 | "a" | -| attributes.cs:150:6:150:11 | [Params(...)] | 1 | attributes.cs:150:26:150:28 | "b" | -| attributes.cs:150:6:150:11 | [Params(...)] | 2 | attributes.cs:150:19:150:19 | 1 | -| attributes.cs:153:6:153:11 | [Params(...)] | 0 | attributes.cs:153:45:153:47 | "a" | -| attributes.cs:153:6:153:11 | [Params(...)] | 1 | attributes.cs:153:36:153:38 | "b" | -| attributes.cs:153:6:153:11 | [Params(...)] | 2 | attributes.cs:153:19:153:29 | array creation of type Int32[] | -| attributes.cs:157:2:157:13 | [Experimental(...)] | 0 | attributes.cs:157:15:157:37 | "MyExperimentalClassId" | -| attributes.cs:160:6:160:17 | [Experimental(...)] | 0 | attributes.cs:160:19:160:42 | "MyExperimentalMethodId" | +| attributes.cs:12:12:12:24 | [assembly: AssemblyTitle(...)] | 0 | attributes.cs:12:26:12:45 | "C# attributes test" | +| attributes.cs:13:12:13:30 | [assembly: AssemblyDescription(...)] | 0 | attributes.cs:13:32:13:56 | "A test of C# attributes" | +| attributes.cs:14:12:14:32 | [assembly: AssemblyConfiguration(...)] | 0 | attributes.cs:14:34:14:35 | "" | +| attributes.cs:15:12:15:26 | [assembly: AssemblyCompany(...)] | 0 | attributes.cs:15:28:15:39 | "Semmle Plc" | +| attributes.cs:16:12:16:26 | [assembly: AssemblyProduct(...)] | 0 | attributes.cs:16:28:16:34 | "Odasa" | +| attributes.cs:17:12:17:28 | [assembly: AssemblyCopyright(...)] | 0 | attributes.cs:17:30:17:54 | "Copyright \u00a9 Semmle 2018" | +| attributes.cs:18:12:18:28 | [assembly: AssemblyTrademark(...)] | 0 | attributes.cs:18:30:18:31 | "" | +| attributes.cs:19:12:19:26 | [assembly: AssemblyCulture(...)] | 0 | attributes.cs:19:28:19:29 | "" | +| attributes.cs:24:12:24:21 | [assembly: ComVisible(...)] | 0 | attributes.cs:24:23:24:27 | false | +| attributes.cs:27:12:27:15 | [assembly: Guid(...)] | 0 | attributes.cs:27:17:27:54 | "2f70fdd6-14aa-4850-b053-d547adb1f476" | +| attributes.cs:39:12:39:26 | [assembly: AssemblyVersion(...)] | 0 | attributes.cs:39:28:39:36 | "1.0.0.0" | +| attributes.cs:40:12:40:30 | [assembly: AssemblyFileVersion(...)] | 0 | attributes.cs:40:32:40:40 | "1.0.0.0" | +| attributes.cs:42:12:42:15 | [assembly: Args(...)] | 0 | attributes.cs:42:17:42:17 | 0 | +| attributes.cs:42:12:42:15 | [assembly: Args(...)] | 1 | attributes.cs:42:20:42:46 | array creation of type Object[] | +| attributes.cs:42:12:42:15 | [assembly: Args(...)] | 2 | attributes.cs:42:49:42:69 | typeof(...) | +| attributes.cs:42:12:42:15 | [assembly: Args(...)] | 3 | attributes.cs:42:72:42:76 | (...) ... | +| attributes.cs:42:12:42:15 | [assembly: Args(...)] | 4 | attributes.cs:42:79:42:82 | null | +| attributes.cs:42:12:42:15 | [assembly: Args(...)] | 5 | attributes.cs:42:92:42:122 | array creation of type Object[] | +| attributes.cs:43:10:43:13 | [module: Args(...)] | 0 | attributes.cs:43:15:43:15 | 0 | +| attributes.cs:43:10:43:13 | [module: Args(...)] | 1 | attributes.cs:43:18:43:44 | array creation of type Object[] | +| attributes.cs:43:10:43:13 | [module: Args(...)] | 2 | attributes.cs:43:47:43:67 | typeof(...) | +| attributes.cs:43:10:43:13 | [module: Args(...)] | 3 | attributes.cs:43:70:43:74 | (...) ... | +| attributes.cs:43:10:43:13 | [module: Args(...)] | 4 | attributes.cs:43:77:43:80 | null | +| attributes.cs:43:10:43:13 | [module: Args(...)] | 5 | attributes.cs:43:90:43:120 | array creation of type Object[] | +| attributes.cs:45:2:45:22 | [AttributeUsage(...)] | 0 | attributes.cs:45:24:45:50 | access to constant All | +| attributes.cs:48:6:48:16 | [Conditional(...)] | 0 | attributes.cs:48:18:48:25 | "DEBUG2" | +| attributes.cs:56:6:56:16 | [My(...)] | 0 | attributes.cs:56:18:56:22 | false | +| attributes.cs:59:6:59:16 | [My(...)] | 0 | attributes.cs:59:18:59:21 | true | +| attributes.cs:59:6:59:16 | [My(...)] | 1 | attributes.cs:59:28:59:29 | "" | +| attributes.cs:59:6:59:16 | [My(...)] | 2 | attributes.cs:59:36:59:36 | 0 | +| attributes.cs:60:6:60:8 | [My2(...)] | 0 | attributes.cs:60:28:60:32 | false | +| attributes.cs:60:6:60:8 | [My2(...)] | 1 | attributes.cs:60:13:60:16 | true | +| attributes.cs:60:6:60:8 | [My2(...)] | 2 | attributes.cs:60:6:60:8 | 12 | +| attributes.cs:60:6:60:8 | [My2(...)] | 3 | attributes.cs:60:22:60:22 | 1 | +| attributes.cs:60:6:60:8 | [My2(...)] | 4 | attributes.cs:60:39:60:40 | 42 | +| attributes.cs:79:2:79:5 | [Args(...)] | 0 | attributes.cs:79:7:79:8 | 42 | +| attributes.cs:79:2:79:5 | [Args(...)] | 1 | attributes.cs:79:11:79:14 | null | +| attributes.cs:79:2:79:5 | [Args(...)] | 2 | attributes.cs:79:17:79:25 | typeof(...) | +| attributes.cs:79:2:79:5 | [Args(...)] | 3 | attributes.cs:79:28:79:30 | access to constant A | +| attributes.cs:79:2:79:5 | [Args(...)] | 4 | attributes.cs:79:33:79:53 | array creation of type Int32[] | +| attributes.cs:79:2:79:5 | [Args(...)] | 5 | attributes.cs:79:63:79:93 | array creation of type Object[] | +| attributes.cs:82:6:82:9 | [Args(...)] | 0 | attributes.cs:82:11:82:16 | ... + ... | +| attributes.cs:82:6:82:9 | [Args(...)] | 1 | attributes.cs:82:19:82:39 | array creation of type Int32[] | +| attributes.cs:82:6:82:9 | [Args(...)] | 2 | attributes.cs:82:42:82:45 | null | +| attributes.cs:82:6:82:9 | [Args(...)] | 3 | attributes.cs:82:48:82:52 | (...) ... | +| attributes.cs:82:6:82:9 | [Args(...)] | 4 | attributes.cs:82:55:82:58 | null | +| attributes.cs:82:6:82:9 | [Args(...)] | 5 | attributes.cs:82:68:82:98 | array creation of type Object[] | +| attributes.cs:83:14:83:17 | [return: Args(...)] | 0 | attributes.cs:83:19:83:24 | ... + ... | +| attributes.cs:83:14:83:17 | [return: Args(...)] | 1 | attributes.cs:83:27:83:47 | array creation of type Int32[] | +| attributes.cs:83:14:83:17 | [return: Args(...)] | 2 | attributes.cs:83:50:83:53 | null | +| attributes.cs:83:14:83:17 | [return: Args(...)] | 3 | attributes.cs:83:56:83:60 | (...) ... | +| attributes.cs:83:14:83:17 | [return: Args(...)] | 4 | attributes.cs:83:63:83:66 | null | +| attributes.cs:83:14:83:17 | [return: Args(...)] | 5 | attributes.cs:83:76:83:106 | array creation of type Object[] | +| attributes.cs:98:2:98:13 | [My3(...)] | 0 | attributes.cs:98:15:98:15 | 1 | +| attributes.cs:99:10:99:21 | [return: My3(...)] | 0 | attributes.cs:99:23:99:23 | 2 | +| attributes.cs:102:10:102:21 | [return: My3(...)] | 0 | attributes.cs:102:23:102:23 | 3 | +| attributes.cs:103:8:103:19 | [My3(...)] | 0 | attributes.cs:103:21:103:21 | 4 | +| attributes.cs:108:6:108:17 | [My3(...)] | 0 | attributes.cs:108:19:108:19 | 5 | +| attributes.cs:109:14:109:25 | [return: My3(...)] | 0 | attributes.cs:109:27:109:27 | 6 | +| attributes.cs:112:6:112:17 | [My3(...)] | 0 | attributes.cs:112:19:112:20 | 15 | +| attributes.cs:115:10:115:21 | [My3(...)] | 0 | attributes.cs:115:23:115:23 | 7 | +| attributes.cs:116:18:116:29 | [return: My3(...)] | 0 | attributes.cs:116:31:116:31 | 8 | +| attributes.cs:119:18:119:29 | [My3(...)] | 0 | attributes.cs:119:31:119:31 | 9 | +| attributes.cs:120:17:120:28 | [My3(...)] | 0 | attributes.cs:120:30:120:31 | 10 | +| attributes.cs:125:6:125:17 | [My3(...)] | 0 | attributes.cs:125:19:125:20 | 16 | +| attributes.cs:128:18:128:29 | [My3(...)] | 0 | attributes.cs:128:31:128:32 | 11 | +| attributes.cs:129:18:129:29 | [return: My3(...)] | 0 | attributes.cs:129:31:129:32 | 12 | +| attributes.cs:132:10:132:21 | [My3(...)] | 0 | attributes.cs:132:23:132:24 | 13 | +| attributes.cs:133:17:133:28 | [My3(...)] | 0 | attributes.cs:133:30:133:31 | 14 | +| attributes.cs:145:6:145:11 | [Params(...)] | 0 | attributes.cs:145:13:145:15 | "a" | +| attributes.cs:145:6:145:11 | [Params(...)] | 1 | attributes.cs:145:18:145:20 | "b" | +| attributes.cs:145:6:145:11 | [Params(...)] | 2 | attributes.cs:145:23:145:23 | 1 | +| attributes.cs:145:6:145:11 | [Params(...)] | 3 | attributes.cs:145:26:145:26 | 2 | +| attributes.cs:145:6:145:11 | [Params(...)] | 4 | attributes.cs:145:29:145:29 | 3 | +| attributes.cs:148:6:148:11 | [Params(...)] | 0 | attributes.cs:148:17:148:19 | "a" | +| attributes.cs:148:6:148:11 | [Params(...)] | 1 | attributes.cs:148:26:148:28 | "b" | +| attributes.cs:148:6:148:11 | [Params(...)] | 2 | attributes.cs:148:31:148:31 | 1 | +| attributes.cs:148:6:148:11 | [Params(...)] | 3 | attributes.cs:148:34:148:34 | 2 | +| attributes.cs:148:6:148:11 | [Params(...)] | 4 | attributes.cs:148:37:148:37 | 3 | +| attributes.cs:151:6:151:11 | [Params(...)] | 0 | attributes.cs:151:35:151:37 | "a" | +| attributes.cs:151:6:151:11 | [Params(...)] | 1 | attributes.cs:151:26:151:28 | "b" | +| attributes.cs:151:6:151:11 | [Params(...)] | 2 | attributes.cs:151:19:151:19 | 1 | +| attributes.cs:154:6:154:11 | [Params(...)] | 0 | attributes.cs:154:45:154:47 | "a" | +| attributes.cs:154:6:154:11 | [Params(...)] | 1 | attributes.cs:154:36:154:38 | "b" | +| attributes.cs:154:6:154:11 | [Params(...)] | 2 | attributes.cs:154:19:154:29 | array creation of type Int32[] | +| attributes.cs:158:2:158:13 | [Experimental(...)] | 0 | attributes.cs:158:15:158:37 | "MyExperimentalClassId" | +| attributes.cs:161:6:161:17 | [Experimental(...)] | 0 | attributes.cs:161:19:161:42 | "MyExperimentalMethodId" | constructorArguments | Assembly1.dll:0:0:0:0 | [Custom(...)] | 0 | Assembly1.dll:0:0:0:0 | 1 | | Assembly1.dll:0:0:0:0 | [Custom(...)] | 0 | Assembly1.dll:0:0:0:0 | 3 | @@ -131,95 +131,95 @@ constructorArguments | Assembly1.dll:0:0:0:0 | [return: Custom(...)] | 2 | Assembly1.dll:0:0:0:0 | null | | Assembly1.dll:0:0:0:0 | [return: Custom(...)] | 3 | Assembly1.dll:0:0:0:0 | (...) ... | | Assembly1.dll:0:0:0:0 | [return: Custom(...)] | 4 | Assembly1.dll:0:0:0:0 | array creation of type Int32[] | -| attributes.cs:11:12:11:24 | [assembly: AssemblyTitle(...)] | 0 | attributes.cs:11:26:11:45 | "C# attributes test" | -| attributes.cs:12:12:12:30 | [assembly: AssemblyDescription(...)] | 0 | attributes.cs:12:32:12:56 | "A test of C# attributes" | -| attributes.cs:13:12:13:32 | [assembly: AssemblyConfiguration(...)] | 0 | attributes.cs:13:34:13:35 | "" | -| attributes.cs:14:12:14:26 | [assembly: AssemblyCompany(...)] | 0 | attributes.cs:14:28:14:39 | "Semmle Plc" | -| attributes.cs:15:12:15:26 | [assembly: AssemblyProduct(...)] | 0 | attributes.cs:15:28:15:34 | "Odasa" | -| attributes.cs:16:12:16:28 | [assembly: AssemblyCopyright(...)] | 0 | attributes.cs:16:30:16:54 | "Copyright \u00a9 Semmle 2018" | -| attributes.cs:17:12:17:28 | [assembly: AssemblyTrademark(...)] | 0 | attributes.cs:17:30:17:31 | "" | -| attributes.cs:18:12:18:26 | [assembly: AssemblyCulture(...)] | 0 | attributes.cs:18:28:18:29 | "" | -| attributes.cs:23:12:23:21 | [assembly: ComVisible(...)] | 0 | attributes.cs:23:23:23:27 | false | -| attributes.cs:26:12:26:15 | [assembly: Guid(...)] | 0 | attributes.cs:26:17:26:54 | "2f70fdd6-14aa-4850-b053-d547adb1f476" | -| attributes.cs:38:12:38:26 | [assembly: AssemblyVersion(...)] | 0 | attributes.cs:38:28:38:36 | "1.0.0.0" | -| attributes.cs:39:12:39:30 | [assembly: AssemblyFileVersion(...)] | 0 | attributes.cs:39:32:39:40 | "1.0.0.0" | -| attributes.cs:41:12:41:15 | [assembly: Args(...)] | 0 | attributes.cs:41:17:41:17 | 0 | -| attributes.cs:41:12:41:15 | [assembly: Args(...)] | 1 | attributes.cs:41:20:41:46 | array creation of type Object[] | -| attributes.cs:41:12:41:15 | [assembly: Args(...)] | 2 | attributes.cs:41:49:41:69 | typeof(...) | -| attributes.cs:41:12:41:15 | [assembly: Args(...)] | 3 | attributes.cs:41:72:41:76 | (...) ... | -| attributes.cs:41:12:41:15 | [assembly: Args(...)] | 4 | attributes.cs:41:79:41:82 | null | -| attributes.cs:42:10:42:13 | [module: Args(...)] | 0 | attributes.cs:42:15:42:15 | 0 | -| attributes.cs:42:10:42:13 | [module: Args(...)] | 1 | attributes.cs:42:18:42:44 | array creation of type Object[] | -| attributes.cs:42:10:42:13 | [module: Args(...)] | 2 | attributes.cs:42:47:42:67 | typeof(...) | -| attributes.cs:42:10:42:13 | [module: Args(...)] | 3 | attributes.cs:42:70:42:74 | (...) ... | -| attributes.cs:42:10:42:13 | [module: Args(...)] | 4 | attributes.cs:42:77:42:80 | null | -| attributes.cs:44:2:44:22 | [AttributeUsage(...)] | 0 | attributes.cs:44:24:44:50 | access to constant All | -| attributes.cs:47:6:47:16 | [Conditional(...)] | 0 | attributes.cs:47:18:47:25 | "DEBUG2" | -| attributes.cs:55:6:55:16 | [My(...)] | 0 | attributes.cs:55:18:55:22 | false | -| attributes.cs:58:6:58:16 | [My(...)] | 0 | attributes.cs:58:18:58:21 | true | -| attributes.cs:59:6:59:8 | [My2(...)] | 0 | attributes.cs:59:28:59:32 | false | -| attributes.cs:59:6:59:8 | [My2(...)] | 1 | attributes.cs:59:13:59:16 | true | -| attributes.cs:59:6:59:8 | [My2(...)] | 2 | attributes.cs:59:6:59:8 | 12 | -| attributes.cs:59:6:59:8 | [My2(...)] | 3 | attributes.cs:59:22:59:22 | 1 | -| attributes.cs:78:2:78:5 | [Args(...)] | 0 | attributes.cs:78:7:78:8 | 42 | -| attributes.cs:78:2:78:5 | [Args(...)] | 1 | attributes.cs:78:11:78:14 | null | -| attributes.cs:78:2:78:5 | [Args(...)] | 2 | attributes.cs:78:17:78:25 | typeof(...) | -| attributes.cs:78:2:78:5 | [Args(...)] | 3 | attributes.cs:78:28:78:30 | access to constant A | -| attributes.cs:78:2:78:5 | [Args(...)] | 4 | attributes.cs:78:33:78:53 | array creation of type Int32[] | -| attributes.cs:81:6:81:9 | [Args(...)] | 0 | attributes.cs:81:11:81:16 | ... + ... | -| attributes.cs:81:6:81:9 | [Args(...)] | 1 | attributes.cs:81:19:81:39 | array creation of type Int32[] | -| attributes.cs:81:6:81:9 | [Args(...)] | 2 | attributes.cs:81:42:81:45 | null | -| attributes.cs:81:6:81:9 | [Args(...)] | 3 | attributes.cs:81:48:81:52 | (...) ... | -| attributes.cs:81:6:81:9 | [Args(...)] | 4 | attributes.cs:81:55:81:58 | null | -| attributes.cs:82:14:82:17 | [return: Args(...)] | 0 | attributes.cs:82:19:82:24 | ... + ... | -| attributes.cs:82:14:82:17 | [return: Args(...)] | 1 | attributes.cs:82:27:82:47 | array creation of type Int32[] | -| attributes.cs:82:14:82:17 | [return: Args(...)] | 2 | attributes.cs:82:50:82:53 | null | -| attributes.cs:82:14:82:17 | [return: Args(...)] | 3 | attributes.cs:82:56:82:60 | (...) ... | -| attributes.cs:82:14:82:17 | [return: Args(...)] | 4 | attributes.cs:82:63:82:66 | null | -| attributes.cs:97:2:97:13 | [My3(...)] | 0 | attributes.cs:97:15:97:15 | 1 | -| attributes.cs:98:10:98:21 | [return: My3(...)] | 0 | attributes.cs:98:23:98:23 | 2 | -| attributes.cs:101:10:101:21 | [return: My3(...)] | 0 | attributes.cs:101:23:101:23 | 3 | -| attributes.cs:102:8:102:19 | [My3(...)] | 0 | attributes.cs:102:21:102:21 | 4 | -| attributes.cs:107:6:107:17 | [My3(...)] | 0 | attributes.cs:107:19:107:19 | 5 | -| attributes.cs:108:14:108:25 | [return: My3(...)] | 0 | attributes.cs:108:27:108:27 | 6 | -| attributes.cs:111:6:111:17 | [My3(...)] | 0 | attributes.cs:111:19:111:20 | 15 | -| attributes.cs:114:10:114:21 | [My3(...)] | 0 | attributes.cs:114:23:114:23 | 7 | -| attributes.cs:115:18:115:29 | [return: My3(...)] | 0 | attributes.cs:115:31:115:31 | 8 | -| attributes.cs:118:18:118:29 | [My3(...)] | 0 | attributes.cs:118:31:118:31 | 9 | -| attributes.cs:119:17:119:28 | [My3(...)] | 0 | attributes.cs:119:30:119:31 | 10 | -| attributes.cs:124:6:124:17 | [My3(...)] | 0 | attributes.cs:124:19:124:20 | 16 | -| attributes.cs:127:18:127:29 | [My3(...)] | 0 | attributes.cs:127:31:127:32 | 11 | -| attributes.cs:128:18:128:29 | [return: My3(...)] | 0 | attributes.cs:128:31:128:32 | 12 | -| attributes.cs:131:10:131:21 | [My3(...)] | 0 | attributes.cs:131:23:131:24 | 13 | -| attributes.cs:132:17:132:28 | [My3(...)] | 0 | attributes.cs:132:30:132:31 | 14 | -| attributes.cs:144:6:144:11 | [Params(...)] | 0 | attributes.cs:144:13:144:15 | "a" | -| attributes.cs:144:6:144:11 | [Params(...)] | 1 | attributes.cs:144:18:144:20 | "b" | -| attributes.cs:144:6:144:11 | [Params(...)] | 2 | attributes.cs:144:23:144:23 | 1 | -| attributes.cs:144:6:144:11 | [Params(...)] | 3 | attributes.cs:144:26:144:26 | 2 | -| attributes.cs:144:6:144:11 | [Params(...)] | 4 | attributes.cs:144:29:144:29 | 3 | -| attributes.cs:147:6:147:11 | [Params(...)] | 0 | attributes.cs:147:17:147:19 | "a" | -| attributes.cs:147:6:147:11 | [Params(...)] | 1 | attributes.cs:147:26:147:28 | "b" | -| attributes.cs:147:6:147:11 | [Params(...)] | 2 | attributes.cs:147:31:147:31 | 1 | -| attributes.cs:147:6:147:11 | [Params(...)] | 3 | attributes.cs:147:34:147:34 | 2 | -| attributes.cs:147:6:147:11 | [Params(...)] | 4 | attributes.cs:147:37:147:37 | 3 | -| attributes.cs:150:6:150:11 | [Params(...)] | 0 | attributes.cs:150:35:150:37 | "a" | -| attributes.cs:150:6:150:11 | [Params(...)] | 1 | attributes.cs:150:26:150:28 | "b" | -| attributes.cs:150:6:150:11 | [Params(...)] | 2 | attributes.cs:150:19:150:19 | 1 | -| attributes.cs:153:6:153:11 | [Params(...)] | 0 | attributes.cs:153:45:153:47 | "a" | -| attributes.cs:153:6:153:11 | [Params(...)] | 1 | attributes.cs:153:36:153:38 | "b" | -| attributes.cs:153:6:153:11 | [Params(...)] | 2 | attributes.cs:153:19:153:29 | array creation of type Int32[] | -| attributes.cs:157:2:157:13 | [Experimental(...)] | 0 | attributes.cs:157:15:157:37 | "MyExperimentalClassId" | -| attributes.cs:160:6:160:17 | [Experimental(...)] | 0 | attributes.cs:160:19:160:42 | "MyExperimentalMethodId" | +| attributes.cs:12:12:12:24 | [assembly: AssemblyTitle(...)] | 0 | attributes.cs:12:26:12:45 | "C# attributes test" | +| attributes.cs:13:12:13:30 | [assembly: AssemblyDescription(...)] | 0 | attributes.cs:13:32:13:56 | "A test of C# attributes" | +| attributes.cs:14:12:14:32 | [assembly: AssemblyConfiguration(...)] | 0 | attributes.cs:14:34:14:35 | "" | +| attributes.cs:15:12:15:26 | [assembly: AssemblyCompany(...)] | 0 | attributes.cs:15:28:15:39 | "Semmle Plc" | +| attributes.cs:16:12:16:26 | [assembly: AssemblyProduct(...)] | 0 | attributes.cs:16:28:16:34 | "Odasa" | +| attributes.cs:17:12:17:28 | [assembly: AssemblyCopyright(...)] | 0 | attributes.cs:17:30:17:54 | "Copyright \u00a9 Semmle 2018" | +| attributes.cs:18:12:18:28 | [assembly: AssemblyTrademark(...)] | 0 | attributes.cs:18:30:18:31 | "" | +| attributes.cs:19:12:19:26 | [assembly: AssemblyCulture(...)] | 0 | attributes.cs:19:28:19:29 | "" | +| attributes.cs:24:12:24:21 | [assembly: ComVisible(...)] | 0 | attributes.cs:24:23:24:27 | false | +| attributes.cs:27:12:27:15 | [assembly: Guid(...)] | 0 | attributes.cs:27:17:27:54 | "2f70fdd6-14aa-4850-b053-d547adb1f476" | +| attributes.cs:39:12:39:26 | [assembly: AssemblyVersion(...)] | 0 | attributes.cs:39:28:39:36 | "1.0.0.0" | +| attributes.cs:40:12:40:30 | [assembly: AssemblyFileVersion(...)] | 0 | attributes.cs:40:32:40:40 | "1.0.0.0" | +| attributes.cs:42:12:42:15 | [assembly: Args(...)] | 0 | attributes.cs:42:17:42:17 | 0 | +| attributes.cs:42:12:42:15 | [assembly: Args(...)] | 1 | attributes.cs:42:20:42:46 | array creation of type Object[] | +| attributes.cs:42:12:42:15 | [assembly: Args(...)] | 2 | attributes.cs:42:49:42:69 | typeof(...) | +| attributes.cs:42:12:42:15 | [assembly: Args(...)] | 3 | attributes.cs:42:72:42:76 | (...) ... | +| attributes.cs:42:12:42:15 | [assembly: Args(...)] | 4 | attributes.cs:42:79:42:82 | null | +| attributes.cs:43:10:43:13 | [module: Args(...)] | 0 | attributes.cs:43:15:43:15 | 0 | +| attributes.cs:43:10:43:13 | [module: Args(...)] | 1 | attributes.cs:43:18:43:44 | array creation of type Object[] | +| attributes.cs:43:10:43:13 | [module: Args(...)] | 2 | attributes.cs:43:47:43:67 | typeof(...) | +| attributes.cs:43:10:43:13 | [module: Args(...)] | 3 | attributes.cs:43:70:43:74 | (...) ... | +| attributes.cs:43:10:43:13 | [module: Args(...)] | 4 | attributes.cs:43:77:43:80 | null | +| attributes.cs:45:2:45:22 | [AttributeUsage(...)] | 0 | attributes.cs:45:24:45:50 | access to constant All | +| attributes.cs:48:6:48:16 | [Conditional(...)] | 0 | attributes.cs:48:18:48:25 | "DEBUG2" | +| attributes.cs:56:6:56:16 | [My(...)] | 0 | attributes.cs:56:18:56:22 | false | +| attributes.cs:59:6:59:16 | [My(...)] | 0 | attributes.cs:59:18:59:21 | true | +| attributes.cs:60:6:60:8 | [My2(...)] | 0 | attributes.cs:60:28:60:32 | false | +| attributes.cs:60:6:60:8 | [My2(...)] | 1 | attributes.cs:60:13:60:16 | true | +| attributes.cs:60:6:60:8 | [My2(...)] | 2 | attributes.cs:60:6:60:8 | 12 | +| attributes.cs:60:6:60:8 | [My2(...)] | 3 | attributes.cs:60:22:60:22 | 1 | +| attributes.cs:79:2:79:5 | [Args(...)] | 0 | attributes.cs:79:7:79:8 | 42 | +| attributes.cs:79:2:79:5 | [Args(...)] | 1 | attributes.cs:79:11:79:14 | null | +| attributes.cs:79:2:79:5 | [Args(...)] | 2 | attributes.cs:79:17:79:25 | typeof(...) | +| attributes.cs:79:2:79:5 | [Args(...)] | 3 | attributes.cs:79:28:79:30 | access to constant A | +| attributes.cs:79:2:79:5 | [Args(...)] | 4 | attributes.cs:79:33:79:53 | array creation of type Int32[] | +| attributes.cs:82:6:82:9 | [Args(...)] | 0 | attributes.cs:82:11:82:16 | ... + ... | +| attributes.cs:82:6:82:9 | [Args(...)] | 1 | attributes.cs:82:19:82:39 | array creation of type Int32[] | +| attributes.cs:82:6:82:9 | [Args(...)] | 2 | attributes.cs:82:42:82:45 | null | +| attributes.cs:82:6:82:9 | [Args(...)] | 3 | attributes.cs:82:48:82:52 | (...) ... | +| attributes.cs:82:6:82:9 | [Args(...)] | 4 | attributes.cs:82:55:82:58 | null | +| attributes.cs:83:14:83:17 | [return: Args(...)] | 0 | attributes.cs:83:19:83:24 | ... + ... | +| attributes.cs:83:14:83:17 | [return: Args(...)] | 1 | attributes.cs:83:27:83:47 | array creation of type Int32[] | +| attributes.cs:83:14:83:17 | [return: Args(...)] | 2 | attributes.cs:83:50:83:53 | null | +| attributes.cs:83:14:83:17 | [return: Args(...)] | 3 | attributes.cs:83:56:83:60 | (...) ... | +| attributes.cs:83:14:83:17 | [return: Args(...)] | 4 | attributes.cs:83:63:83:66 | null | +| attributes.cs:98:2:98:13 | [My3(...)] | 0 | attributes.cs:98:15:98:15 | 1 | +| attributes.cs:99:10:99:21 | [return: My3(...)] | 0 | attributes.cs:99:23:99:23 | 2 | +| attributes.cs:102:10:102:21 | [return: My3(...)] | 0 | attributes.cs:102:23:102:23 | 3 | +| attributes.cs:103:8:103:19 | [My3(...)] | 0 | attributes.cs:103:21:103:21 | 4 | +| attributes.cs:108:6:108:17 | [My3(...)] | 0 | attributes.cs:108:19:108:19 | 5 | +| attributes.cs:109:14:109:25 | [return: My3(...)] | 0 | attributes.cs:109:27:109:27 | 6 | +| attributes.cs:112:6:112:17 | [My3(...)] | 0 | attributes.cs:112:19:112:20 | 15 | +| attributes.cs:115:10:115:21 | [My3(...)] | 0 | attributes.cs:115:23:115:23 | 7 | +| attributes.cs:116:18:116:29 | [return: My3(...)] | 0 | attributes.cs:116:31:116:31 | 8 | +| attributes.cs:119:18:119:29 | [My3(...)] | 0 | attributes.cs:119:31:119:31 | 9 | +| attributes.cs:120:17:120:28 | [My3(...)] | 0 | attributes.cs:120:30:120:31 | 10 | +| attributes.cs:125:6:125:17 | [My3(...)] | 0 | attributes.cs:125:19:125:20 | 16 | +| attributes.cs:128:18:128:29 | [My3(...)] | 0 | attributes.cs:128:31:128:32 | 11 | +| attributes.cs:129:18:129:29 | [return: My3(...)] | 0 | attributes.cs:129:31:129:32 | 12 | +| attributes.cs:132:10:132:21 | [My3(...)] | 0 | attributes.cs:132:23:132:24 | 13 | +| attributes.cs:133:17:133:28 | [My3(...)] | 0 | attributes.cs:133:30:133:31 | 14 | +| attributes.cs:145:6:145:11 | [Params(...)] | 0 | attributes.cs:145:13:145:15 | "a" | +| attributes.cs:145:6:145:11 | [Params(...)] | 1 | attributes.cs:145:18:145:20 | "b" | +| attributes.cs:145:6:145:11 | [Params(...)] | 2 | attributes.cs:145:23:145:23 | 1 | +| attributes.cs:145:6:145:11 | [Params(...)] | 3 | attributes.cs:145:26:145:26 | 2 | +| attributes.cs:145:6:145:11 | [Params(...)] | 4 | attributes.cs:145:29:145:29 | 3 | +| attributes.cs:148:6:148:11 | [Params(...)] | 0 | attributes.cs:148:17:148:19 | "a" | +| attributes.cs:148:6:148:11 | [Params(...)] | 1 | attributes.cs:148:26:148:28 | "b" | +| attributes.cs:148:6:148:11 | [Params(...)] | 2 | attributes.cs:148:31:148:31 | 1 | +| attributes.cs:148:6:148:11 | [Params(...)] | 3 | attributes.cs:148:34:148:34 | 2 | +| attributes.cs:148:6:148:11 | [Params(...)] | 4 | attributes.cs:148:37:148:37 | 3 | +| attributes.cs:151:6:151:11 | [Params(...)] | 0 | attributes.cs:151:35:151:37 | "a" | +| attributes.cs:151:6:151:11 | [Params(...)] | 1 | attributes.cs:151:26:151:28 | "b" | +| attributes.cs:151:6:151:11 | [Params(...)] | 2 | attributes.cs:151:19:151:19 | 1 | +| attributes.cs:154:6:154:11 | [Params(...)] | 0 | attributes.cs:154:45:154:47 | "a" | +| attributes.cs:154:6:154:11 | [Params(...)] | 1 | attributes.cs:154:36:154:38 | "b" | +| attributes.cs:154:6:154:11 | [Params(...)] | 2 | attributes.cs:154:19:154:29 | array creation of type Int32[] | +| attributes.cs:158:2:158:13 | [Experimental(...)] | 0 | attributes.cs:158:15:158:37 | "MyExperimentalClassId" | +| attributes.cs:161:6:161:17 | [Experimental(...)] | 0 | attributes.cs:161:19:161:42 | "MyExperimentalMethodId" | namedArguments | Assembly1.dll:0:0:0:0 | [Custom(...)] | Prop2 | Assembly1.dll:0:0:0:0 | array creation of type Object[] | | Assembly1.dll:0:0:0:0 | [Custom(...)] | Prop2 | Assembly1.dll:0:0:0:0 | array creation of type Object[] | | Assembly1.dll:0:0:0:0 | [Custom(...)] | Prop2 | Assembly1.dll:0:0:0:0 | array creation of type Object[] | | Assembly1.dll:0:0:0:0 | [return: Custom(...)] | Prop2 | Assembly1.dll:0:0:0:0 | array creation of type Object[] | -| attributes.cs:41:12:41:15 | [assembly: Args(...)] | Prop | attributes.cs:41:92:41:122 | array creation of type Object[] | -| attributes.cs:42:10:42:13 | [module: Args(...)] | Prop | attributes.cs:42:90:42:120 | array creation of type Object[] | -| attributes.cs:58:6:58:16 | [My(...)] | x | attributes.cs:58:36:58:36 | 0 | -| attributes.cs:58:6:58:16 | [My(...)] | y | attributes.cs:58:28:58:29 | "" | -| attributes.cs:59:6:59:8 | [My2(...)] | X | attributes.cs:59:39:59:40 | 42 | -| attributes.cs:78:2:78:5 | [Args(...)] | Prop | attributes.cs:78:63:78:93 | array creation of type Object[] | -| attributes.cs:81:6:81:9 | [Args(...)] | Prop | attributes.cs:81:68:81:98 | array creation of type Object[] | -| attributes.cs:82:14:82:17 | [return: Args(...)] | Prop | attributes.cs:82:76:82:106 | array creation of type Object[] | +| attributes.cs:42:12:42:15 | [assembly: Args(...)] | Prop | attributes.cs:42:92:42:122 | array creation of type Object[] | +| attributes.cs:43:10:43:13 | [module: Args(...)] | Prop | attributes.cs:43:90:43:120 | array creation of type Object[] | +| attributes.cs:59:6:59:16 | [My(...)] | x | attributes.cs:59:36:59:36 | 0 | +| attributes.cs:59:6:59:16 | [My(...)] | y | attributes.cs:59:28:59:29 | "" | +| attributes.cs:60:6:60:8 | [My2(...)] | X | attributes.cs:60:39:60:40 | 42 | +| attributes.cs:79:2:79:5 | [Args(...)] | Prop | attributes.cs:79:63:79:93 | array creation of type Object[] | +| attributes.cs:82:6:82:9 | [Args(...)] | Prop | attributes.cs:82:68:82:98 | array creation of type Object[] | +| attributes.cs:83:14:83:17 | [return: Args(...)] | Prop | attributes.cs:83:76:83:106 | array creation of type Object[] | diff --git a/csharp/ql/test/library-tests/attributes/AttributeComments.expected b/csharp/ql/test/library-tests/attributes/AttributeComments.expected index e1c01d720fd6..5ca4004a96d8 100644 --- a/csharp/ql/test/library-tests/attributes/AttributeComments.expected +++ b/csharp/ql/test/library-tests/attributes/AttributeComments.expected @@ -1,4 +1,4 @@ -| attributes.cs:11:12:11:24 | [assembly: AssemblyTitle(...)] | attributes.cs:8:1:10:31 | // ... | -| attributes.cs:23:12:23:21 | [assembly: ComVisible(...)] | attributes.cs:20:1:22:58 | // ... | -| attributes.cs:26:12:26:15 | [assembly: Guid(...)] | attributes.cs:25:1:25:84 | // ... | -| attributes.cs:38:12:38:26 | [assembly: AssemblyVersion(...)] | attributes.cs:28:1:37:39 | // ... | +| attributes.cs:12:12:12:24 | [assembly: AssemblyTitle(...)] | attributes.cs:9:1:11:31 | // ... | +| attributes.cs:24:12:24:21 | [assembly: ComVisible(...)] | attributes.cs:21:1:23:58 | // ... | +| attributes.cs:27:12:27:15 | [assembly: Guid(...)] | attributes.cs:26:1:26:84 | // ... | +| attributes.cs:39:12:39:26 | [assembly: AssemblyVersion(...)] | attributes.cs:29:1:38:39 | // ... | diff --git a/csharp/ql/test/library-tests/attributes/AttributeElements.expected b/csharp/ql/test/library-tests/attributes/AttributeElements.expected index 7b6804927ef1..e03401c2331a 100644 --- a/csharp/ql/test/library-tests/attributes/AttributeElements.expected +++ b/csharp/ql/test/library-tests/attributes/AttributeElements.expected @@ -9,48 +9,48 @@ | Assembly1.dll:0:0:0:0 | Assembly1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Assembly1.dll:0:0:0:0 | [Debuggable(...)] | System.Diagnostics.DebuggableAttribute | | Assembly1.dll:0:0:0:0 | Assembly1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Assembly1.dll:0:0:0:0 | [RuntimeCompatibility(...)] | System.Runtime.CompilerServices.RuntimeCompatibilityAttribute | | Assembly1.dll:0:0:0:0 | Assembly1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | Assembly1.dll:0:0:0:0 | [TargetFramework(...)] | System.Runtime.Versioning.TargetFrameworkAttribute | -| attributes.cs:45:7:45:9 | Foo | attributes.cs:44:2:44:22 | [AttributeUsage(...)] | System.AttributeUsageAttribute | -| attributes.cs:48:17:48:19 | foo | attributes.cs:47:6:47:16 | [Conditional(...)] | System.Diagnostics.ConditionalAttribute | -| attributes.cs:53:23:53:23 | x | attributes.cs:53:14:53:16 | [Foo(...)] | Foo | -| attributes.cs:56:10:56:11 | M1 | attributes.cs:55:6:55:16 | [My(...)] | MyAttribute | -| attributes.cs:60:10:60:11 | M2 | attributes.cs:58:6:58:16 | [My(...)] | MyAttribute | -| attributes.cs:60:10:60:11 | M2 | attributes.cs:59:6:59:8 | [My2(...)] | My2Attribute | -| attributes.cs:79:14:79:14 | X | attributes.cs:78:2:78:5 | [Args(...)] | ArgsAttribute | -| attributes.cs:83:9:83:18 | SomeMethod | attributes.cs:81:6:81:9 | [Args(...)] | ArgsAttribute | -| attributes.cs:83:9:83:18 | SomeMethod | attributes.cs:82:14:82:17 | [return: Args(...)] | ArgsAttribute | -| attributes.cs:99:14:99:24 | Invoke | attributes.cs:98:10:98:21 | [return: My3(...)] | My3Attribute | -| attributes.cs:99:14:99:24 | My1Delegate | attributes.cs:97:2:97:13 | [My3(...)] | My3Attribute | -| attributes.cs:103:17:103:27 | Invoke | attributes.cs:101:10:101:21 | [return: My3(...)] | My3Attribute | -| attributes.cs:103:17:103:27 | My2Delegate | attributes.cs:102:8:102:19 | [My3(...)] | My3Attribute | -| attributes.cs:109:32:109:32 | + | attributes.cs:107:6:107:17 | [My3(...)] | My3Attribute | -| attributes.cs:109:32:109:32 | + | attributes.cs:108:14:108:25 | [return: My3(...)] | My3Attribute | -| attributes.cs:112:16:112:19 | Item | attributes.cs:111:6:111:17 | [My3(...)] | My3Attribute | -| attributes.cs:116:9:116:11 | get_Item | attributes.cs:114:10:114:21 | [My3(...)] | My3Attribute | -| attributes.cs:116:9:116:11 | get_Item | attributes.cs:115:18:115:29 | [return: My3(...)] | My3Attribute | -| attributes.cs:120:9:120:11 | set_Item | attributes.cs:118:18:118:29 | [My3(...)] | My3Attribute | -| attributes.cs:120:9:120:11 | value | attributes.cs:119:17:119:28 | [My3(...)] | My3Attribute | -| attributes.cs:125:16:125:20 | Prop1 | attributes.cs:124:6:124:17 | [My3(...)] | My3Attribute | -| attributes.cs:129:9:129:11 | get_Prop1 | attributes.cs:127:18:127:29 | [My3(...)] | My3Attribute | -| attributes.cs:129:9:129:11 | get_Prop1 | attributes.cs:128:18:128:29 | [return: My3(...)] | My3Attribute | -| attributes.cs:133:9:133:11 | set_Prop1 | attributes.cs:131:10:131:21 | [My3(...)] | My3Attribute | -| attributes.cs:133:9:133:11 | value | attributes.cs:132:17:132:28 | [My3(...)] | My3Attribute | -| attributes.cs:145:17:145:18 | M1 | attributes.cs:144:6:144:11 | [Params(...)] | Class1+ParamsAttribute | -| attributes.cs:148:17:148:18 | M2 | attributes.cs:147:6:147:11 | [Params(...)] | Class1+ParamsAttribute | -| attributes.cs:151:17:151:18 | M3 | attributes.cs:150:6:150:11 | [Params(...)] | Class1+ParamsAttribute | -| attributes.cs:154:17:154:18 | M4 | attributes.cs:153:6:153:11 | [Params(...)] | Class1+ParamsAttribute | -| attributes.cs:158:14:158:32 | MyExperimentalClass | attributes.cs:157:2:157:13 | [Experimental(...)] | System.Diagnostics.CodeAnalysis.ExperimentalAttribute | -| attributes.cs:161:17:161:36 | MyExperimentalMethod | attributes.cs:160:6:160:17 | [Experimental(...)] | System.Diagnostics.CodeAnalysis.ExperimentalAttribute | -| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:11:12:11:24 | [assembly: AssemblyTitle(...)] | System.Reflection.AssemblyTitleAttribute | -| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:12:12:12:30 | [assembly: AssemblyDescription(...)] | System.Reflection.AssemblyDescriptionAttribute | -| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:13:12:13:32 | [assembly: AssemblyConfiguration(...)] | System.Reflection.AssemblyConfigurationAttribute | -| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:14:12:14:26 | [assembly: AssemblyCompany(...)] | System.Reflection.AssemblyCompanyAttribute | -| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:15:12:15:26 | [assembly: AssemblyProduct(...)] | System.Reflection.AssemblyProductAttribute | -| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:16:12:16:28 | [assembly: AssemblyCopyright(...)] | System.Reflection.AssemblyCopyrightAttribute | -| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:17:12:17:28 | [assembly: AssemblyTrademark(...)] | System.Reflection.AssemblyTrademarkAttribute | -| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:18:12:18:26 | [assembly: AssemblyCulture(...)] | System.Reflection.AssemblyCultureAttribute | -| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:23:12:23:21 | [assembly: ComVisible(...)] | System.Runtime.InteropServices.ComVisibleAttribute | -| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:26:12:26:15 | [assembly: Guid(...)] | System.Runtime.InteropServices.GuidAttribute | -| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:38:12:38:26 | [assembly: AssemblyVersion(...)] | System.Reflection.AssemblyVersionAttribute | -| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:39:12:39:30 | [assembly: AssemblyFileVersion(...)] | System.Reflection.AssemblyFileVersionAttribute | -| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:41:12:41:15 | [assembly: Args(...)] | ArgsAttribute | -| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:42:10:42:13 | [module: Args(...)] | ArgsAttribute | +| attributes.cs:46:7:46:9 | Foo | attributes.cs:45:2:45:22 | [AttributeUsage(...)] | System.AttributeUsageAttribute | +| attributes.cs:49:17:49:19 | foo | attributes.cs:48:6:48:16 | [Conditional(...)] | System.Diagnostics.ConditionalAttribute | +| attributes.cs:54:23:54:23 | x | attributes.cs:54:14:54:16 | [Foo(...)] | Foo | +| attributes.cs:57:10:57:11 | M1 | attributes.cs:56:6:56:16 | [My(...)] | MyAttribute | +| attributes.cs:61:10:61:11 | M2 | attributes.cs:59:6:59:16 | [My(...)] | MyAttribute | +| attributes.cs:61:10:61:11 | M2 | attributes.cs:60:6:60:8 | [My2(...)] | My2Attribute | +| attributes.cs:80:14:80:14 | X | attributes.cs:79:2:79:5 | [Args(...)] | ArgsAttribute | +| attributes.cs:84:9:84:18 | SomeMethod | attributes.cs:82:6:82:9 | [Args(...)] | ArgsAttribute | +| attributes.cs:84:9:84:18 | SomeMethod | attributes.cs:83:14:83:17 | [return: Args(...)] | ArgsAttribute | +| attributes.cs:100:14:100:24 | Invoke | attributes.cs:99:10:99:21 | [return: My3(...)] | My3Attribute | +| attributes.cs:100:14:100:24 | My1Delegate | attributes.cs:98:2:98:13 | [My3(...)] | My3Attribute | +| attributes.cs:104:17:104:27 | Invoke | attributes.cs:102:10:102:21 | [return: My3(...)] | My3Attribute | +| attributes.cs:104:17:104:27 | My2Delegate | attributes.cs:103:8:103:19 | [My3(...)] | My3Attribute | +| attributes.cs:110:32:110:32 | + | attributes.cs:108:6:108:17 | [My3(...)] | My3Attribute | +| attributes.cs:110:32:110:32 | + | attributes.cs:109:14:109:25 | [return: My3(...)] | My3Attribute | +| attributes.cs:113:16:113:19 | Item | attributes.cs:112:6:112:17 | [My3(...)] | My3Attribute | +| attributes.cs:117:9:117:11 | get_Item | attributes.cs:115:10:115:21 | [My3(...)] | My3Attribute | +| attributes.cs:117:9:117:11 | get_Item | attributes.cs:116:18:116:29 | [return: My3(...)] | My3Attribute | +| attributes.cs:121:9:121:11 | set_Item | attributes.cs:119:18:119:29 | [My3(...)] | My3Attribute | +| attributes.cs:121:9:121:11 | value | attributes.cs:120:17:120:28 | [My3(...)] | My3Attribute | +| attributes.cs:126:16:126:20 | Prop1 | attributes.cs:125:6:125:17 | [My3(...)] | My3Attribute | +| attributes.cs:130:9:130:11 | get_Prop1 | attributes.cs:128:18:128:29 | [My3(...)] | My3Attribute | +| attributes.cs:130:9:130:11 | get_Prop1 | attributes.cs:129:18:129:29 | [return: My3(...)] | My3Attribute | +| attributes.cs:134:9:134:11 | set_Prop1 | attributes.cs:132:10:132:21 | [My3(...)] | My3Attribute | +| attributes.cs:134:9:134:11 | value | attributes.cs:133:17:133:28 | [My3(...)] | My3Attribute | +| attributes.cs:146:17:146:18 | M1 | attributes.cs:145:6:145:11 | [Params(...)] | Class1+ParamsAttribute | +| attributes.cs:149:17:149:18 | M2 | attributes.cs:148:6:148:11 | [Params(...)] | Class1+ParamsAttribute | +| attributes.cs:152:17:152:18 | M3 | attributes.cs:151:6:151:11 | [Params(...)] | Class1+ParamsAttribute | +| attributes.cs:155:17:155:18 | M4 | attributes.cs:154:6:154:11 | [Params(...)] | Class1+ParamsAttribute | +| attributes.cs:159:14:159:32 | MyExperimentalClass | attributes.cs:158:2:158:13 | [Experimental(...)] | System.Diagnostics.CodeAnalysis.ExperimentalAttribute | +| attributes.cs:162:17:162:36 | MyExperimentalMethod | attributes.cs:161:6:161:17 | [Experimental(...)] | System.Diagnostics.CodeAnalysis.ExperimentalAttribute | +| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:12:12:12:24 | [assembly: AssemblyTitle(...)] | System.Reflection.AssemblyTitleAttribute | +| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:13:12:13:30 | [assembly: AssemblyDescription(...)] | System.Reflection.AssemblyDescriptionAttribute | +| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:14:12:14:32 | [assembly: AssemblyConfiguration(...)] | System.Reflection.AssemblyConfigurationAttribute | +| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:15:12:15:26 | [assembly: AssemblyCompany(...)] | System.Reflection.AssemblyCompanyAttribute | +| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:16:12:16:26 | [assembly: AssemblyProduct(...)] | System.Reflection.AssemblyProductAttribute | +| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:17:12:17:28 | [assembly: AssemblyCopyright(...)] | System.Reflection.AssemblyCopyrightAttribute | +| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:18:12:18:28 | [assembly: AssemblyTrademark(...)] | System.Reflection.AssemblyTrademarkAttribute | +| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:19:12:19:26 | [assembly: AssemblyCulture(...)] | System.Reflection.AssemblyCultureAttribute | +| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:24:12:24:21 | [assembly: ComVisible(...)] | System.Runtime.InteropServices.ComVisibleAttribute | +| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:27:12:27:15 | [assembly: Guid(...)] | System.Runtime.InteropServices.GuidAttribute | +| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:39:12:39:26 | [assembly: AssemblyVersion(...)] | System.Reflection.AssemblyVersionAttribute | +| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:40:12:40:30 | [assembly: AssemblyFileVersion(...)] | System.Reflection.AssemblyFileVersionAttribute | +| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:42:12:42:15 | [assembly: Args(...)] | ArgsAttribute | +| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:43:10:43:13 | [module: Args(...)] | ArgsAttribute | diff --git a/csharp/ql/test/library-tests/attributes/ExperimentalAttributes.expected b/csharp/ql/test/library-tests/attributes/ExperimentalAttributes.expected index 55180cc1e74c..bff7a13b912e 100644 --- a/csharp/ql/test/library-tests/attributes/ExperimentalAttributes.expected +++ b/csharp/ql/test/library-tests/attributes/ExperimentalAttributes.expected @@ -1,2 +1,2 @@ -| attributes.cs:158:14:158:32 | MyExperimentalClass | attributes.cs:157:2:157:13 | [Experimental(...)] | MyExperimentalClassId | -| attributes.cs:161:17:161:36 | MyExperimentalMethod | attributes.cs:160:6:160:17 | [Experimental(...)] | MyExperimentalMethodId | +| attributes.cs:159:14:159:32 | MyExperimentalClass | attributes.cs:158:2:158:13 | [Experimental(...)] | MyExperimentalClassId | +| attributes.cs:162:17:162:36 | MyExperimentalMethod | attributes.cs:161:6:161:17 | [Experimental(...)] | MyExperimentalMethodId | diff --git a/csharp/ql/test/library-tests/attributes/PrintAst.expected b/csharp/ql/test/library-tests/attributes/PrintAst.expected index 2d7424365e9b..c551087a831f 100644 --- a/csharp/ql/test/library-tests/attributes/PrintAst.expected +++ b/csharp/ql/test/library-tests/attributes/PrintAst.expected @@ -1,70 +1,41 @@ attributes.cs: -# 11| [AssemblyAttribute] [assembly: AssemblyTitle(...)] -# 11| -1: [TypeMention] AssemblyTitleAttribute -# 11| 0: [StringLiteralUtf16] "C# attributes test" -# 12| [AssemblyAttribute] [assembly: AssemblyDescription(...)] -# 12| -1: [TypeMention] AssemblyDescriptionAttribute -# 12| 0: [StringLiteralUtf16] "A test of C# attributes" -# 13| [AssemblyAttribute] [assembly: AssemblyConfiguration(...)] -# 13| -1: [TypeMention] AssemblyConfigurationAttribute -# 13| 0: [StringLiteralUtf16] "" -# 14| [AssemblyAttribute] [assembly: AssemblyCompany(...)] -# 14| -1: [TypeMention] AssemblyCompanyAttribute -# 14| 0: [StringLiteralUtf16] "Semmle Plc" -# 15| [AssemblyAttribute] [assembly: AssemblyProduct(...)] -# 15| -1: [TypeMention] AssemblyProductAttribute -# 15| 0: [StringLiteralUtf16] "Odasa" -# 16| [AssemblyAttribute] [assembly: AssemblyCopyright(...)] -# 16| -1: [TypeMention] AssemblyCopyrightAttribute -# 16| 0: [StringLiteralUtf16] "Copyright © Semmle 2018" -# 17| [AssemblyAttribute] [assembly: AssemblyTrademark(...)] -# 17| -1: [TypeMention] AssemblyTrademarkAttribute -# 17| 0: [StringLiteralUtf16] "" -# 18| [AssemblyAttribute] [assembly: AssemblyCulture(...)] -# 18| -1: [TypeMention] AssemblyCultureAttribute +# 12| [AssemblyAttribute] [assembly: AssemblyTitle(...)] +# 12| -1: [TypeMention] AssemblyTitleAttribute +# 12| 0: [StringLiteralUtf16] "C# attributes test" +# 13| [AssemblyAttribute] [assembly: AssemblyDescription(...)] +# 13| -1: [TypeMention] AssemblyDescriptionAttribute +# 13| 0: [StringLiteralUtf16] "A test of C# attributes" +# 14| [AssemblyAttribute] [assembly: AssemblyConfiguration(...)] +# 14| -1: [TypeMention] AssemblyConfigurationAttribute +# 14| 0: [StringLiteralUtf16] "" +# 15| [AssemblyAttribute] [assembly: AssemblyCompany(...)] +# 15| -1: [TypeMention] AssemblyCompanyAttribute +# 15| 0: [StringLiteralUtf16] "Semmle Plc" +# 16| [AssemblyAttribute] [assembly: AssemblyProduct(...)] +# 16| -1: [TypeMention] AssemblyProductAttribute +# 16| 0: [StringLiteralUtf16] "Odasa" +# 17| [AssemblyAttribute] [assembly: AssemblyCopyright(...)] +# 17| -1: [TypeMention] AssemblyCopyrightAttribute +# 17| 0: [StringLiteralUtf16] "Copyright © Semmle 2018" +# 18| [AssemblyAttribute] [assembly: AssemblyTrademark(...)] +# 18| -1: [TypeMention] AssemblyTrademarkAttribute # 18| 0: [StringLiteralUtf16] "" -# 23| [AssemblyAttribute] [assembly: ComVisible(...)] -# 23| -1: [TypeMention] ComVisibleAttribute -# 23| 0: [BoolLiteral] false -# 26| [AssemblyAttribute] [assembly: Guid(...)] -# 26| -1: [TypeMention] GuidAttribute -# 26| 0: [StringLiteralUtf16] "2f70fdd6-14aa-4850-b053-d547adb1f476" -# 38| [AssemblyAttribute] [assembly: AssemblyVersion(...)] -# 38| -1: [TypeMention] AssemblyVersionAttribute -# 38| 0: [StringLiteralUtf16] "1.0.0.0" -# 39| [AssemblyAttribute] [assembly: AssemblyFileVersion(...)] -# 39| -1: [TypeMention] AssemblyFileVersionAttribute +# 19| [AssemblyAttribute] [assembly: AssemblyCulture(...)] +# 19| -1: [TypeMention] AssemblyCultureAttribute +# 19| 0: [StringLiteralUtf16] "" +# 24| [AssemblyAttribute] [assembly: ComVisible(...)] +# 24| -1: [TypeMention] ComVisibleAttribute +# 24| 0: [BoolLiteral] false +# 27| [AssemblyAttribute] [assembly: Guid(...)] +# 27| -1: [TypeMention] GuidAttribute +# 27| 0: [StringLiteralUtf16] "2f70fdd6-14aa-4850-b053-d547adb1f476" +# 39| [AssemblyAttribute] [assembly: AssemblyVersion(...)] +# 39| -1: [TypeMention] AssemblyVersionAttribute # 39| 0: [StringLiteralUtf16] "1.0.0.0" -# 41| [AssemblyAttribute] [assembly: Args(...)] -# 41| -1: [TypeMention] ArgsAttribute -# 41| 0: [IntLiteral] 0 -# 41| 1: [ArrayCreation] array creation of type Object[] -# 41| -2: [TypeMention] Object[] -# 41| 1: [TypeMention] object -# 41| -1: [ArrayInitializer] { ..., ... } -# 41| 0: [CastExpr] (...) ... -# 41| 1: [IntLiteral] 1 -# 41| 1: [CastExpr] (...) ... -# 41| 1: [IntLiteral] 2 -# 41| 2: [NullLiteral] null -# 41| 2: [TypeofExpr] typeof(...) -# 41| 0: [TypeAccess] access to type ArgsAttribute -# 41| 0: [TypeMention] ArgsAttribute -# 41| 3: [CastExpr] (...) ... -# 41| 0: [TypeAccess] access to type E -# 41| 0: [TypeMention] E -# 41| 1: [IntLiteral] 12 -# 41| 4: [NullLiteral] null -# 41| 5: [ArrayCreation] array creation of type Object[] -# 41| -2: [TypeMention] Object[] -# 41| 1: [TypeMention] object -# 41| -1: [ArrayInitializer] { ..., ... } -# 41| 0: [CastExpr] (...) ... -# 41| 1: [IntLiteral] 1 -# 41| 1: [TypeofExpr] typeof(...) -# 41| 0: [TypeAccess] access to type Int32 -# 41| 0: [TypeMention] int -# 42| [ModuleAttribute] [module: Args(...)] +# 40| [AssemblyAttribute] [assembly: AssemblyFileVersion(...)] +# 40| -1: [TypeMention] AssemblyFileVersionAttribute +# 40| 0: [StringLiteralUtf16] "1.0.0.0" +# 42| [AssemblyAttribute] [assembly: Args(...)] # 42| -1: [TypeMention] ArgsAttribute # 42| 0: [IntLiteral] 0 # 42| 1: [ArrayCreation] array creation of type Object[] @@ -93,160 +64,162 @@ attributes.cs: # 42| 1: [TypeofExpr] typeof(...) # 42| 0: [TypeAccess] access to type Int32 # 42| 0: [TypeMention] int -# 45| [Class] Foo +# 43| [ModuleAttribute] [module: Args(...)] +# 43| -1: [TypeMention] ArgsAttribute +# 43| 0: [IntLiteral] 0 +# 43| 1: [ArrayCreation] array creation of type Object[] +# 43| -2: [TypeMention] Object[] +# 43| 1: [TypeMention] object +# 43| -1: [ArrayInitializer] { ..., ... } +# 43| 0: [CastExpr] (...) ... +# 43| 1: [IntLiteral] 1 +# 43| 1: [CastExpr] (...) ... +# 43| 1: [IntLiteral] 2 +# 43| 2: [NullLiteral] null +# 43| 2: [TypeofExpr] typeof(...) +# 43| 0: [TypeAccess] access to type ArgsAttribute +# 43| 0: [TypeMention] ArgsAttribute +# 43| 3: [CastExpr] (...) ... +# 43| 0: [TypeAccess] access to type E +# 43| 0: [TypeMention] E +# 43| 1: [IntLiteral] 12 +# 43| 4: [NullLiteral] null +# 43| 5: [ArrayCreation] array creation of type Object[] +# 43| -2: [TypeMention] Object[] +# 43| 1: [TypeMention] object +# 43| -1: [ArrayInitializer] { ..., ... } +# 43| 0: [CastExpr] (...) ... +# 43| 1: [IntLiteral] 1 +# 43| 1: [TypeofExpr] typeof(...) +# 43| 0: [TypeAccess] access to type Int32 +# 43| 0: [TypeMention] int +# 46| [Class] Foo #-----| 0: (Attributes) -# 44| 1: [DefaultAttribute] [AttributeUsage(...)] -# 44| -1: [TypeMention] AttributeUsageAttribute -# 44| 0: [MemberConstantAccess] access to constant All -# 44| -1: [TypeAccess] access to type AttributeTargets -# 44| 0: [TypeMention] AttributeTargets +# 45| 1: [DefaultAttribute] [AttributeUsage(...)] +# 45| -1: [TypeMention] AttributeUsageAttribute +# 45| 0: [MemberConstantAccess] access to constant All +# 45| -1: [TypeAccess] access to type AttributeTargets +# 45| 0: [TypeMention] AttributeTargets #-----| 3: (Base types) -# 45| 0: [TypeMention] Attribute -# 48| 5: [Method] foo -# 48| -1: [TypeMention] Void +# 46| 0: [TypeMention] Attribute +# 49| 5: [Method] foo +# 49| -1: [TypeMention] Void #-----| 0: (Attributes) -# 47| 1: [DefaultAttribute] [Conditional(...)] -# 47| -1: [TypeMention] ConditionalAttribute -# 47| 0: [StringLiteralUtf16] "DEBUG2" -# 48| 4: [BlockStmt] {...} -# 51| [Class] Bar -# 53| 5: [Method] inc -# 53| -1: [TypeMention] int +# 48| 1: [DefaultAttribute] [Conditional(...)] +# 48| -1: [TypeMention] ConditionalAttribute +# 48| 0: [StringLiteralUtf16] "DEBUG2" +# 49| 4: [BlockStmt] {...} +# 52| [Class] Bar +# 54| 5: [Method] inc +# 54| -1: [TypeMention] int #-----| 2: (Parameters) -# 53| 0: [Parameter] x -# 53| -1: [TypeMention] int +# 54| 0: [Parameter] x +# 54| -1: [TypeMention] int #-----| 0: (Attributes) -# 53| 1: [DefaultAttribute] [Foo(...)] -# 53| 0: [TypeMention] Foo -# 53| 4: [BlockStmt] {...} -# 53| 0: [ReturnStmt] return ...; -# 53| 0: [AddExpr] ... + ... -# 53| 0: [ParameterAccess] access to parameter x -# 53| 1: [IntLiteral] 1 -# 56| 6: [Method] M1 -# 56| -1: [TypeMention] Void +# 54| 1: [DefaultAttribute] [Foo(...)] +# 54| 0: [TypeMention] Foo +# 54| 4: [BlockStmt] {...} +# 54| 0: [ReturnStmt] return ...; +# 54| 0: [AddExpr] ... + ... +# 54| 0: [ParameterAccess] access to parameter x +# 54| 1: [IntLiteral] 1 +# 57| 6: [Method] M1 +# 57| -1: [TypeMention] Void #-----| 0: (Attributes) -# 55| 1: [DefaultAttribute] [My(...)] -# 55| -1: [TypeMention] MyAttribute -# 55| 0: [BoolLiteral] false -# 56| 4: [BlockStmt] {...} -# 60| 7: [Method] M2 -# 60| -1: [TypeMention] Void +# 56| 1: [DefaultAttribute] [My(...)] +# 56| -1: [TypeMention] MyAttribute +# 56| 0: [BoolLiteral] false +# 57| 4: [BlockStmt] {...} +# 61| 7: [Method] M2 +# 61| -1: [TypeMention] Void #-----| 0: (Attributes) -# 58| 1: [DefaultAttribute] [My(...)] -# 58| -1: [TypeMention] MyAttribute -# 58| 0: [BoolLiteral] true -# 58| 1: [StringLiteralUtf16] "" -# 58| 2: [IntLiteral] 0 -# 59| 2: [DefaultAttribute] [My2(...)] -# 59| -1: [TypeMention] My2Attribute -# 59| 0: [BoolLiteral] false -# 59| 1: [BoolLiteral] true -# 59| 3: [IntLiteral] 1 -# 59| 4: [IntLiteral] 42 -# 60| 4: [BlockStmt] {...} -# 63| [Class] MyAttribute +# 59| 1: [DefaultAttribute] [My(...)] +# 59| -1: [TypeMention] MyAttribute +# 59| 0: [BoolLiteral] true +# 59| 1: [StringLiteralUtf16] "" +# 59| 2: [IntLiteral] 0 +# 60| 2: [DefaultAttribute] [My2(...)] +# 60| -1: [TypeMention] My2Attribute +# 60| 0: [BoolLiteral] false +# 60| 1: [BoolLiteral] true +# 60| 3: [IntLiteral] 1 +# 60| 4: [IntLiteral] 42 +# 61| 4: [BlockStmt] {...} +# 64| [Class] MyAttribute #-----| 3: (Base types) -# 63| 0: [TypeMention] Attribute -# 65| 4: [Field] x -# 65| -1: [TypeMention] int -# 66| 5: [Property] y -# 66| -1: [TypeMention] string -# 66| 3: [Getter] get_y -# 66| 4: [Setter] set_y +# 64| 0: [TypeMention] Attribute +# 66| 4: [Field] x +# 66| -1: [TypeMention] int +# 67| 5: [Property] y +# 67| -1: [TypeMention] string +# 67| 3: [Getter] get_y +# 67| 4: [Setter] set_y #-----| 2: (Parameters) -# 66| 0: [Parameter] value -# 67| 6: [InstanceConstructor] MyAttribute +# 67| 0: [Parameter] value +# 68| 6: [InstanceConstructor] MyAttribute #-----| 2: (Parameters) -# 67| 0: [Parameter] b -# 67| -1: [TypeMention] bool -# 67| 4: [BlockStmt] {...} -# 70| [Enum] E -# 70| 5: [Field] A -# 70| 1: [IntLiteral] 42 -# 72| [Class] ArgsAttribute +# 68| 0: [Parameter] b +# 68| -1: [TypeMention] bool +# 68| 4: [BlockStmt] {...} +# 71| [Enum] E +# 71| 5: [Field] A +# 71| 1: [IntLiteral] 42 +# 73| [Class] ArgsAttribute #-----| 3: (Base types) -# 72| 0: [TypeMention] Attribute -# 74| 4: [Property] Prop -# 74| -1: [TypeMention] Object[] -# 74| 1: [TypeMention] object -# 74| 3: [Getter] get_Prop -# 74| 4: [Setter] set_Prop +# 73| 0: [TypeMention] Attribute +# 75| 4: [Property] Prop +# 75| -1: [TypeMention] Object[] +# 75| 1: [TypeMention] object +# 75| 3: [Getter] get_Prop +# 75| 4: [Setter] set_Prop #-----| 2: (Parameters) -# 74| 0: [Parameter] value -# 75| 5: [InstanceConstructor] ArgsAttribute +# 75| 0: [Parameter] value +# 76| 5: [InstanceConstructor] ArgsAttribute #-----| 2: (Parameters) -# 75| 0: [Parameter] i -# 75| -1: [TypeMention] int -# 75| 1: [Parameter] o -# 75| -1: [TypeMention] object -# 75| 2: [Parameter] t -# 75| -1: [TypeMention] Type -# 75| 3: [Parameter] e -# 75| -1: [TypeMention] E -# 75| 4: [Parameter] arr -# 75| -1: [TypeMention] Int32[] -# 75| 1: [TypeMention] int -# 75| 4: [BlockStmt] {...} -# 79| [Class] X +# 76| 0: [Parameter] i +# 76| -1: [TypeMention] int +# 76| 1: [Parameter] o +# 76| -1: [TypeMention] object +# 76| 2: [Parameter] t +# 76| -1: [TypeMention] Type +# 76| 3: [Parameter] e +# 76| -1: [TypeMention] E +# 76| 4: [Parameter] arr +# 76| -1: [TypeMention] Int32[] +# 76| 1: [TypeMention] int +# 76| 4: [BlockStmt] {...} +# 80| [Class] X #-----| 0: (Attributes) -# 78| 1: [DefaultAttribute] [Args(...)] -# 78| -1: [TypeMention] ArgsAttribute -# 78| 0: [IntLiteral] 42 -# 78| 1: [NullLiteral] null -# 78| 2: [TypeofExpr] typeof(...) -# 78| 0: [TypeAccess] access to type X -# 78| 0: [TypeMention] X -# 78| 3: [MemberConstantAccess] access to constant A -# 78| -1: [TypeAccess] access to type E -# 78| 0: [TypeMention] E -# 78| 4: [ArrayCreation] array creation of type Int32[] -# 78| -2: [TypeMention] Int32[] -# 78| 1: [TypeMention] int -# 78| -1: [ArrayInitializer] { ..., ... } -# 78| 0: [IntLiteral] 1 -# 78| 1: [IntLiteral] 2 -# 78| 2: [IntLiteral] 3 -# 78| 5: [ArrayCreation] array creation of type Object[] -# 78| -2: [TypeMention] Object[] -# 78| 1: [TypeMention] object -# 78| -1: [ArrayInitializer] { ..., ... } -# 78| 0: [CastExpr] (...) ... -# 78| 1: [IntLiteral] 1 -# 78| 1: [TypeofExpr] typeof(...) -# 78| 0: [TypeAccess] access to type Int32 -# 78| 0: [TypeMention] int -# 83| 5: [Method] SomeMethod -# 83| -1: [TypeMention] int +# 79| 1: [DefaultAttribute] [Args(...)] +# 79| -1: [TypeMention] ArgsAttribute +# 79| 0: [IntLiteral] 42 +# 79| 1: [NullLiteral] null +# 79| 2: [TypeofExpr] typeof(...) +# 79| 0: [TypeAccess] access to type X +# 79| 0: [TypeMention] X +# 79| 3: [MemberConstantAccess] access to constant A +# 79| -1: [TypeAccess] access to type E +# 79| 0: [TypeMention] E +# 79| 4: [ArrayCreation] array creation of type Int32[] +# 79| -2: [TypeMention] Int32[] +# 79| 1: [TypeMention] int +# 79| -1: [ArrayInitializer] { ..., ... } +# 79| 0: [IntLiteral] 1 +# 79| 1: [IntLiteral] 2 +# 79| 2: [IntLiteral] 3 +# 79| 5: [ArrayCreation] array creation of type Object[] +# 79| -2: [TypeMention] Object[] +# 79| 1: [TypeMention] object +# 79| -1: [ArrayInitializer] { ..., ... } +# 79| 0: [CastExpr] (...) ... +# 79| 1: [IntLiteral] 1 +# 79| 1: [TypeofExpr] typeof(...) +# 79| 0: [TypeAccess] access to type Int32 +# 79| 0: [TypeMention] int +# 84| 5: [Method] SomeMethod +# 84| -1: [TypeMention] int #-----| 0: (Attributes) -# 81| 1: [DefaultAttribute] [Args(...)] -# 81| -1: [TypeMention] ArgsAttribute -# 81| 0: [AddExpr] ... + ... -# 81| 0: [IntLiteral] 42 -# 81| 1: [IntLiteral] 0 -# 81| 1: [ArrayCreation] array creation of type Int32[] -# 81| -2: [TypeMention] Int32[] -# 81| 1: [TypeMention] int -# 81| -1: [ArrayInitializer] { ..., ... } -# 81| 0: [IntLiteral] 1 -# 81| 1: [IntLiteral] 2 -# 81| 2: [IntLiteral] 3 -# 81| 2: [NullLiteral] null -# 81| 3: [CastExpr] (...) ... -# 81| 0: [TypeAccess] access to type E -# 81| 0: [TypeMention] E -# 81| 1: [IntLiteral] 12 -# 81| 4: [NullLiteral] null -# 81| 5: [ArrayCreation] array creation of type Object[] -# 81| -2: [TypeMention] Object[] -# 81| 1: [TypeMention] object -# 81| -1: [ArrayInitializer] { ..., ... } -# 81| 0: [CastExpr] (...) ... -# 81| 1: [IntLiteral] 1 -# 81| 1: [TypeofExpr] typeof(...) -# 81| 0: [TypeAccess] access to type Int32 -# 81| 0: [TypeMention] int -# 82| 2: [ReturnAttribute] [return: Args(...)] +# 82| 1: [DefaultAttribute] [Args(...)] # 82| -1: [TypeMention] ArgsAttribute # 82| 0: [AddExpr] ... + ... # 82| 0: [IntLiteral] 42 @@ -273,209 +246,236 @@ attributes.cs: # 82| 1: [TypeofExpr] typeof(...) # 82| 0: [TypeAccess] access to type Int32 # 82| 0: [TypeMention] int -# 83| 4: [BlockStmt] {...} -# 83| 0: [ReturnStmt] return ...; -# 83| 0: [IntLiteral] 1 -# 86| [Class] My2Attribute +# 83| 2: [ReturnAttribute] [return: Args(...)] +# 83| -1: [TypeMention] ArgsAttribute +# 83| 0: [AddExpr] ... + ... +# 83| 0: [IntLiteral] 42 +# 83| 1: [IntLiteral] 0 +# 83| 1: [ArrayCreation] array creation of type Int32[] +# 83| -2: [TypeMention] Int32[] +# 83| 1: [TypeMention] int +# 83| -1: [ArrayInitializer] { ..., ... } +# 83| 0: [IntLiteral] 1 +# 83| 1: [IntLiteral] 2 +# 83| 2: [IntLiteral] 3 +# 83| 2: [NullLiteral] null +# 83| 3: [CastExpr] (...) ... +# 83| 0: [TypeAccess] access to type E +# 83| 0: [TypeMention] E +# 83| 1: [IntLiteral] 12 +# 83| 4: [NullLiteral] null +# 83| 5: [ArrayCreation] array creation of type Object[] +# 83| -2: [TypeMention] Object[] +# 83| 1: [TypeMention] object +# 83| -1: [ArrayInitializer] { ..., ... } +# 83| 0: [CastExpr] (...) ... +# 83| 1: [IntLiteral] 1 +# 83| 1: [TypeofExpr] typeof(...) +# 83| 0: [TypeAccess] access to type Int32 +# 83| 0: [TypeMention] int +# 84| 4: [BlockStmt] {...} +# 84| 0: [ReturnStmt] return ...; +# 84| 0: [IntLiteral] 1 +# 87| [Class] My2Attribute #-----| 3: (Base types) -# 86| 0: [TypeMention] Attribute -# 88| 4: [Property] X -# 88| -1: [TypeMention] int -# 88| 3: [Getter] get_X -# 88| 4: [Setter] set_X +# 87| 0: [TypeMention] Attribute +# 89| 4: [Property] X +# 89| -1: [TypeMention] int +# 89| 3: [Getter] get_X +# 89| 4: [Setter] set_X #-----| 2: (Parameters) -# 88| 0: [Parameter] value -# 89| 5: [InstanceConstructor] My2Attribute +# 89| 0: [Parameter] value +# 90| 5: [InstanceConstructor] My2Attribute #-----| 2: (Parameters) -# 89| 0: [Parameter] a -# 89| -1: [TypeMention] bool -# 89| 1: [Parameter] b -# 89| -1: [TypeMention] bool -# 89| 2: [Parameter] i -# 89| -1: [TypeMention] int -# 89| 1: [IntLiteral] 12 -# 89| 3: [Parameter] j -# 89| -1: [TypeMention] int -# 89| 1: [IntLiteral] 13 -# 89| 4: [BlockStmt] {...} -# 92| [Class] My3Attribute +# 90| 0: [Parameter] a +# 90| -1: [TypeMention] bool +# 90| 1: [Parameter] b +# 90| -1: [TypeMention] bool +# 90| 2: [Parameter] i +# 90| -1: [TypeMention] int +# 90| 1: [IntLiteral] 12 +# 90| 3: [Parameter] j +# 90| -1: [TypeMention] int +# 90| 1: [IntLiteral] 13 +# 90| 4: [BlockStmt] {...} +# 93| [Class] My3Attribute #-----| 3: (Base types) -# 92| 0: [TypeMention] Attribute -# 94| 4: [InstanceConstructor] My3Attribute +# 93| 0: [TypeMention] Attribute +# 95| 4: [InstanceConstructor] My3Attribute #-----| 2: (Parameters) -# 94| 0: [Parameter] x -# 94| -1: [TypeMention] int -# 94| 4: [BlockStmt] {...} -# 99| [DelegateType] My1Delegate +# 95| 0: [Parameter] x +# 95| -1: [TypeMention] int +# 95| 4: [BlockStmt] {...} +# 100| [DelegateType] My1Delegate #-----| 0: (Attributes) -# 97| 1: [DefaultAttribute] [My3(...)] -# 97| -1: [TypeMention] My3Attribute -# 97| 0: [IntLiteral] 1 +# 98| 1: [DefaultAttribute] [My3(...)] +# 98| -1: [TypeMention] My3Attribute +# 98| 0: [IntLiteral] 1 #-----| 2: (Parameters) -# 99| 0: [Parameter] message -# 99| -1: [TypeMention] string -# 103| [DelegateType] My2Delegate +# 100| 0: [Parameter] message +# 100| -1: [TypeMention] string +# 104| [DelegateType] My2Delegate #-----| 0: (Attributes) -# 102| 1: [DefaultAttribute] [My3(...)] -# 102| -1: [TypeMention] My3Attribute -# 102| 0: [IntLiteral] 4 +# 103| 1: [DefaultAttribute] [My3(...)] +# 103| -1: [TypeMention] My3Attribute +# 103| 0: [IntLiteral] 4 #-----| 2: (Parameters) -# 103| 0: [Parameter] message -# 103| -1: [TypeMention] string -# 105| [Class] MyAttributeUsage -# 109| 5: [AddOperator] + -# 109| -1: [TypeMention] int +# 104| 0: [Parameter] message +# 104| -1: [TypeMention] string +# 106| [Class] MyAttributeUsage +# 110| 5: [AddOperator] + +# 110| -1: [TypeMention] int #-----| 0: (Attributes) -# 107| 1: [DefaultAttribute] [My3(...)] -# 107| -1: [TypeMention] My3Attribute -# 107| 0: [IntLiteral] 5 -# 108| 2: [ReturnAttribute] [return: My3(...)] +# 108| 1: [DefaultAttribute] [My3(...)] # 108| -1: [TypeMention] My3Attribute -# 108| 0: [IntLiteral] 6 +# 108| 0: [IntLiteral] 5 +# 109| 2: [ReturnAttribute] [return: My3(...)] +# 109| -1: [TypeMention] My3Attribute +# 109| 0: [IntLiteral] 6 #-----| 2: (Parameters) -# 109| 0: [Parameter] a -# 109| -1: [TypeMention] MyAttributeUsage -# 109| 1: [Parameter] b -# 109| -1: [TypeMention] MyAttributeUsage -# 109| 4: [IntLiteral] 0 -# 112| 6: [Indexer] Item -# 112| -1: [TypeMention] int +# 110| 0: [Parameter] a +# 110| -1: [TypeMention] MyAttributeUsage +# 110| 1: [Parameter] b +# 110| -1: [TypeMention] MyAttributeUsage +# 110| 4: [IntLiteral] 0 +# 113| 6: [Indexer] Item +# 113| -1: [TypeMention] int #-----| 0: (Attributes) -# 111| 1: [DefaultAttribute] [My3(...)] -# 111| -1: [TypeMention] My3Attribute -# 111| 0: [IntLiteral] 15 +# 112| 1: [DefaultAttribute] [My3(...)] +# 112| -1: [TypeMention] My3Attribute +# 112| 0: [IntLiteral] 15 #-----| 1: (Parameters) -# 112| 0: [Parameter] x -# 112| -1: [TypeMention] int -# 116| 3: [Getter] get_Item +# 113| 0: [Parameter] x +# 113| -1: [TypeMention] int +# 117| 3: [Getter] get_Item #-----| 0: (Attributes) -# 114| 1: [DefaultAttribute] [My3(...)] -# 114| -1: [TypeMention] My3Attribute -# 114| 0: [IntLiteral] 7 -# 115| 2: [ReturnAttribute] [return: My3(...)] +# 115| 1: [DefaultAttribute] [My3(...)] # 115| -1: [TypeMention] My3Attribute -# 115| 0: [IntLiteral] 8 +# 115| 0: [IntLiteral] 7 +# 116| 2: [ReturnAttribute] [return: My3(...)] +# 116| -1: [TypeMention] My3Attribute +# 116| 0: [IntLiteral] 8 #-----| 2: (Parameters) -# 112| 0: [Parameter] x -# 116| 4: [BlockStmt] {...} -# 116| 0: [ReturnStmt] return ...; -# 116| 0: [AddExpr] ... + ... -# 116| 0: [ParameterAccess] access to parameter x -# 116| 1: [IntLiteral] 1 -# 120| 4: [Setter] set_Item +# 113| 0: [Parameter] x +# 117| 4: [BlockStmt] {...} +# 117| 0: [ReturnStmt] return ...; +# 117| 0: [AddExpr] ... + ... +# 117| 0: [ParameterAccess] access to parameter x +# 117| 1: [IntLiteral] 1 +# 121| 4: [Setter] set_Item #-----| 0: (Attributes) -# 118| 1: [DefaultAttribute] [My3(...)] -# 118| -1: [TypeMention] My3Attribute -# 118| 0: [IntLiteral] 9 +# 119| 1: [DefaultAttribute] [My3(...)] +# 119| -1: [TypeMention] My3Attribute +# 119| 0: [IntLiteral] 9 #-----| 2: (Parameters) -# 112| 0: [Parameter] x -# 120| 1: [Parameter] value +# 113| 0: [Parameter] x +# 121| 1: [Parameter] value #-----| 0: (Attributes) -# 119| 1: [DefaultAttribute] [My3(...)] -# 119| -1: [TypeMention] My3Attribute -# 119| 0: [IntLiteral] 10 -# 120| 4: [BlockStmt] {...} -# 120| 0: [ReturnStmt] return ...; -# 123| 7: [Field] p -# 123| -1: [TypeMention] int -# 125| 8: [Property] Prop1 -# 125| -1: [TypeMention] int +# 120| 1: [DefaultAttribute] [My3(...)] +# 120| -1: [TypeMention] My3Attribute +# 120| 0: [IntLiteral] 10 +# 121| 4: [BlockStmt] {...} +# 121| 0: [ReturnStmt] return ...; +# 124| 7: [Field] p +# 124| -1: [TypeMention] int +# 126| 8: [Property] Prop1 +# 126| -1: [TypeMention] int #-----| 0: (Attributes) -# 124| 1: [DefaultAttribute] [My3(...)] -# 124| -1: [TypeMention] My3Attribute -# 124| 0: [IntLiteral] 16 -# 129| 3: [Getter] get_Prop1 +# 125| 1: [DefaultAttribute] [My3(...)] +# 125| -1: [TypeMention] My3Attribute +# 125| 0: [IntLiteral] 16 +# 130| 3: [Getter] get_Prop1 #-----| 0: (Attributes) -# 127| 1: [DefaultAttribute] [My3(...)] -# 127| -1: [TypeMention] My3Attribute -# 127| 0: [IntLiteral] 11 -# 128| 2: [ReturnAttribute] [return: My3(...)] +# 128| 1: [DefaultAttribute] [My3(...)] # 128| -1: [TypeMention] My3Attribute -# 128| 0: [IntLiteral] 12 -# 129| 4: [BlockStmt] {...} -# 129| 0: [ReturnStmt] return ...; -# 129| 0: [FieldAccess] access to field p -# 133| 4: [Setter] set_Prop1 +# 128| 0: [IntLiteral] 11 +# 129| 2: [ReturnAttribute] [return: My3(...)] +# 129| -1: [TypeMention] My3Attribute +# 129| 0: [IntLiteral] 12 +# 130| 4: [BlockStmt] {...} +# 130| 0: [ReturnStmt] return ...; +# 130| 0: [FieldAccess] access to field p +# 134| 4: [Setter] set_Prop1 #-----| 0: (Attributes) -# 131| 1: [DefaultAttribute] [My3(...)] -# 131| -1: [TypeMention] My3Attribute -# 131| 0: [IntLiteral] 13 +# 132| 1: [DefaultAttribute] [My3(...)] +# 132| -1: [TypeMention] My3Attribute +# 132| 0: [IntLiteral] 13 #-----| 2: (Parameters) -# 133| 0: [Parameter] value +# 134| 0: [Parameter] value #-----| 0: (Attributes) -# 132| 1: [DefaultAttribute] [My3(...)] -# 132| -1: [TypeMention] My3Attribute -# 132| 0: [IntLiteral] 14 -# 133| 4: [BlockStmt] {...} -# 133| 0: [ExprStmt] ...; -# 133| 0: [AssignExpr] ... = ... -# 133| 0: [FieldAccess] access to field p -# 133| 1: [ParameterAccess] access to parameter value -# 137| [Class] Class1 -# 139| 5: [Class] ParamsAttribute +# 133| 1: [DefaultAttribute] [My3(...)] +# 133| -1: [TypeMention] My3Attribute +# 133| 0: [IntLiteral] 14 +# 134| 4: [BlockStmt] {...} +# 134| 0: [ExprStmt] ...; +# 134| 0: [AssignExpr] ... = ... +# 134| 0: [FieldAccess] access to field p +# 134| 1: [ParameterAccess] access to parameter value +# 138| [Class] Class1 +# 140| 5: [Class] ParamsAttribute #-----| 3: (Base types) -# 139| 0: [TypeMention] Attribute -# 141| 4: [InstanceConstructor] ParamsAttribute +# 140| 0: [TypeMention] Attribute +# 142| 4: [InstanceConstructor] ParamsAttribute #-----| 2: (Parameters) -# 141| 0: [Parameter] s1 -# 141| -1: [TypeMention] string -# 141| 1: [Parameter] s2 -# 141| -1: [TypeMention] string -# 141| 2: [Parameter] args -# 141| -1: [TypeMention] Int32[] -# 141| 1: [TypeMention] int -# 141| 4: [BlockStmt] {...} -# 145| 6: [Method] M1 -# 145| -1: [TypeMention] Void +# 142| 0: [Parameter] s1 +# 142| -1: [TypeMention] string +# 142| 1: [Parameter] s2 +# 142| -1: [TypeMention] string +# 142| 2: [Parameter] args +# 142| -1: [TypeMention] Int32[] +# 142| 1: [TypeMention] int +# 142| 4: [BlockStmt] {...} +# 146| 6: [Method] M1 +# 146| -1: [TypeMention] Void #-----| 0: (Attributes) -# 144| 1: [DefaultAttribute] [Params(...)] -# 144| -1: [TypeMention] ParamsAttribute -# 144| 0: [StringLiteralUtf16] "a" -# 144| 1: [StringLiteralUtf16] "b" -# 144| 2: [IntLiteral] 1 -# 144| 3: [IntLiteral] 2 -# 144| 4: [IntLiteral] 3 -# 145| 4: [BlockStmt] {...} -# 148| 7: [Method] M2 -# 148| -1: [TypeMention] Void +# 145| 1: [DefaultAttribute] [Params(...)] +# 145| -1: [TypeMention] ParamsAttribute +# 145| 0: [StringLiteralUtf16] "a" +# 145| 1: [StringLiteralUtf16] "b" +# 145| 2: [IntLiteral] 1 +# 145| 3: [IntLiteral] 2 +# 145| 4: [IntLiteral] 3 +# 146| 4: [BlockStmt] {...} +# 149| 7: [Method] M2 +# 149| -1: [TypeMention] Void #-----| 0: (Attributes) -# 147| 1: [DefaultAttribute] [Params(...)] -# 147| -1: [TypeMention] ParamsAttribute -# 147| 0: [StringLiteralUtf16] "a" -# 147| 1: [StringLiteralUtf16] "b" -# 147| 2: [IntLiteral] 1 -# 147| 3: [IntLiteral] 2 -# 147| 4: [IntLiteral] 3 -# 148| 4: [BlockStmt] {...} -# 151| 8: [Method] M3 -# 151| -1: [TypeMention] Void +# 148| 1: [DefaultAttribute] [Params(...)] +# 148| -1: [TypeMention] ParamsAttribute +# 148| 0: [StringLiteralUtf16] "a" +# 148| 1: [StringLiteralUtf16] "b" +# 148| 2: [IntLiteral] 1 +# 148| 3: [IntLiteral] 2 +# 148| 4: [IntLiteral] 3 +# 149| 4: [BlockStmt] {...} +# 152| 8: [Method] M3 +# 152| -1: [TypeMention] Void #-----| 0: (Attributes) -# 150| 1: [DefaultAttribute] [Params(...)] -# 150| -1: [TypeMention] ParamsAttribute -# 150| 0: [StringLiteralUtf16] "a" -# 150| 1: [StringLiteralUtf16] "b" -# 150| 2: [IntLiteral] 1 -# 151| 4: [BlockStmt] {...} -# 154| 9: [Method] M4 -# 154| -1: [TypeMention] Void +# 151| 1: [DefaultAttribute] [Params(...)] +# 151| -1: [TypeMention] ParamsAttribute +# 151| 0: [StringLiteralUtf16] "a" +# 151| 1: [StringLiteralUtf16] "b" +# 151| 2: [IntLiteral] 1 +# 152| 4: [BlockStmt] {...} +# 155| 9: [Method] M4 +# 155| -1: [TypeMention] Void #-----| 0: (Attributes) -# 153| 1: [DefaultAttribute] [Params(...)] -# 153| -1: [TypeMention] ParamsAttribute -# 153| 0: [StringLiteralUtf16] "a" -# 153| 1: [StringLiteralUtf16] "b" -# 153| 2: [ArrayCreation] array creation of type Int32[] -# 153| -1: [ArrayInitializer] { ..., ... } -# 153| 0: [IntLiteral] 1 -# 154| 4: [BlockStmt] {...} -# 158| [Class] MyExperimentalClass +# 154| 1: [DefaultAttribute] [Params(...)] +# 154| -1: [TypeMention] ParamsAttribute +# 154| 0: [StringLiteralUtf16] "a" +# 154| 1: [StringLiteralUtf16] "b" +# 154| 2: [ArrayCreation] array creation of type Int32[] +# 154| -1: [ArrayInitializer] { ..., ... } +# 154| 0: [IntLiteral] 1 +# 155| 4: [BlockStmt] {...} +# 159| [Class] MyExperimentalClass #-----| 0: (Attributes) -# 157| 1: [DefaultAttribute] [Experimental(...)] -# 157| -1: [TypeMention] ExperimentalAttribute -# 157| 0: [StringLiteralUtf16] "MyExperimentalClassId" -# 161| 5: [Method] MyExperimentalMethod -# 161| -1: [TypeMention] Void +# 158| 1: [DefaultAttribute] [Experimental(...)] +# 158| -1: [TypeMention] ExperimentalAttribute +# 158| 0: [StringLiteralUtf16] "MyExperimentalClassId" +# 162| 5: [Method] MyExperimentalMethod +# 162| -1: [TypeMention] Void #-----| 0: (Attributes) -# 160| 1: [DefaultAttribute] [Experimental(...)] -# 160| -1: [TypeMention] ExperimentalAttribute -# 160| 0: [StringLiteralUtf16] "MyExperimentalMethodId" -# 161| 4: [BlockStmt] {...} +# 161| 1: [DefaultAttribute] [Experimental(...)] +# 161| -1: [TypeMention] ExperimentalAttribute +# 161| 0: [StringLiteralUtf16] "MyExperimentalMethodId" +# 162| 4: [BlockStmt] {...} diff --git a/csharp/ql/test/library-tests/attributes/attributes.cs b/csharp/ql/test/library-tests/attributes/attributes.cs index 9b77535460c6..99af375503ae 100644 --- a/csharp/ql/test/library-tests/attributes/attributes.cs +++ b/csharp/ql/test/library-tests/attributes/attributes.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Reflection; From 08fc5644ebb56d79f2fd11b367f43fa9bf2b09b3 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 23 Jan 2025 13:54:44 +0100 Subject: [PATCH 4/8] C#: Add some attributes test example code with overload resolution priority attribute. --- .../ql/test/library-tests/attributes/attributes.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/csharp/ql/test/library-tests/attributes/attributes.cs b/csharp/ql/test/library-tests/attributes/attributes.cs index 99af375503ae..b970502efc05 100644 --- a/csharp/ql/test/library-tests/attributes/attributes.cs +++ b/csharp/ql/test/library-tests/attributes/attributes.cs @@ -161,3 +161,15 @@ public class MyExperimentalClass [Experimental("MyExperimentalMethodId")] public void MyExperimentalMethod() { } } + +public class MyOverloadResolutionClass +{ + [OverloadResolutionPriority(-1)] + public void M(int[] arr) { } + + [OverloadResolutionPriority(1)] + public void M(IEnumerable e) { } + + [OverloadResolutionPriority(2)] + public void M(ReadOnlySpan s) { } +} From 568d3cc161170fcefb21a14790290aa63e69d4ca Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 23 Jan 2025 13:55:01 +0100 Subject: [PATCH 5/8] C#: Update attributes test expected output. --- .../attributes/AttributeArguments.expected | 6 ++++ .../attributes/AttributeElements.expected | 3 ++ .../attributes/PrintAst.expected | 35 +++++++++++++++++++ 3 files changed, 44 insertions(+) diff --git a/csharp/ql/test/library-tests/attributes/AttributeArguments.expected b/csharp/ql/test/library-tests/attributes/AttributeArguments.expected index e6e2154ea5d1..29ba5eb0b048 100644 --- a/csharp/ql/test/library-tests/attributes/AttributeArguments.expected +++ b/csharp/ql/test/library-tests/attributes/AttributeArguments.expected @@ -110,6 +110,9 @@ arguments | attributes.cs:154:6:154:11 | [Params(...)] | 2 | attributes.cs:154:19:154:29 | array creation of type Int32[] | | attributes.cs:158:2:158:13 | [Experimental(...)] | 0 | attributes.cs:158:15:158:37 | "MyExperimentalClassId" | | attributes.cs:161:6:161:17 | [Experimental(...)] | 0 | attributes.cs:161:19:161:42 | "MyExperimentalMethodId" | +| attributes.cs:167:6:167:31 | [OverloadResolutionPriority(...)] | 0 | attributes.cs:167:33:167:34 | -... | +| attributes.cs:170:6:170:31 | [OverloadResolutionPriority(...)] | 0 | attributes.cs:170:33:170:33 | 1 | +| attributes.cs:173:6:173:31 | [OverloadResolutionPriority(...)] | 0 | attributes.cs:173:33:173:33 | 2 | constructorArguments | Assembly1.dll:0:0:0:0 | [Custom(...)] | 0 | Assembly1.dll:0:0:0:0 | 1 | | Assembly1.dll:0:0:0:0 | [Custom(...)] | 0 | Assembly1.dll:0:0:0:0 | 3 | @@ -210,6 +213,9 @@ constructorArguments | attributes.cs:154:6:154:11 | [Params(...)] | 2 | attributes.cs:154:19:154:29 | array creation of type Int32[] | | attributes.cs:158:2:158:13 | [Experimental(...)] | 0 | attributes.cs:158:15:158:37 | "MyExperimentalClassId" | | attributes.cs:161:6:161:17 | [Experimental(...)] | 0 | attributes.cs:161:19:161:42 | "MyExperimentalMethodId" | +| attributes.cs:167:6:167:31 | [OverloadResolutionPriority(...)] | 0 | attributes.cs:167:33:167:34 | -... | +| attributes.cs:170:6:170:31 | [OverloadResolutionPriority(...)] | 0 | attributes.cs:170:33:170:33 | 1 | +| attributes.cs:173:6:173:31 | [OverloadResolutionPriority(...)] | 0 | attributes.cs:173:33:173:33 | 2 | namedArguments | Assembly1.dll:0:0:0:0 | [Custom(...)] | Prop2 | Assembly1.dll:0:0:0:0 | array creation of type Object[] | | Assembly1.dll:0:0:0:0 | [Custom(...)] | Prop2 | Assembly1.dll:0:0:0:0 | array creation of type Object[] | diff --git a/csharp/ql/test/library-tests/attributes/AttributeElements.expected b/csharp/ql/test/library-tests/attributes/AttributeElements.expected index e03401c2331a..d792faa7a1a5 100644 --- a/csharp/ql/test/library-tests/attributes/AttributeElements.expected +++ b/csharp/ql/test/library-tests/attributes/AttributeElements.expected @@ -40,6 +40,9 @@ | attributes.cs:155:17:155:18 | M4 | attributes.cs:154:6:154:11 | [Params(...)] | Class1+ParamsAttribute | | attributes.cs:159:14:159:32 | MyExperimentalClass | attributes.cs:158:2:158:13 | [Experimental(...)] | System.Diagnostics.CodeAnalysis.ExperimentalAttribute | | attributes.cs:162:17:162:36 | MyExperimentalMethod | attributes.cs:161:6:161:17 | [Experimental(...)] | System.Diagnostics.CodeAnalysis.ExperimentalAttribute | +| attributes.cs:168:17:168:17 | M | attributes.cs:167:6:167:31 | [OverloadResolutionPriority(...)] | System.Runtime.CompilerServices.OverloadResolutionPriorityAttribute | +| attributes.cs:171:17:171:17 | M | attributes.cs:170:6:170:31 | [OverloadResolutionPriority(...)] | System.Runtime.CompilerServices.OverloadResolutionPriorityAttribute | +| attributes.cs:174:17:174:17 | M | attributes.cs:173:6:173:31 | [OverloadResolutionPriority(...)] | System.Runtime.CompilerServices.OverloadResolutionPriorityAttribute | | attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:12:12:12:24 | [assembly: AssemblyTitle(...)] | System.Reflection.AssemblyTitleAttribute | | attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:13:12:13:30 | [assembly: AssemblyDescription(...)] | System.Reflection.AssemblyDescriptionAttribute | | attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:14:12:14:32 | [assembly: AssemblyConfiguration(...)] | System.Reflection.AssemblyConfigurationAttribute | diff --git a/csharp/ql/test/library-tests/attributes/PrintAst.expected b/csharp/ql/test/library-tests/attributes/PrintAst.expected index c551087a831f..00412ae011a2 100644 --- a/csharp/ql/test/library-tests/attributes/PrintAst.expected +++ b/csharp/ql/test/library-tests/attributes/PrintAst.expected @@ -479,3 +479,38 @@ attributes.cs: # 161| -1: [TypeMention] ExperimentalAttribute # 161| 0: [StringLiteralUtf16] "MyExperimentalMethodId" # 162| 4: [BlockStmt] {...} +# 165| [Class] MyOverloadResolutionClass +# 168| 5: [Method] M +# 168| -1: [TypeMention] Void +#-----| 0: (Attributes) +# 167| 1: [DefaultAttribute] [OverloadResolutionPriority(...)] +# 167| -1: [TypeMention] OverloadResolutionPriorityAttribute +# 167| 0: [UnaryMinusExpr] -... +# 167| 0: [IntLiteral] 1 +#-----| 2: (Parameters) +# 168| 0: [Parameter] arr +# 168| -1: [TypeMention] Int32[] +# 168| 1: [TypeMention] int +# 168| 4: [BlockStmt] {...} +# 171| 6: [Method] M +# 171| -1: [TypeMention] Void +#-----| 0: (Attributes) +# 170| 1: [DefaultAttribute] [OverloadResolutionPriority(...)] +# 170| -1: [TypeMention] OverloadResolutionPriorityAttribute +# 170| 0: [IntLiteral] 1 +#-----| 2: (Parameters) +# 171| 0: [Parameter] e +# 171| -1: [TypeMention] IEnumerable +# 171| 1: [TypeMention] int +# 171| 4: [BlockStmt] {...} +# 174| 7: [Method] M +# 174| -1: [TypeMention] Void +#-----| 0: (Attributes) +# 173| 1: [DefaultAttribute] [OverloadResolutionPriority(...)] +# 173| -1: [TypeMention] OverloadResolutionPriorityAttribute +# 173| 0: [IntLiteral] 2 +#-----| 2: (Parameters) +# 174| 0: [Parameter] s +# 174| -1: [TypeMention] ReadOnlySpan +# 174| 1: [TypeMention] int +# 174| 4: [BlockStmt] {...} From a6d16e79d98f624e9c41c1ce0718966d380000c5 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 23 Jan 2025 14:17:52 +0100 Subject: [PATCH 6/8] C#: Add overload resolution priority attribute class. --- csharp/ql/lib/semmle/code/csharp/Attribute.qll | 3 +++ .../system/runtime/CompilerServices.qll | 16 +++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/csharp/ql/lib/semmle/code/csharp/Attribute.qll b/csharp/ql/lib/semmle/code/csharp/Attribute.qll index f60ffcd6a400..4dd48af86fed 100644 --- a/csharp/ql/lib/semmle/code/csharp/Attribute.qll +++ b/csharp/ql/lib/semmle/code/csharp/Attribute.qll @@ -69,6 +69,9 @@ class Attribute extends TopLevelExprParent, @attribute { attributes(this, _, getTypeRef(result), _) } + /** Gets the namespace containing the attribute type declaration. */ + Namespace getNamespace() { result = this.getType().getNamespace() } + /** Gets the element that this attribute is attached to. */ Attributable getTarget() { attributes(this, _, _, result) } diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/system/runtime/CompilerServices.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/system/runtime/CompilerServices.qll index 60f7ecd82f1c..2c0ba292b9c5 100644 --- a/csharp/ql/lib/semmle/code/csharp/frameworks/system/runtime/CompilerServices.qll +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/system/runtime/CompilerServices.qll @@ -74,7 +74,8 @@ class SystemRuntimeCompilerServicesConfiguredTaskAwaitableTConfiguredTaskAwaiter /** An attribute of type `System.Runtime.CompilerServices.InlineArrayAttribute`. */ class SystemRuntimeCompilerServicesInlineArrayAttribute extends Attribute { SystemRuntimeCompilerServicesInlineArrayAttribute() { - this.getType().hasFullyQualifiedName("System.Runtime.CompilerServices", "InlineArrayAttribute") + this.getNamespace() instanceof SystemRuntimeCompilerServicesNamespace and + this.getType().hasName("InlineArrayAttribute") } /** @@ -82,3 +83,16 @@ class SystemRuntimeCompilerServicesInlineArrayAttribute extends Attribute { */ int getLength() { result = this.getConstructorArgument(0).getValue().toInt() } } + +/** An attribute of type `System.Runtime.CompilerServices.OverloadResolutionPriority`. */ +class SystemRuntimeCompilerServicesOverloadResolutionPriorityAttribute extends Attribute { + SystemRuntimeCompilerServicesOverloadResolutionPriorityAttribute() { + this.getNamespace() instanceof SystemRuntimeCompilerServicesNamespace and + this.getType().hasName("OverloadResolutionPriorityAttribute") + } + + /** + * Gets the priority number. + */ + int getPriority() { result = this.getConstructorArgument(0).getValue().toInt() } +} From 0a2a8e97017c431009bb9304f18ce88aa7b0f32c Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 23 Jan 2025 14:19:58 +0100 Subject: [PATCH 7/8] C#: Add attribute test for the OverloadResolutionAttribute attribute class. --- .../attributes/OverloadResolutionPriority.expected | 3 +++ .../library-tests/attributes/OverloadResolutionPriority.ql | 7 +++++++ 2 files changed, 10 insertions(+) create mode 100644 csharp/ql/test/library-tests/attributes/OverloadResolutionPriority.expected create mode 100644 csharp/ql/test/library-tests/attributes/OverloadResolutionPriority.ql diff --git a/csharp/ql/test/library-tests/attributes/OverloadResolutionPriority.expected b/csharp/ql/test/library-tests/attributes/OverloadResolutionPriority.expected new file mode 100644 index 000000000000..7ed7ded2631e --- /dev/null +++ b/csharp/ql/test/library-tests/attributes/OverloadResolutionPriority.expected @@ -0,0 +1,3 @@ +| attributes.cs:168:17:168:17 | M | attributes.cs:167:6:167:31 | [OverloadResolutionPriority(...)] | -1 | +| attributes.cs:171:17:171:17 | M | attributes.cs:170:6:170:31 | [OverloadResolutionPriority(...)] | 1 | +| attributes.cs:174:17:174:17 | M | attributes.cs:173:6:173:31 | [OverloadResolutionPriority(...)] | 2 | diff --git a/csharp/ql/test/library-tests/attributes/OverloadResolutionPriority.ql b/csharp/ql/test/library-tests/attributes/OverloadResolutionPriority.ql new file mode 100644 index 000000000000..9ec6a048b8c0 --- /dev/null +++ b/csharp/ql/test/library-tests/attributes/OverloadResolutionPriority.ql @@ -0,0 +1,7 @@ +import csharp +import semmle.code.csharp.frameworks.system.runtime.CompilerServices + +from + Attributable element, SystemRuntimeCompilerServicesOverloadResolutionPriorityAttribute attribute +where attribute = element.getAnAttribute() and attribute.fromSource() +select element, attribute, attribute.getPriority() From 340f3c0fd57901078da400446afc063ddc5ded13 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 23 Jan 2025 14:24:24 +0100 Subject: [PATCH 8/8] C#: Add change note. --- .../change-notes/2025-01-23-overload-resolution-priority.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 csharp/ql/lib/change-notes/2025-01-23-overload-resolution-priority.md diff --git a/csharp/ql/lib/change-notes/2025-01-23-overload-resolution-priority.md b/csharp/ql/lib/change-notes/2025-01-23-overload-resolution-priority.md new file mode 100644 index 000000000000..f71a457166d2 --- /dev/null +++ b/csharp/ql/lib/change-notes/2025-01-23-overload-resolution-priority.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* C# 13: Added support for the overload resolution priority attribute (`OverloadResolutionPriority`). Usages of the attribute and the corresponding priority can be found using the QL class `SystemRuntimeCompilerServicesOverloadResolutionPriorityAttribute`.