diff options
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; } |