{"action":"created","comment":{"url":"https://api.github.com/repos/dotnet/roslyn/pulls/comments/69359600","id":69359600,"diff_hunk":"@@ -0,0 +1,303 @@\n+﻿' Copyright (c) Microsoft.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.\n+\n+Imports Microsoft.CodeAnalysis.CodeGen\n+Imports Microsoft.CodeAnalysis.VisualBasic.Symbols\n+Imports Microsoft.CodeAnalysis.VisualBasic.Syntax\n+Imports Roslyn.Utilities\n+Imports System.Collections.Immutable\n+Imports System.Diagnostics\n+\n+Namespace Microsoft.CodeAnalysis.VisualBasic\n+\n+    ''' <summary>\n+    ''' This type provides means for instrumenting compiled methods for dynamic analysis.\n+    ''' It can be combined with other <see cref= \"Instrumenter\" /> s.\n+    ''' </summary>\n+    Friend NotInheritable Class DynamicAnalysisInjector\n+        Inherits CompoundInstrumenter\n+\n+        Private ReadOnly _method As MethodSymbol\n+        Private ReadOnly _methodBody As BoundStatement\n+        Private ReadOnly _createPayload As MethodSymbol\n+        Private ReadOnly _spansBuilder As ArrayBuilder(Of SourceSpan)\n+        Private _dynamicAnalysisSpans As ImmutableArray(Of SourceSpan) = ImmutableArray(Of SourceSpan).Empty\n+        Private ReadOnly _methodEntryInstrumentation As BoundStatement\n+        Private ReadOnly _payloadType As ArrayTypeSymbol\n+        Private ReadOnly _methodPayload As LocalSymbol\n+        Private ReadOnly _diagnostics As DiagnosticBag\n+        Private ReadOnly _debugDocumentProvider As DebugDocumentProvider\n+        Private ReadOnly _methodHasExplicitBlock As Boolean\n+        Private ReadOnly _factory As SyntheticBoundNodeFactory\n+\n+        Public Shared Function TryCreate(method As MethodSymbol, methodBody As BoundStatement, factory As SyntheticBoundNodeFactory, diagnostics As DiagnosticBag, debugDocumentProvider As DebugDocumentProvider, previous As Instrumenter) As DynamicAnalysisInjector\n+            Dim createPayload As MethodSymbol = GetCreatePayload(factory.Compilation, methodBody.Syntax, diagnostics)\n+\n+            ' Do not instrument the instrumentation helpers if they are part of the current compilation (which occurs only during testing). GetCreatePayload will fail with an infinite recursion if it Is instrumented.\n+            If createPayload IsNot Nothing AndAlso Not method.IsImplicitlyDeclared AndAlso Not method.Equals(createPayload) Then\n+                Return New DynamicAnalysisInjector(method, methodBody, factory, createPayload, diagnostics, debugDocumentProvider, previous)\n+            End If\n+\n+            Return Nothing\n+        End Function\n+\n+        Public ReadOnly Property DynamicAnalysisSpans As ImmutableArray(Of SourceSpan)\n+            Get\n+                Return _dynamicAnalysisSpans\n+            End Get\n+        End Property\n+\n+        Private Sub New(method As MethodSymbol, methodBody As BoundStatement, factory As SyntheticBoundNodeFactory, createPayload As MethodSymbol, diagnostics As DiagnosticBag, debugDocumentProvider As DebugDocumentProvider, previous As Instrumenter)\n+            MyBase.New(previous)\n+            _createPayload = createPayload\n+            _method = method\n+            _methodBody = methodBody\n+            _spansBuilder = ArrayBuilder(Of SourceSpan).GetInstance()\n+            Dim payloadElementType As TypeSymbol = factory.SpecialType(SpecialType.System_Boolean)\n+            _payloadType = ArrayTypeSymbol.CreateVBArray(payloadElementType, ImmutableArray(Of CustomModifier).Empty, 1, factory.Compilation.Assembly)\n+            _methodPayload = factory.SynthesizedLocal(_payloadType, kind:=SynthesizedLocalKind.InstrumentationPayload, syntax:=methodBody.Syntax)\n+            _diagnostics = diagnostics\n+            _debugDocumentProvider = debugDocumentProvider\n+            _methodHasExplicitBlock = MethodHasExplicitBlock(method)\n+            _factory = factory\n+\n+            ' The first point indicates entry into the method And has the span of the method definition.\n+            _methodEntryInstrumentation = AddAnalysisPoint(MethodDeclarationIfAvailable(methodBody.Syntax), factory)\n+        End Sub\n+\n+        Public Overrides Function CreateBlockPrologue(original As BoundBlock, ByRef synthesizedLocal As LocalSymbol) As BoundStatement\n+            Dim previousPrologue As BoundStatement = MyBase.CreateBlockPrologue(original, synthesizedLocal)\n+\n+            If _methodBody Is original Then\n+                _dynamicAnalysisSpans = _spansBuilder.ToImmutableAndFree()\n+                ' In the future there will be multiple analysis kinds.\n+                Const analysisKind As Integer = 0\n+\n+                Dim modulePayloadType As ArrayTypeSymbol = ArrayTypeSymbol.CreateVBArray(_payloadType, ImmutableArray(Of CustomModifier).Empty, 1, _factory.Compilation.Assembly)\n+\n+                ' Synthesize the initialization of the instrumentation payload array, using concurrency-safe code\n+                '\n+                ' Dim payload = PID.PayloadRootField[methodIndex]\n+                ' If payload Is Nothing Then\n+                '     payload = Instrumentation.CreatePayload(mvid, methodIndex, PID.PayloadRootField(methodIndex), payloadLength)\n+                ' End If\n+\n+                Dim payloadInitialization As BoundStatement = _factory.Assignment(_factory.Local(_methodPayload, True), _factory.ArrayAccess(_factory.InstrumentationPayloadRoot(analysisKind, modulePayloadType, False), False, ImmutableArray.Create(_factory.MethodDefIndex(_method))))\n+                Dim mvid As BoundExpression = _factory.ModuleVersionId(False)\n+                Dim methodToken As BoundExpression = _factory.MethodDefIndex(_method)\n+                Dim payloadSlot As BoundExpression = _factory.ArrayAccess(_factory.InstrumentationPayloadRoot(analysisKind, modulePayloadType, False), False, ImmutableArray.Create(_factory.MethodDefIndex(_method)))\n+                Dim createPayloadCall As BoundStatement = _factory.Assignment(_factory.Local(_methodPayload, True), _factory.Call(Nothing, _createPayload, mvid, methodToken, payloadSlot, _factory.Literal(_dynamicAnalysisSpans.Length)))\n+\n+                Dim payloadNullTest As BoundExpression = _factory.Binary(BinaryOperatorKind.Equals, _factory.SpecialType(SpecialType.System_Boolean), _factory.Local(_methodPayload, False), _factory.Null(_payloadType))\n+                Dim payloadIf As BoundStatement = _factory.If(payloadNullTest, createPayloadCall)\n+\n+                Debug.Assert(synthesizedLocal Is Nothing)\n+                synthesizedLocal = _methodPayload\n+\n+                Return If(previousPrologue Is Nothing,\n+                           _factory.StatementList(payloadInitialization, payloadIf, _methodEntryInstrumentation),\n+                           _factory.StatementList(payloadInitialization, payloadIf, _methodEntryInstrumentation, previousPrologue))\n+            End If\n+\n+            Return previousPrologue\n+        End Function\n+\n+        Public Overrides Function InstrumentExpressionStatement(original As BoundExpressionStatement, rewritten As BoundStatement) As BoundStatement\n+            Return AddDynamicAnalysis(original, MyBase.InstrumentExpressionStatement(original, rewritten))\n+        End Function\n+\n+        Public Overrides Function InstrumentStopStatement(original As BoundStopStatement, rewritten As BoundStatement) As BoundStatement\n+            Return AddDynamicAnalysis(original, MyBase.InstrumentStopStatement(original, rewritten))\n+        End Function\n+\n+        Public Overrides Function InstrumentEndStatement(original As BoundEndStatement, rewritten As BoundStatement) As BoundStatement\n+            Return AddDynamicAnalysis(original, MyBase.InstrumentEndStatement(original, rewritten))\n+        End Function\n+\n+        Public Overrides Function InstrumentContinueStatement(original As BoundContinueStatement, rewritten As BoundStatement) As BoundStatement\n+            Return AddDynamicAnalysis(original, MyBase.InstrumentContinueStatement(original, rewritten))\n+        End Function\n+\n+        Public Overrides Function InstrumentExitStatement(original As BoundExitStatement, rewritten As BoundStatement) As BoundStatement\n+            Return AddDynamicAnalysis(original, MyBase.InstrumentExitStatement(original, rewritten))\n+        End Function\n+\n+        Public Overrides Function InstrumentGotoStatement(original As BoundGotoStatement, rewritten As BoundStatement) As BoundStatement\n+            Return AddDynamicAnalysis(original, MyBase.InstrumentGotoStatement(original, rewritten))\n+        End Function\n+\n+        Public Overrides Function InstrumentRaiseEventStatement(original As BoundRaiseEventStatement, rewritten As BoundStatement) As BoundStatement\n+            Return AddDynamicAnalysis(original, MyBase.InstrumentRaiseEventStatement(original, rewritten))\n+        End Function\n+\n+        Public Overrides Function InstrumentReturnStatement(original As BoundReturnStatement, rewritten As BoundStatement) As BoundStatement\n+            Dim previous As BoundStatement = MyBase.InstrumentReturnStatement(original, rewritten)\n+            If Not original.IsEndOfMethodReturn Then\n+                Return AddDynamicAnalysis(original, previous)\n+            End If\n+            Return previous\n+        End Function\n+\n+        Public Overrides Function InstrumentThrowStatement(original As BoundThrowStatement, rewritten As BoundStatement) As BoundStatement\n+            Return AddDynamicAnalysis(original, MyBase.InstrumentThrowStatement(original, rewritten))\n+        End Function\n+\n+        Public Overrides Function InstrumentOnErrorStatement(original As BoundOnErrorStatement, rewritten As BoundStatement) As BoundStatement\n+            Return AddDynamicAnalysis(original, MyBase.InstrumentOnErrorStatement(original, rewritten))\n+        End Function\n+\n+        Public Overrides Function InstrumentResumeStatement(original As BoundResumeStatement, rewritten As BoundStatement) As BoundStatement\n+            Return AddDynamicAnalysis(original, MyBase.InstrumentResumeStatement(original, rewritten))\n+        End Function\n+\n+        Public Overrides Function InstrumentAddHandlerStatement(original As BoundAddHandlerStatement, rewritten As BoundStatement) As BoundStatement\n+            Return AddDynamicAnalysis(original, MyBase.InstrumentAddHandlerStatement(original, rewritten))\n+        End Function\n+\n+        Public Overrides Function InstrumentRemoveHandlerStatement(original As BoundRemoveHandlerStatement, rewritten As BoundStatement) As BoundStatement\n+            Return AddDynamicAnalysis(original, MyBase.InstrumentRemoveHandlerStatement(original, rewritten))\n+        End Function\n+\n+        Public Overrides Function InstrumentSyncLockObjectCapture(original As BoundSyncLockStatement, rewritten As BoundStatement) As BoundStatement\n+            Return AddDynamicAnalysis(original, MyBase.InstrumentSyncLockObjectCapture(original, rewritten))\n+        End Function\n+\n+        Public Overrides Function InstrumentWhileStatementConditionalGotoStart(original As BoundWhileStatement, ifConditionGotoStart As BoundStatement) As BoundStatement\n+            Return AddDynamicAnalysis(original, MyBase.InstrumentWhileStatementConditionalGotoStart(original, ifConditionGotoStart))\n+        End Function\n+\n+        Public Overrides Function InstrumentDoLoopStatementEntryOrConditionalGotoStart(original As BoundDoLoopStatement, ifConditionGotoStartOpt As BoundStatement) As BoundStatement\n+            Dim previous As BoundStatement = MyBase.InstrumentDoLoopStatementEntryOrConditionalGotoStart(original, ifConditionGotoStartOpt)\n+            If (original.ConditionOpt IsNot Nothing) Then","path":"src/Compilers/VisualBasic/Portable/Lowering/Instrumentation/DynamicAnalysisInjector.vb","position":170,"original_position":170,"commit_id":"dea8f364516c723be3aecaaae59b6a8dae911e54","original_commit_id":"dea8f364516c723be3aecaaae59b6a8dae911e54","user":{"login":"JohnHamby","id":10982715,"avatar_url":"https://avatars.githubusercontent.com/u/10982715?v=3","gravatar_id":"","url":"https://api.github.com/users/JohnHamby","html_url":"https://github.com/JohnHamby","followers_url":"https://api.github.com/users/JohnHamby/followers","following_url":"https://api.github.com/users/JohnHamby/following{/other_user}","gists_url":"https://api.github.com/users/JohnHamby/gists{/gist_id}","starred_url":"https://api.github.com/users/JohnHamby/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JohnHamby/subscriptions","organizations_url":"https://api.github.com/users/JohnHamby/orgs","repos_url":"https://api.github.com/users/JohnHamby/repos","events_url":"https://api.github.com/users/JohnHamby/events{/privacy}","received_events_url":"https://api.github.com/users/JohnHamby/received_events","type":"User","site_admin":false},"body":"OK.","created_at":"2016-07-01T21:49:52Z","updated_at":"2016-07-01T21:49:52Z","html_url":"https://github.com/dotnet/roslyn/pull/12188#discussion_r69359600","pull_request_url":"https://api.github.com/repos/dotnet/roslyn/pulls/12188","_links":{"self":{"href":"https://api.github.com/repos/dotnet/roslyn/pulls/comments/69359600"},"html":{"href":"https://github.com/dotnet/roslyn/pull/12188#discussion_r69359600"},"pull_request":{"href":"https://api.github.com/repos/dotnet/roslyn/pulls/12188"}}},"pull_request":{"url":"https://api.github.com/repos/dotnet/roslyn/pulls/12188","id":75037438,"html_url":"https://github.com/dotnet/roslyn/pull/12188","diff_url":"https://github.com/dotnet/roslyn/pull/12188.diff","patch_url":"https://github.com/dotnet/roslyn/pull/12188.patch","issue_url":"https://api.github.com/repos/dotnet/roslyn/issues/12188","number":12188,"state":"open","locked":false,"title":"VB instrumentation for dynamic analysis","user":{"login":"JohnHamby","id":10982715,"avatar_url":"https://avatars.githubusercontent.com/u/10982715?v=3","gravatar_id":"","url":"https://api.github.com/users/JohnHamby","html_url":"https://github.com/JohnHamby","followers_url":"https://api.github.com/users/JohnHamby/followers","following_url":"https://api.github.com/users/JohnHamby/following{/other_user}","gists_url":"https://api.github.com/users/JohnHamby/gists{/gist_id}","starred_url":"https://api.github.com/users/JohnHamby/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JohnHamby/subscriptions","organizations_url":"https://api.github.com/users/JohnHamby/orgs","repos_url":"https://api.github.com/users/JohnHamby/repos","events_url":"https://api.github.com/users/JohnHamby/events{/privacy}","received_events_url":"https://api.github.com/users/JohnHamby/received_events","type":"User","site_admin":false},"body":"This perhaps now has enough testing to merge.\r\n\r\nThe changes are all similar (at least in spirit) to what was done for C#.","created_at":"2016-06-23T22:23:28Z","updated_at":"2016-07-01T21:49:52Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a46f6054344b371d64634439aa206e1e779f7adc","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/dotnet/roslyn/pulls/12188/commits","review_comments_url":"https://api.github.com/repos/dotnet/roslyn/pulls/12188/comments","review_comment_url":"https://api.github.com/repos/dotnet/roslyn/pulls/comments{/number}","comments_url":"https://api.github.com/repos/dotnet/roslyn/issues/12188/comments","statuses_url":"https://api.github.com/repos/dotnet/roslyn/statuses/dea8f364516c723be3aecaaae59b6a8dae911e54","head":{"label":"JohnHamby:VBInstrumentation","ref":"VBInstrumentation","sha":"dea8f364516c723be3aecaaae59b6a8dae911e54","user":{"login":"JohnHamby","id":10982715,"avatar_url":"https://avatars.githubusercontent.com/u/10982715?v=3","gravatar_id":"","url":"https://api.github.com/users/JohnHamby","html_url":"https://github.com/JohnHamby","followers_url":"https://api.github.com/users/JohnHamby/followers","following_url":"https://api.github.com/users/JohnHamby/following{/other_user}","gists_url":"https://api.github.com/users/JohnHamby/gists{/gist_id}","starred_url":"https://api.github.com/users/JohnHamby/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JohnHamby/subscriptions","organizations_url":"https://api.github.com/users/JohnHamby/orgs","repos_url":"https://api.github.com/users/JohnHamby/repos","events_url":"https://api.github.com/users/JohnHamby/events{/privacy}","received_events_url":"https://api.github.com/users/JohnHamby/received_events","type":"User","site_admin":false},"repo":{"id":30732063,"name":"roslyn","full_name":"JohnHamby/roslyn","owner":{"login":"JohnHamby","id":10982715,"avatar_url":"https://avatars.githubusercontent.com/u/10982715?v=3","gravatar_id":"","url":"https://api.github.com/users/JohnHamby","html_url":"https://github.com/JohnHamby","followers_url":"https://api.github.com/users/JohnHamby/followers","following_url":"https://api.github.com/users/JohnHamby/following{/other_user}","gists_url":"https://api.github.com/users/JohnHamby/gists{/gist_id}","starred_url":"https://api.github.com/users/JohnHamby/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JohnHamby/subscriptions","organizations_url":"https://api.github.com/users/JohnHamby/orgs","repos_url":"https://api.github.com/users/JohnHamby/repos","events_url":"https://api.github.com/users/JohnHamby/events{/privacy}","received_events_url":"https://api.github.com/users/JohnHamby/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/JohnHamby/roslyn","description":"The .NET Compiler Platform (\"Roslyn\") provides open-source C# and Visual Basic compilers with rich code analysis APIs.","fork":true,"url":"https://api.github.com/repos/JohnHamby/roslyn","forks_url":"https://api.github.com/repos/JohnHamby/roslyn/forks","keys_url":"https://api.github.com/repos/JohnHamby/roslyn/keys{/key_id}","collaborators_url":"https://api.github.com/repos/JohnHamby/roslyn/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/JohnHamby/roslyn/teams","hooks_url":"https://api.github.com/repos/JohnHamby/roslyn/hooks","issue_events_url":"https://api.github.com/repos/JohnHamby/roslyn/issues/events{/number}","events_url":"https://api.github.com/repos/JohnHamby/roslyn/events","assignees_url":"https://api.github.com/repos/JohnHamby/roslyn/assignees{/user}","branches_url":"https://api.github.com/repos/JohnHamby/roslyn/branches{/branch}","tags_url":"https://api.github.com/repos/JohnHamby/roslyn/tags","blobs_url":"https://api.github.com/repos/JohnHamby/roslyn/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/JohnHamby/roslyn/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/JohnHamby/roslyn/git/refs{/sha}","trees_url":"https://api.github.com/repos/JohnHamby/roslyn/git/trees{/sha}","statuses_url":"https://api.github.com/repos/JohnHamby/roslyn/statuses/{sha}","languages_url":"https://api.github.com/repos/JohnHamby/roslyn/languages","stargazers_url":"https://api.github.com/repos/JohnHamby/roslyn/stargazers","contributors_url":"https://api.github.com/repos/JohnHamby/roslyn/contributors","subscribers_url":"https://api.github.com/repos/JohnHamby/roslyn/subscribers","subscription_url":"https://api.github.com/repos/JohnHamby/roslyn/subscription","commits_url":"https://api.github.com/repos/JohnHamby/roslyn/commits{/sha}","git_commits_url":"https://api.github.com/repos/JohnHamby/roslyn/git/commits{/sha}","comments_url":"https://api.github.com/repos/JohnHamby/roslyn/comments{/number}","issue_comment_url":"https://api.github.com/repos/JohnHamby/roslyn/issues/comments{/number}","contents_url":"https://api.github.com/repos/JohnHamby/roslyn/contents/{+path}","compare_url":"https://api.github.com/repos/JohnHamby/roslyn/compare/{base}...{head}","merges_url":"https://api.github.com/repos/JohnHamby/roslyn/merges","archive_url":"https://api.github.com/repos/JohnHamby/roslyn/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/JohnHamby/roslyn/downloads","issues_url":"https://api.github.com/repos/JohnHamby/roslyn/issues{/number}","pulls_url":"https://api.github.com/repos/JohnHamby/roslyn/pulls{/number}","milestones_url":"https://api.github.com/repos/JohnHamby/roslyn/milestones{/number}","notifications_url":"https://api.github.com/repos/JohnHamby/roslyn/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/JohnHamby/roslyn/labels{/name}","releases_url":"https://api.github.com/repos/JohnHamby/roslyn/releases{/id}","deployments_url":"https://api.github.com/repos/JohnHamby/roslyn/deployments","created_at":"2015-02-13T00:07:31Z","updated_at":"2015-02-13T00:07:58Z","pushed_at":"2016-06-30T00:12:21Z","git_url":"git://github.com/JohnHamby/roslyn.git","ssh_url":"git@github.com:JohnHamby/roslyn.git","clone_url":"https://github.com/JohnHamby/roslyn.git","svn_url":"https://github.com/JohnHamby/roslyn","homepage":"","size":166716,"stargazers_count":0,"watchers_count":0,"language":"C#","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"dotnet:features/test-impact","ref":"features/test-impact","sha":"aaa3893103059bd00dca956a233579b26f7bbc9e","user":{"login":"dotnet","id":9141961,"avatar_url":"https://avatars.githubusercontent.com/u/9141961?v=3","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":29078997,"name":"roslyn","full_name":"dotnet/roslyn","owner":{"login":"dotnet","id":9141961,"avatar_url":"https://avatars.githubusercontent.com/u/9141961?v=3","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/roslyn","description":"The .NET Compiler Platform (\"Roslyn\") provides open-source C# and Visual Basic compilers with rich code analysis APIs.","fork":false,"url":"https://api.github.com/repos/dotnet/roslyn","forks_url":"https://api.github.com/repos/dotnet/roslyn/forks","keys_url":"https://api.github.com/repos/dotnet/roslyn/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dotnet/roslyn/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dotnet/roslyn/teams","hooks_url":"https://api.github.com/repos/dotnet/roslyn/hooks","issue_events_url":"https://api.github.com/repos/dotnet/roslyn/issues/events{/number}","events_url":"https://api.github.com/repos/dotnet/roslyn/events","assignees_url":"https://api.github.com/repos/dotnet/roslyn/assignees{/user}","branches_url":"https://api.github.com/repos/dotnet/roslyn/branches{/branch}","tags_url":"https://api.github.com/repos/dotnet/roslyn/tags","blobs_url":"https://api.github.com/repos/dotnet/roslyn/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dotnet/roslyn/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dotnet/roslyn/git/refs{/sha}","trees_url":"https://api.github.com/repos/dotnet/roslyn/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dotnet/roslyn/statuses/{sha}","languages_url":"https://api.github.com/repos/dotnet/roslyn/languages","stargazers_url":"https://api.github.com/repos/dotnet/roslyn/stargazers","contributors_url":"https://api.github.com/repos/dotnet/roslyn/contributors","subscribers_url":"https://api.github.com/repos/dotnet/roslyn/subscribers","subscription_url":"https://api.github.com/repos/dotnet/roslyn/subscription","commits_url":"https://api.github.com/repos/dotnet/roslyn/commits{/sha}","git_commits_url":"https://api.github.com/repos/dotnet/roslyn/git/commits{/sha}","comments_url":"https://api.github.com/repos/dotnet/roslyn/comments{/number}","issue_comment_url":"https://api.github.com/repos/dotnet/roslyn/issues/comments{/number}","contents_url":"https://api.github.com/repos/dotnet/roslyn/contents/{+path}","compare_url":"https://api.github.com/repos/dotnet/roslyn/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dotnet/roslyn/merges","archive_url":"https://api.github.com/repos/dotnet/roslyn/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dotnet/roslyn/downloads","issues_url":"https://api.github.com/repos/dotnet/roslyn/issues{/number}","pulls_url":"https://api.github.com/repos/dotnet/roslyn/pulls{/number}","milestones_url":"https://api.github.com/repos/dotnet/roslyn/milestones{/number}","notifications_url":"https://api.github.com/repos/dotnet/roslyn/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dotnet/roslyn/labels{/name}","releases_url":"https://api.github.com/repos/dotnet/roslyn/releases{/id}","deployments_url":"https://api.github.com/repos/dotnet/roslyn/deployments","created_at":"2015-01-11T02:39:03Z","updated_at":"2016-07-01T17:46:31Z","pushed_at":"2016-07-01T21:47:16Z","git_url":"git://github.com/dotnet/roslyn.git","ssh_url":"git@github.com:dotnet/roslyn.git","clone_url":"https://github.com/dotnet/roslyn.git","svn_url":"https://github.com/dotnet/roslyn","homepage":"","size":310067,"stargazers_count":5710,"watchers_count":5710,"language":"C#","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1368,"mirror_url":null,"open_issues_count":2983,"forks":1368,"open_issues":2983,"watchers":5710,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/dotnet/roslyn/pulls/12188"},"html":{"href":"https://github.com/dotnet/roslyn/pull/12188"},"issue":{"href":"https://api.github.com/repos/dotnet/roslyn/issues/12188"},"comments":{"href":"https://api.github.com/repos/dotnet/roslyn/issues/12188/comments"},"review_comments":{"href":"https://api.github.com/repos/dotnet/roslyn/pulls/12188/comments"},"review_comment":{"href":"https://api.github.com/repos/dotnet/roslyn/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/dotnet/roslyn/pulls/12188/commits"},"statuses":{"href":"https://api.github.com/repos/dotnet/roslyn/statuses/dea8f364516c723be3aecaaae59b6a8dae911e54"}}}}
{"actor":{"display_login":"JohnHamby"}}