{"action":"created","comment":{"url":"https://api.github.com/repos/SonarSource/sonar-csharp/pulls/comments/183713162","pull_request_review_id":114760665,"id":183713162,"diff_hunk":"@@ -0,0 +1,210 @@\n+﻿/*\n+ * SonarAnalyzer for .NET\n+ * Copyright (C) 2015-2018 SonarSource SA\n+ * mailto: contact AT sonarsource DOT com\n+ *\n+ * This program is free software; you can redistribute it and/or\n+ * modify it under the terms of the GNU Lesser General Public\n+ * License as published by the Free Software Foundation; either\n+ * version 3 of the License, or (at your option) any later version.\n+ *\n+ * This program is distributed in the hope that it will be useful,\n+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\n+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+ * Lesser General Public License for more details.\n+ *\n+ * You should have received a copy of the GNU Lesser General Public License\n+ * along with this program; if not, write to the Free Software Foundation,\n+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.\n+ */\n+\n+using System.Collections.Generic;\n+using System.Collections.Immutable;\n+using System.Linq;\n+using Microsoft.CodeAnalysis;\n+using Microsoft.CodeAnalysis.CSharp;\n+using Microsoft.CodeAnalysis.CSharp.Syntax;\n+using SonarAnalyzer.Helpers;\n+\n+namespace SonarAnalyzer.Rules\n+{\n+    public abstract class ObjectsShouldBeInitializedCorrectlyBase : SonarDiagnosticAnalyzer\n+    {\n+        protected abstract DiagnosticDescriptor Rule { get; }\n+\n+        public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics => ImmutableArray.Create(Rule);\n+\n+        /// <summary>\n+        /// Gets the KnownType representing the type on which instances the rule will raise issues on.\n+        /// </summary>\n+        internal abstract KnownType TrackedType { get; }\n+\n+        /// <summary>\n+        /// Gets the name of the property that has to be set with allowed value in\n+        /// order for the object to be initialized correctly.\n+        /// </summary>\n+        protected abstract string TrackedPropertyName { get; }\n+\n+        /// <summary>\n+        /// Tests if the provided <paramref name=\"constantValue\"/> is equal to allowed value.\n+        /// </summary>\n+        /// <returns>True when <paramref name=\"constantValue\"/> is an allowed value, otherwise false.</returns>\n+        protected abstract bool IsAllowedValue(object constantValue);\n+\n+        protected override void Initialize(SonarAnalysisContext context)\n+        {\n+            context.RegisterSyntaxNodeActionInNonGenerated(\n+                c =>\n+                {\n+                    var objectCreation = (ObjectCreationExpressionSyntax)c.Node;\n+\n+                    if (IsTrackedType(objectCreation, c.SemanticModel) &&\n+                        !ObjectCreatedWithAllowedValue(objectCreation, c.SemanticModel) &&\n+                        !IsLaterAssignedWithAllowedValue(objectCreation, c.SemanticModel))\n+                    {\n+                        c.ReportDiagnosticWhenActive(Diagnostic.Create(Rule, objectCreation.GetLocation()));\n+                    }\n+                },\n+                SyntaxKind.ObjectCreationExpression);\n+\n+            context.RegisterSyntaxNodeActionInNonGenerated(\n+                c =>\n+                {\n+                    var assignment = (AssignmentExpressionSyntax)c.Node;\n+\n+                    // Ignore assignments within object initializers, they are\n+                    // reported in the ObjectCreationExpression handler\n+                    if (assignment.FirstAncestorOrSelf<InitializerExpressionSyntax>() == null &&\n+                        IsTrackedPropertyName(assignment.Left) &&\n+                        IsPropertyOnTrackedType(assignment.Left, c.SemanticModel) &&\n+                        !IsAllowedValue(assignment.Right, c.SemanticModel))\n+                    {\n+                        c.ReportDiagnosticWhenActive(Diagnostic.Create(Rule, assignment.GetLocation()));\n+                    }\n+                },\n+                SyntaxKind.SimpleAssignmentExpression);\n+        }\n+\n+        /// <summary>\n+        /// Tests if the provided expression is a property of the <see cref=\"TrackedType\"/>. Override this method\n+        /// when the <see cref=\"TrackedPropertyName\"/> is a indexer for example.\n+        /// </summary>\n+        /// <returns>True when the parameter is a property of the <see cref=\"TrackedType\"/>, otherwise false.</returns>\n+        protected virtual bool IsPropertyOnTrackedType(ExpressionSyntax expression, SemanticModel semanticModel) =>\n+            expression is MemberAccessExpressionSyntax memberAccess &&\n+            memberAccess.Expression != null &&\n+            IsTrackedType(memberAccess.Expression, semanticModel);\n+\n+        /// <summary>\n+        /// Tests it the provided <paramref name=\"argumentList\"/> contains initialization of the <see cref=\"TrackedPropertyName\"/>\n+        /// with an allowed value. Override this method when a constructor can initialize the property value with a allowed value.\n+        /// </summary>\n+        /// <returns>True when the <paramref name=\"argumentList\"/> contains initialization of <see cref=\"TrackedPropertyName\"/>\n+        /// with allowed value or when this constructor sets <see cref=\"TrackedPropertyName\"/> with the\n+        /// allowed value by default, otherwise false.</returns>\n+        protected virtual bool CtorInitializesTrackedPropertyWithAllowedValue(ArgumentListSyntax argumentList, SemanticModel semanticModel) =>\n+            false;\n+\n+        /// <summary>\n+        /// Tests if the <paramref name=\"expression\"/> is <see cref=\"TrackedPropertyName\"/>.\n+        /// </summary>\n+        /// <returns>True if the <paramref name=\"expression\"/> is <see cref=\"TrackedPropertyName\"/>,\n+        /// otherwise false.</returns>\n+        protected virtual bool IsTrackedPropertyName(ExpressionSyntax expression)\n+        {\n+            var memberAccess = expression as MemberAccessExpressionSyntax;\n+            var identifier = memberAccess?.Name?.Identifier ?? (expression as IdentifierNameSyntax)?.Identifier;\n+            return identifier.HasValue && IsTrackedPropertyName(identifier.Value.ValueText);\n+        }\n+\n+        /// <summary>\n+        /// Tests if the expression is a constant equal to allowed value.\n+        /// </summary>\n+        /// <returns>True if the expression is a constant equal to allowed value,\n+        /// otherwise false.</returns>\n+        protected bool IsAllowedValue(ExpressionSyntax expression, SemanticModel semanticModel) =>\n+            expression != null &&\n+            IsAllowedValue(semanticModel.GetConstantValue(expression).Value);\n+\n+        /// <summary>\n+        /// Tests if the provided expression is the <see cref=\"TrackedType\"/> by calling GetTypeInfo.\n+        /// </summary>\n+        /// <returns>True when the expression if the <see cref=\"TrackedType\"/>, otherwise false.</returns>\n+        protected bool IsTrackedType(ExpressionSyntax expression, SemanticModel semanticModel) =>\n+            semanticModel.GetTypeInfo(expression).Type\n+                .Is(TrackedType);\n+\n+        private bool ObjectCreatedWithAllowedValue(ObjectCreationExpressionSyntax objectCreation, SemanticModel semanticModel) =>\n+            IsInitializedWithAllowedValue(objectCreation.Initializer, semanticModel) ||\n+                objectCreation.Initializer == null &&","path":"sonaranalyzer-dotnet/src/SonarAnalyzer.CSharp/Rules/ObjectsShouldBeInitializedCorrectlyBase.cs","position":139,"original_position":139,"commit_id":"20db70c6d96e540a05d7b21e40a43724de4eaa71","original_commit_id":"20db70c6d96e540a05d7b21e40a43724de4eaa71","user":{"login":"Evangelink","id":11340282,"avatar_url":"https://avatars0.githubusercontent.com/u/11340282?v=4","gravatar_id":"","url":"https://api.github.com/users/Evangelink","html_url":"https://github.com/Evangelink","followers_url":"https://api.github.com/users/Evangelink/followers","following_url":"https://api.github.com/users/Evangelink/following{/other_user}","gists_url":"https://api.github.com/users/Evangelink/gists{/gist_id}","starred_url":"https://api.github.com/users/Evangelink/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Evangelink/subscriptions","organizations_url":"https://api.github.com/users/Evangelink/orgs","repos_url":"https://api.github.com/users/Evangelink/repos","events_url":"https://api.github.com/users/Evangelink/events{/privacy}","received_events_url":"https://api.github.com/users/Evangelink/received_events","type":"User","site_admin":false},"body":"[cosmetic] Extra tab","created_at":"2018-04-24T12:40:58Z","updated_at":"2018-04-24T12:44:23Z","html_url":"https://github.com/SonarSource/sonar-csharp/pull/1351#discussion_r183713162","pull_request_url":"https://api.github.com/repos/SonarSource/sonar-csharp/pulls/1351","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/SonarSource/sonar-csharp/pulls/comments/183713162"},"html":{"href":"https://github.com/SonarSource/sonar-csharp/pull/1351#discussion_r183713162"},"pull_request":{"href":"https://api.github.com/repos/SonarSource/sonar-csharp/pulls/1351"}}},"pull_request":{"url":"https://api.github.com/repos/SonarSource/sonar-csharp/pulls/1351","id":183454963,"html_url":"https://github.com/SonarSource/sonar-csharp/pull/1351","diff_url":"https://github.com/SonarSource/sonar-csharp/pull/1351.diff","patch_url":"https://github.com/SonarSource/sonar-csharp/pull/1351.patch","issue_url":"https://api.github.com/repos/SonarSource/sonar-csharp/issues/1351","number":1351,"state":"open","locked":false,"title":"Dev/7.2","user":{"login":"valhristov","id":23195959,"avatar_url":"https://avatars2.githubusercontent.com/u/23195959?v=4","gravatar_id":"","url":"https://api.github.com/users/valhristov","html_url":"https://github.com/valhristov","followers_url":"https://api.github.com/users/valhristov/followers","following_url":"https://api.github.com/users/valhristov/following{/other_user}","gists_url":"https://api.github.com/users/valhristov/gists{/gist_id}","starred_url":"https://api.github.com/users/valhristov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/valhristov/subscriptions","organizations_url":"https://api.github.com/users/valhristov/orgs","repos_url":"https://api.github.com/users/valhristov/repos","events_url":"https://api.github.com/users/valhristov/events{/privacy}","received_events_url":"https://api.github.com/users/valhristov/received_events","type":"User","site_admin":false},"body":"Fix #1294 \r\nFix #1292\r\nFix #1290 \r\nFix #1310 \r\nFix #1287 \r\nFix #1303 ","created_at":"2018-04-23T14:34:35Z","updated_at":"2018-04-24T12:44:23Z","closed_at":null,"merged_at":null,"merge_commit_sha":"34ff69683729d57893482c9adcffc88649da7c54","assignee":{"login":"valhristov","id":23195959,"avatar_url":"https://avatars2.githubusercontent.com/u/23195959?v=4","gravatar_id":"","url":"https://api.github.com/users/valhristov","html_url":"https://github.com/valhristov","followers_url":"https://api.github.com/users/valhristov/followers","following_url":"https://api.github.com/users/valhristov/following{/other_user}","gists_url":"https://api.github.com/users/valhristov/gists{/gist_id}","starred_url":"https://api.github.com/users/valhristov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/valhristov/subscriptions","organizations_url":"https://api.github.com/users/valhristov/orgs","repos_url":"https://api.github.com/users/valhristov/repos","events_url":"https://api.github.com/users/valhristov/events{/privacy}","received_events_url":"https://api.github.com/users/valhristov/received_events","type":"User","site_admin":false},"assignees":[{"login":"valhristov","id":23195959,"avatar_url":"https://avatars2.githubusercontent.com/u/23195959?v=4","gravatar_id":"","url":"https://api.github.com/users/valhristov","html_url":"https://github.com/valhristov","followers_url":"https://api.github.com/users/valhristov/followers","following_url":"https://api.github.com/users/valhristov/following{/other_user}","gists_url":"https://api.github.com/users/valhristov/gists{/gist_id}","starred_url":"https://api.github.com/users/valhristov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/valhristov/subscriptions","organizations_url":"https://api.github.com/users/valhristov/orgs","repos_url":"https://api.github.com/users/valhristov/repos","events_url":"https://api.github.com/users/valhristov/events{/privacy}","received_events_url":"https://api.github.com/users/valhristov/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"duncanp-sonar","id":10757559,"avatar_url":"https://avatars1.githubusercontent.com/u/10757559?v=4","gravatar_id":"","url":"https://api.github.com/users/duncanp-sonar","html_url":"https://github.com/duncanp-sonar","followers_url":"https://api.github.com/users/duncanp-sonar/followers","following_url":"https://api.github.com/users/duncanp-sonar/following{/other_user}","gists_url":"https://api.github.com/users/duncanp-sonar/gists{/gist_id}","starred_url":"https://api.github.com/users/duncanp-sonar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/duncanp-sonar/subscriptions","organizations_url":"https://api.github.com/users/duncanp-sonar/orgs","repos_url":"https://api.github.com/users/duncanp-sonar/repos","events_url":"https://api.github.com/users/duncanp-sonar/events{/privacy}","received_events_url":"https://api.github.com/users/duncanp-sonar/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":731543503,"url":"https://api.github.com/repos/SonarSource/sonar-csharp/labels/Status:%20Needs%20Review","name":"Status: Needs Review","color":"b60205","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/SonarSource/sonar-csharp/pulls/1351/commits","review_comments_url":"https://api.github.com/repos/SonarSource/sonar-csharp/pulls/1351/comments","review_comment_url":"https://api.github.com/repos/SonarSource/sonar-csharp/pulls/comments{/number}","comments_url":"https://api.github.com/repos/SonarSource/sonar-csharp/issues/1351/comments","statuses_url":"https://api.github.com/repos/SonarSource/sonar-csharp/statuses/20db70c6d96e540a05d7b21e40a43724de4eaa71","head":{"label":"SonarSource:dev/7.2","ref":"dev/7.2","sha":"20db70c6d96e540a05d7b21e40a43724de4eaa71","user":{"login":"SonarSource","id":545988,"avatar_url":"https://avatars0.githubusercontent.com/u/545988?v=4","gravatar_id":"","url":"https://api.github.com/users/SonarSource","html_url":"https://github.com/SonarSource","followers_url":"https://api.github.com/users/SonarSource/followers","following_url":"https://api.github.com/users/SonarSource/following{/other_user}","gists_url":"https://api.github.com/users/SonarSource/gists{/gist_id}","starred_url":"https://api.github.com/users/SonarSource/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SonarSource/subscriptions","organizations_url":"https://api.github.com/users/SonarSource/orgs","repos_url":"https://api.github.com/users/SonarSource/repos","events_url":"https://api.github.com/users/SonarSource/events{/privacy}","received_events_url":"https://api.github.com/users/SonarSource/received_events","type":"Organization","site_admin":false},"repo":{"id":5582516,"name":"sonar-csharp","full_name":"SonarSource/sonar-csharp","owner":{"login":"SonarSource","id":545988,"avatar_url":"https://avatars0.githubusercontent.com/u/545988?v=4","gravatar_id":"","url":"https://api.github.com/users/SonarSource","html_url":"https://github.com/SonarSource","followers_url":"https://api.github.com/users/SonarSource/followers","following_url":"https://api.github.com/users/SonarSource/following{/other_user}","gists_url":"https://api.github.com/users/SonarSource/gists{/gist_id}","starred_url":"https://api.github.com/users/SonarSource/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SonarSource/subscriptions","organizations_url":"https://api.github.com/users/SonarSource/orgs","repos_url":"https://api.github.com/users/SonarSource/repos","events_url":"https://api.github.com/users/SonarSource/events{/privacy}","received_events_url":"https://api.github.com/users/SonarSource/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/SonarSource/sonar-csharp","description":"Code analyzer for C# projects","fork":false,"url":"https://api.github.com/repos/SonarSource/sonar-csharp","forks_url":"https://api.github.com/repos/SonarSource/sonar-csharp/forks","keys_url":"https://api.github.com/repos/SonarSource/sonar-csharp/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SonarSource/sonar-csharp/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SonarSource/sonar-csharp/teams","hooks_url":"https://api.github.com/repos/SonarSource/sonar-csharp/hooks","issue_events_url":"https://api.github.com/repos/SonarSource/sonar-csharp/issues/events{/number}","events_url":"https://api.github.com/repos/SonarSource/sonar-csharp/events","assignees_url":"https://api.github.com/repos/SonarSource/sonar-csharp/assignees{/user}","branches_url":"https://api.github.com/repos/SonarSource/sonar-csharp/branches{/branch}","tags_url":"https://api.github.com/repos/SonarSource/sonar-csharp/tags","blobs_url":"https://api.github.com/repos/SonarSource/sonar-csharp/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SonarSource/sonar-csharp/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SonarSource/sonar-csharp/git/refs{/sha}","trees_url":"https://api.github.com/repos/SonarSource/sonar-csharp/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SonarSource/sonar-csharp/statuses/{sha}","languages_url":"https://api.github.com/repos/SonarSource/sonar-csharp/languages","stargazers_url":"https://api.github.com/repos/SonarSource/sonar-csharp/stargazers","contributors_url":"https://api.github.com/repos/SonarSource/sonar-csharp/contributors","subscribers_url":"https://api.github.com/repos/SonarSource/sonar-csharp/subscribers","subscription_url":"https://api.github.com/repos/SonarSource/sonar-csharp/subscription","commits_url":"https://api.github.com/repos/SonarSource/sonar-csharp/commits{/sha}","git_commits_url":"https://api.github.com/repos/SonarSource/sonar-csharp/git/commits{/sha}","comments_url":"https://api.github.com/repos/SonarSource/sonar-csharp/comments{/number}","issue_comment_url":"https://api.github.com/repos/SonarSource/sonar-csharp/issues/comments{/number}","contents_url":"https://api.github.com/repos/SonarSource/sonar-csharp/contents/{+path}","compare_url":"https://api.github.com/repos/SonarSource/sonar-csharp/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SonarSource/sonar-csharp/merges","archive_url":"https://api.github.com/repos/SonarSource/sonar-csharp/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SonarSource/sonar-csharp/downloads","issues_url":"https://api.github.com/repos/SonarSource/sonar-csharp/issues{/number}","pulls_url":"https://api.github.com/repos/SonarSource/sonar-csharp/pulls{/number}","milestones_url":"https://api.github.com/repos/SonarSource/sonar-csharp/milestones{/number}","notifications_url":"https://api.github.com/repos/SonarSource/sonar-csharp/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SonarSource/sonar-csharp/labels{/name}","releases_url":"https://api.github.com/repos/SonarSource/sonar-csharp/releases{/id}","deployments_url":"https://api.github.com/repos/SonarSource/sonar-csharp/deployments","created_at":"2012-08-28T07:37:28Z","updated_at":"2018-04-24T09:38:01Z","pushed_at":"2018-04-24T12:33:35Z","git_url":"git://github.com/SonarSource/sonar-csharp.git","ssh_url":"git@github.com:SonarSource/sonar-csharp.git","clone_url":"https://github.com/SonarSource/sonar-csharp.git","svn_url":"https://github.com/SonarSource/sonar-csharp","homepage":"https://redirect.sonarsource.com/plugins/csharp.html","size":58749,"stargazers_count":161,"watchers_count":161,"language":"C#","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":95,"mirror_url":null,"archived":false,"open_issues_count":104,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":95,"open_issues":104,"watchers":161,"default_branch":"master"}},"base":{"label":"SonarSource:master","ref":"master","sha":"3005791cffe80030819681b4f6f4040414b67d3f","user":{"login":"SonarSource","id":545988,"avatar_url":"https://avatars0.githubusercontent.com/u/545988?v=4","gravatar_id":"","url":"https://api.github.com/users/SonarSource","html_url":"https://github.com/SonarSource","followers_url":"https://api.github.com/users/SonarSource/followers","following_url":"https://api.github.com/users/SonarSource/following{/other_user}","gists_url":"https://api.github.com/users/SonarSource/gists{/gist_id}","starred_url":"https://api.github.com/users/SonarSource/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SonarSource/subscriptions","organizations_url":"https://api.github.com/users/SonarSource/orgs","repos_url":"https://api.github.com/users/SonarSource/repos","events_url":"https://api.github.com/users/SonarSource/events{/privacy}","received_events_url":"https://api.github.com/users/SonarSource/received_events","type":"Organization","site_admin":false},"repo":{"id":5582516,"name":"sonar-csharp","full_name":"SonarSource/sonar-csharp","owner":{"login":"SonarSource","id":545988,"avatar_url":"https://avatars0.githubusercontent.com/u/545988?v=4","gravatar_id":"","url":"https://api.github.com/users/SonarSource","html_url":"https://github.com/SonarSource","followers_url":"https://api.github.com/users/SonarSource/followers","following_url":"https://api.github.com/users/SonarSource/following{/other_user}","gists_url":"https://api.github.com/users/SonarSource/gists{/gist_id}","starred_url":"https://api.github.com/users/SonarSource/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SonarSource/subscriptions","organizations_url":"https://api.github.com/users/SonarSource/orgs","repos_url":"https://api.github.com/users/SonarSource/repos","events_url":"https://api.github.com/users/SonarSource/events{/privacy}","received_events_url":"https://api.github.com/users/SonarSource/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/SonarSource/sonar-csharp","description":"Code analyzer for C# projects","fork":false,"url":"https://api.github.com/repos/SonarSource/sonar-csharp","forks_url":"https://api.github.com/repos/SonarSource/sonar-csharp/forks","keys_url":"https://api.github.com/repos/SonarSource/sonar-csharp/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SonarSource/sonar-csharp/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SonarSource/sonar-csharp/teams","hooks_url":"https://api.github.com/repos/SonarSource/sonar-csharp/hooks","issue_events_url":"https://api.github.com/repos/SonarSource/sonar-csharp/issues/events{/number}","events_url":"https://api.github.com/repos/SonarSource/sonar-csharp/events","assignees_url":"https://api.github.com/repos/SonarSource/sonar-csharp/assignees{/user}","branches_url":"https://api.github.com/repos/SonarSource/sonar-csharp/branches{/branch}","tags_url":"https://api.github.com/repos/SonarSource/sonar-csharp/tags","blobs_url":"https://api.github.com/repos/SonarSource/sonar-csharp/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SonarSource/sonar-csharp/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SonarSource/sonar-csharp/git/refs{/sha}","trees_url":"https://api.github.com/repos/SonarSource/sonar-csharp/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SonarSource/sonar-csharp/statuses/{sha}","languages_url":"https://api.github.com/repos/SonarSource/sonar-csharp/languages","stargazers_url":"https://api.github.com/repos/SonarSource/sonar-csharp/stargazers","contributors_url":"https://api.github.com/repos/SonarSource/sonar-csharp/contributors","subscribers_url":"https://api.github.com/repos/SonarSource/sonar-csharp/subscribers","subscription_url":"https://api.github.com/repos/SonarSource/sonar-csharp/subscription","commits_url":"https://api.github.com/repos/SonarSource/sonar-csharp/commits{/sha}","git_commits_url":"https://api.github.com/repos/SonarSource/sonar-csharp/git/commits{/sha}","comments_url":"https://api.github.com/repos/SonarSource/sonar-csharp/comments{/number}","issue_comment_url":"https://api.github.com/repos/SonarSource/sonar-csharp/issues/comments{/number}","contents_url":"https://api.github.com/repos/SonarSource/sonar-csharp/contents/{+path}","compare_url":"https://api.github.com/repos/SonarSource/sonar-csharp/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SonarSource/sonar-csharp/merges","archive_url":"https://api.github.com/repos/SonarSource/sonar-csharp/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SonarSource/sonar-csharp/downloads","issues_url":"https://api.github.com/repos/SonarSource/sonar-csharp/issues{/number}","pulls_url":"https://api.github.com/repos/SonarSource/sonar-csharp/pulls{/number}","milestones_url":"https://api.github.com/repos/SonarSource/sonar-csharp/milestones{/number}","notifications_url":"https://api.github.com/repos/SonarSource/sonar-csharp/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SonarSource/sonar-csharp/labels{/name}","releases_url":"https://api.github.com/repos/SonarSource/sonar-csharp/releases{/id}","deployments_url":"https://api.github.com/repos/SonarSource/sonar-csharp/deployments","created_at":"2012-08-28T07:37:28Z","updated_at":"2018-04-24T09:38:01Z","pushed_at":"2018-04-24T12:33:35Z","git_url":"git://github.com/SonarSource/sonar-csharp.git","ssh_url":"git@github.com:SonarSource/sonar-csharp.git","clone_url":"https://github.com/SonarSource/sonar-csharp.git","svn_url":"https://github.com/SonarSource/sonar-csharp","homepage":"https://redirect.sonarsource.com/plugins/csharp.html","size":58749,"stargazers_count":161,"watchers_count":161,"language":"C#","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":95,"mirror_url":null,"archived":false,"open_issues_count":104,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":95,"open_issues":104,"watchers":161,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/SonarSource/sonar-csharp/pulls/1351"},"html":{"href":"https://github.com/SonarSource/sonar-csharp/pull/1351"},"issue":{"href":"https://api.github.com/repos/SonarSource/sonar-csharp/issues/1351"},"comments":{"href":"https://api.github.com/repos/SonarSource/sonar-csharp/issues/1351/comments"},"review_comments":{"href":"https://api.github.com/repos/SonarSource/sonar-csharp/pulls/1351/comments"},"review_comment":{"href":"https://api.github.com/repos/SonarSource/sonar-csharp/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/SonarSource/sonar-csharp/pulls/1351/commits"},"statuses":{"href":"https://api.github.com/repos/SonarSource/sonar-csharp/statuses/20db70c6d96e540a05d7b21e40a43724de4eaa71"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"Evangelink"}}