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/src
diff options
context:
space:
mode:
authorLluis Sanchez Gual <lluis@xamarin.com>2015-02-12 14:35:41 +0300
committerLluis Sanchez Gual <lluis@xamarin.com>2015-02-12 14:35:41 +0300
commit940e824f125f5db793e6be7c2dec793c88e32a97 (patch)
treea1d49571becf12d6f6fd3c9688fa9f9486c091cb /main/src
parent93c8daeefb07434d15ceaa5d067b6a04e91b7fa9 (diff)
Extension condition fixes
Fixes use of ItemType conditions. Introduced concept of type tag, which can be used as alias for referencing types and flavors. Added an extension condition for tags.
Diffstat (limited to 'main/src')
-rw-r--r--main/src/addins/AspNet/Properties/MonoDevelop.AspNet.addin.xml10
-rw-r--r--main/src/addins/CSharpBinding/CSharpBinding.addin.xml4
-rw-r--r--main/src/addins/ChangeLogAddIn/ChangeLogAddIn.addin.xml2
-rw-r--r--main/src/addins/ILAsmBinding/ILAsmBinding.addin.xml4
-rw-r--r--main/src/addins/MonoDevelop.Autotools/MakefileProject.cs6
-rw-r--r--main/src/addins/MonoDevelop.Autotools/MonoDevelop.Autotools.csproj5
-rw-r--r--main/src/addins/MonoDevelop.Autotools/packages.config4
-rw-r--r--main/src/addins/VBNetBinding/VBNetBinding.addin.xml7
-rw-r--r--main/src/addins/VersionControl/MonoDevelop.VersionControl/VersionControl.addin.xml2
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Core.addin.xml9
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Core.csproj2
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/DotNetProjectTypeNode.cs2
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/ItemTypeCondition.cs2
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/SolutionItemHandler.cs88
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/SolutionItemTypeNode.cs6
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/TypeTagCondition.cs69
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Projects.SharedAssetsProjects/SharedAssetsProject.cs5
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Projects/CompiledAssemblyProject.cs5
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Projects/DotNetProject.cs13
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Projects/GenericProject.cs5
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ItemCollection.cs7
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Projects/PortableDotNetProjectFlavor.cs5
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Project.cs13
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ProjectExtension.cs7
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Projects/WorkspaceObject.cs20
-rw-r--r--main/src/core/MonoDevelop.Ide/ExtensionModel/ItemOptionPanels.addin.xml12
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Codons/ProjectActiveCondition.cs2
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/NewFileDialog.cs2
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/FileTemplate.cs2
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/ParentProjectFileTemplateCondition.cs2
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/TypeSystemService.cs2
31 files changed, 158 insertions, 166 deletions
diff --git a/main/src/addins/AspNet/Properties/MonoDevelop.AspNet.addin.xml b/main/src/addins/AspNet/Properties/MonoDevelop.AspNet.addin.xml
index 34b4087a3e..ed70da8301 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"
- alias="AspNetMvc1" />
+ tag="AspNetMvc1" />
<ProjectFlavor
guid="{F85E285D-A4E0-4152-9332-AB1D724D3325}"
type="MonoDevelop.AspNet.Projects.AspMvc2ProjectFlavor"
- alias="AspNetMvc2" />
+ tag="AspNetMvc2" />
<ProjectFlavor
guid="{E53F8FEA-EAE0-44A6-8774-FFD645390401}"
type="MonoDevelop.AspNet.Projects.AspMvc3ProjectFlavor"
- alias="AspNetMvc3" />
+ tag="AspNetMvc3" />
<ProjectFlavor
guid="{E3E379DF-F4C6-4180-9B81-6769533ABE47}"
type="MonoDevelop.AspNet.Projects.AspMvc4ProjectFlavor"
- alias="AspNetMvc4" />
+ tag="AspNetMvc4" />
<ProjectFlavor
id="MonoDevelop.AspNet.Projects.AspNetAppProjectFlavor"
guid="{349C5851-65DF-11DA-9384-00065B846F21}"
type="MonoDevelop.AspNet.Projects.AspNetAppProjectFlavor"
- alias="AspNetApp" />
+ tag="AspNetApp" />
</Extension>
<Extension path = "/MonoDevelop/TypeSystem/Parser">
diff --git a/main/src/addins/CSharpBinding/CSharpBinding.addin.xml b/main/src/addins/CSharpBinding/CSharpBinding.addin.xml
index 6531dabcbe..100efeb22b 100644
--- a/main/src/addins/CSharpBinding/CSharpBinding.addin.xml
+++ b/main/src/addins/CSharpBinding/CSharpBinding.addin.xml
@@ -49,7 +49,7 @@
</Extension>
<Extension path = "/MonoDevelop/ProjectModel/Gui/ItemOptionPanels/Build/General">
- <Condition id="ActiveLanguage" value="C#">
+ <Condition id="TypeTag" value="C#">
<Panel id = "CSharpCompilerOptionsPanel"
_label = "C#"
class = "MonoDevelop.CSharp.Project.CompilerOptionsPanel"/>
@@ -57,7 +57,7 @@
</Extension>
<Extension path = "/MonoDevelop/ProjectModel/Gui/ItemOptionPanels/Build/Compiler">
- <Condition id="ActiveLanguage" value="C#">
+ <Condition id="TypeTag" value="C#">
<Panel id = "CSharpCodeGenerationPanel"
_label = "Compiler"
class = "MonoDevelop.CSharp.Project.CodeGenerationPanel"/>
diff --git a/main/src/addins/ChangeLogAddIn/ChangeLogAddIn.addin.xml b/main/src/addins/ChangeLogAddIn/ChangeLogAddIn.addin.xml
index 226b186130..1af14056ce 100644
--- a/main/src/addins/ChangeLogAddIn/ChangeLogAddIn.addin.xml
+++ b/main/src/addins/ChangeLogAddIn/ChangeLogAddIn.addin.xml
@@ -17,7 +17,7 @@
<Extension path = "/MonoDevelop/ProjectModel/Gui/ItemOptionPanels/VersionControl">
<ComplexCondition>
<Or>
- <Condition id="ItemType" value="SolutionItem" />
+ <Condition id="ItemType" value="SolutionFolderItem" />
<Condition id="ItemType" value="Solution" />
</Or>
<Section id = "ChangeLogIntegration" _label = "ChangeLog Integration" fill="true" class="MonoDevelop.ChangeLogAddIn.ProjectOptionPanel" />
diff --git a/main/src/addins/ILAsmBinding/ILAsmBinding.addin.xml b/main/src/addins/ILAsmBinding/ILAsmBinding.addin.xml
index 113666b792..787286fb21 100644
--- a/main/src/addins/ILAsmBinding/ILAsmBinding.addin.xml
+++ b/main/src/addins/ILAsmBinding/ILAsmBinding.addin.xml
@@ -8,7 +8,7 @@
</Extension>
<Extension path = "/MonoDevelop/ProjectModel/Gui/ItemOptionPanels/Build">
- <Condition id="ActiveLanguage" value = "IL">
+ <Condition id="TypeTag" value = "IL">
<Section id = "ILAsmCompilerParametersPanel" _label = "Compiler" class = "ILAsmBinding.CompilerParametersPanel"/>
</Condition>
</Extension>
@@ -22,7 +22,7 @@
</Extension>
<Extension path = "/MonoDevelop/ProjectModel/MSBuildItemTypes">
- <DotNetProjectType language="IL" extension="ilproj" guid="{B4EC64DC-6D44-11DD-AAB0-C9A155D89593}"/>
+ <DotNetProjectType language="IL" extension="ilproj" guid="{B4EC64DC-6D44-11DD-AAB0-C9A155D89593}" tag="IL" />
</Extension>
</ExtensionModel>
diff --git a/main/src/addins/MonoDevelop.Autotools/MakefileProject.cs b/main/src/addins/MonoDevelop.Autotools/MakefileProject.cs
index 4be0cdfd12..2d341eaf09 100644
--- a/main/src/addins/MonoDevelop.Autotools/MakefileProject.cs
+++ b/main/src/addins/MonoDevelop.Autotools/MakefileProject.cs
@@ -2,7 +2,6 @@
using System;
using MonoDevelop.Projects;
using System.Collections.Generic;
-using System.Collections.Immutable;
namespace MonoDevelop.Autotools
{
@@ -19,9 +18,10 @@ namespace MonoDevelop.Autotools
return conf;
}
- protected override ImmutableHashSet<string> OnGetProjectTypes ()
+ protected override void OnGetTypeTags (HashSet<string> types)
{
- return base.OnGetProjectTypes ().Add ("MakefileProject");
+ base.OnGetTypeTags (types);
+ types.Add ("MakefileProject");
}
}
diff --git a/main/src/addins/MonoDevelop.Autotools/MonoDevelop.Autotools.csproj b/main/src/addins/MonoDevelop.Autotools/MonoDevelop.Autotools.csproj
index c58288205c..84c712ed90 100644
--- a/main/src/addins/MonoDevelop.Autotools/MonoDevelop.Autotools.csproj
+++ b/main/src/addins/MonoDevelop.Autotools/MonoDevelop.Autotools.csproj
@@ -86,10 +86,6 @@
<SpecificVersion>False</SpecificVersion>
</Reference>
<Reference Include="System.Xml" />
- <Reference Include="System.Collections.Immutable">
- <HintPath>..\..\..\packages\Microsoft.Bcl.Immutable.1.0.34\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll</HintPath>
- <Private>False</Private>
- </Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="AssemblyInfo.cs" />
@@ -134,7 +130,6 @@
</ItemGroup>
<ItemGroup>
<None Include="Makefile.am" />
- <None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<Content Include="templates\Makefile.am.project.template">
diff --git a/main/src/addins/MonoDevelop.Autotools/packages.config b/main/src/addins/MonoDevelop.Autotools/packages.config
deleted file mode 100644
index 591f985ff1..0000000000
--- a/main/src/addins/MonoDevelop.Autotools/packages.config
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
- <package id="Microsoft.Bcl.Immutable" version="1.0.34" targetFramework="net45" />
-</packages> \ No newline at end of file
diff --git a/main/src/addins/VBNetBinding/VBNetBinding.addin.xml b/main/src/addins/VBNetBinding/VBNetBinding.addin.xml
index 07f02843a9..8fb3684321 100644
--- a/main/src/addins/VBNetBinding/VBNetBinding.addin.xml
+++ b/main/src/addins/VBNetBinding/VBNetBinding.addin.xml
@@ -7,7 +7,8 @@
guid="{F184B08F-C81C-45F6-A57F-5ABD9991F28F}"
import="$(MSBuildBinPath)\Microsoft.VisualBasic.targets"
type="MonoDevelop.VBNetBinding.VBProject"
- resourceHandler="MonoDevelop.VBNetBinding.VBNetResourceIdBuilder"/>
+ resourceHandler="MonoDevelop.VBNetBinding.VBNetResourceIdBuilder"
+ tag="VBNet"/>
</Extension>
<Extension path = "/MonoDevelop/Ide/FileFilters">
@@ -29,7 +30,7 @@
</Extension>
<Extension path = "/MonoDevelop/ProjectModel/Gui/ItemOptionPanels/Build/General">
- <Condition id="ActiveLanguage" value="VBNet">
+ <Condition id="TypeTag" value="VBNet">
<Panel id = "VBNetProjectOptionsPanel"
_label = "General Options"
class = "MonoDevelop.VBNetBinding.ProjectOptionsPanel"/>
@@ -40,7 +41,7 @@
</Extension>
<Extension path = "/MonoDevelop/ProjectModel/Gui/ItemOptionPanels/Build/Compiler">
- <Condition id="ActiveLanguage" value="VBNet">
+ <Condition id="TypeTag" value="VBNet">
<Panel id = "VBNetConfigurationOptionsPanel"
_label = "Compiler Options"
class = "MonoDevelop.VBNetBinding.ConfigurationOptionsPanel"/>
diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl/VersionControl.addin.xml b/main/src/addins/VersionControl/MonoDevelop.VersionControl/VersionControl.addin.xml
index 5d92b87683..de0621993d 100644
--- a/main/src/addins/VersionControl/MonoDevelop.VersionControl/VersionControl.addin.xml
+++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl/VersionControl.addin.xml
@@ -289,7 +289,7 @@
</Condition>
<ComplexCondition>
<Or>
- <Condition id="ItemType" value="SolutionItem" />
+ <Condition id="ItemType" value="SolutionFolderItem" />
<Condition id="ItemType" value="Solution" />
</Or>
<Section id="VersionControlGeneral" _label="Commit Message Style" fill="true" class="MonoDevelop.VersionControl.VersionControlPolicyPanel" icon="md-prefs-commit-message-style" />
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Core.addin.xml b/main/src/core/MonoDevelop.Core/MonoDevelop.Core.addin.xml
index bc0bbc1a00..a49854d995 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Core.addin.xml
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Core.addin.xml
@@ -93,12 +93,6 @@
<ExtensionPoint path = "/MonoDevelop/ProjectModel/ProjectServiceExtensions" name = "Project service extensions">
<Description>Project service extensions. Specified classes must be a subclass of ProjectServiceExtension</Description>
- <ConditionType id="ItemType" type="MonoDevelop.Core.Gui.Dialogs.OptionPanels.ItemTypeCondition">
- <Description>Type of the item. If no namespace is provided, MonoDevelop.Projects is assumed.</Description>
- </ConditionType>
- <ConditionType id="ActiveLanguage" type="MonoDevelop.Projects.Extensions.ItemTypeCondition">
- <Description>Language of the project. It will evaluate to false if the project is not a .NET project.</Description>
- </ConditionType>
<ExtensionNode name="Class">
<Description>A subclass of ProjectServiceExtension.</Description>
</ExtensionNode>
@@ -112,6 +106,9 @@
<ExtensionNode name="ProjectFlavor" type="MonoDevelop.Projects.Extensions.SolutionItemExtensionNode">
<Description>A subclass of ProjectExtension.</Description>
</ExtensionNode>
+ <ConditionType id="ItemType" type="MonoDevelop.Core.Gui.Dialogs.OptionPanels.ItemTypeCondition">
+ <Description>Type of the item. If no namespace is provided, MonoDevelop.Projects is assumed.</Description>
+ </ConditionType>
</ExtensionPoint>
<ExtensionPoint path = "/MonoDevelop/ProjectModel/MSBuildProjectExtensions" name = "MSBuild project extensions">
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Core.csproj b/main/src/core/MonoDevelop.Core/MonoDevelop.Core.csproj
index f4b43947ff..0a7d2ba2ca 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Core.csproj
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Core.csproj
@@ -295,7 +295,6 @@
<Compile Include="MonoDevelop.Projects.Extensions\DataTypeCodon.cs" />
<Compile Include="MonoDevelop.Projects.Extensions\SerlializationMapNode.cs" />
<Compile Include="MonoDevelop.Projects.Extensions\FileFormatNode.cs" />
- <Compile Include="MonoDevelop.Projects.Extensions\SolutionItemHandler.cs" />
<Compile Include="MonoDevelop.Projects.Extensions\PolicySetNode.cs" />
<Compile Include="MonoDevelop.Projects.Extensions\PolicyNode.cs" />
<Compile Include="MonoDevelop.Projects.Extensions\ItemTypeCondition.cs" />
@@ -486,6 +485,7 @@
<Compile Include="MonoDevelop.Projects\MSBuildSerializationExtension.cs" />
<Compile Include="MonoDevelop.Projects\WorkspaceSerializationExtension.cs" />
<Compile Include="MonoDevelop.Projects\IMSBuildFileObject.cs" />
+ <Compile Include="MonoDevelop.Projects.Extensions\TypeTagCondition.cs" />
</ItemGroup>
<ItemGroup>
<None Include="Makefile.am" />
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 971d8d3727..d3c5da7af8 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/DotNetProjectTypeNode.cs
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/DotNetProjectTypeNode.cs
@@ -47,7 +47,7 @@ namespace MonoDevelop.Projects.Extensions
public DotNetProjectTypeNode ()
{
- Alias = "DotNet";
+ TypeTag = "DotNet";
}
public override bool CanCreateSolutionItem (string type, ProjectCreateInformation info, System.Xml.XmlElement projectOptions)
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/ItemTypeCondition.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/ItemTypeCondition.cs
index e832949326..b83091da19 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/ItemTypeCondition.cs
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/ItemTypeCondition.cs
@@ -77,7 +77,7 @@ namespace MonoDevelop.Projects.Extensions
public override bool Evaluate (NodeElement conditionNode)
{
foreach (string type in conditionNode.GetAttribute ("value").Split ('|')) {
- if (MatchesType (type))
+ if (MatchesType (type.Trim ()))
return true;
}
return false;
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/SolutionItemHandler.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/SolutionItemHandler.cs
deleted file mode 100644
index 04cc805c15..0000000000
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/SolutionItemHandler.cs
+++ /dev/null
@@ -1,88 +0,0 @@
-// MD1SolutionItemHandler.cs
-//
-// Author:
-// Lluis Sanchez Gual <lluis@novell.com>
-//
-// Copyright (c) 2008 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-//
-//
-
-using System;
-using System.CodeDom.Compiler;
-using MonoDevelop.Core;
-using MonoDevelop.Projects.Extensions;
-using System.Threading.Tasks;
-
-namespace MonoDevelop.Projects.Extensions
-{
- public abstract class SolutionItemHandler
- {
- SolutionFolderItem item;
-
- public SolutionItemHandler (SolutionFolderItem item)
- {
- this.item = item;
- }
-
- public virtual bool SyncFileName {
- get { return true; }
- }
-
- public SolutionFolderItem Item {
- get { return item; }
- }
-
- public async virtual Task<BuildResult> RunTarget (ProgressMonitor monitor, string target, ConfigurationSelector configuration)
- {
- switch (target)
- {
- case "Build":
- return await OnBuild (monitor, configuration);
- case "Clean":
- return await OnClean (monitor, configuration);
- }
- return new BuildResult (new CompilerResults (null), "");
- }
-
- protected virtual Task<BuildResult> OnBuild (ProgressMonitor monitor, ConfigurationSelector configuration)
- {
- return Task.FromResult (BuildResult.Success);
- }
-
- protected virtual Task<BuildResult> OnClean (ProgressMonitor monitor, ConfigurationSelector configuration)
- {
- return Task.FromResult (BuildResult.Success);
- }
-
- public virtual void Dispose ()
- {
- }
-
- public virtual void OnModified (string hint)
- {
- }
-
- public virtual object GetService (Type t)
- {
- return null;
- }
- }
-}
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 f00b9dd561..8137ebf730 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/SolutionItemTypeNode.cs
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/SolutionItemTypeNode.cs
@@ -52,8 +52,8 @@ namespace MonoDevelop.Projects.Extensions
[NodeAttribute]
string type = null;
- [NodeAttribute ("alias")]
- public string Alias { get; protected set; }
+ [NodeAttribute ("tag")]
+ public string TypeTag { get; protected set; }
public SolutionItemTypeNode ()
{
@@ -125,7 +125,7 @@ namespace MonoDevelop.Projects.Extensions
public virtual bool CanCreateSolutionItem (string type, ProjectCreateInformation info, System.Xml.XmlElement projectOptions)
{
- return type.Equals (Guid, StringComparison.OrdinalIgnoreCase) || type == Alias;
+ return type.Equals (Guid, StringComparison.OrdinalIgnoreCase) || type == TypeTag;
}
public virtual SolutionItem CreateSolutionItem (string type, ProjectCreateInformation info, System.Xml.XmlElement projectOptions)
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/TypeTagCondition.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/TypeTagCondition.cs
new file mode 100644
index 0000000000..b895e95f5e
--- /dev/null
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/TypeTagCondition.cs
@@ -0,0 +1,69 @@
+//
+// TypeTagCondition.cs
+//
+// Author:
+// Lluis Sanchez Gual <lluis@xamarin.com>
+//
+// Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+using System;
+using System.Linq;
+using Mono.Addins;
+
+namespace MonoDevelop.Projects.Extensions
+{
+ public class TypeTagCondition: ConditionType
+ {
+ string[] tags;
+
+ public TypeTagCondition (Project project)
+ {
+ tags = project.GetTypeTags ().ToArray ();
+ }
+
+ public override bool Evaluate (NodeElement conditionNode)
+ {
+ var val = conditionNode.GetAttribute ("value");
+ if (val.IndexOf ('|') != -1) {
+ string[] ors = val.Split ('|');
+ foreach (var cond in ors) {
+ if (EvalAnd (cond))
+ return true;
+ }
+ return false;
+ }
+ return EvalAnd (val);
+ }
+
+ bool EvalAnd (string val)
+ {
+ if (val.IndexOf ('&') != -1) {
+ var ands = val.Split ('&');
+ foreach (var tag in ands) {
+ if (!tags.Contains (tag.Trim ()))
+ return false;
+ }
+ return true;
+ }
+ return tags.Contains (val.Trim ());
+ }
+ }
+}
+
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.SharedAssetsProjects/SharedAssetsProject.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.SharedAssetsProjects/SharedAssetsProject.cs
index 6d92dd85b1..b884992fc1 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.SharedAssetsProjects/SharedAssetsProject.cs
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.SharedAssetsProjects/SharedAssetsProject.cs
@@ -187,9 +187,10 @@ namespace MonoDevelop.Projects.SharedAssetsProjects
}
}
- protected override System.Collections.Immutable.ImmutableHashSet<string> OnGetProjectTypes ()
+ protected override void OnGetTypeTags (HashSet<string> types)
{
- return base.OnGetProjectTypes ().Add ("SharedAssets").Add ("DotNet");
+ types.Add ("SharedAssets");
+ types.Add ("DotNet");
}
public override string[] SupportedLanguages {
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/CompiledAssemblyProject.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/CompiledAssemblyProject.cs
index b572299c56..a74c61e9a0 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/CompiledAssemblyProject.cs
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/CompiledAssemblyProject.cs
@@ -51,9 +51,10 @@ namespace MonoDevelop.Projects
StockIcon = "md-assembly-project";
}
- protected override System.Collections.Immutable.ImmutableHashSet<string> OnGetProjectTypes ()
+ protected override void OnGetTypeTags (HashSet<string> types)
{
- return base.OnGetProjectTypes ().Add ("CompiledAssembly");
+ base.OnGetTypeTags (types);
+ types.Add ("CompiledAssembly");
}
protected override SolutionItemConfiguration OnCreateConfiguration (string name)
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/DotNetProject.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/DotNetProject.cs
index c773cfb89b..effa6b6232 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/DotNetProject.cs
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/DotNetProject.cs
@@ -215,9 +215,11 @@ namespace MonoDevelop.Projects
return MSBuildSupport.Supported;
}
- protected override ImmutableHashSet<string> OnGetProjectTypes ()
+ protected override void OnGetTypeTags (HashSet<string> types)
{
- return base.OnGetProjectTypes ().Add ("DotNet").Add ("DotNetAssembly");
+ base.OnGetTypeTags (types);
+ types.Add ("DotNet");
+ types.Add ("DotNetAssembly");
}
DotNetProjectExtension projectExtension;
@@ -565,11 +567,6 @@ namespace MonoDevelop.Projects
get { return (flags & DotNetProjectFlags.SupportsPartialTypes) != 0; }
}
- protected override System.Collections.Immutable.ImmutableList<string> OnGetSupportedPlatforms ()
- {
- return base.OnGetSupportedPlatforms ().Add ("AnyCPU");
- }
-
void CheckReferenceChange (FilePath updatedFile)
{
for (int n=0; n<References.Count; n++) {
@@ -1090,7 +1087,7 @@ namespace MonoDevelop.Projects
/// Gets the default namespace for the file, according to the naming policy.
/// </summary>
/// <remarks>Always returns a valid namespace, even if the fileName is null.</remarks>
- public virtual string GetDefaultNamespace (string fileName)
+ public string GetDefaultNamespace (string fileName)
{
return OnGetDefaultNamespace (fileName);
}
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/GenericProject.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/GenericProject.cs
index ea253110b0..ca04f9a0c5 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/GenericProject.cs
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/GenericProject.cs
@@ -50,9 +50,10 @@ namespace MonoDevelop.Projects
return conf;
}
- protected override ImmutableHashSet<string> OnGetProjectTypes ()
+ protected override void OnGetTypeTags (HashSet<string> types)
{
- return base.OnGetProjectTypes ().Add ("GenericProject");
+ base.OnGetTypeTags (types);
+ types.Add ("GenericProject");
}
}
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ItemCollection.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ItemCollection.cs
index 59a2eddd0f..8a23f51772 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ItemCollection.cs
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ItemCollection.cs
@@ -73,6 +73,13 @@ namespace MonoDevelop.Projects
OnItemsAdded (items);
}
+ public void Insert (int index, T item)
+ {
+ list = list.Insert (index, item);
+ singleItem [0] = item;
+ OnItemsAdded (singleItem);
+ }
+
public void RemoveRange (IEnumerable<T> items)
{
AssertCanWrite ();
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/PortableDotNetProjectFlavor.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/PortableDotNetProjectFlavor.cs
index d039c6d105..e29fb6800a 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/PortableDotNetProjectFlavor.cs
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/PortableDotNetProjectFlavor.cs
@@ -33,9 +33,10 @@ namespace MonoDevelop.Projects
{
public class PortableDotNetProjectFlavor: DotNetProjectExtension
{
- internal protected override System.Collections.Immutable.ImmutableHashSet<string> OnGetProjectTypes ()
+ internal protected override void OnGetTypeTags (HashSet<string> types)
{
- return base.OnGetProjectTypes ().Add ("PortableDotNet");
+ base.OnGetTypeTags (types);
+ types.Add ("PortableDotNet");
}
internal protected override bool OnGetSupportsFormat (MSBuildFileFormat format)
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Project.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Project.cs
index 05f2753053..274aedcea8 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Project.cs
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Project.cs
@@ -361,14 +361,15 @@ namespace MonoDevelop.Projects
/// <summary>
/// Gets the project type and its base types.
/// </summary>
- public IEnumerable<string> GetProjectTypes ()
+ public IEnumerable<string> GetTypeTags ()
{
- return ProjectExtension.OnGetProjectTypes ();
+ HashSet<string> sset = new HashSet<string> ();
+ ProjectExtension.OnGetTypeTags (sset);
+ return sset;
}
- protected virtual ImmutableHashSet<string> OnGetProjectTypes ()
+ protected virtual void OnGetTypeTags (HashSet<string> types)
{
- return ImmutableHashSet<string>.Empty;
}
public bool HasFlavor<T> ()
@@ -2401,9 +2402,9 @@ namespace MonoDevelop.Projects
return Project.OnGetIsCompileable (fileName);
}
- internal protected override ImmutableHashSet<string> OnGetProjectTypes ()
+ internal protected override void OnGetTypeTags (HashSet<string> types)
{
- return Project.OnGetProjectTypes ();
+ Project.OnGetTypeTags (types);
}
internal protected override Task<BuildResult> OnRunTarget (ProgressMonitor monitor, string target, ConfigurationSelector configuration)
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ProjectExtension.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ProjectExtension.cs
index 7cd3f446b8..4f3b579b45 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ProjectExtension.cs
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ProjectExtension.cs
@@ -75,12 +75,11 @@ namespace MonoDevelop.Projects
next.OnGetDefaultImports (imports);
}
- internal protected virtual ImmutableHashSet<string> OnGetProjectTypes ()
+ internal protected virtual void OnGetTypeTags (HashSet<string> types)
{
- var res = next.OnGetProjectTypes ();
+ next.OnGetTypeTags (types);
if (TypeAlias != null)
- res = res.Add (TypeAlias);
- return res;
+ types.Add (TypeAlias);
}
/// <summary>
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/WorkspaceObject.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/WorkspaceObject.cs
index 53a04cef73..2060a57b8d 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/WorkspaceObject.cs
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/WorkspaceObject.cs
@@ -46,6 +46,7 @@ namespace MonoDevelop.Projects
bool initializeCalled;
bool isShared;
object localLock = new object ();
+ ExtensionContext extensionContext;
internal protected void Initialize<T> (T instance)
{
@@ -61,6 +62,10 @@ namespace MonoDevelop.Projects
{
if (!initializeCalled) {
initializeCalled = true;
+
+ extensionContext = AddinManager.CreateExtensionContext ();
+ extensionContext.RegisterCondition ("ItemType", new ItemTypeCondition (GetType ()));
+
OnInitialize ();
InitializeExtensionChain ();
OnExtensionChainInitialized ();
@@ -246,6 +251,12 @@ namespace MonoDevelop.Projects
}
}
+ public ExtensionContext ExtensionContext {
+ get {
+ return this.extensionContext;
+ }
+ }
+
WorkspaceObjectExtension itemExtension;
WorkspaceObjectExtension ItemExtension {
@@ -270,7 +281,7 @@ namespace MonoDevelop.Projects
// Collect extensions that support this object
var extensions = new List<WorkspaceObjectExtension> ();
- foreach (ProjectModelExtensionNode node in GetModelExtensions ()) {
+ foreach (ProjectModelExtensionNode node in GetModelExtensions (extensionContext)) {
if (node.CanHandleObject (this)) {
var ext = node.CreateExtension ();
if (ext.SupportsObject (this))
@@ -294,9 +305,12 @@ namespace MonoDevelop.Projects
e.OnExtensionChainCreated ();
}
- internal static IEnumerable<ProjectModelExtensionNode> GetModelExtensions ()
+ internal static IEnumerable<ProjectModelExtensionNode> GetModelExtensions (ExtensionContext ctx)
{
- return AddinManager.GetExtensionNodes (ProjectService.ProjectModelExtensionsPath).Cast<ProjectModelExtensionNode> ().Concat (customNodes);
+ if (ctx != null)
+ return ctx.GetExtensionNodes (ProjectService.ProjectModelExtensionsPath).Cast<ProjectModelExtensionNode> ().Concat (customNodes);
+ else
+ return AddinManager.GetExtensionNodes (ProjectService.ProjectModelExtensionsPath).Cast<ProjectModelExtensionNode> ().Concat (customNodes);
}
static List<ProjectModelExtensionNode> customNodes = new List<ProjectModelExtensionNode> ();
diff --git a/main/src/core/MonoDevelop.Ide/ExtensionModel/ItemOptionPanels.addin.xml b/main/src/core/MonoDevelop.Ide/ExtensionModel/ItemOptionPanels.addin.xml
index a6c1eb8de9..dc70423675 100644
--- a/main/src/core/MonoDevelop.Ide/ExtensionModel/ItemOptionPanels.addin.xml
+++ b/main/src/core/MonoDevelop.Ide/ExtensionModel/ItemOptionPanels.addin.xml
@@ -9,8 +9,8 @@
<ConditionType id="FlavorType" type="MonoDevelop.Projects.Extensions.FlavorTypeCondition">
<Description>Type of a flavor that a project must have. If no namespace is provided, MonoDevelop.Projects is assumed.</Description>
</ConditionType>
- <ConditionType id="ActiveLanguage" type="MonoDevelop.Projects.Extensions.ProjectLanguageCondition">
- <Description>Language of the project. It will evaluate to false if the project is not a .NET project.</Description>
+ <ConditionType id="TypeTag" type="MonoDevelop.Projects.Extensions.TypeTagCondition">
+ <Description>Tag or tags that a project must have.</Description>
</ConditionType>
</ExtensionPoint>
@@ -38,7 +38,7 @@
</Section>
<Section id="Build" _label="Build">
<Section id="General" _label="General" icon="md-prefs-build">
- <Condition id="ItemType" value="DotNetAssemblyProject">
+ <Condition id="ItemType" value="DotNetProject">
<Panel id = "RuntimeOptionsPanel" _label = "Runtime Options" class = "MonoDevelop.Ide.Projects.OptionPanels.RuntimeOptionsPanel"/>
</Condition>
<Condition id="FlavorType" value="PortableDotNetProjectFlavor">
@@ -76,7 +76,7 @@
<Condition id="ItemType" value="Solution">
<Section id = "StartupOptionsPanel" _label = "Startup Project" fill = "true" class = "MonoDevelop.Ide.Projects.OptionPanels.StartupOptionsPanel"/>
</Condition>
- <Condition id="ItemType" value="SolutionEntityItem">
+ <Condition id="ItemType" value="SolutionItem">
<Section id = "CustomCommands" _label = "Custom Commands" fill = "true" class = "MonoDevelop.Ide.Projects.OptionPanels.ExecutionCustomCommandPanel" />
</Condition>
</Section>
@@ -85,7 +85,7 @@
<Condition id="ItemType" value="Solution">
<Panel id = "NamespaceSynchronisationPanel" class = "MonoDevelop.Ide.Projects.OptionPanels.NamespaceSynchronisationPanel" />
</Condition>
- <Condition id="ItemType" value="SolutionItem">
+ <Condition id="ItemType" value="SolutionFolderItem">
<Panel id = "NamespaceSynchronisationPanel" class = "MonoDevelop.Ide.Projects.OptionPanels.NamespaceSynchronisationPanel" />
</Condition>
</Section>
@@ -93,7 +93,7 @@
<Section id="CodeFormattingPolicies" _label="Code Formatting" fill="true" class="MonoDevelop.Ide.Projects.OptionPanels.CodeFormattingPanel" icon="md-prefs-code-formatting" />
<Section id="DefaultStandardHeader" _label="Standard Header" fill="true" class= "MonoDevelop.Ide.StandardHeader.StandardHeaderPolicyPanel" icon="md-prefs-standard-header" />
</Condition>
- <Condition id="ItemType" value="SolutionItem">
+ <Condition id="ItemType" value="SolutionFolderItem">
<Section id="CodeFormattingPolicies" _label="Code Formatting" fill="true" class="MonoDevelop.Ide.Projects.OptionPanels.CodeFormattingPanel" icon="md-prefs-code-formatting" />
<Section id="DefaultStandardHeader" _label="Standard Header" fill="true" class="MonoDevelop.Ide.StandardHeader.StandardHeaderPolicyPanel" icon="md-prefs-standard-header" />
</Condition>
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Codons/ProjectActiveCondition.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Codons/ProjectActiveCondition.cs
index 4c3b9bf860..e91c9edc7d 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Codons/ProjectActiveCondition.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Codons/ProjectActiveCondition.cs
@@ -62,7 +62,7 @@ namespace MonoDevelop.Ide.Codons
if (activeproject == "*") {
return project != null;
}
- return project != null && project.GetProjectTypes ().All (p => p != activeproject);
+ return project != null && project.GetTypeTags ().All (p => p != activeproject);
}
}
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/NewFileDialog.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/NewFileDialog.cs
index 6264840f8b..0b863cf897 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/NewFileDialog.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/NewFileDialog.cs
@@ -166,7 +166,7 @@ namespace MonoDevelop.Ide.Projects
{
string key = "Dialogs.NewFileDialog.LastSelectedCategory";
if (proj != null) {
- key += "." + proj.GetProjectTypes ().First ();
+ key += "." + proj.GetTypeTags ().First ();
var dnp = proj as DotNetProject;
if (dnp != null)
key += "." + dnp.LanguageName;
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/FileTemplate.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/FileTemplate.cs
index 1a9e9486b6..e23954f781 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/FileTemplate.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/FileTemplate.cs
@@ -413,7 +413,7 @@ namespace MonoDevelop.Ide.Templates
//filter on conditions
if (project != null) {
- if (!string.IsNullOrEmpty (projecttype) && project.GetProjectTypes ().All (p => p != projecttype))
+ if (!string.IsNullOrEmpty (projecttype) && project.GetTypeTags ().All (p => p != projecttype))
return false;
foreach (FileTemplateCondition condition in conditions)
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/ParentProjectFileTemplateCondition.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/ParentProjectFileTemplateCondition.cs
index 741a8b25de..769e896f5e 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/ParentProjectFileTemplateCondition.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/ParentProjectFileTemplateCondition.cs
@@ -84,7 +84,7 @@ namespace MonoDevelop.Ide.Templates
if (proj == null)
return !requireExists;
- if (projectType != null && proj.GetProjectTypes ().All (p => p != projectType))
+ if (projectType != null && proj.GetTypeTags ().All (p => p != projectType))
return false;
//check for permitted creation paths
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/TypeSystemService.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/TypeSystemService.cs
index d9585fd3c6..2abb3357b9 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/TypeSystemService.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/TypeSystemService.cs
@@ -265,7 +265,7 @@ namespace MonoDevelop.Ide.TypeSystem
static bool IsOutputTracked (DotNetProject project)
{
- foreach (var projectType in project.GetProjectTypes ()) {
+ foreach (var projectType in project.GetTypeTags ()) {
if (outputTrackedProjects.Any (otp => otp.ProjectType != null && string.Equals (otp.ProjectType, projectType, StringComparison.OrdinalIgnoreCase))) {
return true;
}