diff options
author | Mike Krüger <mkrueger@xamarin.com> | 2011-10-26 19:17:44 +0400 |
---|---|---|
committer | Mike Krüger <mkrueger@xamarin.com> | 2011-10-26 19:17:44 +0400 |
commit | bb3f06e888d089559e08ecd3b05e0a2844fc267e (patch) | |
tree | c12919cc9843d5119db1832ffa8ac077376fd062 /main/src | |
parent | 21ad778ec4c166c9e06218ccc173a547c2c0f6ec (diff) |
Fixed "Bug 1018 - System exception is occurred when user rename the
project name and then double click on .xib file.".
Diffstat (limited to 'main/src')
-rw-r--r-- | main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Dom.Parser/ProjectDomService.cs | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Dom.Parser/ProjectDomService.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Dom.Parser/ProjectDomService.cs index 99a0907a9c..e92bf7171c 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Dom.Parser/ProjectDomService.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Dom.Parser/ProjectDomService.cs @@ -416,6 +416,7 @@ namespace MonoDevelop.Projects.Dom.Parser string uri = "Project:" + project.FileName; if (UnrefDom (uri)) { + project.Modified -= HandleModified; if (project is DotNetProject) { ((DotNetProject)project).ReferenceAddedToProject -= OnProjectReferenceAdded; ((DotNetProject)project).ReferenceRemovedFromProject -= OnProjectReferenceRemoved; @@ -442,7 +443,7 @@ namespace MonoDevelop.Projects.Dom.Parser try { ProjectDom db = ParserDatabase.LoadProjectDom (project); RegisterDom (db, uri); - + project.Modified += HandleModified; if (project is DotNetProject) { ((DotNetProject)project).ReferenceAddedToProject += OnProjectReferenceAdded; ((DotNetProject)project).ReferenceRemovedFromProject += OnProjectReferenceRemoved; @@ -453,6 +454,32 @@ namespace MonoDevelop.Projects.Dom.Parser } } + static void HandleModified (object sender, SolutionItemModifiedEventArgs e) + { + var fn = e.FirstOrDefault (x => x is SolutionItemModifiedEventInfo && ((SolutionItemModifiedEventInfo)x).Hint == "FileName"); + if (fn == null) + return; + var project = fn.SolutionItem as Project; + if (project == null) + return; + lock (databases) { + try { + foreach (var pair in databases) { + if (pair.Value.Project == project) { + databases.Remove (pair.Key); + string uri = "Project:" + project.FileName; + pair.Value.Uri = uri; + databases[uri] = pair.Value; + return; + } + } + } catch (Exception ex) { + LoggingService.LogError ("Parser database error: can't rename file name of " + project.Name + " to " + project.FileName, ex); + } + } + } + + public static void RegisterDom (ProjectDom dom, string uri) { dom.Uri = uri; |