From cd400c7cc03a2b4258b93c6203f2a0ee978259fc Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Wed, 15 Oct 2008 17:40:39 +0000 Subject: [PATCH] Fixed SD2-1474 (ClassInheritanceTree returns incorrect results) git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@3602 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Project/Src/Implementations/DefaultClass.cs | 17 ++++++++++++++--- .../ClassInheritanceTreeTests.cs | 1 - 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/DefaultClass.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/DefaultClass.cs index ba22beb063..05b2e505d7 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/DefaultClass.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/DefaultClass.cs @@ -358,6 +358,7 @@ namespace ICSharpCode.SharpDevelop.Dom visitedList = new List(); Queue typesToVisit = new Queue(); bool enqueuedLastBaseType = false; + bool hasErrors = false; IClass currentClass = this; IReturnType nextType; do { @@ -377,11 +378,21 @@ namespace ICSharpCode.SharpDevelop.Dom } if (nextType != null) { currentClass = nextType.GetUnderlyingClass(); + if (currentClass == null) + hasErrors = true; } } while (nextType != null); - inheritanceTreeCache = visitedList; - if (!KeepInheritanceTree) - DomCache.RegisterForClear(delegate { inheritanceTreeCache = null; }); + + + // A SearchType request causes the inheritance tree to be generated, but if it was + // this classes' base type that caused the SearchType request, the GetUnderlyingClass() + // will fail and we will produce an incomplete inheritance tree. + // So we don't cache incomplete inheritance trees for parsed classes (fixes SD2-1474). + if (!hasErrors || KeepInheritanceTree) { + inheritanceTreeCache = visitedList; + if (!KeepInheritanceTree) + DomCache.RegisterForClear(delegate { inheritanceTreeCache = null; }); + } return visitedList; } } diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Tests/ICSharpCode.SharpDevelop.Dom.Tests/ClassInheritanceTreeTests.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Tests/ICSharpCode.SharpDevelop.Dom.Tests/ClassInheritanceTreeTests.cs index c247f3895c..4a2e3e8342 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Tests/ICSharpCode.SharpDevelop.Dom.Tests/ClassInheritanceTreeTests.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Tests/ICSharpCode.SharpDevelop.Dom.Tests/ClassInheritanceTreeTests.cs @@ -110,7 +110,6 @@ namespace B { } [Test] - [Ignore("Bugfix needed (this is the cause for SD2-1474).")] public void DerivedClassInheritanceTreeAfterCheckBaseTypesDifferentNamespaceUsing() { Prepare(CodeDifferentNamespaceUsing, "A.Base", "B.Derived");