{"action":"created","issue":{"url":"https://api.github.com/repos/dotnet/roslyn/issues/25087","repository_url":"https://api.github.com/repos/dotnet/roslyn","labels_url":"https://api.github.com/repos/dotnet/roslyn/issues/25087/labels{/name}","comments_url":"https://api.github.com/repos/dotnet/roslyn/issues/25087/comments","events_url":"https://api.github.com/repos/dotnet/roslyn/issues/25087/events","html_url":"https://github.com/dotnet/roslyn/pull/25087","id":300721021,"number":25087,"title":"Use IsNullable=null for types from unannotated assemblies","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":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":2,"created_at":"2018-02-27T17:22:05Z","updated_at":"2018-02-27T22:36:02Z","closed_at":null,"author_association":"CONTRIBUTOR","pull_request":{"url":"https://api.github.com/repos/dotnet/roslyn/pulls/25087","html_url":"https://github.com/dotnet/roslyn/pull/25087","diff_url":"https://github.com/dotnet/roslyn/pull/25087.diff","patch_url":"https://github.com/dotnet/roslyn/pull/25087.patch"},"body":"Treat reference types from unannotated assemblies (and from compilations compiled with C#7) as \"null oblivious\".\r\n\r\n`IsNullable` is set to `null` for reference types in member signatures for PE symbols and for source symbols compiled when `LanguageVersion < Latest`. \r\n\r\nMany of the changes in the PR are simply passing the `ContainingModule` to `TypeSymbolWithAnnotations.Create()` so that method can determine whether to set `IsNullable` for the resulting type.\r\n\r\nThere are still several cases where reference types have `IsNullable` set (incorrectly) in member signatures when `LanguageVersion < Latest`:\r\n- Type parameter constraint types\r\n- Type arguments in parameter and return types for explicit implementations\r\n- Type arguments in parameter and return types of overridden generic methods\r\n\r\nThe incorrect `IsNullable` state is not observable within that project (nullable warnings are not generated if feature is not enabled), and it is not observable when referencing the generated assembly in another project (no `[Nullable]` attributes are emitted). But it is observable when referencing such a project from a C#8 project through a project-to-project reference.\r\n"},"comment":{"url":"https://api.github.com/repos/dotnet/roslyn/issues/comments/369051725","html_url":"https://github.com/dotnet/roslyn/pull/25087#issuecomment-369051725","issue_url":"https://api.github.com/repos/dotnet/roslyn/issues/25087","id":369051725,"user":{"login":"jcouv","id":12466233,"avatar_url":"https://avatars2.githubusercontent.com/u/12466233?v=4","gravatar_id":"","url":"https://api.github.com/users/jcouv","html_url":"https://github.com/jcouv","followers_url":"https://api.github.com/users/jcouv/followers","following_url":"https://api.github.com/users/jcouv/following{/other_user}","gists_url":"https://api.github.com/users/jcouv/gists{/gist_id}","starred_url":"https://api.github.com/users/jcouv/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jcouv/subscriptions","organizations_url":"https://api.github.com/users/jcouv/orgs","repos_url":"https://api.github.com/users/jcouv/repos","events_url":"https://api.github.com/users/jcouv/events{/privacy}","received_events_url":"https://api.github.com/users/jcouv/received_events","type":"User","site_admin":false},"created_at":"2018-02-27T22:36:02Z","updated_at":"2018-02-27T22:36:02Z","author_association":"MEMBER","body":">         internal static TypeSymbolWithAnnotations TransformType(\r\n\r\nPerhaps add a comment that this returns with `true` or `false` nullability on all the types (but no `null`s).\r\n\r\n---\r\nRefers to: src/Compilers/CSharp/Portable/Symbols/Metadata/PE/NullableTypeDecoder.cs:11 in 4671bcd. [](commit_id = 4671bcd809f36df0942019094b3f60dca8d7a6d8, deletion_comment = False)"}}
{"actor":{"display_login":"jcouv"}}