{"action":"created","comment":{"url":"https://api.github.com/repos/JetBrains/intellij-plugins/pulls/comments/61567958","id":61567958,"diff_hunk":"@@ -0,0 +1,165 @@\n+package com.jetbrains.lang.dart.ide.hierarchy.call;\n+\n+import com.intellij.openapi.project.Project;\n+import com.intellij.openapi.vfs.LocalFileSystem;\n+import com.intellij.openapi.vfs.VirtualFile;\n+import com.intellij.psi.PsiElement;\n+import com.intellij.psi.PsiFile;\n+import com.intellij.psi.util.PsiTreeUtil;\n+import com.jetbrains.lang.dart.analyzer.DartAnalysisServerService;\n+import com.jetbrains.lang.dart.psi.*;\n+import org.dartlang.analysis.server.protocol.ElementKind;\n+import org.jetbrains.annotations.NotNull;\n+\n+import java.util.ArrayList;\n+import java.util.List;\n+\n+import static com.jetbrains.lang.dart.analyzer.DartServerData.DartNavigationRegion;\n+import static com.jetbrains.lang.dart.analyzer.DartServerData.DartNavigationTarget;\n+\n+public class DartCalleeTreeStructure extends DartCallHierarchyTreeStructure {\n+\n+  public DartCalleeTreeStructure(Project project, PsiElement element, String currentScopeType) {\n+    super(project, element, currentScopeType);\n+  }\n+\n+  private static void getCallees(@NotNull PsiElement element, @NotNull List<PsiElement> results) {\n+    DartComponentName name = (DartComponentName)element;\n+    DartComponent decl = (DartComponent)name.getParent();\n+    PsiFile file = PsiTreeUtil.getParentOfType(decl, PsiFile.class);\n+    if (file == null) return;\n+    VirtualFile vFile = file.getVirtualFile();\n+    List<DartNavigationRegion> navRegions =\n+      DartAnalysisServerService.getInstance().analysis_getNavigation(vFile, decl.getTextOffset(), decl.getTextLength());\n+    if (navRegions == null) return;\n+    resolveReferences(decl, navRegions, results);\n+  }\n+\n+  private static void resolveReferences(@NotNull DartComponent component,\n+                                        @NotNull List<DartNavigationRegion> regions,\n+                                        @NotNull List<PsiElement> results) {\n+    component.acceptChildren(new DartRecursiveVisitor() {\n+      @Override\n+      public void visitReferenceExpression(@NotNull DartReferenceExpression reference) {\n+        int offset = reference.getTextOffset();\n+        List<DartNavigationTarget> targets = getRegionAt(offset, regions);\n+        for (DartNavigationTarget target : targets) {\n+          if (isExecutable(target)) {\n+            PsiElement element = getDeclaration(target, reference);\n+            if (element != null) {\n+              results.add(element);\n+            }\n+          }\n+        }\n+        super.visitReferenceExpression(reference);\n+      }\n+    });\n+  }\n+\n+  private static boolean isExecutable(DartNavigationTarget target) {\n+    String kind = target.getKind();\n+    return ElementKind.METHOD.equals(kind) ||\n+           ElementKind.FUNCTION.equals(kind) ||\n+           ElementKind.GETTER.equals(kind) ||\n+           ElementKind.SETTER.equals(kind) ||\n+           ElementKind.CONSTRUCTOR.equals(kind);\n+  }\n+\n+  private static PsiElement getDeclaration(DartNavigationTarget target, PsiElement reference) {\n+    String name = target.getFile();\n+    int offset = target.getOffset();\n+    VirtualFile vFile = LocalFileSystem.getInstance().findFileByPath(name);\n+    if (vFile != null) {\n+      final PsiFile targetFile = reference.getManager().findFile(vFile);\n+      if (targetFile != null) {\n+        final PsiElement[] result = new PsiElement[1];\n+        try {\n+          targetFile.accept(new DartRecursiveVisitor() {\n+            public void visitMethodDeclaration(@NotNull DartMethodDeclaration element) {\n+              if (element.getTextOffset() == offset) {\n+                result[0] = element;\n+                throw new ExitVisitor();\n+              }\n+              super.visitMethodDeclaration(element);\n+            }\n+\n+            public void visitFunctionDeclarationWithBodyOrNative(@NotNull DartFunctionDeclarationWithBodyOrNative element) {\n+              if (element.getTextOffset() == offset) {\n+                result[0] = element;\n+                throw new ExitVisitor();\n+              }\n+              super.visitFunctionDeclarationWithBodyOrNative(element);\n+            }\n+\n+            public void visitFunctionDeclarationWithBody(@NotNull DartFunctionDeclarationWithBody element) {\n+              if (element.getTextOffset() == offset) {\n+                result[0] = element;\n+                throw new ExitVisitor();\n+              }\n+              super.visitFunctionDeclarationWithBody(element);\n+            }\n+\n+            public void visitSetterDeclaration(@NotNull DartSetterDeclaration element) {\n+              if (element.getTextOffset() == offset) {\n+                result[0] = element;\n+                throw new ExitVisitor();\n+              }\n+              super.visitSetterDeclaration(element);\n+            }\n+\n+            public void visitGetterDeclaration(@NotNull DartGetterDeclaration element) {\n+              if (element.getTextOffset() == offset) {\n+                result[0] = element;\n+                throw new ExitVisitor();\n+              }\n+              super.visitGetterDeclaration(element);\n+            }\n+\n+            public void visitFactoryConstructorDeclaration(@NotNull DartFactoryConstructorDeclaration element) {\n+              if (element.getTextOffset() == offset) {\n+                result[0] = element;\n+                throw new ExitVisitor();\n+              }\n+              super.visitFactoryConstructorDeclaration(element);\n+            }\n+\n+            public void visitNamedConstructorDeclaration(@NotNull DartNamedConstructorDeclaration element) {\n+              if (element.getTextOffset() == offset) {\n+                result[0] = element;\n+                throw new ExitVisitor();\n+              }\n+              super.visitNamedConstructorDeclaration(element);\n+            }\n+          });\n+        }\n+        catch (ExitVisitor ex) {\n+          return result[0];\n+        }\n+      }\n+    }\n+    return null;\n+  }\n+\n+  @NotNull\n+  private static List<DartNavigationTarget> getRegionAt(int offset, @NotNull List<DartNavigationRegion> regions) {\n+    for (DartNavigationRegion region : regions) {\n+      int targetStart = region.getOffset();\n+      int targetEnd = targetStart + region.getLength();\n+      if (offset >= targetStart && offset <= targetEnd) {\n+        return region.getTargets();\n+      }\n+    }\n+    return new ArrayList<>(0);\n+  }\n+\n+  @NotNull\n+  @Override\n+  protected List<PsiElement> getChildren(@NotNull PsiElement element) {\n+    final List<PsiElement> list = new ArrayList<>();\n+    getCallees(element, list);\n+    return list;\n+  }\n+\n+  private static class ExitVisitor extends Error {","path":"Dart/src/com/jetbrains/lang/dart/ide/hierarchy/call/DartCalleeTreeStructure.java","position":163,"original_position":163,"commit_id":"6975dec960970d29baa8ed7596898a0ca6b1602f","original_commit_id":"6975dec960970d29baa8ed7596898a0ca6b1602f","user":{"login":"alexander-doroshko","id":4499789,"avatar_url":"https://avatars.githubusercontent.com/u/4499789?v=3","gravatar_id":"","url":"https://api.github.com/users/alexander-doroshko","html_url":"https://github.com/alexander-doroshko","followers_url":"https://api.github.com/users/alexander-doroshko/followers","following_url":"https://api.github.com/users/alexander-doroshko/following{/other_user}","gists_url":"https://api.github.com/users/alexander-doroshko/gists{/gist_id}","starred_url":"https://api.github.com/users/alexander-doroshko/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alexander-doroshko/subscriptions","organizations_url":"https://api.github.com/users/alexander-doroshko/orgs","repos_url":"https://api.github.com/users/alexander-doroshko/repos","events_url":"https://api.github.com/users/alexander-doroshko/events{/privacy}","received_events_url":"https://api.github.com/users/alexander-doroshko/received_events","type":"User","site_admin":false},"body":"That's the first direct inheritor of `java.lang.Error` in our codebase :). I guess it's because according to its javadoc `Error indicates serious problems that a reasonable application should not try to catch`. I think we'll finally end up without throwing whatever from visitors and reusing existing resolution logic instead.","created_at":"2016-04-29T12:18:54Z","updated_at":"2016-04-29T12:18:54Z","html_url":"https://github.com/JetBrains/intellij-plugins/pull/378#discussion_r61567958","pull_request_url":"https://api.github.com/repos/JetBrains/intellij-plugins/pulls/378","_links":{"self":{"href":"https://api.github.com/repos/JetBrains/intellij-plugins/pulls/comments/61567958"},"html":{"href":"https://github.com/JetBrains/intellij-plugins/pull/378#discussion_r61567958"},"pull_request":{"href":"https://api.github.com/repos/JetBrains/intellij-plugins/pulls/378"}}},"pull_request":{"url":"https://api.github.com/repos/JetBrains/intellij-plugins/pulls/378","id":68078868,"html_url":"https://github.com/JetBrains/intellij-plugins/pull/378","diff_url":"https://github.com/JetBrains/intellij-plugins/pull/378.diff","patch_url":"https://github.com/JetBrains/intellij-plugins/pull/378.patch","issue_url":"https://api.github.com/repos/JetBrains/intellij-plugins/issues/378","number":378,"state":"open","locked":false,"title":"Implement Call Hierarchy for Dart","user":{"login":"stevemessick","id":8518285,"avatar_url":"https://avatars.githubusercontent.com/u/8518285?v=3","gravatar_id":"","url":"https://api.github.com/users/stevemessick","html_url":"https://github.com/stevemessick","followers_url":"https://api.github.com/users/stevemessick/followers","following_url":"https://api.github.com/users/stevemessick/following{/other_user}","gists_url":"https://api.github.com/users/stevemessick/gists{/gist_id}","starred_url":"https://api.github.com/users/stevemessick/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stevemessick/subscriptions","organizations_url":"https://api.github.com/users/stevemessick/orgs","repos_url":"https://api.github.com/users/stevemessick/repos","events_url":"https://api.github.com/users/stevemessick/events{/privacy}","received_events_url":"https://api.github.com/users/stevemessick/received_events","type":"User","site_admin":false},"body":"@alexander-doroshko This implements the Call Hierarchy menu item on the Navigate menu for Dart code.\r\n\r\nThe \"Multi\" tests cause harmless exceptions to be printed to the console but they pass. If that's an issue I'll either delete them or change them to eliminate the recursive method calls. But I like having a test of recursive calls.","created_at":"2016-04-27T15:57:48Z","updated_at":"2016-04-29T12:18:54Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c575ae9593e036f55ce0adad9689754f85642ecc","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/JetBrains/intellij-plugins/pulls/378/commits","review_comments_url":"https://api.github.com/repos/JetBrains/intellij-plugins/pulls/378/comments","review_comment_url":"https://api.github.com/repos/JetBrains/intellij-plugins/pulls/comments{/number}","comments_url":"https://api.github.com/repos/JetBrains/intellij-plugins/issues/378/comments","statuses_url":"https://api.github.com/repos/JetBrains/intellij-plugins/statuses/6975dec960970d29baa8ed7596898a0ca6b1602f","head":{"label":"stevemessick:calls","ref":"calls","sha":"6975dec960970d29baa8ed7596898a0ca6b1602f","user":{"login":"stevemessick","id":8518285,"avatar_url":"https://avatars.githubusercontent.com/u/8518285?v=3","gravatar_id":"","url":"https://api.github.com/users/stevemessick","html_url":"https://github.com/stevemessick","followers_url":"https://api.github.com/users/stevemessick/followers","following_url":"https://api.github.com/users/stevemessick/following{/other_user}","gists_url":"https://api.github.com/users/stevemessick/gists{/gist_id}","starred_url":"https://api.github.com/users/stevemessick/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stevemessick/subscriptions","organizations_url":"https://api.github.com/users/stevemessick/orgs","repos_url":"https://api.github.com/users/stevemessick/repos","events_url":"https://api.github.com/users/stevemessick/events{/privacy}","received_events_url":"https://api.github.com/users/stevemessick/received_events","type":"User","site_admin":false},"repo":{"id":31625327,"name":"intellij-plugins","full_name":"stevemessick/intellij-plugins","owner":{"login":"stevemessick","id":8518285,"avatar_url":"https://avatars.githubusercontent.com/u/8518285?v=3","gravatar_id":"","url":"https://api.github.com/users/stevemessick","html_url":"https://github.com/stevemessick","followers_url":"https://api.github.com/users/stevemessick/followers","following_url":"https://api.github.com/users/stevemessick/following{/other_user}","gists_url":"https://api.github.com/users/stevemessick/gists{/gist_id}","starred_url":"https://api.github.com/users/stevemessick/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stevemessick/subscriptions","organizations_url":"https://api.github.com/users/stevemessick/orgs","repos_url":"https://api.github.com/users/stevemessick/repos","events_url":"https://api.github.com/users/stevemessick/events{/privacy}","received_events_url":"https://api.github.com/users/stevemessick/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/stevemessick/intellij-plugins","description":"Open-source plugins included in the distribution of IntelliJ IDEA Ultimate and other IDEs based on the IntelliJ Platform","fork":true,"url":"https://api.github.com/repos/stevemessick/intellij-plugins","forks_url":"https://api.github.com/repos/stevemessick/intellij-plugins/forks","keys_url":"https://api.github.com/repos/stevemessick/intellij-plugins/keys{/key_id}","collaborators_url":"https://api.github.com/repos/stevemessick/intellij-plugins/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/stevemessick/intellij-plugins/teams","hooks_url":"https://api.github.com/repos/stevemessick/intellij-plugins/hooks","issue_events_url":"https://api.github.com/repos/stevemessick/intellij-plugins/issues/events{/number}","events_url":"https://api.github.com/repos/stevemessick/intellij-plugins/events","assignees_url":"https://api.github.com/repos/stevemessick/intellij-plugins/assignees{/user}","branches_url":"https://api.github.com/repos/stevemessick/intellij-plugins/branches{/branch}","tags_url":"https://api.github.com/repos/stevemessick/intellij-plugins/tags","blobs_url":"https://api.github.com/repos/stevemessick/intellij-plugins/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/stevemessick/intellij-plugins/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/stevemessick/intellij-plugins/git/refs{/sha}","trees_url":"https://api.github.com/repos/stevemessick/intellij-plugins/git/trees{/sha}","statuses_url":"https://api.github.com/repos/stevemessick/intellij-plugins/statuses/{sha}","languages_url":"https://api.github.com/repos/stevemessick/intellij-plugins/languages","stargazers_url":"https://api.github.com/repos/stevemessick/intellij-plugins/stargazers","contributors_url":"https://api.github.com/repos/stevemessick/intellij-plugins/contributors","subscribers_url":"https://api.github.com/repos/stevemessick/intellij-plugins/subscribers","subscription_url":"https://api.github.com/repos/stevemessick/intellij-plugins/subscription","commits_url":"https://api.github.com/repos/stevemessick/intellij-plugins/commits{/sha}","git_commits_url":"https://api.github.com/repos/stevemessick/intellij-plugins/git/commits{/sha}","comments_url":"https://api.github.com/repos/stevemessick/intellij-plugins/comments{/number}","issue_comment_url":"https://api.github.com/repos/stevemessick/intellij-plugins/issues/comments{/number}","contents_url":"https://api.github.com/repos/stevemessick/intellij-plugins/contents/{+path}","compare_url":"https://api.github.com/repos/stevemessick/intellij-plugins/compare/{base}...{head}","merges_url":"https://api.github.com/repos/stevemessick/intellij-plugins/merges","archive_url":"https://api.github.com/repos/stevemessick/intellij-plugins/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/stevemessick/intellij-plugins/downloads","issues_url":"https://api.github.com/repos/stevemessick/intellij-plugins/issues{/number}","pulls_url":"https://api.github.com/repos/stevemessick/intellij-plugins/pulls{/number}","milestones_url":"https://api.github.com/repos/stevemessick/intellij-plugins/milestones{/number}","notifications_url":"https://api.github.com/repos/stevemessick/intellij-plugins/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/stevemessick/intellij-plugins/labels{/name}","releases_url":"https://api.github.com/repos/stevemessick/intellij-plugins/releases{/id}","deployments_url":"https://api.github.com/repos/stevemessick/intellij-plugins/deployments","created_at":"2015-03-03T22:38:23Z","updated_at":"2016-01-11T16:32:35Z","pushed_at":"2016-04-28T15:01:39Z","git_url":"git://github.com/stevemessick/intellij-plugins.git","ssh_url":"git@github.com:stevemessick/intellij-plugins.git","clone_url":"https://github.com/stevemessick/intellij-plugins.git","svn_url":"https://github.com/stevemessick/intellij-plugins","homepage":"http://www.jetbrains.com/idea/","size":286837,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"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":"JetBrains:master","ref":"master","sha":"1fd4c0e38e3ffd0ca3d57305db596ba0ca0682da","user":{"login":"JetBrains","id":878437,"avatar_url":"https://avatars.githubusercontent.com/u/878437?v=3","gravatar_id":"","url":"https://api.github.com/users/JetBrains","html_url":"https://github.com/JetBrains","followers_url":"https://api.github.com/users/JetBrains/followers","following_url":"https://api.github.com/users/JetBrains/following{/other_user}","gists_url":"https://api.github.com/users/JetBrains/gists{/gist_id}","starred_url":"https://api.github.com/users/JetBrains/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JetBrains/subscriptions","organizations_url":"https://api.github.com/users/JetBrains/orgs","repos_url":"https://api.github.com/users/JetBrains/repos","events_url":"https://api.github.com/users/JetBrains/events{/privacy}","received_events_url":"https://api.github.com/users/JetBrains/received_events","type":"Organization","site_admin":false},"repo":{"id":5453324,"name":"intellij-plugins","full_name":"JetBrains/intellij-plugins","owner":{"login":"JetBrains","id":878437,"avatar_url":"https://avatars.githubusercontent.com/u/878437?v=3","gravatar_id":"","url":"https://api.github.com/users/JetBrains","html_url":"https://github.com/JetBrains","followers_url":"https://api.github.com/users/JetBrains/followers","following_url":"https://api.github.com/users/JetBrains/following{/other_user}","gists_url":"https://api.github.com/users/JetBrains/gists{/gist_id}","starred_url":"https://api.github.com/users/JetBrains/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JetBrains/subscriptions","organizations_url":"https://api.github.com/users/JetBrains/orgs","repos_url":"https://api.github.com/users/JetBrains/repos","events_url":"https://api.github.com/users/JetBrains/events{/privacy}","received_events_url":"https://api.github.com/users/JetBrains/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/JetBrains/intellij-plugins","description":"Open-source plugins included in the distribution of IntelliJ IDEA Ultimate and other IDEs based on the IntelliJ Platform","fork":false,"url":"https://api.github.com/repos/JetBrains/intellij-plugins","forks_url":"https://api.github.com/repos/JetBrains/intellij-plugins/forks","keys_url":"https://api.github.com/repos/JetBrains/intellij-plugins/keys{/key_id}","collaborators_url":"https://api.github.com/repos/JetBrains/intellij-plugins/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/JetBrains/intellij-plugins/teams","hooks_url":"https://api.github.com/repos/JetBrains/intellij-plugins/hooks","issue_events_url":"https://api.github.com/repos/JetBrains/intellij-plugins/issues/events{/number}","events_url":"https://api.github.com/repos/JetBrains/intellij-plugins/events","assignees_url":"https://api.github.com/repos/JetBrains/intellij-plugins/assignees{/user}","branches_url":"https://api.github.com/repos/JetBrains/intellij-plugins/branches{/branch}","tags_url":"https://api.github.com/repos/JetBrains/intellij-plugins/tags","blobs_url":"https://api.github.com/repos/JetBrains/intellij-plugins/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/JetBrains/intellij-plugins/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/JetBrains/intellij-plugins/git/refs{/sha}","trees_url":"https://api.github.com/repos/JetBrains/intellij-plugins/git/trees{/sha}","statuses_url":"https://api.github.com/repos/JetBrains/intellij-plugins/statuses/{sha}","languages_url":"https://api.github.com/repos/JetBrains/intellij-plugins/languages","stargazers_url":"https://api.github.com/repos/JetBrains/intellij-plugins/stargazers","contributors_url":"https://api.github.com/repos/JetBrains/intellij-plugins/contributors","subscribers_url":"https://api.github.com/repos/JetBrains/intellij-plugins/subscribers","subscription_url":"https://api.github.com/repos/JetBrains/intellij-plugins/subscription","commits_url":"https://api.github.com/repos/JetBrains/intellij-plugins/commits{/sha}","git_commits_url":"https://api.github.com/repos/JetBrains/intellij-plugins/git/commits{/sha}","comments_url":"https://api.github.com/repos/JetBrains/intellij-plugins/comments{/number}","issue_comment_url":"https://api.github.com/repos/JetBrains/intellij-plugins/issues/comments{/number}","contents_url":"https://api.github.com/repos/JetBrains/intellij-plugins/contents/{+path}","compare_url":"https://api.github.com/repos/JetBrains/intellij-plugins/compare/{base}...{head}","merges_url":"https://api.github.com/repos/JetBrains/intellij-plugins/merges","archive_url":"https://api.github.com/repos/JetBrains/intellij-plugins/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/JetBrains/intellij-plugins/downloads","issues_url":"https://api.github.com/repos/JetBrains/intellij-plugins/issues{/number}","pulls_url":"https://api.github.com/repos/JetBrains/intellij-plugins/pulls{/number}","milestones_url":"https://api.github.com/repos/JetBrains/intellij-plugins/milestones{/number}","notifications_url":"https://api.github.com/repos/JetBrains/intellij-plugins/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/JetBrains/intellij-plugins/labels{/name}","releases_url":"https://api.github.com/repos/JetBrains/intellij-plugins/releases{/id}","deployments_url":"https://api.github.com/repos/JetBrains/intellij-plugins/deployments","created_at":"2012-08-17T14:31:20Z","updated_at":"2016-04-29T07:21:22Z","pushed_at":"2016-04-28T17:00:31Z","git_url":"git://github.com/JetBrains/intellij-plugins.git","ssh_url":"git@github.com:JetBrains/intellij-plugins.git","clone_url":"https://github.com/JetBrains/intellij-plugins.git","svn_url":"https://github.com/JetBrains/intellij-plugins","homepage":"http://www.jetbrains.com/idea/","size":1156205,"stargazers_count":438,"watchers_count":438,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":248,"mirror_url":null,"open_issues_count":11,"forks":248,"open_issues":11,"watchers":438,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/JetBrains/intellij-plugins/pulls/378"},"html":{"href":"https://github.com/JetBrains/intellij-plugins/pull/378"},"issue":{"href":"https://api.github.com/repos/JetBrains/intellij-plugins/issues/378"},"comments":{"href":"https://api.github.com/repos/JetBrains/intellij-plugins/issues/378/comments"},"review_comments":{"href":"https://api.github.com/repos/JetBrains/intellij-plugins/pulls/378/comments"},"review_comment":{"href":"https://api.github.com/repos/JetBrains/intellij-plugins/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/JetBrains/intellij-plugins/pulls/378/commits"},"statuses":{"href":"https://api.github.com/repos/JetBrains/intellij-plugins/statuses/6975dec960970d29baa8ed7596898a0ca6b1602f"}}}}