{"action":"created","comment":{"url":"https://api.github.com/repos/eclipse/xtext/pulls/comments/41513170","id":41513170,"diff_hunk":"@@ -0,0 +1,330 @@\n+/*******************************************************************************\n+ * Copyright (c) 2015 itemis AG (http://www.itemis.eu) and others.\n+ * All rights reserved. This program and the accompanying materials\n+ * are made available under the terms of the Eclipse Public License v1.0\n+ * which accompanies this distribution, and is available at\n+ * http://www.eclipse.org/legal/epl-v10.html\n+ *******************************************************************************/\n+package org.eclipse.xtext.xtext.generator.ui.contentAssist\n+\n+import com.google.common.collect.Sets\n+import com.google.inject.Inject\n+import java.util.Set\n+import org.eclipse.emf.ecore.EObject\n+import org.eclipse.xtend.lib.annotations.Accessors\n+import org.eclipse.xtend2.lib.StringConcatenationClient\n+import org.eclipse.xtext.AbstractElement\n+import org.eclipse.xtext.AbstractRule\n+import org.eclipse.xtext.Alternatives\n+import org.eclipse.xtext.Assignment\n+import org.eclipse.xtext.CrossReference\n+import org.eclipse.xtext.Grammar\n+import org.eclipse.xtext.RuleCall\n+import org.eclipse.xtext.xtext.generator.AbstractGeneratorFragment2\n+import org.eclipse.xtext.xtext.generator.CodeConfig\n+import org.eclipse.xtext.xtext.generator.XtextGeneratorNaming\n+import org.eclipse.xtext.xtext.generator.model.FileAccessFactory\n+import org.eclipse.xtext.xtext.generator.model.GuiceModuleAccess\n+import org.eclipse.xtext.xtext.generator.model.TypeReference\n+\n+import static extension org.eclipse.xtext.GrammarUtil.*\n+import static extension org.eclipse.xtext.xtext.generator.util.GrammarUtil2.*\n+\n+/**\n+ * Contributes the 'Abstract...ProposalProvider' and '...ProposalProvider' stub,\n+ *  the latter either in Xtend or Java language.\n+ * \n+ * @author Christian Schneider - Initial contribution and API\n+ */\n+class ContentAssistFragment2 extends AbstractGeneratorFragment2 {\n+\n+\t@Inject\n+\textension XtextGeneratorNaming\n+\t\n+\t@Inject\n+\textension CodeConfig\n+\t\n+\t@Inject\n+\tFileAccessFactory fileAccessFactory\n+\n+\t@Accessors\n+\tboolean generateStub = true;\n+\n+\t@Accessors\n+\tboolean inheritImplementation = true\n+\n+\tdef protected TypeReference getProposalProviderClass(Grammar g) {\n+\t\treturn new TypeReference(\n+\t\t\tg.eclipsePluginBasePackage + \".contentassist.\" + g.simpleName + \"ProposalProvider\"\n+\t\t)\n+\t}\n+\n+\tdef protected TypeReference getGenProposalProviderClass(Grammar g) {\n+\t\treturn new TypeReference(\n+\t\t\tg.eclipsePluginBasePackage + \".contentassist.Abstract\" + g.simpleName + \"ProposalProvider\"\n+\t\t)\n+\t}\n+\n+\tdef protected TypeReference getGenProposalProviderSuperClass(Grammar g) {\n+\t\tval superGrammar = g.nonTerminalsSuperGrammar\n+\t\tif(inheritImplementation && superGrammar != null)\n+\t\t\tsuperGrammar.proposalProviderClass\n+\t\telse new TypeReference(\n+\t\t\t\"org.eclipse.xtext.ui.editor.contentassist.AbstractJavaBasedContentProposalProvider\"\n+\t\t)\n+\t}\n+\n+\t/**\n+\t * Extra getter facilitates customization by overriding. \n+\t */\n+\tdef protected TypeReference getDefaultEObjectLabelProviderSuperClass() {\n+\t\tnew TypeReference(\"org.eclipse.xtext.ui.label.DefaultEObjectLabelProvider\")\n+\t}\n+\n+\n+\toverride generate() {\n+\t\tval chosenClass = \n+\t\t\tif (generateStub) grammar.getProposalProviderClass else grammar.getGenProposalProviderClass;\n+\t\t\n+\t\tif (projectConfig.eclipsePluginManifest != null) {\n+\t\t\tprojectConfig.eclipsePluginManifest.requiredBundles += \"org.eclipse.xtext.ui\"\n+\t\t}\n+\n+\t\tnew GuiceModuleAccess.BindingFactory()\n+\t\t\t\t.addTypeToType(\n+\t\t\t\t\tnew TypeReference(\"org.eclipse.xtext.ui.editor.contentassist.IContentProposalProvider\"),\n+\t\t\t\t\tchosenClass\n+\t\t\t\t).contributeTo(language.eclipsePluginGenModule);\n+\n+\t\tvar generatedCode = false\n+\n+\t\tif (projectConfig.eclipsePluginSrcGen !== null) {\n+\t\t\t// generate the 'Abstract...ProposalProvider'\n+\t\t\tgenerateGenJavaProposalProvider\n+\t\t\tgeneratedCode = true\n+\t\t}\n+\n+\t\tif (generateStub && projectConfig.eclipsePluginSrc != null) {\n+\t\t\tif (preferXtendStubs) {\n+\t\t\t\tgenerateXtendProposalProviderStub\n+\n+\t\t\t\tif (projectConfig.eclipsePluginManifest != null) {\n+\t\t\t\t\tprojectConfig.eclipsePluginManifest.requiredBundles += \"org.eclipse.xtext.xbase.lib\"\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\tgenerateJavaProposalProviderStub\n+\t\t\t}\n+\n+\t\t\tgeneratedCode = true\n+\t\t}\n+\n+\t\tif (generatedCode && projectConfig.eclipsePluginManifest != null) {\n+\t\t\tprojectConfig.eclipsePluginManifest.exportedPackages += grammar.proposalProviderClass.packageName\n+\t\t}\n+\t}\n+\n+\t// generation of the '...ProposalProvider' stub\n+\n+\tdef generateXtendProposalProviderStub() {\n+\t\tfileAccessFactory.createXtendFile(grammar.proposalProviderClass, '''\n+\t\t\t/**\n+\t\t\t * See https://www.eclipse.org/Xtext/documentation/304_ide_concepts.html#content-assist\n+\t\t\t * on how to customize the content assistant.\n+\t\t\t */\n+\t\t\tclass �grammar.proposalProviderClass.simpleName� extends �grammar.genProposalProviderClass� {\n+\t\t\t}\n+\t\t''').writeTo(projectConfig.eclipsePluginSrc)\n+\t}\n+\n+\tdef generateJavaProposalProviderStub() {\n+\t\tfileAccessFactory.createJavaFile(grammar.proposalProviderClass, '''\n+\t\t\t/**\n+\t\t\t * See https://www.eclipse.org/Xtext/documentation/304_ide_concepts.html#content-assist\n+\t\t\t * on how to customize the content assistant.\n+\t\t\t */\n+\t\t\tpublic class �grammar.proposalProviderClass.simpleName� extends �grammar.genProposalProviderClass� {\n+\t\t\t}\n+\t\t''').writeTo(projectConfig.eclipsePluginSrc)\n+\t}\n+\n+\t// generation of the 'Abstract...ProposalProvider'\n+\n+\t\n+\tdef generateGenJavaProposalProvider() {\n+\t\t// excluded features are those that stem from inherited grammars,\n+\t\t//  they are handled by the super grammars' proposal provider\n+\t\tval excludedFqnFeatureNames = grammar.getFQFeatureNamesToExclude\n+\t\tval processedNames = newHashSet()\n+\n+\t\t// determine all assignments within the grammar that are not excluded\n+\t\t//  and not handled yet, (iterable is evaluated lazily!)\n+\t\tval assignments = grammar.containedAssignments().fold(<Assignment>newArrayList()) [ candidates, assignment |\n+\t\t\tval fqFeatureName = assignment.FQFeatureName\n+\t\t\tif (!processedNames.contains(fqFeatureName) && !excludedFqnFeatureNames.contains(fqFeatureName)) {\n+\t\t\t\tprocessedNames += fqFeatureName;\n+\t\t\t\tcandidates += assignment;\n+\t\t\t}\n+\t\t\tcandidates\n+\t\t]","path":"plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/ui/contentAssist/ContentAssistFragment2.xtend","position":168,"original_position":168,"commit_id":"e055fb819b4e2024f0bb3da48467358cef128353","original_commit_id":"e055fb819b4e2024f0bb3da48467358cef128353","user":{"login":"sailingKieler","id":8513883,"avatar_url":"https://avatars.githubusercontent.com/u/8513883?v=3","gravatar_id":"","url":"https://api.github.com/users/sailingKieler","html_url":"https://github.com/sailingKieler","followers_url":"https://api.github.com/users/sailingKieler/followers","following_url":"https://api.github.com/users/sailingKieler/following{/other_user}","gists_url":"https://api.github.com/users/sailingKieler/gists{/gist_id}","starred_url":"https://api.github.com/users/sailingKieler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sailingKieler/subscriptions","organizations_url":"https://api.github.com/users/sailingKieler/orgs","repos_url":"https://api.github.com/users/sailingKieler/repos","events_url":"https://api.github.com/users/sailingKieler/events{/privacy}","received_events_url":"https://api.github.com/users/sailingKieler/received_events","type":"User","site_admin":false},"body":"Btw. does anybody know a better solution for that pattern? I don't like that tracking and filtering elements by their names, but I don't feel confident enough to change the implemented logic. (was a bit of a challenge to translate the tricky xpand-based implementation)","created_at":"2015-10-08T13:39:38Z","updated_at":"2015-10-08T13:39:38Z","html_url":"https://github.com/eclipse/xtext/pull/662#discussion_r41513170","pull_request_url":"https://api.github.com/repos/eclipse/xtext/pulls/662","_links":{"self":{"href":"https://api.github.com/repos/eclipse/xtext/pulls/comments/41513170"},"html":{"href":"https://github.com/eclipse/xtext/pull/662#discussion_r41513170"},"pull_request":{"href":"https://api.github.com/repos/eclipse/xtext/pulls/662"}}},"pull_request":{"url":"https://api.github.com/repos/eclipse/xtext/pulls/662","id":47144589,"html_url":"https://github.com/eclipse/xtext/pull/662","diff_url":"https://github.com/eclipse/xtext/pull/662.diff","patch_url":"https://github.com/eclipse/xtext/pull/662.patch","issue_url":"https://api.github.com/repos/eclipse/xtext/issues/662","number":662,"state":"open","locked":false,"title":"[xtend generator] Migration of 'ContentAssistFragment'/'JavaBasedContentAssistFragment'","user":{"login":"sailingKieler","id":8513883,"avatar_url":"https://avatars.githubusercontent.com/u/8513883?v=3","gravatar_id":"","url":"https://api.github.com/users/sailingKieler","html_url":"https://github.com/sailingKieler","followers_url":"https://api.github.com/users/sailingKieler/followers","following_url":"https://api.github.com/users/sailingKieler/following{/other_user}","gists_url":"https://api.github.com/users/sailingKieler/gists{/gist_id}","starred_url":"https://api.github.com/users/sailingKieler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sailingKieler/subscriptions","organizations_url":"https://api.github.com/users/sailingKieler/orgs","repos_url":"https://api.github.com/users/sailingKieler/repos","events_url":"https://api.github.com/users/sailingKieler/events{/privacy}","received_events_url":"https://api.github.com/users/sailingKieler/received_events","type":"User","site_admin":false},"body":"Signed-off-by: Christian Schneider <christian.schneider@itemis.de>","created_at":"2015-10-08T12:11:40Z","updated_at":"2015-10-08T13:39:38Z","closed_at":null,"merged_at":null,"merge_commit_sha":"392672b4744d7d860eb5fe2eee0a2285cc69ec07","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/eclipse/xtext/pulls/662/commits","review_comments_url":"https://api.github.com/repos/eclipse/xtext/pulls/662/comments","review_comment_url":"https://api.github.com/repos/eclipse/xtext/pulls/comments{/number}","comments_url":"https://api.github.com/repos/eclipse/xtext/issues/662/comments","statuses_url":"https://api.github.com/repos/eclipse/xtext/statuses/e055fb819b4e2024f0bb3da48467358cef128353","head":{"label":"sailingKieler:aa/contentAssistProvider","ref":"aa/contentAssistProvider","sha":"e055fb819b4e2024f0bb3da48467358cef128353","user":{"login":"sailingKieler","id":8513883,"avatar_url":"https://avatars.githubusercontent.com/u/8513883?v=3","gravatar_id":"","url":"https://api.github.com/users/sailingKieler","html_url":"https://github.com/sailingKieler","followers_url":"https://api.github.com/users/sailingKieler/followers","following_url":"https://api.github.com/users/sailingKieler/following{/other_user}","gists_url":"https://api.github.com/users/sailingKieler/gists{/gist_id}","starred_url":"https://api.github.com/users/sailingKieler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sailingKieler/subscriptions","organizations_url":"https://api.github.com/users/sailingKieler/orgs","repos_url":"https://api.github.com/users/sailingKieler/repos","events_url":"https://api.github.com/users/sailingKieler/events{/privacy}","received_events_url":"https://api.github.com/users/sailingKieler/received_events","type":"User","site_admin":false},"repo":{"id":43501675,"name":"xtext","full_name":"sailingKieler/xtext","owner":{"login":"sailingKieler","id":8513883,"avatar_url":"https://avatars.githubusercontent.com/u/8513883?v=3","gravatar_id":"","url":"https://api.github.com/users/sailingKieler","html_url":"https://github.com/sailingKieler","followers_url":"https://api.github.com/users/sailingKieler/followers","following_url":"https://api.github.com/users/sailingKieler/following{/other_user}","gists_url":"https://api.github.com/users/sailingKieler/gists{/gist_id}","starred_url":"https://api.github.com/users/sailingKieler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sailingKieler/subscriptions","organizations_url":"https://api.github.com/users/sailingKieler/orgs","repos_url":"https://api.github.com/users/sailingKieler/repos","events_url":"https://api.github.com/users/sailingKieler/events{/privacy}","received_events_url":"https://api.github.com/users/sailingKieler/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/sailingKieler/xtext","description":"Xtext is a language development framework ","fork":true,"url":"https://api.github.com/repos/sailingKieler/xtext","forks_url":"https://api.github.com/repos/sailingKieler/xtext/forks","keys_url":"https://api.github.com/repos/sailingKieler/xtext/keys{/key_id}","collaborators_url":"https://api.github.com/repos/sailingKieler/xtext/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/sailingKieler/xtext/teams","hooks_url":"https://api.github.com/repos/sailingKieler/xtext/hooks","issue_events_url":"https://api.github.com/repos/sailingKieler/xtext/issues/events{/number}","events_url":"https://api.github.com/repos/sailingKieler/xtext/events","assignees_url":"https://api.github.com/repos/sailingKieler/xtext/assignees{/user}","branches_url":"https://api.github.com/repos/sailingKieler/xtext/branches{/branch}","tags_url":"https://api.github.com/repos/sailingKieler/xtext/tags","blobs_url":"https://api.github.com/repos/sailingKieler/xtext/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/sailingKieler/xtext/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/sailingKieler/xtext/git/refs{/sha}","trees_url":"https://api.github.com/repos/sailingKieler/xtext/git/trees{/sha}","statuses_url":"https://api.github.com/repos/sailingKieler/xtext/statuses/{sha}","languages_url":"https://api.github.com/repos/sailingKieler/xtext/languages","stargazers_url":"https://api.github.com/repos/sailingKieler/xtext/stargazers","contributors_url":"https://api.github.com/repos/sailingKieler/xtext/contributors","subscribers_url":"https://api.github.com/repos/sailingKieler/xtext/subscribers","subscription_url":"https://api.github.com/repos/sailingKieler/xtext/subscription","commits_url":"https://api.github.com/repos/sailingKieler/xtext/commits{/sha}","git_commits_url":"https://api.github.com/repos/sailingKieler/xtext/git/commits{/sha}","comments_url":"https://api.github.com/repos/sailingKieler/xtext/comments{/number}","issue_comment_url":"https://api.github.com/repos/sailingKieler/xtext/issues/comments{/number}","contents_url":"https://api.github.com/repos/sailingKieler/xtext/contents/{+path}","compare_url":"https://api.github.com/repos/sailingKieler/xtext/compare/{base}...{head}","merges_url":"https://api.github.com/repos/sailingKieler/xtext/merges","archive_url":"https://api.github.com/repos/sailingKieler/xtext/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/sailingKieler/xtext/downloads","issues_url":"https://api.github.com/repos/sailingKieler/xtext/issues{/number}","pulls_url":"https://api.github.com/repos/sailingKieler/xtext/pulls{/number}","milestones_url":"https://api.github.com/repos/sailingKieler/xtext/milestones{/number}","notifications_url":"https://api.github.com/repos/sailingKieler/xtext/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/sailingKieler/xtext/labels{/name}","releases_url":"https://api.github.com/repos/sailingKieler/xtext/releases{/id}","created_at":"2015-10-01T14:38:21Z","updated_at":"2015-10-01T14:40:13Z","pushed_at":"2015-10-08T13:20:31Z","git_url":"git://github.com/sailingKieler/xtext.git","ssh_url":"git@github.com:sailingKieler/xtext.git","clone_url":"https://github.com/sailingKieler/xtext.git","svn_url":"https://github.com/sailingKieler/xtext","homepage":"http://xtext.org","size":484124,"stargazers_count":0,"watchers_count":0,"language":"Java","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":"eclipse:master","ref":"master","sha":"ff7ac364a27b14fd21eea255651525ddcbc37059","user":{"login":"eclipse","id":56974,"avatar_url":"https://avatars.githubusercontent.com/u/56974?v=3","gravatar_id":"","url":"https://api.github.com/users/eclipse","html_url":"https://github.com/eclipse","followers_url":"https://api.github.com/users/eclipse/followers","following_url":"https://api.github.com/users/eclipse/following{/other_user}","gists_url":"https://api.github.com/users/eclipse/gists{/gist_id}","starred_url":"https://api.github.com/users/eclipse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eclipse/subscriptions","organizations_url":"https://api.github.com/users/eclipse/orgs","repos_url":"https://api.github.com/users/eclipse/repos","events_url":"https://api.github.com/users/eclipse/events{/privacy}","received_events_url":"https://api.github.com/users/eclipse/received_events","type":"Organization","site_admin":false},"repo":{"id":1553758,"name":"xtext","full_name":"eclipse/xtext","owner":{"login":"eclipse","id":56974,"avatar_url":"https://avatars.githubusercontent.com/u/56974?v=3","gravatar_id":"","url":"https://api.github.com/users/eclipse","html_url":"https://github.com/eclipse","followers_url":"https://api.github.com/users/eclipse/followers","following_url":"https://api.github.com/users/eclipse/following{/other_user}","gists_url":"https://api.github.com/users/eclipse/gists{/gist_id}","starred_url":"https://api.github.com/users/eclipse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eclipse/subscriptions","organizations_url":"https://api.github.com/users/eclipse/orgs","repos_url":"https://api.github.com/users/eclipse/repos","events_url":"https://api.github.com/users/eclipse/events{/privacy}","received_events_url":"https://api.github.com/users/eclipse/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/eclipse/xtext","description":"Xtext is a language development framework ","fork":false,"url":"https://api.github.com/repos/eclipse/xtext","forks_url":"https://api.github.com/repos/eclipse/xtext/forks","keys_url":"https://api.github.com/repos/eclipse/xtext/keys{/key_id}","collaborators_url":"https://api.github.com/repos/eclipse/xtext/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/eclipse/xtext/teams","hooks_url":"https://api.github.com/repos/eclipse/xtext/hooks","issue_events_url":"https://api.github.com/repos/eclipse/xtext/issues/events{/number}","events_url":"https://api.github.com/repos/eclipse/xtext/events","assignees_url":"https://api.github.com/repos/eclipse/xtext/assignees{/user}","branches_url":"https://api.github.com/repos/eclipse/xtext/branches{/branch}","tags_url":"https://api.github.com/repos/eclipse/xtext/tags","blobs_url":"https://api.github.com/repos/eclipse/xtext/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/eclipse/xtext/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/eclipse/xtext/git/refs{/sha}","trees_url":"https://api.github.com/repos/eclipse/xtext/git/trees{/sha}","statuses_url":"https://api.github.com/repos/eclipse/xtext/statuses/{sha}","languages_url":"https://api.github.com/repos/eclipse/xtext/languages","stargazers_url":"https://api.github.com/repos/eclipse/xtext/stargazers","contributors_url":"https://api.github.com/repos/eclipse/xtext/contributors","subscribers_url":"https://api.github.com/repos/eclipse/xtext/subscribers","subscription_url":"https://api.github.com/repos/eclipse/xtext/subscription","commits_url":"https://api.github.com/repos/eclipse/xtext/commits{/sha}","git_commits_url":"https://api.github.com/repos/eclipse/xtext/git/commits{/sha}","comments_url":"https://api.github.com/repos/eclipse/xtext/comments{/number}","issue_comment_url":"https://api.github.com/repos/eclipse/xtext/issues/comments{/number}","contents_url":"https://api.github.com/repos/eclipse/xtext/contents/{+path}","compare_url":"https://api.github.com/repos/eclipse/xtext/compare/{base}...{head}","merges_url":"https://api.github.com/repos/eclipse/xtext/merges","archive_url":"https://api.github.com/repos/eclipse/xtext/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/eclipse/xtext/downloads","issues_url":"https://api.github.com/repos/eclipse/xtext/issues{/number}","pulls_url":"https://api.github.com/repos/eclipse/xtext/pulls{/number}","milestones_url":"https://api.github.com/repos/eclipse/xtext/milestones{/number}","notifications_url":"https://api.github.com/repos/eclipse/xtext/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/eclipse/xtext/labels{/name}","releases_url":"https://api.github.com/repos/eclipse/xtext/releases{/id}","created_at":"2011-04-01T02:12:17Z","updated_at":"2015-10-08T08:28:45Z","pushed_at":"2015-10-08T13:20:32Z","git_url":"git://github.com/eclipse/xtext.git","ssh_url":"git@github.com:eclipse/xtext.git","clone_url":"https://github.com/eclipse/xtext.git","svn_url":"https://github.com/eclipse/xtext","homepage":"http://xtext.org","size":826131,"stargazers_count":183,"watchers_count":183,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":85,"mirror_url":null,"open_issues_count":13,"forks":85,"open_issues":13,"watchers":183,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/eclipse/xtext/pulls/662"},"html":{"href":"https://github.com/eclipse/xtext/pull/662"},"issue":{"href":"https://api.github.com/repos/eclipse/xtext/issues/662"},"comments":{"href":"https://api.github.com/repos/eclipse/xtext/issues/662/comments"},"review_comments":{"href":"https://api.github.com/repos/eclipse/xtext/pulls/662/comments"},"review_comment":{"href":"https://api.github.com/repos/eclipse/xtext/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/eclipse/xtext/pulls/662/commits"},"statuses":{"href":"https://api.github.com/repos/eclipse/xtext/statuses/e055fb819b4e2024f0bb3da48467358cef128353"}}}}