diff options
author | Lluis Sanchez Gual <lluis@xamarin.com> | 2015-03-20 20:02:08 +0300 |
---|---|---|
committer | Lluis Sanchez Gual <lluis@xamarin.com> | 2015-03-20 20:02:08 +0300 |
commit | 01c48e7c381812d4aa79ae96d85e969e3805c5b0 (patch) | |
tree | 80cac890c3f85a0f59bcb300359b386674f108cf /main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CustomTools | |
parent | 2f7a4f23f18550d8b382433cef58bcbe4adb5a35 (diff) | |
parent | fb917669e5ead54795e31aa9706c5f2a1f7fb5bf (diff) |
Merge remote-tracking branch 'origin/master' into new-project-model
Conflicts:
main/external/fsharpbinding
main/external/mono-addins
main/external/nrefactory
main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/DebuggingService.cs
main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/Extensions.cs
main/src/addins/MonoDevelop.GtkCore/MonoDevelop.GtkCore.GuiBuilder/GtkProjectServiceExtension.cs
main/src/core/MonoDevelop.Core/MonoDevelop.Core/Runtime.cs
main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Formats.MSBuild/MSBuildProjectHandler.cs
main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Project.cs
main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ProjectService.cs
main/src/core/MonoDevelop.Core/MonoDevelop.Projects/SolutionItem.cs
main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/MainToolbar.cs
main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Commands/ProjectCommands.cs
main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CustomTools/CustomToolService.cs
main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/FindReplace.cs
main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Workbench.cs
main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/NewProjectController.cs
main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/RootWorkspace.cs
main/tests/UnitTests/UnitTests.csproj
version-checks
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CustomTools')
-rw-r--r-- | main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CustomTools/CustomToolService.cs | 84 |
1 files changed, 51 insertions, 33 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CustomTools/CustomToolService.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CustomTools/CustomToolService.cs index a80c5405bc..8533263946 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CustomTools/CustomToolService.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CustomTools/CustomToolService.cs @@ -127,21 +127,58 @@ namespace MonoDevelop.Ide.CustomTools } } + static bool ShouldRunGenerator (ProjectFile file, bool force, out ISingleFileCustomTool tool, out ProjectFile genFile) + { + tool = null; + genFile = null; + + //ignore cloned file from shared project in context of referencing project + if ((file.Flags & ProjectItemFlags.DontPersist) != 0) { + return false; + } + + tool = GetGenerator (file.Generator); + if (tool == null) { + return false; + } + + //ignore MSBuild tool for projects that aren't MSBuild or can't build + //we could emit a warning but this would get very annoying for Xamarin Forms + SAP + //in future we could consider running the MSBuild generator in context of every referencing project + if (tool is MSBuildCustomTool) { + if (!file.Project.SupportsBuild ()) { + return false; + } + bool byDefault, require; + MonoDevelop.Projects.Formats.MSBuild.MSBuildProjectService.CheckHandlerUsesMSBuildEngine (file.Project, out byDefault, out require); + var usesMSBuild = require || (file.Project.UseMSBuildEngine ?? byDefault); + if (!usesMSBuild) { + return false; + } + } + + if (!string.IsNullOrEmpty (file.LastGenOutput)) { + genFile = file.Project.Files.GetFile (file.FilePath.ParentDirectory.Combine (file.LastGenOutput)); + } + + return force + || genFile == null + || !File.Exists (genFile.FilePath) + || File.GetLastWriteTime (file.FilePath) > File.GetLastWriteTime (genFile.FilePath); + } + static async Task Update (ProgressMonitor monitor, IEnumerator<ProjectFile> fileEnumerator, bool force, int succeeded, int warnings, int errors) { ProjectFile file = fileEnumerator.Current; - ProjectFile genFile = null; - ISingleFileCustomTool tool = null; + ISingleFileCustomTool tool; + ProjectFile genFile; - //Find the first file in the collection, which has got generator tool - //and isn't cloned from a shared project - while (((file.Flags & ProjectItemFlags.DontPersist) != 0 - || (tool = GetGenerator (file.Generator)) == null - || (genFile = GetGeneratedFile (file, force)) == null - ) && fileEnumerator.MoveNext ()); + bool shouldRun; + while (!(shouldRun = ShouldRunGenerator (file, force, out tool, out genFile)) && fileEnumerator.MoveNext ()) + continue; //no files which can be generated in remaining elements of the collection, nothing to do - if (tool == null || genFile == null) { + if (!shouldRun) { WriteSummaryResults (monitor, succeeded, warnings, errors); return; } @@ -203,33 +240,14 @@ namespace MonoDevelop.Ide.CustomTools monitor.Dispose (); } - static ProjectFile GetGeneratedFile (ProjectFile file, bool force) - { - ProjectFile genFile = null; - - if (!string.IsNullOrEmpty (file.LastGenOutput)) - genFile = file.Project.Files.GetFile (file.FilePath.ParentDirectory.Combine (file.LastGenOutput)); - - if (!force && genFile != null && File.Exists (genFile.FilePath) && - File.GetLastWriteTime (file.FilePath) < File.GetLastWriteTime (genFile.FilePath)) { - return null; - } - - return genFile; - } - public static async void Update (ProjectFile file, bool force) { - //if file's cloned from a shared project, ignore it - if ((file.Flags & ProjectItemFlags.DontPersist) != 0) - return; - - var tool = GetGenerator (file.Generator); - if (tool == null) + ISingleFileCustomTool tool; + ProjectFile genFile; + if (!ShouldRunGenerator (file, force, out tool, out genFile)) { return; + } - ProjectFile genFile = GetGeneratedFile(file, force); - TaskService.Errors.ClearByOwner (file); //if this file is already being run, cancel it @@ -298,7 +316,7 @@ namespace MonoDevelop.Ide.CustomTools null : result.GeneratedFilePath.ToRelative (file.FilePath.ParentDirectory); if (!string.IsNullOrEmpty (genFileName)) { - bool validName = genFileName.IndexOfAny (new char[] { '/', '\\' }) < 0 + bool validName = genFileName.IndexOfAny (new [] { '/', '\\' }) < 0 && FileService.IsValidFileName (genFileName); if (!broken && !validName) { |