diff --git a/src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs b/src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs index 49f1a97c42..ae2b33c086 100644 --- a/src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs +++ b/src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs @@ -1052,9 +1052,12 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver AddUsing(result, projectContent.DefaultImports, projectContent); if (callingClass != null) { - foreach (object member in projectContent.GetNamespaceContents(callingClass.Namespace)) { - if (!result.Contains(member)) - result.Add(member); + 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 { diff --git a/src/Main/Base/Test/NRefactoryResolverTests.cs b/src/Main/Base/Test/NRefactoryResolverTests.cs index 9d8150c96f..cab0f5e9b3 100644 --- a/src/Main/Base/Test/NRefactoryResolverTests.cs +++ b/src/Main/Base/Test/NRefactoryResolverTests.cs @@ -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(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() {