Browse Source

Fixed forum-19285: code-completion for nested inner classes

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2715 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 19 years ago
parent
commit
df2adaa0d5
  1. 28
      src/Main/Base/Test/NRefactoryResolverTests.cs
  2. 11
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryResolver.cs
  3. 16
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/TypeVisitor.cs

28
src/Main/Base/Test/NRefactoryResolverTests.cs

@ -721,6 +721,34 @@ End Class
Assert.AreEqual("rectangle", m.Parameters[0].Name); Assert.AreEqual("rectangle", m.Parameters[0].Name);
Assert.IsTrue(m.Parameters[0].IsRef); Assert.IsTrue(m.Parameters[0].IsRef);
} }
[Test]
public void NestedInnerClasses()
{
string program = @"using System;
public sealed class GL {
void Test() {
}
public class Enums
{
public enum BeginMode {QUADS, LINES }
}
}
";
TypeResolveResult trr = Resolve<TypeResolveResult>(program, "GL.Enums.BeginMode", 4);
Assert.AreEqual("GL.Enums.BeginMode", trr.ResolvedClass.FullyQualifiedName);
trr = Resolve<TypeResolveResult>(program, "Enums.BeginMode", 4);
Assert.AreEqual("GL.Enums.BeginMode", trr.ResolvedClass.FullyQualifiedName);
MemberResolveResult mrr = Resolve<MemberResolveResult>(program, "GL.Enums.BeginMode.LINES", 4);
Assert.AreEqual("GL.Enums.BeginMode.LINES", mrr.ResolvedMember.FullyQualifiedName);
mrr = Resolve<MemberResolveResult>(program, "Enums.BeginMode.LINES", 4);
Assert.AreEqual("GL.Enums.BeginMode.LINES", mrr.ResolvedMember.FullyQualifiedName);
}
#endregion #endregion
#region Import namespace tests #region Import namespace tests

11
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryResolver.cs

@ -1081,17 +1081,6 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
#region SearchMember #region SearchMember
// no methods or indexer // no methods or indexer
public IReturnType SearchMember(IReturnType type, string memberName)
{
if (type == null)
return null;
IMember member = GetMember(type, memberName);
if (member == null)
return null;
else
return member.ReturnType;
}
public IMember GetMember(IReturnType type, string memberName) public IMember GetMember(IReturnType type, string memberName)
{ {
if (type == null) if (type == null)

16
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/TypeVisitor.cs

@ -326,9 +326,21 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
return member.ReturnType; return member.ReturnType;
} }
} }
return null; } else {
IMember member = resolver.GetMember(returnType, memberReferenceExpression.FieldName);
if (member != null) {
return member.ReturnType;
} else {
IClass c = returnType.GetUnderlyingClass();
if (c != null) {
foreach (IClass innerClass in c.InnerClasses) {
if (resolver.IsSameName(innerClass.Name, memberReferenceExpression.FieldName)) {
return innerClass.DefaultReturnType;
}
}
}
}
} }
return resolver.SearchMember(returnType, memberReferenceExpression.FieldName);
} }
return null; return null;
} }

Loading…
Cancel
Save