From e2601ae0063a3f7a29153b522a0e8f8b08392477 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Wed, 27 Jan 2010 20:43:37 +0000 Subject: [PATCH] Fixed forum-10226: Resolving identifiers does not properly search InnerClasses of Structs, only Classes. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@5449 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- src/Main/Base/Test/InnerClassesResolverTests.cs | 15 +++++++++++++++ .../Src/ProjectContent/DefaultProjectContent.cs | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Main/Base/Test/InnerClassesResolverTests.cs b/src/Main/Base/Test/InnerClassesResolverTests.cs index 62aa4dee0d..d1aeb40788 100644 --- a/src/Main/Base/Test/InnerClassesResolverTests.cs +++ b/src/Main/Base/Test/InnerClassesResolverTests.cs @@ -462,5 +462,20 @@ class Test { rr = Resolve(program, "z2", 3); Assert.AreEqual(0, rr.ResolvedType.GetUnderlyingClass().TypeParameters.Count); } + + [Test] + public void SimpleInnerClassInStruct() + { + string program = @"struct A { + void Test() { + + } + class B { } +} +"; + ResolveResult result = Resolve(program, "B", 3); + Assert.IsTrue(result is TypeResolveResult); + Assert.AreEqual("A.B", result.ResolvedType.FullyQualifiedName); + } } } diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DefaultProjectContent.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DefaultProjectContent.cs index e0342c00ea..2971ea45c7 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DefaultProjectContent.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DefaultProjectContent.cs @@ -824,7 +824,7 @@ namespace ICSharpCode.SharpDevelop.Dom // Try inner classes (in full inheritance tree) // Don't use loop with cur = cur.BaseType because of inheritance cycles foreach (IClass baseClass in outerClass.ClassInheritanceTree) { - if (baseClass.ClassType == ClassType.Class) { + if (baseClass.ClassType == ClassType.Class || baseClass.ClassType == ClassType.Struct || baseClass.ClassType == ClassType.Module) { foreach (IClass innerClass in baseClass.InnerClasses) { if (language.NameComparer.Equals(innerClass.Name, name)) { result = new SearchTypeResult(innerClass);