Browse Source

[Completion] Fixed member lookup.

newNRvisualizers
mike 13 years ago
parent
commit
cff1fb2711
  1. 10
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
  2. 100
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionAccessibleTests.cs

10
ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs

@ -1314,6 +1314,11 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -1314,6 +1314,11 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
if (this.currentMember != null && !(node is AstType)) {
var def = ctx.CurrentTypeDefinition ?? Compilation.MainAssembly.GetTypeDefinition(currentType);
if (def != null) {
var lookup = new MemberLookup(
ctx.CurrentTypeDefinition,
Compilation.MainAssembly
);
bool isProtectedAllowed = true;
foreach (var member in def.GetMembers ()) {
if (member is IMethod && ((IMethod)member).FullName == "System.Object.Finalize") {
continue;
@ -1324,6 +1329,10 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -1324,6 +1329,10 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
if (member.IsExplicitInterfaceImplementation) {
continue;
}
if (!lookup.IsAccessible(member, isProtectedAllowed)) {
continue;
}
if (memberPred == null || memberPred(member)) {
wrapper.AddMember(member);
}
@ -2390,7 +2399,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -2390,7 +2399,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
if (member.IsShadowing) {
filteredList.RemoveAll(m => m.Name == member.Name);
}
filteredList.Add(member);
}

100
ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionAccessibleTests.cs

@ -77,6 +77,106 @@ public class TestClass @@ -77,6 +77,106 @@ public class TestClass
private static int PrivStaticProperty { get; set; }
private static void PrivStaticMethod () { }
";
[Test()]
public void TestDerivedClassGeneralAccess ()
{
CodeCompletionBugTests.CombinedProviderTest(testClass + @"}
// from
class Test : TestClass {
public void Foo ()
{
$a$
}
}", provider => {
Assert.IsNotNull (provider.Find ("PubField"), "'PubField' not found.");
Assert.IsNotNull (provider.Find ("PubProperty"), "'PubProperty' not found.");
Assert.IsNotNull (provider.Find ("PubMethod"), "'PubMethod' not found.");
Assert.IsNotNull (provider.Find ("ProtField"), "'ProtField' not found.");
Assert.IsNotNull (provider.Find ("ProtProperty"), "'ProtProperty' not found.");
Assert.IsNotNull (provider.Find ("ProtMethod"), "'ProtMethod' not found.");
Assert.IsNotNull (provider.Find ("ProtOrInternalField"), "'ProtOrInternalField' not found.");
Assert.IsNotNull (provider.Find ("ProtOrInternalProperty"), "'ProtOrInternalProperty' not found.");
Assert.IsNotNull (provider.Find ("ProtOrInternalMethod"), "'ProtOrInternalMethod' not found.");
Assert.IsNotNull (provider.Find ("ProtAndInternalField"), "'ProtAndInternalField' not found.");
Assert.IsNotNull (provider.Find ("ProtAndInternalProperty"), "'ProtAndInternalProperty' not found.");
Assert.IsNotNull (provider.Find ("ProtAndInternalMethod"), "'ProtAndInternalMethod' not found.");
Assert.IsNotNull (provider.Find ("InternalField"), "'InternalField' not found.");
Assert.IsNotNull (provider.Find ("InternalProperty"), "'InternalProperty' not found.");
Assert.IsNotNull (provider.Find ("InternalMethod"), "'InternalMethod' not found.");
Assert.IsNotNull (provider.Find ("PubStaticField"), "'PubStaticField' not found.");
Assert.IsNotNull (provider.Find ("PubStaticProperty"), "'PubStaticProperty' not found.");
Assert.IsNotNull (provider.Find ("PubStaticMethod"), "'PubStaticMethod' not found.");
Assert.IsNotNull (provider.Find ("ProtStaticField"), "'ProtStaticField' not found.");
Assert.IsNotNull (provider.Find ("ProtStaticProperty"), "'ProtStaticProperty' not found.");
Assert.IsNotNull (provider.Find ("ProtStaticMethod"), "'ProtStaticMethod' not found.");
Assert.IsNull (provider.Find ("PrivField"), "'PrivField' found.");
Assert.IsNull (provider.Find ("PrivProperty"), "'PrivProperty' found.");
Assert.IsNull (provider.Find ("PrivMethod"), "'PrivMethod' found.");
Assert.IsNull (provider.Find ("PrivStaticField"), "'PrivStaticField' found.");
Assert.IsNull (provider.Find ("PrivStaticProperty"), "'PrivStaticProperty' found.");
Assert.IsNull (provider.Find ("PrivStaticMethod"), "'PrivStaticMethod' found.");
});
}
[Test()]
public void TestDerivedClassMemberReferenceAccess ()
{
CodeCompletionBugTests.CombinedProviderTest(testClass + @"}
// from
class Test : TestClass {
public void Foo ()
{
$this.$
}
}", provider => {
Assert.IsNotNull (provider.Find ("PubField"), "'PubField' not found.");
Assert.IsNotNull (provider.Find ("PubProperty"), "'PubProperty' not found.");
Assert.IsNotNull (provider.Find ("PubMethod"), "'PubMethod' not found.");
Assert.IsNotNull (provider.Find ("ProtField"), "'ProtField' not found.");
Assert.IsNotNull (provider.Find ("ProtProperty"), "'ProtProperty' not found.");
Assert.IsNotNull (provider.Find ("ProtMethod"), "'ProtMethod' not found.");
Assert.IsNotNull (provider.Find ("ProtOrInternalField"), "'ProtOrInternalField' not found.");
Assert.IsNotNull (provider.Find ("ProtOrInternalProperty"), "'ProtOrInternalProperty' not found.");
Assert.IsNotNull (provider.Find ("ProtOrInternalMethod"), "'ProtOrInternalMethod' not found.");
Assert.IsNotNull (provider.Find ("ProtAndInternalField"), "'ProtAndInternalField' not found.");
Assert.IsNotNull (provider.Find ("ProtAndInternalProperty"), "'ProtAndInternalProperty' not found.");
Assert.IsNotNull (provider.Find ("ProtAndInternalMethod"), "'ProtAndInternalMethod' not found.");
Assert.IsNotNull (provider.Find ("InternalField"), "'InternalField' not found.");
Assert.IsNotNull (provider.Find ("InternalProperty"), "'InternalProperty' not found.");
Assert.IsNotNull (provider.Find ("InternalMethod"), "'InternalMethod' not found.");
// Assert.IsNotNull (provider.Find ("PubStaticField"), "'PubStaticField' not found.");
// Assert.IsNotNull (provider.Find ("PubStaticProperty"), "'PubStaticProperty' not found.");
// Assert.IsNotNull (provider.Find ("PubStaticMethod"), "'PubStaticMethod' not found.");
//
// Assert.IsNotNull (provider.Find ("ProtStaticField"), "'ProtStaticField' not found.");
// Assert.IsNotNull (provider.Find ("ProtStaticProperty"), "'ProtStaticProperty' not found.");
// Assert.IsNotNull (provider.Find ("ProtStaticMethod"), "'ProtStaticMethod' not found.");
//
Assert.IsNull (provider.Find ("PrivField"), "'PrivField' found.");
Assert.IsNull (provider.Find ("PrivProperty"), "'PrivProperty' found.");
Assert.IsNull (provider.Find ("PrivMethod"), "'PrivMethod' found.");
Assert.IsNull (provider.Find ("PrivStaticField"), "'PrivStaticField' found.");
Assert.IsNull (provider.Find ("PrivStaticProperty"), "'PrivStaticProperty' found.");
Assert.IsNull (provider.Find ("PrivStaticMethod"), "'PrivStaticMethod' found.");
});
}
[Test()]
public void TestNonStaticClassAccess ()
{

Loading…
Cancel
Save