Browse Source

Fixed forum-10068: members from COM Interop assembly not shown in code completion.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@4934 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 16 years ago
parent
commit
63f0226ed5
  1. 40
      src/Main/Base/Test/NRefactoryResolverTests.cs
  2. 13
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/MemberLookupHelper.cs

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

@ -2806,5 +2806,45 @@ class B @@ -2806,5 +2806,45 @@ class B
var completionData = rr.GetCompletionData(mrr.ResolvedMember.DeclaringType.ProjectContent);
Assert.IsTrue(completionData.OfType<IField>().Any(f => f.FullyQualifiedName == "B.x"));
}
[Test]
public void OverrideOnlyMethod()
{
// "override"s without corresponding "virtual"s can occur in code generated
// by the COM importer
string program = @"using System;
class Test {
void Test(A instance) {
}
}
class A {
public override void M1();
}";
var lrr = Resolve<LocalResolveResult>(program, "instance", 4);
Assert.AreEqual("instance", lrr.Field.Name);
var completionData = lrr.GetCompletionData(lrr.CallingClass.ProjectContent);
Assert.IsTrue(completionData.OfType<IMethod>().Any(m => m.FullyQualifiedName == "A.M1"));
}
[Test]
public void OverrideOnlyProperty()
{
// "override"s without corresponding "virtual"s can occur in code generated
// by the COM importer
string program = @"using System;
class Test {
void Test(A instance) {
}
}
class A {
public override int P1 { get; set; }
}";
var lrr = Resolve<LocalResolveResult>(program, "instance", 4);
Assert.AreEqual("instance", lrr.Field.Name);
var completionData = lrr.GetCompletionData(lrr.CallingClass.ProjectContent);
Assert.IsTrue(completionData.OfType<IProperty>().Any(m => m.FullyQualifiedName == "A.P1"));
}
}
}

13
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/MemberLookupHelper.cs

@ -183,6 +183,19 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -183,6 +183,19 @@ namespace ICSharpCode.SharpDevelop.Dom
results = new List<IMember>();
}
}
// Sometimes there might be 'override's without corresponding 'virtual's.
// Ensure those get found, too.
if (nonMethodOverride != null && allResults.Count == 0) {
results.Add(nonMethodOverride);
}
foreach (IMethod method in overrideMethodDict.Values) {
if (handledMethods.Add(method)) {
results.Add(method);
}
}
if (results.Count > 0) {
allResults.Add(results);
}
return allResults;
}

Loading…
Cancel
Save