Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorLluis Sanchez Gual <lluis@xamarin.com>2015-02-05 14:16:48 +0300
committerLluis Sanchez Gual <lluis@xamarin.com>2015-02-05 14:16:48 +0300
commit67b00276b43a835a3afcf93773244adc94651ff0 (patch)
treed335bf6c0e7ab0800d20c16ce8fa19ea438bbd90 /main
parent94d7fa1429f293873d0e55f7f5ad8c097434e481 (diff)
[Core] Fix project migration support
Diffstat (limited to 'main')
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/ProjectMigrationHandler.cs4
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/ProjectTypeNode.cs19
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/SolutionItemTypeNode.cs2
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Formats.MSBuild/MSBuildProject.cs8
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Formats.MSBuild/MSBuildProjectService.cs35
5 files changed, 35 insertions, 33 deletions
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/ProjectMigrationHandler.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/ProjectMigrationHandler.cs
index 976dc06b42..4aa9ae352e 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/ProjectMigrationHandler.cs
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/ProjectMigrationHandler.cs
@@ -42,13 +42,13 @@ namespace MonoDevelop.Projects.Extensions
yield break;
}
- public abstract bool Migrate (ProjectLoadProgressMonitor monitor, MSBuildProject project, string fileName, string language);
+ public abstract Task<bool> Migrate (ProjectLoadProgressMonitor monitor, MSBuildProject project, string fileName, string language);
public virtual bool CanPromptForMigration {
get { return false; }
}
- public virtual MigrationType PromptForMigration (ProjectLoadProgressMonitor monitor, MSBuildProject project, string fileName, string language)
+ public virtual Task<MigrationType> PromptForMigration (ProjectLoadProgressMonitor monitor, MSBuildProject project, string fileName, string language)
{
throw new NotImplementedException ();
}
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/ProjectTypeNode.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/ProjectTypeNode.cs
index f1f4beca17..5f2fa78d1d 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/ProjectTypeNode.cs
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/ProjectTypeNode.cs
@@ -35,15 +35,28 @@ namespace MonoDevelop.Projects.Extensions
[ExtensionNode (ExtensionAttributeType=typeof(ExportProjectTypeAttribute))]
public class ProjectTypeNode: SolutionItemTypeNode
{
+ [NodeAttribute]
+ bool migrationRequired = true;
+
+ [NodeAttribute]
+ string migrationHandler;
+
+ public bool IsMigrationRequired {
+ get { return migrationRequired; }
+ }
+
+ public ProjectMigrationHandler MigrationHandler {
+ get { return (ProjectMigrationHandler) Addin.CreateInstance (migrationHandler); }
+ }
+
public override async Task<SolutionItem> CreateSolutionItem (ProgressMonitor monitor, string fileName, string typeGuid)
{
MSBuildProject p = null;
if (!string.IsNullOrEmpty (fileName)) {
p = await MSBuildProject.LoadAsync (fileName);
- // TODO NPM
-// if (MSBuildProjectService.CanMigrateFlavor (p.ProjectTypeGuids))
-// await MSBuildProjectService.MigrateFlavor (monitor, fileName, typeGuid, this, p);
+ if (!string.IsNullOrEmpty (migrationHandler))
+ await MSBuildProjectService.MigrateFlavor (monitor, fileName, typeGuid, p, this);
}
var project = await base.CreateSolutionItem (monitor, fileName, typeGuid) as Project;
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/SolutionItemTypeNode.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/SolutionItemTypeNode.cs
index 5c00072556..2b9efdf923 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/SolutionItemTypeNode.cs
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/SolutionItemTypeNode.cs
@@ -82,7 +82,7 @@ namespace MonoDevelop.Projects.Extensions
}
}
- internal string ItenTypeName {
+ internal string ItemTypeName {
get { return type; }
}
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Formats.MSBuild/MSBuildProject.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Formats.MSBuild/MSBuildProject.cs
index a9401d8eb2..a36711eb2b 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Formats.MSBuild/MSBuildProject.cs
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Formats.MSBuild/MSBuildProject.cs
@@ -187,6 +187,14 @@ namespace MonoDevelop.Projects.Formats.MSBuild
TextFile.WriteFile (fileName, content, bom, true);
}
+ public Task SaveAsync (string fileName)
+ {
+ return Task.Run (() => {
+ string content = SaveToString ();
+ TextFile.WriteFile (fileName, content, bom, true);
+ });
+ }
+
public string SaveToString ()
{
// StringWriter.Encoding always returns UTF16. We need it to return UTF8, so the
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Formats.MSBuild/MSBuildProjectService.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Formats.MSBuild/MSBuildProjectService.cs
index 62338193a5..94cd552f88 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Formats.MSBuild/MSBuildProjectService.cs
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Formats.MSBuild/MSBuildProjectService.cs
@@ -138,7 +138,6 @@ namespace MonoDevelop.Projects.Formats.MSBuild
item.EndLoad ();
};
- item.TypeGuid = typeGuid ?? node.Guid;
await item.LoadAsync (monitor, fileName, format);
return item;
}
@@ -163,18 +162,6 @@ namespace MonoDevelop.Projects.Formats.MSBuild
return false;
}
- internal static SolutionItem CreateSolutionItem (string typeGuid)
- {
- foreach (var node in GetItemTypeNodes ()) {
- if (node.Guid.Equals (typeGuid, StringComparison.OrdinalIgnoreCase)) {
- var it = node.CreateSolutionItem (new ProgressMonitor (), null, typeGuid).Result;
- it.EnsureInitialized ();
- return it;
- }
- }
- throw new InvalidOperationException ("Unknown project type: " + typeGuid);
- }
-
internal static Project CreateProject (string typeGuid, params string[] flavorGuids)
{
foreach (var node in GetItemTypeNodes ().OfType<ProjectTypeNode> ()) {
@@ -196,27 +183,21 @@ namespace MonoDevelop.Projects.Formats.MSBuild
throw new InvalidOperationException ("Unknown project type: " + type);
}
-/* TODO NPM
- internal static bool CanMigrateFlavor (string[] guids)
- {
-
- }
-
- internal static async Task<bool> MigrateFlavor (IProgressMonitor monitor, string fileName, string typeGuid, MSBuildProjectNode node, MSBuildProject p)
+ internal static async Task<bool> MigrateFlavor (ProgressMonitor monitor, string fileName, string typeGuid, MSBuildProject p, ProjectTypeNode node)
{
var language = GetLanguageFromGuid (typeGuid);
- if (MigrateProject (monitor, node, p, fileName, language)) {
- p.Save (fileName);
+ if (await MigrateProject (monitor, node, p, fileName, language)) {
+ await p.SaveAsync (fileName);
return true;
}
return false;
}
- static async Task<bool> MigrateProject (IProgressMonitor monitor, MSBuildProjectNode st, MSBuildProject p, string fileName, string language)
+ static async Task<bool> MigrateProject (ProgressMonitor monitor, ProjectTypeNode st, MSBuildProject p, string fileName, string language)
{
- var projectLoadMonitor = monitor as IProjectLoadProgressMonitor;
+ var projectLoadMonitor = monitor as ProjectLoadProgressMonitor;
if (projectLoadMonitor == null) {
// projectLoadMonitor will be null when running through md-tool, but
// this is not fatal if migration is not required, so just ignore it. --abock
@@ -229,7 +210,7 @@ namespace MonoDevelop.Projects.Formats.MSBuild
}
var migrationType = st.MigrationHandler.CanPromptForMigration
- ? st.MigrationHandler.PromptForMigration (projectLoadMonitor, p, fileName, language)
+ ? await st.MigrationHandler.PromptForMigration (projectLoadMonitor, p, fileName, language)
: projectLoadMonitor.ShouldMigrateProject ();
if (migrationType == MigrationType.Ignore) {
if (st.IsMigrationRequired) {
@@ -260,7 +241,7 @@ namespace MonoDevelop.Projects.Formats.MSBuild
throw new Exception ("Could not migrate the project");
return true;
- }*/
+ }
internal static string GetLanguageGuid (string language)
{
@@ -349,7 +330,7 @@ namespace MonoDevelop.Projects.Formats.MSBuild
{
var className = item.GetType ().FullName;
foreach (SolutionItemTypeNode node in GetItemTypeNodes ()) {
- if (node.ItenTypeName == className)
+ if (node.ItemTypeName == className)
return node.Guid;
}
return GenericItemGuid;