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 {
TypeResolveResult trr = Resolve<TypeResolveResult>(program, "C.D", 7); TypeResolveResult trr = Resolve<TypeResolveResult>(program, "C.D", 7);
Assert.AreEqual("A.B.C.D", trr.ResolvedClass.FullyQualifiedName, "trr.ResolvedClass.FullyQualifiedName"); 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 #endregion
#region Import class tests #region Import class tests

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

@ -122,7 +122,7 @@ namespace ICSharpCode.SharpDevelop.Tests
[Test] [Test]
public void ReflectionParserTest() 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); IClass c = new ReflectionClass(cu, typeof(TestClass<,>), typeof(TestClass<,>).FullName, null);
cu.ProjectContent.AddClassToNamespaceList(c); cu.ProjectContent.AddClassToNamespaceList(c);

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

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

Loading…
Cancel
Save