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:
authorRodrigo Moya <rodrigo.moya@xamarin.com>2019-09-17 13:31:58 +0300
committerRodrigo Moya <rodrigo.moya@xamarin.com>2019-09-17 16:22:07 +0300
commit29dab5caf4056280f7e62b1e939803af166e894c (patch)
tree68685665e01e137dc8af3a012f7b28ddf655bf6c /main/src/core/MonoDevelop.Ide
parentb6cb10a856dee9245d5f74fb5209ced8f4643e9e (diff)
[FileNesting] Move nested files when moving parent file
Fixes https://devdiv.visualstudio.com/DevDiv/_workitems/edit/982928
Diffstat (limited to 'main/src/core/MonoDevelop.Ide')
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/FolderNodeBuilder.cs9
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFileNodeBuilder.cs17
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects.FileNesting/FileNestingService.cs10
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/MonoDevelopWorkspace.cs6
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/ProjectOperations.cs13
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;