Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLluis Sanchez <lluis@xamarin.com>2019-09-16 18:48:06 +0300
committerGitHub <noreply@github.com>2019-09-16 18:48:06 +0300
commitb7bf2893f20b01603c139a1b0573a4d50c00bf80 (patch)
treefe1e7a781e4c0540c9c41cfb4a0df2bc68d67b9b /main/src/core/MonoDevelop.Ide
parentd737ffb8a720e53595866642586cf7360214ee4e (diff)
parentddf702ccbcb1646593f2008a1ad953cbe9a5f34c (diff)
Merge pull request #8726 from mono/fix-all-hangs
Fix all hangs
Diffstat (limited to 'main/src/core/MonoDevelop.Ide')
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectNodeBuilder.cs17
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects.FileNesting/FileNestingService.cs49
2 files changed, 46 insertions, 20 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectNodeBuilder.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectNodeBuilder.cs
index b6f322ebc4..c1a3a7a2c2 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectNodeBuilder.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectNodeBuilder.cs
@@ -41,6 +41,7 @@ using MonoDevelop.Ide.Gui.Dialogs;
using System.Linq;
using MonoDevelop.Ide.Tasks;
using MonoDevelop.Ide.Projects.FileNesting;
+using System.Diagnostics;
namespace MonoDevelop.Ide.Gui.Pads.ProjectPad
{
@@ -249,10 +250,20 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad
}
}
- void OnFileNestingRulesChanged (Project obj)
+ void OnFileNestingRulesChanged (ProjectFile fileToUpdate, ProjectFile newParent)
{
- ITreeBuilder tb = Context.GetTreeBuilder (obj);
- tb?.UpdateAll ();
+ Debug.Assert (fileToUpdate != null);
+
+ ITreeBuilder tb = Context.GetTreeBuilder (fileToUpdate);
+ if (tb != null) {
+ tb.MoveToParent ();
+ tb.UpdateAll ();
+ }
+
+ if (newParent != null) {
+ tb = Context.GetTreeBuilder (newParent);
+ tb?.UpdateAll ();
+ }
}
void AddFile (ProjectFile file, Project project)
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects.FileNesting/FileNestingService.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects.FileNesting/FileNestingService.cs
index 516d2e55d9..53536d493d 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects.FileNesting/FileNestingService.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects.FileNesting/FileNestingService.cs
@@ -76,9 +76,12 @@ namespace MonoDevelop.Ide.Projects.FileNesting
return null;
}
- public static event Action<Project> NestingRulesChanged;
+ /// <summary>
+ /// The project file which had modifications, in most cases, the parent of the added/removed projectfile
+ /// </summary>
+ public static event Action<ProjectFile, ProjectFile> NestingRulesChanged;
- internal static void NotifyNestingRulesChanged (Project project) => NestingRulesChanged?.Invoke (project);
+ internal static void NotifyNestingRulesChanged (ProjectFile toUpdate, ProjectFile newParent) => NestingRulesChanged?.Invoke (toUpdate, newParent);
public static bool IsEnabledForProject (Project project)
{
@@ -148,7 +151,7 @@ namespace MonoDevelop.Ide.Projects.FileNesting
}
}
- void AddFile (ProjectFile projectFile)
+ ProjectFileNestingInfo AddFile (ProjectFile projectFile)
{
var tmp = projectFiles.GetOrAdd (projectFile, new ProjectFileNestingInfo (projectFile));
tmp.Parent = FileNestingService.InternalGetParentFile (projectFile);
@@ -163,9 +166,10 @@ namespace MonoDevelop.Ide.Projects.FileNesting
}
projectFiles [projectFile] = tmp;
+ return tmp;
}
- void RemoveFile (ProjectFile projectFile, List<ProjectFile> originalFilesToRemove = null)
+ ProjectFileNestingInfo RemoveFile (ProjectFile projectFile, List<ProjectFile> originalFilesToRemove = null)
{
bool actuallyRemoveFiles = originalFilesToRemove == null;
@@ -192,37 +196,43 @@ namespace MonoDevelop.Ide.Projects.FileNesting
if (actuallyRemoveFiles && originalFilesToRemove != null) {
Project.Files.RemoveRange (originalFilesToRemove);
}
+
+ return nestingInfo;
}
void OnFileAddedToProject (object sender, ProjectFileEventArgs e)
{
foreach (var file in e) {
- AddFile (file.ProjectFile);
+ var nestingInfo = AddFile (file.ProjectFile);
+ NotifyNestingRulesChanged (nestingInfo);
}
-
- if (fileNestingEnabled)
- FileNestingService.NotifyNestingRulesChanged (Project);
}
void OnFileRemovedFromProject (object sender, ProjectFileEventArgs e)
{
foreach (var file in e) {
- RemoveFile (file.ProjectFile);
+ var nestingInfo = RemoveFile (file.ProjectFile);
+ NotifyNestingRulesChanged (nestingInfo);
}
-
- if (fileNestingEnabled)
- FileNestingService.NotifyNestingRulesChanged (Project);
}
void OnFileRenamedInProject (object sender, ProjectFileRenamedEventArgs e)
{
foreach (var file in e) {
- RemoveFile (file.ProjectFile);
- AddFile (file.ProjectFile);
+ var oldNestingInfo = RemoveFile (file.ProjectFile);
+ NotifyNestingRulesChanged (oldNestingInfo);
+
+ var nestingInfo = AddFile (file.ProjectFile);
+ NotifyNestingRulesChanged (nestingInfo);
}
+ }
- if (fileNestingEnabled)
- FileNestingService.NotifyNestingRulesChanged (Project);
+ void NotifyNestingRulesChanged (ProjectFileNestingInfo nestingInfo)
+ {
+ if (nestingInfo == null || !FileNestingService.AppliesToProject (nestingInfo.File.Project))
+ return;
+
+ FileNestingService.NotifyNestingRulesChanged (nestingInfo.File, nestingInfo.Parent);
}
void OnUserPropertiesChanged (object sender, Core.PropertyBagChangedEventArgs e)
@@ -230,7 +240,12 @@ namespace MonoDevelop.Ide.Projects.FileNesting
bool newValue = FileNestingService.IsEnabledForProject (Project);
if (fileNestingEnabled != newValue) {
fileNestingEnabled = newValue;
- FileNestingService.NotifyNestingRulesChanged (Project);
+ foreach (var kvp in projectFiles) {
+ var nestingInfo = kvp.Value;
+ if (nestingInfo.Children != null) {
+ FileNestingService.NotifyNestingRulesChanged (nestingInfo.File, null);
+ }
+ }
}
}