{"action":"created","comment":{"url":"https://api.github.com/repos/dotnet/machinelearning/pulls/comments/187159339","pull_request_review_id":118884096,"id":187159339,"diff_hunk":"@@ -495,16 +495,56 @@ private void GenerateFooter(IndentingTextWriter writer)\n             writer.WriteLine();\n         }\n \n-        static string GetSymbolFromType(Dictionary<string, string> typesSymbolTable, string fullTypeName, string currentNamespace)\n+        static string GetSymbolFromType(Dictionary<string, string> typesSymbolTable, Type type, string currentNamespace)\n         {\n+            var fullTypeName = type.FullName;\n             var names = typesSymbolTable.Select(kvp => kvp.Value);\n             char dim = fullTypeName.Contains('+') ? '+' : '.';\n             string name = currentNamespace != \"\" ? currentNamespace + '.' : \"\";\n \n+            Type[] genericTypes = null;\n+            if (type.IsGenericType)\n+                genericTypes = type.GetGenericArguments();\n+\n             if (fullTypeName.Contains('+'))\n-                name += fullTypeName.Substring(0, fullTypeName.LastIndexOf('+')).Substring(fullTypeName.LastIndexOf('.') + 1);\n+            {\n+                int bracketIndex = fullTypeName.IndexOf('[');\n+                if (bracketIndex > 0)\n+                {\n+                    Contracts.AssertValue(genericTypes);\n+                    fullTypeName = fullTypeName.Substring(0, bracketIndex);\n+                }","path":"src/Microsoft.ML/Runtime/Internal/Tools/CSharpApiGenerator.cs","position":77,"original_position":77,"commit_id":"8886ab753778ba7108e9345a8883d78837267906","original_commit_id":"8886ab753778ba7108e9345a8883d78837267906","user":{"login":"TomFinley","id":8295757,"avatar_url":"https://avatars1.githubusercontent.com/u/8295757?v=4","gravatar_id":"","url":"https://api.github.com/users/TomFinley","html_url":"https://github.com/TomFinley","followers_url":"https://api.github.com/users/TomFinley/followers","following_url":"https://api.github.com/users/TomFinley/following{/other_user}","gists_url":"https://api.github.com/users/TomFinley/gists{/gist_id}","starred_url":"https://api.github.com/users/TomFinley/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/TomFinley/subscriptions","organizations_url":"https://api.github.com/users/TomFinley/orgs","repos_url":"https://api.github.com/users/TomFinley/repos","events_url":"https://api.github.com/users/TomFinley/events{/privacy}","received_events_url":"https://api.github.com/users/TomFinley/received_events","type":"User","site_admin":false},"body":"This is some fairly elaborate string manipulation going on, the utility of which will be opaque to anyone not intimately familiar with how the .NET class naming system works, and that also does not understand the specific issues raised in issue #101 that requires its introduction.","created_at":"2018-05-09T20:03:09Z","updated_at":"2018-05-09T20:03:09Z","html_url":"https://github.com/dotnet/machinelearning/pull/102#discussion_r187159339","pull_request_url":"https://api.github.com/repos/dotnet/machinelearning/pulls/102","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/dotnet/machinelearning/pulls/comments/187159339"},"html":{"href":"https://github.com/dotnet/machinelearning/pull/102#discussion_r187159339"},"pull_request":{"href":"https://api.github.com/repos/dotnet/machinelearning/pulls/102"}}},"pull_request":{"url":"https://api.github.com/repos/dotnet/machinelearning/pulls/102","id":186998314,"html_url":"https://github.com/dotnet/machinelearning/pull/102","diff_url":"https://github.com/dotnet/machinelearning/pull/102.diff","patch_url":"https://github.com/dotnet/machinelearning/pull/102.patch","issue_url":"https://api.github.com/repos/dotnet/machinelearning/issues/102","number":102,"state":"open","locked":false,"title":"Update code generator to handle generic types and types with multiple '+' signs in them.","user":{"login":"yaeldekel","id":9617320,"avatar_url":"https://avatars1.githubusercontent.com/u/9617320?v=4","gravatar_id":"","url":"https://api.github.com/users/yaeldekel","html_url":"https://github.com/yaeldekel","followers_url":"https://api.github.com/users/yaeldekel/followers","following_url":"https://api.github.com/users/yaeldekel/following{/other_user}","gists_url":"https://api.github.com/users/yaeldekel/gists{/gist_id}","starred_url":"https://api.github.com/users/yaeldekel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yaeldekel/subscriptions","organizations_url":"https://api.github.com/users/yaeldekel/orgs","repos_url":"https://api.github.com/users/yaeldekel/repos","events_url":"https://api.github.com/users/yaeldekel/events{/privacy}","received_events_url":"https://api.github.com/users/yaeldekel/received_events","type":"User","site_admin":false},"body":"The C# code generator needs to be able to handle types that are nested inside generic classes. It should also handle types that are nested in nested classes.","created_at":"2018-05-09T18:09:45Z","updated_at":"2018-05-09T20:03:09Z","closed_at":null,"merged_at":null,"merge_commit_sha":"fb68da8a91db2bedae26748730a6c843f27400a2","assignee":null,"assignees":[],"requested_reviewers":[{"login":"codemzs","id":1211949,"avatar_url":"https://avatars3.githubusercontent.com/u/1211949?v=4","gravatar_id":"","url":"https://api.github.com/users/codemzs","html_url":"https://github.com/codemzs","followers_url":"https://api.github.com/users/codemzs/followers","following_url":"https://api.github.com/users/codemzs/following{/other_user}","gists_url":"https://api.github.com/users/codemzs/gists{/gist_id}","starred_url":"https://api.github.com/users/codemzs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codemzs/subscriptions","organizations_url":"https://api.github.com/users/codemzs/orgs","repos_url":"https://api.github.com/users/codemzs/repos","events_url":"https://api.github.com/users/codemzs/events{/privacy}","received_events_url":"https://api.github.com/users/codemzs/received_events","type":"User","site_admin":false},{"login":"eerhardt","id":8291187,"avatar_url":"https://avatars3.githubusercontent.com/u/8291187?v=4","gravatar_id":"","url":"https://api.github.com/users/eerhardt","html_url":"https://github.com/eerhardt","followers_url":"https://api.github.com/users/eerhardt/followers","following_url":"https://api.github.com/users/eerhardt/following{/other_user}","gists_url":"https://api.github.com/users/eerhardt/gists{/gist_id}","starred_url":"https://api.github.com/users/eerhardt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eerhardt/subscriptions","organizations_url":"https://api.github.com/users/eerhardt/orgs","repos_url":"https://api.github.com/users/eerhardt/repos","events_url":"https://api.github.com/users/eerhardt/events{/privacy}","received_events_url":"https://api.github.com/users/eerhardt/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/dotnet/machinelearning/pulls/102/commits","review_comments_url":"https://api.github.com/repos/dotnet/machinelearning/pulls/102/comments","review_comment_url":"https://api.github.com/repos/dotnet/machinelearning/pulls/comments{/number}","comments_url":"https://api.github.com/repos/dotnet/machinelearning/issues/102/comments","statuses_url":"https://api.github.com/repos/dotnet/machinelearning/statuses/8886ab753778ba7108e9345a8883d78837267906","head":{"label":"yaeldekel:codegen","ref":"codegen","sha":"8886ab753778ba7108e9345a8883d78837267906","user":{"login":"yaeldekel","id":9617320,"avatar_url":"https://avatars1.githubusercontent.com/u/9617320?v=4","gravatar_id":"","url":"https://api.github.com/users/yaeldekel","html_url":"https://github.com/yaeldekel","followers_url":"https://api.github.com/users/yaeldekel/followers","following_url":"https://api.github.com/users/yaeldekel/following{/other_user}","gists_url":"https://api.github.com/users/yaeldekel/gists{/gist_id}","starred_url":"https://api.github.com/users/yaeldekel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yaeldekel/subscriptions","organizations_url":"https://api.github.com/users/yaeldekel/orgs","repos_url":"https://api.github.com/users/yaeldekel/repos","events_url":"https://api.github.com/users/yaeldekel/events{/privacy}","received_events_url":"https://api.github.com/users/yaeldekel/received_events","type":"User","site_admin":false},"repo":{"id":132780511,"name":"machinelearning","full_name":"yaeldekel/machinelearning","owner":{"login":"yaeldekel","id":9617320,"avatar_url":"https://avatars1.githubusercontent.com/u/9617320?v=4","gravatar_id":"","url":"https://api.github.com/users/yaeldekel","html_url":"https://github.com/yaeldekel","followers_url":"https://api.github.com/users/yaeldekel/followers","following_url":"https://api.github.com/users/yaeldekel/following{/other_user}","gists_url":"https://api.github.com/users/yaeldekel/gists{/gist_id}","starred_url":"https://api.github.com/users/yaeldekel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yaeldekel/subscriptions","organizations_url":"https://api.github.com/users/yaeldekel/orgs","repos_url":"https://api.github.com/users/yaeldekel/repos","events_url":"https://api.github.com/users/yaeldekel/events{/privacy}","received_events_url":"https://api.github.com/users/yaeldekel/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/yaeldekel/machinelearning","description":"ML.NET is an open source and cross-platform machine learning framework for .NET.","fork":true,"url":"https://api.github.com/repos/yaeldekel/machinelearning","forks_url":"https://api.github.com/repos/yaeldekel/machinelearning/forks","keys_url":"https://api.github.com/repos/yaeldekel/machinelearning/keys{/key_id}","collaborators_url":"https://api.github.com/repos/yaeldekel/machinelearning/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/yaeldekel/machinelearning/teams","hooks_url":"https://api.github.com/repos/yaeldekel/machinelearning/hooks","issue_events_url":"https://api.github.com/repos/yaeldekel/machinelearning/issues/events{/number}","events_url":"https://api.github.com/repos/yaeldekel/machinelearning/events","assignees_url":"https://api.github.com/repos/yaeldekel/machinelearning/assignees{/user}","branches_url":"https://api.github.com/repos/yaeldekel/machinelearning/branches{/branch}","tags_url":"https://api.github.com/repos/yaeldekel/machinelearning/tags","blobs_url":"https://api.github.com/repos/yaeldekel/machinelearning/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/yaeldekel/machinelearning/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/yaeldekel/machinelearning/git/refs{/sha}","trees_url":"https://api.github.com/repos/yaeldekel/machinelearning/git/trees{/sha}","statuses_url":"https://api.github.com/repos/yaeldekel/machinelearning/statuses/{sha}","languages_url":"https://api.github.com/repos/yaeldekel/machinelearning/languages","stargazers_url":"https://api.github.com/repos/yaeldekel/machinelearning/stargazers","contributors_url":"https://api.github.com/repos/yaeldekel/machinelearning/contributors","subscribers_url":"https://api.github.com/repos/yaeldekel/machinelearning/subscribers","subscription_url":"https://api.github.com/repos/yaeldekel/machinelearning/subscription","commits_url":"https://api.github.com/repos/yaeldekel/machinelearning/commits{/sha}","git_commits_url":"https://api.github.com/repos/yaeldekel/machinelearning/git/commits{/sha}","comments_url":"https://api.github.com/repos/yaeldekel/machinelearning/comments{/number}","issue_comment_url":"https://api.github.com/repos/yaeldekel/machinelearning/issues/comments{/number}","contents_url":"https://api.github.com/repos/yaeldekel/machinelearning/contents/{+path}","compare_url":"https://api.github.com/repos/yaeldekel/machinelearning/compare/{base}...{head}","merges_url":"https://api.github.com/repos/yaeldekel/machinelearning/merges","archive_url":"https://api.github.com/repos/yaeldekel/machinelearning/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/yaeldekel/machinelearning/downloads","issues_url":"https://api.github.com/repos/yaeldekel/machinelearning/issues{/number}","pulls_url":"https://api.github.com/repos/yaeldekel/machinelearning/pulls{/number}","milestones_url":"https://api.github.com/repos/yaeldekel/machinelearning/milestones{/number}","notifications_url":"https://api.github.com/repos/yaeldekel/machinelearning/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/yaeldekel/machinelearning/labels{/name}","releases_url":"https://api.github.com/repos/yaeldekel/machinelearning/releases{/id}","deployments_url":"https://api.github.com/repos/yaeldekel/machinelearning/deployments","created_at":"2018-05-09T15:55:20Z","updated_at":"2018-05-09T15:55:25Z","pushed_at":"2018-05-09T18:23:14Z","git_url":"git://github.com/yaeldekel/machinelearning.git","ssh_url":"git@github.com:yaeldekel/machinelearning.git","clone_url":"https://github.com/yaeldekel/machinelearning.git","svn_url":"https://github.com/yaeldekel/machinelearning","homepage":"http://dot.net/ml","size":16554,"stargazers_count":0,"watchers_count":0,"language":"C#","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"dotnet:master","ref":"master","sha":"e1db5c53f0ff29fd97dca8087e7f7bedfd0b5124","user":{"login":"dotnet","id":9141961,"avatar_url":"https://avatars0.githubusercontent.com/u/9141961?v=4","gravatar_id":"","url":"https://api.github.com/users/dotnet","html_url":"https://github.com/dotnet","followers_url":"https://api.github.com/users/dotnet/followers","following_url":"https://api.github.com/users/dotnet/following{/other_user}","gists_url":"https://api.github.com/users/dotnet/gists{/gist_id}","starred_url":"https://api.github.com/users/dotnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dotnet/subscriptions","organizations_url":"https://api.github.com/users/dotnet/orgs","repos_url":"https://api.github.com/users/dotnet/repos","events_url":"https://api.github.com/users/dotnet/events{/privacy}","received_events_url":"https://api.github.com/users/dotnet/received_events","type":"Organization","site_admin":false},"repo":{"id":132021166,"name":"machinelearning","full_name":"dotnet/machinelearning","owner":{"login":"dotnet","id":9141961,"avatar_url":"https://avatars0.githubusercontent.com/u/9141961?v=4","gravatar_id":"","url":"https://api.github.com/users/dotnet","html_url":"https://github.com/dotnet","followers_url":"https://api.github.com/users/dotnet/followers","following_url":"https://api.github.com/users/dotnet/following{/other_user}","gists_url":"https://api.github.com/users/dotnet/gists{/gist_id}","starred_url":"https://api.github.com/users/dotnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dotnet/subscriptions","organizations_url":"https://api.github.com/users/dotnet/orgs","repos_url":"https://api.github.com/users/dotnet/repos","events_url":"https://api.github.com/users/dotnet/events{/privacy}","received_events_url":"https://api.github.com/users/dotnet/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/dotnet/machinelearning","description":"ML.NET is an open source and cross-platform machine learning framework for .NET.","fork":false,"url":"https://api.github.com/repos/dotnet/machinelearning","forks_url":"https://api.github.com/repos/dotnet/machinelearning/forks","keys_url":"https://api.github.com/repos/dotnet/machinelearning/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dotnet/machinelearning/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dotnet/machinelearning/teams","hooks_url":"https://api.github.com/repos/dotnet/machinelearning/hooks","issue_events_url":"https://api.github.com/repos/dotnet/machinelearning/issues/events{/number}","events_url":"https://api.github.com/repos/dotnet/machinelearning/events","assignees_url":"https://api.github.com/repos/dotnet/machinelearning/assignees{/user}","branches_url":"https://api.github.com/repos/dotnet/machinelearning/branches{/branch}","tags_url":"https://api.github.com/repos/dotnet/machinelearning/tags","blobs_url":"https://api.github.com/repos/dotnet/machinelearning/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dotnet/machinelearning/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dotnet/machinelearning/git/refs{/sha}","trees_url":"https://api.github.com/repos/dotnet/machinelearning/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dotnet/machinelearning/statuses/{sha}","languages_url":"https://api.github.com/repos/dotnet/machinelearning/languages","stargazers_url":"https://api.github.com/repos/dotnet/machinelearning/stargazers","contributors_url":"https://api.github.com/repos/dotnet/machinelearning/contributors","subscribers_url":"https://api.github.com/repos/dotnet/machinelearning/subscribers","subscription_url":"https://api.github.com/repos/dotnet/machinelearning/subscription","commits_url":"https://api.github.com/repos/dotnet/machinelearning/commits{/sha}","git_commits_url":"https://api.github.com/repos/dotnet/machinelearning/git/commits{/sha}","comments_url":"https://api.github.com/repos/dotnet/machinelearning/comments{/number}","issue_comment_url":"https://api.github.com/repos/dotnet/machinelearning/issues/comments{/number}","contents_url":"https://api.github.com/repos/dotnet/machinelearning/contents/{+path}","compare_url":"https://api.github.com/repos/dotnet/machinelearning/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dotnet/machinelearning/merges","archive_url":"https://api.github.com/repos/dotnet/machinelearning/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dotnet/machinelearning/downloads","issues_url":"https://api.github.com/repos/dotnet/machinelearning/issues{/number}","pulls_url":"https://api.github.com/repos/dotnet/machinelearning/pulls{/number}","milestones_url":"https://api.github.com/repos/dotnet/machinelearning/milestones{/number}","notifications_url":"https://api.github.com/repos/dotnet/machinelearning/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dotnet/machinelearning/labels{/name}","releases_url":"https://api.github.com/repos/dotnet/machinelearning/releases{/id}","deployments_url":"https://api.github.com/repos/dotnet/machinelearning/deployments","created_at":"2018-05-03T16:20:42Z","updated_at":"2018-05-09T19:52:21Z","pushed_at":"2018-05-09T18:23:16Z","git_url":"git://github.com/dotnet/machinelearning.git","ssh_url":"git@github.com:dotnet/machinelearning.git","clone_url":"https://github.com/dotnet/machinelearning.git","svn_url":"https://github.com/dotnet/machinelearning","homepage":"http://dot.net/ml","size":16556,"stargazers_count":1270,"watchers_count":1270,"language":"C#","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":87,"mirror_url":null,"archived":false,"open_issues_count":62,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":87,"open_issues":62,"watchers":1270,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/dotnet/machinelearning/pulls/102"},"html":{"href":"https://github.com/dotnet/machinelearning/pull/102"},"issue":{"href":"https://api.github.com/repos/dotnet/machinelearning/issues/102"},"comments":{"href":"https://api.github.com/repos/dotnet/machinelearning/issues/102/comments"},"review_comments":{"href":"https://api.github.com/repos/dotnet/machinelearning/pulls/102/comments"},"review_comment":{"href":"https://api.github.com/repos/dotnet/machinelearning/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/dotnet/machinelearning/pulls/102/commits"},"statuses":{"href":"https://api.github.com/repos/dotnet/machinelearning/statuses/8886ab753778ba7108e9345a8883d78837267906"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"TomFinley"}}