Browse Source

Refactored the AbstractMenuCommands in BuildCommands.cs

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@931 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Alpert 20 years ago
parent
commit
724ba72437
  1. 156
      src/Main/Base/Project/Src/Commands/BuildCommands.cs
  2. 4
      src/Main/Base/Project/Src/Commands/DebugCommands.cs
  3. 40
      src/Main/Base/Project/Src/Project/MSBuildEngine.cs

156
src/Main/Base/Project/Src/Commands/BuildCommands.cs

@ -16,9 +16,14 @@ using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop.Project.Commands 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.BuildMessageViewCategory.ClearText();
TaskService.InUpdate = true; TaskService.InUpdate = true;
@ -27,145 +32,102 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
ICSharpCode.SharpDevelop.Commands.SaveAllFiles.SaveAll(); ICSharpCode.SharpDevelop.Commands.SaveAllFiles.SaveAll();
} }
public static int LastErrorCount; public virtual void AfterBuild() {}
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 override void Run() public override void Run()
{ {
Build.BeforeBuild(); if (CanRunBuild) {
if (ProjectService.OpenSolution == null) { BeforeBuild();
Build.AddNoSingleFileCompilationError(); RunBuild();
AfterBuild();
} else { } 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(); ProjectService.OnEndBuild();
} }
} }
public class Rebuild : AbstractMenuCommand public class Rebuild : Build
{ {
public override void Run() public override void RunBuild()
{ {
Build.BeforeBuild(); MSBuildEngine.ShowResults(ProjectService.OpenSolution.Rebuild());
if (ProjectService.OpenSolution == null) {
Build.AddNoSingleFileCompilationError();
} else {
Build.ShowResults(ProjectService.OpenSolution.Rebuild());
}
Build.AfterBuild();
} }
} }
public class Clean : AbstractMenuCommand public class Clean : AbstractBuildMenuCommand
{ {
public override void Run() public override void RunBuild()
{ {
Build.BeforeBuild(); MSBuildEngine.ShowResults(ProjectService.OpenSolution.Clean());
if (ProjectService.OpenSolution == null) {
Build.AddNoSingleFileCompilationError();
} else {
Build.ShowResults(ProjectService.OpenSolution.Clean());
}
} }
} }
public class Publish : AbstractMenuCommand public class Publish : AbstractBuildMenuCommand
{ {
public override void Run() public override void RunBuild()
{ {
Build.BeforeBuild(); MSBuildEngine.ShowResults(ProjectService.OpenSolution.Publish());
if (ProjectService.OpenSolution == null) {
Build.AddNoSingleFileCompilationError();
} else {
Build.ShowResults(ProjectService.OpenSolution.Publish());
}
} }
} }
public class BuildProject : AbstractMenuCommand public abstract class AbstractProjectBuildMenuCommand : AbstractBuildMenuCommand
{ {
public override void Run() public override bool CanRunBuild {
{ get {
Build.BeforeBuild(); return base.CanRunBuild
if (ProjectService.OpenSolution == null) { && ProjectService.CurrentProject!=null;
Build.AddNoSingleFileCompilationError();
} else {
Build.ShowResults(ProjectService.CurrentProject.Build());
} }
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(); MSBuildEngine.ShowResults(ProjectService.CurrentProject.Rebuild());
if (ProjectService.OpenSolution == null) {
Build.AddNoSingleFileCompilationError();
} else {
Build.ShowResults(ProjectService.CurrentProject.Rebuild());
}
Build.AfterBuild();
} }
} }
public class CleanProject : AbstractMenuCommand public class CleanProject : AbstractProjectBuildMenuCommand
{ {
public override void Run() public override void RunBuild()
{ {
Build.BeforeBuild(); MSBuildEngine.ShowResults(ProjectService.CurrentProject.Clean());
if (ProjectService.OpenSolution == null) {
Build.AddNoSingleFileCompilationError();
} else {
Build.ShowResults(ProjectService.CurrentProject.Clean());
}
} }
} }
public class PublishProject : AbstractMenuCommand public class PublishProject : AbstractProjectBuildMenuCommand
{ {
public override void Run() public override void RunBuild()
{ {
Build.BeforeBuild(); MSBuildEngine.ShowResults(ProjectService.CurrentProject.Publish());
if (ProjectService.OpenSolution == null) {
Build.AddNoSingleFileCompilationError();
} else {
Build.ShowResults(ProjectService.CurrentProject.Publish());
}
} }
} }

4
src/Main/Base/Project/Src/Commands/DebugCommands.cs

@ -16,7 +16,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
public override void Run() public override void Run()
{ {
new Build().Run(); new Build().Run();
if (Build.LastErrorCount == 0) { if (MSBuildEngine.LastErrorCount == 0) {
IProject startupProject = ProjectService.OpenSolution.StartupProject; IProject startupProject = ProjectService.OpenSolution.StartupProject;
if (startupProject != null) { if (startupProject != null) {
startupProject.Start(true); startupProject.Start(true);
@ -31,7 +31,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
public override void Run() public override void Run()
{ {
new Build().Run(); new Build().Run();
if (Build.LastErrorCount == 0) { if (MSBuildEngine.LastErrorCount == 0) {
IProject startupProject = ProjectService.OpenSolution.StartupProject; IProject startupProject = ProjectService.OpenSolution.StartupProject;
if (startupProject != null) { if (startupProject != null) {
startupProject.Start(false); startupProject.Start(false);

40
src/Main/Base/Project/Src/Project/MSBuildEngine.cs

@ -43,6 +43,46 @@ namespace ICSharpCode.SharpDevelop.Project
MSBuildProperties = new SortedList<string, string>(); MSBuildProperties = new SortedList<string, string>();
MSBuildProperties.Add("SharpDevelopBinPath", Path.GetDirectoryName(typeof(MSBuildEngine).Assembly.Location)); 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();
}
}
}
/// <summary>
/// Notifies the user that #develp's internal MSBuildEngine
/// implementation only supports compiling solutions and projects;
/// it does not allow compiling individual files.
/// </summary>
/// <remarks>Adds a message to the <see cref="TaskService"/> and
/// shows the <see cref="ErrorListPad"/>.</remarks>
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; MessageViewCategory messageView;

Loading…
Cancel
Save