{"action":"closed","issue":{"url":"https://api.github.com/repos/dotnet/roslyn/issues/25235","repository_url":"https://api.github.com/repos/dotnet/roslyn","labels_url":"https://api.github.com/repos/dotnet/roslyn/issues/25235/labels{/name}","comments_url":"https://api.github.com/repos/dotnet/roslyn/issues/25235/comments","events_url":"https://api.github.com/repos/dotnet/roslyn/issues/25235/events","html_url":"https://github.com/dotnet/roslyn/issues/25235","id":302487011,"number":25235,"title":"Test plan for Improved Overload Candidates","user":{"login":"cston","id":10732005,"avatar_url":"https://avatars2.githubusercontent.com/u/10732005?v=4","gravatar_id":"","url":"https://api.github.com/users/cston","html_url":"https://github.com/cston","followers_url":"https://api.github.com/users/cston/followers","following_url":"https://api.github.com/users/cston/following{/other_user}","gists_url":"https://api.github.com/users/cston/gists{/gist_id}","starred_url":"https://api.github.com/users/cston/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cston/subscriptions","organizations_url":"https://api.github.com/users/cston/orgs","repos_url":"https://api.github.com/users/cston/repos","events_url":"https://api.github.com/users/cston/events{/privacy}","received_events_url":"https://api.github.com/users/cston/received_events","type":"User","site_admin":false},"labels":[{"id":166673288,"url":"https://api.github.com/repos/dotnet/roslyn/labels/Area-Compilers","name":"Area-Compilers","color":"5319e7","default":false},{"id":177731791,"url":"https://api.github.com/repos/dotnet/roslyn/labels/Test","name":"Test","color":"e52727","default":false}],"state":"closed","locked":false,"assignee":{"login":"cston","id":10732005,"avatar_url":"https://avatars2.githubusercontent.com/u/10732005?v=4","gravatar_id":"","url":"https://api.github.com/users/cston","html_url":"https://github.com/cston","followers_url":"https://api.github.com/users/cston/followers","following_url":"https://api.github.com/users/cston/following{/other_user}","gists_url":"https://api.github.com/users/cston/gists{/gist_id}","starred_url":"https://api.github.com/users/cston/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cston/subscriptions","organizations_url":"https://api.github.com/users/cston/orgs","repos_url":"https://api.github.com/users/cston/repos","events_url":"https://api.github.com/users/cston/events{/privacy}","received_events_url":"https://api.github.com/users/cston/received_events","type":"User","site_admin":false},"assignees":[{"login":"cston","id":10732005,"avatar_url":"https://avatars2.githubusercontent.com/u/10732005?v=4","gravatar_id":"","url":"https://api.github.com/users/cston","html_url":"https://github.com/cston","followers_url":"https://api.github.com/users/cston/followers","following_url":"https://api.github.com/users/cston/following{/other_user}","gists_url":"https://api.github.com/users/cston/gists{/gist_id}","starred_url":"https://api.github.com/users/cston/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cston/subscriptions","organizations_url":"https://api.github.com/users/cston/orgs","repos_url":"https://api.github.com/users/cston/repos","events_url":"https://api.github.com/users/cston/events{/privacy}","received_events_url":"https://api.github.com/users/cston/received_events","type":"User","site_admin":false}],"milestone":{"url":"https://api.github.com/repos/dotnet/roslyn/milestones/32","html_url":"https://github.com/dotnet/roslyn/milestone/32","labels_url":"https://api.github.com/repos/dotnet/roslyn/milestones/32/labels","id":2817494,"number":32,"title":"15.7","description":null,"creator":{"login":"sharwell","id":1408396,"avatar_url":"https://avatars1.githubusercontent.com/u/1408396?v=4","gravatar_id":"","url":"https://api.github.com/users/sharwell","html_url":"https://github.com/sharwell","followers_url":"https://api.github.com/users/sharwell/followers","following_url":"https://api.github.com/users/sharwell/following{/other_user}","gists_url":"https://api.github.com/users/sharwell/gists{/gist_id}","starred_url":"https://api.github.com/users/sharwell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sharwell/subscriptions","organizations_url":"https://api.github.com/users/sharwell/orgs","repos_url":"https://api.github.com/users/sharwell/repos","events_url":"https://api.github.com/users/sharwell/events{/privacy}","received_events_url":"https://api.github.com/users/sharwell/received_events","type":"User","site_admin":false},"open_issues":103,"closed_issues":348,"state":"open","created_at":"2017-10-05T14:58:29Z","updated_at":"2018-04-06T19:56:42Z","due_on":null,"closed_at":null},"comments":3,"created_at":"2018-03-05T22:19:26Z","updated_at":"2018-04-06T19:56:42Z","closed_at":"2018-04-06T19:56:42Z","author_association":"CONTRIBUTOR","body":"Test plan for **Improved Overload Candidates**, aka **Bestest Betterness**.\r\n\r\nChampioned language proposal: https://github.com/dotnet/csharplang/issues/98\r\nInitial implementation: https://github.com/dotnet/roslyn/pull/24756\r\n\r\n## General\r\n- [ ] No change to overload resolution with `/langversion=7.2`\r\n  - [x] Run test pass with `LanguageVersion.Latest = CSharp7_2` to verify (Neal: done 2018-03-19. Many minor changes to the character range associated with the diagnostics for overload resolution changes where the source is still an error. It failed final verification before but now failed to find a candidate; we give the same error message, but where we used to point to the whole invocation, now we point just to the method being invoked. The tests expect the C# 7.3 location but the errors are at the C# 7.2 location)\r\n- [ ] If overload resolution does not find a matching candidate after dropping candidates with new rules, all candidates are considered for error reporting, unchanged from 7.2 (Neal: Roughly correct, verified in all modified tests which test old and new versions. However, these new failure reasons are prioritized for reporting purposes so we generate the same diagnostic that we previously used to report during final validation. It is easy to identify these apparently unaffected but technically affected tests because it changes the character range on which the diagnostic is reported. See https://github.com/dotnet/roslyn/pull/24756)\r\n\r\n## Instance and static members\r\n- [ ] Overload resolution ignores _static_ methods and indexed properties when (Indexed properties are not relevant. C# does not support static indexed properties. Soon see `IndexedPropertyTest01`)\r\n  - [ ] invoked with an explicit receiver (see `TestInstanceReceiver01`)\r\n  - [ ] invoked with `this` or `base` (soon see `TestInstanceReceiver02`)\r\n  - [ ] implicitly invoked `Add()` method in a collection initializer (soon see `TestInstanceReceiver03`)\r\n  - [ ] implicitly invoked `GetEnumerator()` and `MoveNext()` in `foreach` (soon see `TestInstanceReceiver04` and `TestInstanceReceiver05`)\r\n  - [ ] implicitly invoked `Deconstruct()` (soon see `TestInstanceReceiver06`)\r\n  - [ ] implicitly invoked `GetAwaiter()` and `GetResult()` for `await` (soon see `TestInstanceReceiver07` and `TestInstanceReceiver08`)\r\n  - [ ] implicitly invoked method from LINQ query on instance (soon see `TestInstanceReceiver09`)\r\n- [ ] Overload resolution ignores _instance_ methods and indexed properties when\r\n  - [ ] invoked with an explicit type qualifier and with no field or property with the same name as the type (see `TestStaticReceiver01` and others)\r\n  - [ ] invoked without a qualifier in a static member (see `TestStaticContext01`)\r\n  - [ ] invoked without a qualifier in a field initializer or property initializer (see `TestStaticContext02`)\r\n  - [ ] invoked without a qualifier in a constructor initializer `this(...)` or `base(...)` (see `TestStaticContext04`)\r\n  - [ ] invoked without a qualifier in an attribute argument (see `TestStaticContext05`)\r\n  - [ ] invoked without a qualifier in a default parameter value (Not so. soon see `TestStaticContext06`. Though today it doesn't make any difference for legal programs, a parameter default value is not a static context in an instance method. That will remain so in order to support the proposal for \"with\" methods in records.)\r\n  - [ ] implicitly invoked method from LINQ query on type (see `QueryTests.QueryOnLambda`)\r\n- [ ] Overload resolution considers both instance and static methods and indexed properties (unchanged from 7.2) when\r\n  - [ ] invoked without an explicit receiver in instance method (see `TestInstanceContext01`)\r\n  - [ ] invoked with an explicit type qualifier with a field or property with the same name as the type (see `TestAmbiguousContext01`)\r\n- [ ] `SymbolInfo.CandidateSymbols` will include all overloads on failure, including those that would be dropped on success, unchanged from 7.2 (soon see `TestAmbiguous01`)\r\n- [ ] IDE Name Simplification\r\n  - [ ] should not offer to remove receiver from `this.F(...)` or `base.F(...)` if an ambiguous static overload exists\r\n  - [ ] should not offer to remove type qualifier from `Type.F(...)` if an ambiguous instance overload exists\r\n  - [ ] should offer to remove type qualifier from `Type.F(...)` in static contexts (such as field or constructor initializer) even when an instance overload exists\r\n\r\n## Constraints not satisfied\r\n- [ ] Overload resolution with generic methods ignores methods where type arguments do not satisfy constraints when\r\n  - [ ] type arguments are implicit (see `TestConstraintFailed01` et al)\r\n  - [ ] type arguments are explicit (see `OverloadResolutionTests.TestConstraintViolationApplicabilityErrors`)\r\n- [ ] Overloads for `ref struct` and `T*` can be invoked successfully even when generic overloads exist since `ref struct` and `T*` are not valid type arguments (see `TestConstraintFailed04`, `TestConstraintFailed05`)\r\n- [ ] `SymbolInfo.CandidateSymbols` will not include methods where type arguments do not satisfy constraints (It does include all overloads on failure. We don't remove \"filtered-out\" candidates today and this PR doesn't change that. Soon see `TestAmbiguous02` and `TestAmbiguous03`)\r\n\r\n## Method group return type or `ref` mismatch\r\n- [ ] Method group conversion ignores\r\n  - [ ] methods for which there is not an identity or implicit reference conversion from the method return type to the delegate type (see `TestReturnTypeMismatch01` et al)\r\n  - [ ] methods that are `ref` returning if the delegate is not `ref` returning (see `TestReturnRefMismatch01`)\r\n  - [ ] methods that are not `ref` returning if the delegate is `ref` returning (soon see `TestReturnRefMismatch02`)\r\n- [ ] **`SymbolInfo.CandidateSymbols` will not include methods that do not match delegate return type** or `ref` (it *will* include them, as we do not remove \"filtered\" candidates today; soon see `TestAmbiguous04`)\r\n"}}
{"actor":{"display_login":"cston"}}