Browse Source

Fixed forum-7173: Code completion does not contain all types in scope

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.0@1362 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
4ef8718f57
  1. 5
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs
  2. 52
      src/Main/Base/Test/NRefactoryResolverTests.cs

5
src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs

@ -1052,10 +1052,13 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -1052,10 +1052,13 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
AddUsing(result, projectContent.DefaultImports, projectContent);
if (callingClass != null) {
foreach (object member in projectContent.GetNamespaceContents(callingClass.Namespace)) {
string[] namespaceParts = callingClass.Namespace.Split('.');
for (int i = 1; i <= namespaceParts.Length; i++) {
foreach (object member in projectContent.GetNamespaceContents(string.Join(".", namespaceParts, 0, i))) {
if (!result.Contains(member))
result.Add(member);
}
}
IClass currentClass = callingClass;
do {
foreach (IClass innerClass in currentClass.GetAccessibleTypes(currentClass)) {

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

@ -606,6 +606,58 @@ class Activator { @@ -606,6 +606,58 @@ class Activator {
Assert.AreEqual("Testnamespace.Activator", result.ResolvedType.FullyQualifiedName);
}
[Test]
public void ParentNamespaceTypeLookup()
{
// Classes in the current namespace are preferred over classes from
// imported namespaces
string program = @"using System;
namespace Root {
class Alpha {}
}
namespace Root.Child {
class Beta {
}
}
";
ResolveResult result = Resolve<TypeResolveResult>(program, "Alpha", 7);
Assert.AreEqual("Root.Alpha", result.ResolvedType.FullyQualifiedName);
}
[Test]
public void ParentNamespaceCtrlSpace()
{
// Classes in the current namespace are preferred over classes from
// imported namespaces
string program = @"using System;
namespace Root {
class Alpha {}
}
namespace Root.Child {
class Beta {
}
}
";
AddCompilationUnit(Parse("a.cs", program), "a.cs");
NRefactoryResolver resolver = new NRefactoryResolver(ICSharpCode.NRefactory.Parser.SupportedLanguage.CSharp);
ArrayList m = resolver.CtrlSpace(7, 0, "a.cs", program, ExpressionContext.Default);
Assert.IsTrue(TypeExists(m, "Beta"), "Meta must exist");
Assert.IsTrue(TypeExists(m, "Alpha"), "Alpha must exist");
}
bool TypeExists(ArrayList m, string name)
{
foreach (object o in m) {
IClass c = o as IClass;
if (c != null && c.Name == name)
return true;
}
return false;
}
[Test]
public void ImportedSubnamespaceTestCSharp()
{

Loading…
Cancel
Save