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
diff options
context:
space:
mode:
authorLluis Sanchez Gual <lluis@xamarin.com>2015-03-20 20:02:08 +0300
committerLluis Sanchez Gual <lluis@xamarin.com>2015-03-20 20:02:08 +0300
commit01c48e7c381812d4aa79ae96d85e969e3805c5b0 (patch)
tree80cac890c3f85a0f59bcb300359b386674f108cf /main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CustomTools
parent2f7a4f23f18550d8b382433cef58bcbe4adb5a35 (diff)
parentfb917669e5ead54795e31aa9706c5f2a1f7fb5bf (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.cs84
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) {