diff options
author | Lluis Sanchez Gual <lluis@xamarin.com> | 2015-02-12 14:35:41 +0300 |
---|---|---|
committer | Lluis Sanchez Gual <lluis@xamarin.com> | 2015-02-12 14:35:41 +0300 |
commit | 940e824f125f5db793e6be7c2dec793c88e32a97 (patch) | |
tree | a1d49571becf12d6f6fd3c9688fa9f9486c091cb /main/src | |
parent | 93c8daeefb07434d15ceaa5d067b6a04e91b7fa9 (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')
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; } |