Browse Source

Fixed lookup of type name in parent namespaces. (same problem as the already-fixed SD2-863, but in SearchType instead of SearchNamespace)

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.1@2411 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 19 years ago
parent
commit
1918fab13c
  1. 18
      src/Main/Base/Test/NRefactoryResolverTests.cs
  2. 2
      src/Main/Base/Test/ReflectionLayerTests.cs
  3. 21
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DefaultProjectContent.cs

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

@ -793,6 +793,24 @@ namespace A.B { @@ -793,6 +793,24 @@ namespace A.B {
TypeResolveResult trr = Resolve<TypeResolveResult>(program, "C.D", 7);
Assert.AreEqual("A.B.C.D", trr.ResolvedClass.FullyQualifiedName, "trr.ResolvedClass.FullyQualifiedName");
}
[Test]
public void ResolveTypeSD2_863()
{
string program = @"using System;
namespace A { class C {} }
namespace A.B {
class C {}
class TestClass {
void Test() {
}
}
}
";
TypeResolveResult trr = Resolve<TypeResolveResult>(program, "C", 7);
Assert.AreEqual("A.B.C", trr.ResolvedClass.FullyQualifiedName, "trr.ResolvedClass.FullyQualifiedName");
}
#endregion
#region Import class tests

2
src/Main/Base/Test/ReflectionLayerTests.cs

@ -122,7 +122,7 @@ namespace ICSharpCode.SharpDevelop.Tests @@ -122,7 +122,7 @@ namespace ICSharpCode.SharpDevelop.Tests
[Test]
public void ReflectionParserTest()
{
ICompilationUnit cu = new ReflectionProjectContent("TestName", "testlocation", new AssemblyName[0], ParserService.DefaultProjectContentRegistry).AssemblyCompilationUnit;
ICompilationUnit cu = new ReflectionProjectContent("TestName", "testlocation", new DomAssemblyName[0], ParserService.DefaultProjectContentRegistry).AssemblyCompilationUnit;
IClass c = new ReflectionClass(cu, typeof(TestClass<,>), typeof(TestClass<,>).FullName, null);
cu.ProjectContent.AddClassToNamespaceList(c);

21
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DefaultProjectContent.cs

@ -783,23 +783,24 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -783,23 +783,24 @@ namespace ICSharpCode.SharpDevelop.Dom
SearchTypeResult fallbackResult = SearchTypeResult.Empty;
if (request.CurrentType != null) {
// Try parent namespaces of the current class
string fullname = request.CurrentType.FullyQualifiedName;
string[] namespaces = fullname.Split('.');
StringBuilder curnamespace = new StringBuilder();
for (int i = 0; i < namespaces.Length; ++i) {
curnamespace.Append(namespaces[i]);
curnamespace.Append('.');
string fullname = request.CurrentType.Namespace;
while (fullname != null && fullname.Length > 0) {
string nameSpace = fullname + '.' + name;
curnamespace.Append(name);
c = GetClass(curnamespace.ToString(), request.TypeParameterCount);
c = GetClass(nameSpace, request.TypeParameterCount);
if (c != null) {
if (c.TypeParameters.Count == request.TypeParameterCount)
return new SearchTypeResult(c.DefaultReturnType);
else
fallbackResult = new SearchTypeResult(c.DefaultReturnType);
}
// remove class name again to try next namespace
curnamespace.Length -= name.Length;
int pos = fullname.LastIndexOf('.');
if (pos < 0) {
fullname = null;
} else {
fullname = fullname.Substring(0, pos);
}
}
if (name.IndexOf('.') < 0) {

Loading…
Cancel
Save