From 63ef570ea43f1576e1647e218e0fc9b99d2be79d Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Wed, 6 Sep 2006 17:30:41 +0000 Subject: [PATCH] Fixed SD2-1042: Microsoft sample for VB v1.0 hangs #Develop. - DependentUpon cycles are now broken up. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1769 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../SharpDbTools/Project/SharpDbTools.csproj | 3 +++ .../ProjectBrowser/TreeNodes/DirectoryNode.cs | 23 +++++++++++++++---- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/AddIns/Misc/SharpDbTools/Project/SharpDbTools.csproj b/src/AddIns/Misc/SharpDbTools/Project/SharpDbTools.csproj index 0cb15f8af4..c6cec9e840 100644 --- a/src/AddIns/Misc/SharpDbTools/Project/SharpDbTools.csproj +++ b/src/AddIns/Misc/SharpDbTools/Project/SharpDbTools.csproj @@ -70,6 +70,9 @@ GetConnectionLogicalNameDialog.cs + + Configuration\GlobalAssemblyInfo.cs + diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs index 6af5b606a2..8289f5ae80 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs @@ -411,14 +411,29 @@ namespace ICSharpCode.SharpDevelop.Project } AbstractProjectBrowserTreeNode parentNode = fileNodeDictionary[fileName]; pair.Key.Parent.Nodes.Remove(pair.Key); - pair.Key.AddTo(parentNode); - if (pair.Key.FileNodeStatus != FileNodeStatus.Missing) { - pair.Key.FileNodeStatus = FileNodeStatus.BehindFile; + if (NodeIsParent(parentNode, pair.Key)) { + // is pair.Key a parent of parentNode? + // if yes, we have a parent cycle - break it by adding one node to the directory + pair.Key.AddTo(this); + } else { + pair.Key.AddTo(parentNode); + if (pair.Key.FileNodeStatus != FileNodeStatus.Missing) { + pair.Key.FileNodeStatus = FileNodeStatus.BehindFile; + } } } base.Initialize(); } - + + static bool NodeIsParent(TreeNode childNode, TreeNode parentNode) + { + do { + if (childNode == parentNode) return true; + childNode = childNode.Parent; + } while (childNode != null); + return false; + } + protected void BaseInitialize() { base.Initialize();