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));
        }
Esempio n. 2
0
		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);
		}
 public SingleFileCustomToolWrapper(ISingleFileCustomTool customTool)
 {
     this.customTool = customTool;
 }