diff --git a/src/Main/Base/Project/Src/Commands/BuildCommands.cs b/src/Main/Base/Project/Src/Commands/BuildCommands.cs index df1abe739d..bbed380dad 100644 --- a/src/Main/Base/Project/Src/Commands/BuildCommands.cs +++ b/src/Main/Base/Project/Src/Commands/BuildCommands.cs @@ -16,9 +16,14 @@ using ICSharpCode.Core; namespace ICSharpCode.SharpDevelop.Project.Commands { - public class Build : AbstractMenuCommand + public abstract class AbstractBuildMenuCommand : AbstractMenuCommand { - public static void BeforeBuild() + public virtual bool CanRunBuild { + get { + return ProjectService.OpenSolution!=null; + } + } + public virtual void BeforeBuild() { TaskService.BuildMessageViewCategory.ClearText(); TaskService.InUpdate = true; @@ -27,145 +32,102 @@ namespace ICSharpCode.SharpDevelop.Project.Commands ICSharpCode.SharpDevelop.Commands.SaveAllFiles.SaveAll(); } - public static int LastErrorCount; - public static int LastWarningCount; - - public static void ShowResults(CompilerResults results) - { - if (results != null) { - LastErrorCount = 0; - LastWarningCount = 0; - TaskService.InUpdate = true; - foreach (CompilerError error in results.Errors) { - TaskService.Add(new Task(error)); - if (error.IsWarning) - LastWarningCount++; - else - LastErrorCount++; - } - TaskService.InUpdate = false; - if (results.Errors.Count > 0) { - WorkbenchSingleton.Workbench.GetPad(typeof(ErrorListPad)).BringPadToFront(); - } - } - } - - public static void AddNoSingleFileCompilationError() - { - LastErrorCount = 1; - LastWarningCount = 0; - TaskService.Add(new Task(null, StringParser.Parse("${res:BackendBindings.ExecutionManager.NoSingleFileCompilation}"), 0, 0, TaskType.Error)); - WorkbenchSingleton.Workbench.GetPad(typeof(ErrorListPad)).BringPadToFront(); - } + public virtual void AfterBuild() {} public override void Run() { - Build.BeforeBuild(); - if (ProjectService.OpenSolution == null) { - Build.AddNoSingleFileCompilationError(); + if (CanRunBuild) { + BeforeBuild(); + RunBuild(); + AfterBuild(); } else { - Build.ShowResults(ProjectService.OpenSolution.Build()); + MSBuildEngine.AddNoSingleFileCompilationError(); } - Build.AfterBuild(); + } + + public abstract void RunBuild(); + } + + public class Build : AbstractBuildMenuCommand + { + public override void RunBuild() + { + MSBuildEngine.ShowResults(ProjectService.OpenSolution.Build()); } - public static void AfterBuild() + public override void AfterBuild() { ProjectService.OnEndBuild(); } } - public class Rebuild : AbstractMenuCommand + public class Rebuild : Build { - public override void Run() + public override void RunBuild() { - Build.BeforeBuild(); - if (ProjectService.OpenSolution == null) { - Build.AddNoSingleFileCompilationError(); - } else { - Build.ShowResults(ProjectService.OpenSolution.Rebuild()); - } - Build.AfterBuild(); + MSBuildEngine.ShowResults(ProjectService.OpenSolution.Rebuild()); } } - public class Clean : AbstractMenuCommand + public class Clean : AbstractBuildMenuCommand { - public override void Run() + public override void RunBuild() { - Build.BeforeBuild(); - if (ProjectService.OpenSolution == null) { - Build.AddNoSingleFileCompilationError(); - } else { - Build.ShowResults(ProjectService.OpenSolution.Clean()); - } + MSBuildEngine.ShowResults(ProjectService.OpenSolution.Clean()); } } - public class Publish : AbstractMenuCommand + public class Publish : AbstractBuildMenuCommand { - public override void Run() + public override void RunBuild() { - Build.BeforeBuild(); - if (ProjectService.OpenSolution == null) { - Build.AddNoSingleFileCompilationError(); - } else { - Build.ShowResults(ProjectService.OpenSolution.Publish()); - } + MSBuildEngine.ShowResults(ProjectService.OpenSolution.Publish()); } } - public class BuildProject : AbstractMenuCommand + public abstract class AbstractProjectBuildMenuCommand : AbstractBuildMenuCommand { - public override void Run() - { - Build.BeforeBuild(); - if (ProjectService.OpenSolution == null) { - Build.AddNoSingleFileCompilationError(); - } else { - Build.ShowResults(ProjectService.CurrentProject.Build()); + public override bool CanRunBuild { + get { + return base.CanRunBuild + && ProjectService.CurrentProject!=null; } - Build.AfterBuild(); + } + } + public class BuildProject : AbstractProjectBuildMenuCommand + { + public override void RunBuild() + { + MSBuildEngine.ShowResults(ProjectService.CurrentProject.Build()); + } + + public override void AfterBuild() + { + ProjectService.OnEndBuild(); } } - public class RebuildProject : AbstractMenuCommand + public class RebuildProject : BuildProject { - public override void Run() + public override void RunBuild() { - Build.BeforeBuild(); - if (ProjectService.OpenSolution == null) { - Build.AddNoSingleFileCompilationError(); - } else { - Build.ShowResults(ProjectService.CurrentProject.Rebuild()); - } - Build.AfterBuild(); + MSBuildEngine.ShowResults(ProjectService.CurrentProject.Rebuild()); } } - public class CleanProject : AbstractMenuCommand + public class CleanProject : AbstractProjectBuildMenuCommand { - public override void Run() + public override void RunBuild() { - Build.BeforeBuild(); - if (ProjectService.OpenSolution == null) { - Build.AddNoSingleFileCompilationError(); - } else { - Build.ShowResults(ProjectService.CurrentProject.Clean()); - } + MSBuildEngine.ShowResults(ProjectService.CurrentProject.Clean()); } } - public class PublishProject : AbstractMenuCommand + public class PublishProject : AbstractProjectBuildMenuCommand { - public override void Run() + public override void RunBuild() { - Build.BeforeBuild(); - if (ProjectService.OpenSolution == null) { - Build.AddNoSingleFileCompilationError(); - } else { - Build.ShowResults(ProjectService.CurrentProject.Publish()); - } + MSBuildEngine.ShowResults(ProjectService.CurrentProject.Publish()); } } diff --git a/src/Main/Base/Project/Src/Commands/DebugCommands.cs b/src/Main/Base/Project/Src/Commands/DebugCommands.cs index b229071afa..795e4502b7 100644 --- a/src/Main/Base/Project/Src/Commands/DebugCommands.cs +++ b/src/Main/Base/Project/Src/Commands/DebugCommands.cs @@ -16,7 +16,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands public override void Run() { new Build().Run(); - if (Build.LastErrorCount == 0) { + if (MSBuildEngine.LastErrorCount == 0) { IProject startupProject = ProjectService.OpenSolution.StartupProject; if (startupProject != null) { startupProject.Start(true); @@ -31,7 +31,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands public override void Run() { new Build().Run(); - if (Build.LastErrorCount == 0) { + if (MSBuildEngine.LastErrorCount == 0) { IProject startupProject = ProjectService.OpenSolution.StartupProject; if (startupProject != null) { startupProject.Start(false); diff --git a/src/Main/Base/Project/Src/Project/MSBuildEngine.cs b/src/Main/Base/Project/Src/Project/MSBuildEngine.cs index cd851efddf..65115994a6 100644 --- a/src/Main/Base/Project/Src/Project/MSBuildEngine.cs +++ b/src/Main/Base/Project/Src/Project/MSBuildEngine.cs @@ -43,6 +43,46 @@ namespace ICSharpCode.SharpDevelop.Project MSBuildProperties = new SortedList(); MSBuildProperties.Add("SharpDevelopBinPath", Path.GetDirectoryName(typeof(MSBuildEngine).Assembly.Location)); } + + #region relocated from ICSharpCode.SharpDevelop.Project.Commands.Build in BuildCommands.cs + public static int LastErrorCount; + public static int LastWarningCount; + + public static void ShowResults(CompilerResults results) + { + if (results != null) { + LastErrorCount = 0; + LastWarningCount = 0; + TaskService.InUpdate = true; + foreach (CompilerError error in results.Errors) { + TaskService.Add(new Task(error)); + if (error.IsWarning) + LastWarningCount++; + else + LastErrorCount++; + } + TaskService.InUpdate = false; + if (results.Errors.Count > 0) { + WorkbenchSingleton.Workbench.GetPad(typeof(ErrorListPad)).BringPadToFront(); + } + } + } + + /// + /// Notifies the user that #develp's internal MSBuildEngine + /// implementation only supports compiling solutions and projects; + /// it does not allow compiling individual files. + /// + /// Adds a message to the and + /// shows the . + public static void AddNoSingleFileCompilationError() + { + LastErrorCount = 1; + LastWarningCount = 0; + TaskService.Add(new Task(null, StringParser.Parse("${res:BackendBindings.ExecutionManager.NoSingleFileCompilation}"), 0, 0, TaskType.Error)); + WorkbenchSingleton.Workbench.GetPad(typeof(ErrorListPad)).BringPadToFront(); + } + #endregion MessageViewCategory messageView;