diff options
author | Lluis Sanchez <lluis@xamarin.com> | 2019-09-17 19:10:27 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-17 19:10:27 +0300 |
commit | b34ccb052df4c7d0995af032601eab6342928f33 (patch) | |
tree | fc14188d374c0cee5cfbacfabdc441953503267d /main | |
parent | 1abc0b5c2336147e0cbeca63a068fd006e71b00b (diff) | |
parent | 29dab5caf4056280f7e62b1e939803af166e894c (diff) |
Merge pull request #8739 from mono/pr-move-nested-files
[FileNesting] Move nested files when moving parent file
Diffstat (limited to 'main')
5 files changed, 38 insertions, 17 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/FolderNodeBuilder.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/FolderNodeBuilder.cs index 3b5b8d7147..4ecfe5e8c8 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/FolderNodeBuilder.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/FolderNodeBuilder.cs @@ -201,8 +201,11 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad var groupedFiles = new HashSet<ProjectFile> (); foreach (var pf in dataObjects.OfType<ProjectFile> ()) { - foreach (var child in pf.DependentChildren) - groupedFiles.Add (child); + var children = FileNestingService.GetDependentOrNestedChildren (pf); ; + if (children != null) { + foreach (var child in children) + groupedFiles.Add (child); + } } foreach (object dataObject in dataObjects) @@ -249,7 +252,7 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad } else { source = file.FilePath; } - groupedChildren = file.DependentChildren; + groupedChildren = FileNestingService.GetDependentOrNestedChildren (file); ; what = null; } else if (dataObject is Gtk.SelectionData) { diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFileNodeBuilder.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFileNodeBuilder.cs index e1dcb1e2c1..0b6ac8b351 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFileNodeBuilder.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFileNodeBuilder.cs @@ -218,13 +218,14 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad /// </summary> static List<(ProjectFile File, string NewName)> GetDependentFilesToRename (ProjectFile file, string newName) { - if (!file.HasChildren) + var children = FileNestingService.GetDependentOrNestedChildren (file); + if (children == null) return null; List<(ProjectFile File, string NewName)> files = null; string oldName = file.FilePath.FileName; - foreach (ProjectFile child in file.DependentChildren) { + foreach (ProjectFile child in children) { string oldChildName = child.FilePath.FileName; if (oldChildName.StartsWith (oldName, StringComparison.CurrentCultureIgnoreCase)) { string childNewName = newName + oldChildName.Substring (oldName.Length); @@ -303,7 +304,7 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad foreach (var node in CurrentNodes) { var pf = (ProjectFile) node.DataItem; projects.Add (pf.Project); - if (pf.HasChildren) + if (pf.HasChildren || FileNestingService.HasChildren (pf)) hasChildren = true; files.Add (pf); } @@ -350,8 +351,9 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad project.Files.Add (folderFile); } - if (file.HasChildren) { - foreach (var child in file.DependentChildren.ToArray()) { + var children = FileNestingService.GetDependentOrNestedChildren (file); + if (children != null) { + foreach (var child in children.ToArray ()) { project.Files.Remove (child); if (result == AlertButton.Delete) FileService.DeleteFile (child.Name); @@ -372,8 +374,9 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad if (!file.IsLink && File.Exists (file.Name)) return true; - if (file.HasChildren) { - foreach (var child in file.DependentChildren.ToArray()) { + var children = FileNestingService.GetDependentOrNestedChildren (file); + if (children != null) { + foreach (var child in children.ToArray ()) { if (File.Exists (child.Name)) return true; } 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 473affb4e5..65178f33ca 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 @@ -117,6 +117,14 @@ namespace MonoDevelop.Ide.Projects.FileNesting } return GetProjectNestingInfo (inputFile.Project).GetChildrenForFile (inputFile); } + + public static IEnumerable<ProjectFile> GetDependentOrNestedChildren (ProjectFile inputFile) + { + if (inputFile.HasChildren) + return inputFile.DependentChildren; + + return GetChildren (inputFile); + } } sealed class ProjectNestingInfo : IDisposable @@ -238,7 +246,7 @@ namespace MonoDevelop.Ide.Projects.FileNesting void NotifyNestingRulesChanged (ProjectFileNestingInfo nestingInfo) { - if (fileNestingEnabled) { + if (nestingInfo != null && fileNestingEnabled) { FileNestingService.NotifyNestingRulesChanged (nestingInfo.File, nestingInfo.Parent); } } diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/MonoDevelopWorkspace.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/MonoDevelopWorkspace.cs index 3bcc4feb4a..0431faae5e 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/MonoDevelopWorkspace.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/MonoDevelopWorkspace.cs @@ -46,6 +46,7 @@ using Microsoft.CodeAnalysis.Shared.Options; using Microsoft.CodeAnalysis.Shared.Utilities;
using Microsoft.CodeAnalysis.SolutionCrawler;
using MonoDevelop.Ide.Composition;
+using MonoDevelop.Ide.Projects.FileNesting;
using MonoDevelop.Ide.RoslynServices;
using MonoDevelop.Core.Assemblies; using MonoDevelop.Ide.Gui.Documents;
@@ -1361,13 +1362,14 @@ namespace MonoDevelop.Ide.TypeSystem MonoDevelop.Projects.ProjectFile file, string newName) { - if (!file.HasChildren) + var children = FileNestingService.GetDependentOrNestedChildren (file); + if (children == null) return null; List<(MonoDevelop.Projects.ProjectFile File, string NewName)> files = null; string oldName = file.FilePath.FileName; - foreach (MonoDevelop.Projects.ProjectFile child in file.DependentChildren) { + foreach (MonoDevelop.Projects.ProjectFile child in children) { string oldChildName = child.FilePath.FileName; if (oldChildName.StartsWith (oldName, StringComparison.CurrentCultureIgnoreCase)) { string childNewName = newName + oldChildName.Substring (oldName.Length); diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/ProjectOperations.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/ProjectOperations.cs index 45574f79ed..db5dc666bb 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/ProjectOperations.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/ProjectOperations.cs @@ -51,6 +51,7 @@ using ExecutionContext = MonoDevelop.Projects.ExecutionContext; using MonoDevelop.Ide.Gui.Documents;
using MonoDevelop.Ide.Projects.OptionPanels; using MonoDevelop.Ide.Templates;
+using MonoDevelop.Ide.Projects.FileNesting; namespace MonoDevelop.Ide {
@@ -2253,10 +2254,14 @@ namespace MonoDevelop.Ide ProjectFile sourceParent = null; if (filesToMove.Count == 1 && sourceProject != null) { var pf = filesToMove[0]; - if (pf != null && pf.HasChildren) { - foreach (ProjectFile child in pf.DependentChildren) { - filesToRemove.Add (child); - filesToMove.Add (child); + if (pf != null) { + var children = FileNestingService.GetDependentOrNestedChildren (pf); + if (children != null) { + + foreach (ProjectFile child in children) { + filesToRemove.Add (child); + filesToMove.Add (child); + } } } sourceParent = pf; |