{"action":"created","issue":{"url":"https://api.github.com/repos/mono/monodevelop/issues/1027","labels_url":"https://api.github.com/repos/mono/monodevelop/issues/1027/labels{/name}","comments_url":"https://api.github.com/repos/mono/monodevelop/issues/1027/comments","events_url":"https://api.github.com/repos/mono/monodevelop/issues/1027/events","html_url":"https://github.com/mono/monodevelop/pull/1027","id":105559697,"number":1027,"title":"Open up MonoDevelop APIs so I can implement a Protobuild add-in","user":{"login":"hach-que","id":504826,"avatar_url":"https://avatars.githubusercontent.com/u/504826?v=3","gravatar_id":"","url":"https://api.github.com/users/hach-que","html_url":"https://github.com/hach-que","followers_url":"https://api.github.com/users/hach-que/followers","following_url":"https://api.github.com/users/hach-que/following{/other_user}","gists_url":"https://api.github.com/users/hach-que/gists{/gist_id}","starred_url":"https://api.github.com/users/hach-que/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hach-que/subscriptions","organizations_url":"https://api.github.com/users/hach-que/orgs","repos_url":"https://api.github.com/users/hach-que/repos","events_url":"https://api.github.com/users/hach-que/events{/privacy}","received_events_url":"https://api.github.com/users/hach-que/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":6,"created_at":"2015-09-09T09:34:08Z","updated_at":"2015-09-09T11:37:52Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/mono/monodevelop/pulls/1027","html_url":"https://github.com/mono/monodevelop/pull/1027","diff_url":"https://github.com/mono/monodevelop/pull/1027.diff","patch_url":"https://github.com/mono/monodevelop/pull/1027.patch"},"body":"This opens up a bunch of MonoDevelop APIs and adds various hooks that are required for me to implement a Protobuild add-in.\r\n\r\n[Protobuild](http://protobuild.org/) is a cross-platform project generator; it works by generating MSBuild projects and solutions on disk when the Protobuild.exe executable is run.  This allows a common project format like this: https://github.com/mono/MonoGame/blob/develop/Build/Projects/MonoGame.Framework.definition to produce the appropriate C# projects for any platform (Windows, Linux, Mac, iOS, Android, etc.).\r\n\r\nI've been writing an add-in that will allow MonoDevelop to load Protobuild modules directly instead of requiring the user to generate projects via the command-line first.  This requires additional APIs in MonoDevelop so that I can have an additional project layer on top of the MSBuild project, without losing functionality (there are a lot of places in MonoDevelop that check if the project inherits from an MSBuild project type to provide things like debugging).\r\n\r\nRoughly:\r\n\r\n- This adds a GetProjectForTypeSystem method so that the C# completion can get access to the real MSBuild project where types are defined.\r\n- This adds Suspend and Resume methods to IViewContent.  This allows hot-reload of editor projects as demonstrated in this video: https://www.youtube.com/watch?v=TO7UxNKS5dQ\r\n- Adds runtime registration and deregistration of file handlers in DisplayBindingService.  This allows Protobuild projects that are loaded by the IDE to handle additional file types.\r\n- Makes a bunch of methods public and virtual."},"comment":{"url":"https://api.github.com/repos/mono/monodevelop/issues/comments/138884214","html_url":"https://github.com/mono/monodevelop/pull/1027#issuecomment-138884214","issue_url":"https://api.github.com/repos/mono/monodevelop/issues/1027","id":138884214,"user":{"login":"slluis","id":260349,"avatar_url":"https://avatars.githubusercontent.com/u/260349?v=3","gravatar_id":"","url":"https://api.github.com/users/slluis","html_url":"https://github.com/slluis","followers_url":"https://api.github.com/users/slluis/followers","following_url":"https://api.github.com/users/slluis/following{/other_user}","gists_url":"https://api.github.com/users/slluis/gists{/gist_id}","starred_url":"https://api.github.com/users/slluis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/slluis/subscriptions","organizations_url":"https://api.github.com/users/slluis/orgs","repos_url":"https://api.github.com/users/slluis/repos","events_url":"https://api.github.com/users/slluis/events{/privacy}","received_events_url":"https://api.github.com/users/slluis/received_events","type":"User","site_admin":false},"created_at":"2015-09-09T11:37:52Z","updated_at":"2015-09-09T11:37:52Z","body":"> This adds a GetProjectForTypeSystem method so that the C# completion\r\n> can get access to the real MSBuild project where types are defined.\r\n\r\nYou should be aware that we are working on a new project model and type system (based on Roslyn), which will be ready in the next months, and will be included in MD 6.0. At this point, we won't accept big changes on those systems. This needs to be reviewed by @mkrueger.\r\n\r\n> This adds Suspend and Resume methods to IViewContent\r\n\r\nWe could add something like that, using the interface proposed above to avoid breaking the api.\r\n\r\n> Adds runtime registration and deregistration of file handlers in DisplayBindingService.\r\n> This allows Protobuild projects that are loaded by the IDE to handle additional file types\r\n\r\nLooks good.\r\n\r\n> Makes a bunch of methods public and virtual\r\n\r\nI can't accept none of those changes without an explanation. We want to avoid making api public unless really necessary. Also, we try to avoid public virtual members in the api."}}