Browse Source

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
pull/1/head
Daniel Grunwald 16 years ago
parent
commit
e2601ae006
  1. 15
      src/Main/Base/Test/InnerClassesResolverTests.cs
  2. 2
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DefaultProjectContent.cs

15
src/Main/Base/Test/InnerClassesResolverTests.cs

@ -462,5 +462,20 @@ class Test {
rr = Resolve<MemberResolveResult>(program, "z2", 3); rr = Resolve<MemberResolveResult>(program, "z2", 3);
Assert.AreEqual(0, rr.ResolvedType.GetUnderlyingClass().TypeParameters.Count); 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);
}
} }
} }

2
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) // Try inner classes (in full inheritance tree)
// Don't use loop with cur = cur.BaseType because of inheritance cycles // Don't use loop with cur = cur.BaseType because of inheritance cycles
foreach (IClass baseClass in outerClass.ClassInheritanceTree) { 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) { foreach (IClass innerClass in baseClass.InnerClasses) {
if (language.NameComparer.Equals(innerClass.Name, name)) { if (language.NameComparer.Equals(innerClass.Name, name)) {
result = new SearchTypeResult(innerClass); result = new SearchTypeResult(innerClass);

Loading…
Cancel
Save