diff options
author | Lluis Sanchez Gual <lluis@xamarin.com> | 2015-04-24 22:11:44 +0300 |
---|---|---|
committer | Lluis Sanchez Gual <lluis@xamarin.com> | 2015-04-24 22:11:44 +0300 |
commit | 4d3e2a492cbc6325502053707265ec55ed915b55 (patch) | |
tree | e767c0d65cef2a3b5121c505d421b4d2d3d059e4 /main | |
parent | b71bf8142ec6911c0e69cea73a08b040b93f77fd (diff) |
Fix type alias support
Property convert type alias to guids before creating projects.
Fixed alias declarations in add-ins.
Diffstat (limited to 'main')
8 files changed, 69 insertions, 20 deletions
diff --git a/main/src/addins/AspNet/Properties/MonoDevelop.AspNet.addin.xml b/main/src/addins/AspNet/Properties/MonoDevelop.AspNet.addin.xml index ed70da8301..34b4087a3e 100644 --- a/main/src/addins/AspNet/Properties/MonoDevelop.AspNet.addin.xml +++ b/main/src/addins/AspNet/Properties/MonoDevelop.AspNet.addin.xml @@ -189,24 +189,24 @@ <ProjectFlavor
guid="{603C0E0B-DB56-11DC-BE95-000D561079B0}"
type="MonoDevelop.AspNet.Projects.AspMvc1ProjectFlavor"
- tag="AspNetMvc1" />
+ alias="AspNetMvc1" />
<ProjectFlavor
guid="{F85E285D-A4E0-4152-9332-AB1D724D3325}"
type="MonoDevelop.AspNet.Projects.AspMvc2ProjectFlavor"
- tag="AspNetMvc2" />
+ alias="AspNetMvc2" />
<ProjectFlavor
guid="{E53F8FEA-EAE0-44A6-8774-FFD645390401}"
type="MonoDevelop.AspNet.Projects.AspMvc3ProjectFlavor"
- tag="AspNetMvc3" />
+ alias="AspNetMvc3" />
<ProjectFlavor
guid="{E3E379DF-F4C6-4180-9B81-6769533ABE47}"
type="MonoDevelop.AspNet.Projects.AspMvc4ProjectFlavor"
- tag="AspNetMvc4" />
+ alias="AspNetMvc4" />
<ProjectFlavor
id="MonoDevelop.AspNet.Projects.AspNetAppProjectFlavor"
guid="{349C5851-65DF-11DA-9384-00065B846F21}"
type="MonoDevelop.AspNet.Projects.AspNetAppProjectFlavor"
- tag="AspNetApp" />
+ alias="AspNetApp" />
</Extension>
<Extension path = "/MonoDevelop/TypeSystem/Parser">
diff --git a/main/src/addins/ILAsmBinding/ILAsmBinding.addin.xml b/main/src/addins/ILAsmBinding/ILAsmBinding.addin.xml index 733388310c..c2e273606c 100644 --- a/main/src/addins/ILAsmBinding/ILAsmBinding.addin.xml +++ b/main/src/addins/ILAsmBinding/ILAsmBinding.addin.xml @@ -18,7 +18,7 @@ </Extension> <Extension path = "/MonoDevelop/ProjectModel/MSBuildItemTypes"> - <DotNetProjectType language="IL" extension="ilproj" guid="{B4EC64DC-6D44-11DD-AAB0-C9A155D89593}" tag="IL" type="ILAsmBinding.ILAsmProject" /> + <DotNetProjectType language="IL" extension="ilproj" guid="{B4EC64DC-6D44-11DD-AAB0-C9A155D89593}" type="ILAsmBinding.ILAsmProject" /> </Extension> </ExtensionModel> diff --git a/main/src/addins/VBNetBinding/VBNetBinding.addin.xml b/main/src/addins/VBNetBinding/VBNetBinding.addin.xml index 089cf57c96..0f4e25281c 100644 --- a/main/src/addins/VBNetBinding/VBNetBinding.addin.xml +++ b/main/src/addins/VBNetBinding/VBNetBinding.addin.xml @@ -7,8 +7,7 @@ guid="{F184B08F-C81C-45F6-A57F-5ABD9991F28F}" import="$(MSBuildBinPath)\Microsoft.VisualBasic.targets" type="MonoDevelop.VBNetBinding.VBProject" - resourceHandler="MonoDevelop.VBNetBinding.VBNetResourceIdBuilder" - tag="VBNet"/> + resourceHandler="MonoDevelop.VBNetBinding.VBNetResourceIdBuilder"/> </Extension> <Extension path = "/MonoDevelop/Ide/FileFilters"> diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/DotNetProjectTypeNode.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/DotNetProjectTypeNode.cs index e6d4d2b724..2d577cb4ab 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/DotNetProjectTypeNode.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/DotNetProjectTypeNode.cs @@ -52,8 +52,8 @@ namespace MonoDevelop.Projects.Extensions protected override void Read (NodeElement elem) { base.Read (elem); - if (!string.IsNullOrEmpty (language) && string.IsNullOrEmpty (TypeTag)) - TypeTag = language; + if (!string.IsNullOrEmpty (language) && string.IsNullOrEmpty (TypeAlias)) + TypeAlias = language; } public override Type ItemType { 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 7757b02041..6d38a7c49e 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/SolutionItemTypeNode.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/SolutionItemTypeNode.cs @@ -63,8 +63,8 @@ namespace MonoDevelop.Projects.Extensions this.import = import; } - [NodeAttribute ("tag")] - public string TypeTag { get; set; } + [NodeAttribute ("alias")] + public string TypeAlias { get; set; } public string Guid { get { return guid; } @@ -118,7 +118,7 @@ namespace MonoDevelop.Projects.Extensions public virtual bool CanCreateSolutionItem (string type, ProjectCreateInformation info, System.Xml.XmlElement projectOptions) { - return type.Equals (Guid, StringComparison.OrdinalIgnoreCase) || type == TypeTag; + return type.Equals (Guid, StringComparison.OrdinalIgnoreCase) || type == TypeAlias; } public virtual SolutionItem CreateSolutionItem (string type, ProjectCreateInformation info, System.Xml.XmlElement projectOptions) 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 a8e3b5528d..e33f53a58c 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 @@ -233,6 +233,8 @@ namespace MonoDevelop.Projects.Formats.MSBuild internal static bool CanCreateSolutionItem (string type, ProjectCreateInformation info, System.Xml.XmlElement projectOptions) { + type = ConvertTypeTag (type); + foreach (var node in GetItemTypeNodes ()) { if (node.CanCreateSolutionItem (type, info, projectOptions)) return true; @@ -242,8 +244,10 @@ namespace MonoDevelop.Projects.Formats.MSBuild internal static Project CreateProject (string typeGuid, params string[] flavorGuids) { + flavorGuids = ConvertTypeTags (flavorGuids); + foreach (var node in GetItemTypeNodes ().OfType<ProjectTypeNode> ()) { - if (node.Guid.Equals (typeGuid, StringComparison.OrdinalIgnoreCase) || typeGuid == node.TypeTag) { + if (node.Guid.Equals (typeGuid, StringComparison.OrdinalIgnoreCase) || node.TypeAlias == typeGuid) { var p = node.CreateProject (flavorGuids); p.EnsureInitialized (); p.NotifyItemReady (); @@ -255,6 +259,8 @@ namespace MonoDevelop.Projects.Formats.MSBuild internal static SolutionItem CreateSolutionItem (string type, ProjectCreateInformation info, System.Xml.XmlElement projectOptions) { + type = ConvertTypeTag (type); + foreach (var node in GetItemTypeNodes ()) { if (node.CanCreateSolutionItem (type, info, projectOptions)) { var item = node.CreateSolutionItem (type, info, projectOptions); @@ -265,6 +271,47 @@ namespace MonoDevelop.Projects.Formats.MSBuild throw new InvalidOperationException ("Unknown project type: " + type); } + internal static Project CreateProject (string typeGuid, ProjectCreateInformation info, System.Xml.XmlElement projectOptions, params string[] flavorGuids) + { + flavorGuids = ConvertTypeTags (flavorGuids); + + foreach (var node in GetItemTypeNodes ().OfType<ProjectTypeNode> ()) { + if (node.Guid.Equals (typeGuid, StringComparison.OrdinalIgnoreCase) || typeGuid == node.TypeAlias) { + var p = node.CreateProject (flavorGuids); + p.EnsureInitialized (); + p.InitializeFromTemplate (info, projectOptions); + p.NotifyItemReady (); + return p; + } + } + throw new InvalidOperationException ("Unknown project type: " + typeGuid); + } + + static string ConvertTypeTag (string type) + { + var node = GetItemTypeNodes ().FirstOrDefault (n => n.TypeAlias == type); + if (node != null) + return node.Guid; + var enode = WorkspaceObject.GetModelExtensions (null).OfType<SolutionItemExtensionNode> ().FirstOrDefault (n => n.TypeAlias == type); + if (enode != null) + return enode.Guid; + return type; + } + + static string[] ConvertTypeTags (string[] types) + { + string[] copy = null; + for (int n=0; n<types.Length; n++) { + var nt = ConvertTypeTag (types[n]); + if (nt != types[n]) { + if (copy == null) + copy = types.ToArray (); + copy [n] = nt; + } + } + return copy ?? types; + } + internal static MSBuildSupport GetMSBuildSupportForFlavors (IEnumerable<string> flavorGuids) { foreach (var fid in flavorGuids) { @@ -386,7 +433,7 @@ namespace MonoDevelop.Projects.Formats.MSBuild internal static string GetTypeGuidFromAlias (string alias) { foreach (var node in GetItemTypeNodes ()) { - if (node.TypeTag.Equals (alias, StringComparison.OrdinalIgnoreCase)) + if (node.TypeAlias.Equals (alias, StringComparison.OrdinalIgnoreCase)) return node.Guid; } return null; diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ProjectService.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ProjectService.cs index 0928b90361..9465b6dae8 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ProjectService.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ProjectService.cs @@ -337,9 +337,9 @@ namespace MonoDevelop.Projects return MSBuildProjectService.CreateProject (typeGuid, typeGuids); } - public Project CreateProject (string typeAlias, ProjectCreateInformation info, XmlElement projectOptions) + public Project CreateProject (string typeAlias, ProjectCreateInformation info, XmlElement projectOptions, params string[] flavorGuids) { - return MSBuildProjectService.CreateSolutionItem (typeAlias, info, projectOptions) as Project; + return MSBuildProjectService.CreateProject (typeAlias, info, projectOptions, flavorGuids); } public bool CanCreateProject (string typeAlias) diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/ProjectDescriptor.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/ProjectDescriptor.cs index 3861ce9ff2..0a070b0135 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/ProjectDescriptor.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/ProjectDescriptor.cs @@ -115,17 +115,20 @@ namespace MonoDevelop.Ide.Templates projectOptions.SetAttribute ("language", defaultLanguage); var lang = projectOptions.GetAttribute ("language"); - var projectType = !string.IsNullOrEmpty (type) ? type : lang; + var projectTypes = !string.IsNullOrEmpty (type) ? type.Split (new char [] {','}, StringSplitOptions.RemoveEmptyEntries).Select (t => t.Trim()).ToArray() : new string[] {lang}; + + var projectType = projectTypes [0]; + string[] flavors = projectTypes.Skip (1).ToArray (); if (!Services.ProjectService.CanCreateProject (projectType, projectCreateInformation, projectOptions)) { - LoggingService.LogError ("Could not create project of type '" + projectType + "'. Project skipped"); + LoggingService.LogError ("Could not create project of type '" + string.Join (",", projectTypes) + "'. Project skipped"); return null; } if (!ShouldCreateProject (projectCreateInformation)) return null; - Project project = Services.ProjectService.CreateProject (projectType, projectCreateInformation, projectOptions); + Project project = Services.ProjectService.CreateProject (projectTypes[0], projectCreateInformation, projectOptions, flavors); return project; } |