Browse Source

added ProjectChangeWatcher for projects

4.1
Siegfried Pammer 14 years ago
parent
commit
d7ef8df8d3
  1. 12
      src/Main/Base/Project/Src/Project/AbstractProject.cs
  2. 3
      src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs
  3. 2
      src/Main/Base/Project/Src/Project/ProjectChangeWatcher.cs

12
src/Main/Base/Project/Src/Project/AbstractProject.cs

@ -53,7 +53,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -53,7 +53,7 @@ namespace ICSharpCode.SharpDevelop.Project
public virtual void Dispose()
{
WorkbenchSingleton.AssertMainThread();
watcher.Dispose();
isDisposed = true;
if (Disposed != null) {
Disposed(this, EventArgs.Empty);
@ -116,6 +116,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -116,6 +116,7 @@ namespace ICSharpCode.SharpDevelop.Project
#region Filename / Directory
volatile string fileName;
string cachedDirectoryName;
protected ProjectChangeWatcher watcher;
/// <summary>
/// Gets the name of the project file.
@ -134,6 +135,15 @@ namespace ICSharpCode.SharpDevelop.Project @@ -134,6 +135,15 @@ namespace ICSharpCode.SharpDevelop.Project
WorkbenchSingleton.AssertMainThread();
Debug.Assert(FileUtility.IsUrl(value) || Path.IsPathRooted(value));
if (watcher == null) {
watcher = new ProjectChangeWatcher(value);
watcher.Enable();
} else {
watcher.Disable();
watcher.Rename(value);
watcher.Enable();
}
lock (SyncRoot) { // locking still required for Directory
fileName = value;
cachedDirectoryName = null;

3
src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs

@ -1246,6 +1246,8 @@ namespace ICSharpCode.SharpDevelop.Project @@ -1246,6 +1246,8 @@ namespace ICSharpCode.SharpDevelop.Project
#region Saving
public override void Save(string fileName)
{
watcher.Disable();
watcher.Rename(fileName);
lock (SyncRoot) {
// we need the global lock - if the file is being renamed,
// MSBuild will update the global project collection
@ -1258,6 +1260,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -1258,6 +1260,7 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
}
watcher.Enable();
FileUtility.RaiseFileSaved(new FileNameEventArgs(fileName));
}
#endregion

2
src/Main/Base/Project/Src/Project/ProjectChangeWatcher.cs

@ -86,7 +86,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -86,7 +86,7 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
bool wasChangedExternally;
static bool wasChangedExternally;
void OnFileChangedEvent(object sender, FileSystemEventArgs e)
{

Loading…
Cancel
Save