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-04-24 22:11:44 +0300
committerLluis Sanchez Gual <lluis@xamarin.com>2015-04-24 22:11:44 +0300
commit4d3e2a492cbc6325502053707265ec55ed915b55 (patch)
treee767c0d65cef2a3b5121c505d421b4d2d3d059e4 /main
parentb71bf8142ec6911c0e69cea73a08b040b93f77fd (diff)
Fix type alias support
Property convert type alias to guids before creating projects. Fixed alias declarations in add-ins.
Diffstat (limited to 'main')
-rw-r--r--main/src/addins/AspNet/Properties/MonoDevelop.AspNet.addin.xml10
-rw-r--r--main/src/addins/ILAsmBinding/ILAsmBinding.addin.xml2
-rw-r--r--main/src/addins/VBNetBinding/VBNetBinding.addin.xml3
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/DotNetProjectTypeNode.cs4
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/SolutionItemTypeNode.cs6
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Formats.MSBuild/MSBuildProjectService.cs51
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ProjectService.cs4
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/ProjectDescriptor.cs9
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;
}