Browse Source

Fixed completion unit test.

newNRvisualizers
Mike Krüger 14 years ago
parent
commit
de6870b067
  1. 16
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
  2. 10
      ICSharpCode.NRefactory.CSharp/Resolver/CSharpResolver.cs
  3. 15
      ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs
  4. 2
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs

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

@ -1803,10 +1803,19 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -1803,10 +1803,19 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return result.Result;
}
var lookup = new MemberLookup (ctx.CurrentTypeDefinition, Compilation.MainAssembly);
bool isProtectedAllowed = resolveResult is ThisResolveResult ? true : lookup.IsProtectedAccessAllowed (type);
bool skipNonStaticMembers = (resolveResult is TypeResolveResult);
if (resolveResult is MemberResolveResult && resolvedNode is IdentifierExpression) {
var mrr = (MemberResolveResult)resolveResult;
includeStaticMembers = mrr.Member.Name == mrr.Type.Name;
TypeResolveResult trr;
if (state.IsVariableReferenceWithSameType (resolveResult, ((IdentifierExpression)resolvedNode).Identifier, out trr)) {
if (mrr.Member.IsStatic ^ currentMember.IsStatic)
skipNonStaticMembers = true;
}
// ADD Aliases
var scope = CSharpParsedFile.GetUsingScope (location).Resolve (Compilation);
@ -1838,9 +1847,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -1838,9 +1847,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
// Console.WriteLine (currentMember != null ? currentMember.IsStatic : "currentMember == null");
if (resolvedNode.Annotation<ObjectCreateExpression> () == null) { //tags the created expression as part of an object create expression.
var lookup = new MemberLookup (ctx.CurrentTypeDefinition, Compilation.MainAssembly);
bool isProtectedAllowed = resolveResult is ThisResolveResult ? true : lookup.IsProtectedAccessAllowed (type);
var filteredList = new List<IMember> ();
foreach (var member in type.GetMembers ()) {
// Console.WriteLine ("member:" + member + member.IsShadowing);
@ -1859,7 +1866,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -1859,7 +1866,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
if (field != null)
memberIsStatic |= field.IsConst;
if (!memberIsStatic && (resolveResult is TypeResolveResult)) {
if (!memberIsStatic && skipNonStaticMembers) {
continue;
}
@ -1874,7 +1881,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -1874,7 +1881,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
}
foreach (var member in filteredList) {
// Console.WriteLine ("add : "+ member.FullName + " --- " + member.IsStatic);
result.AddMember (member);
}
}

10
ICSharpCode.NRefactory.CSharp/Resolver/CSharpResolver.cs

@ -1384,6 +1384,16 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -1384,6 +1384,16 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
}
}
public bool IsVariableReferenceWithSameType (ResolveResult rr, string identifier, out TypeResolveResult trr)
{
if (!(rr is MemberResolveResult || rr is LocalResolveResult)) {
trr = null;
return false;
}
trr = LookupSimpleNameOrTypeName (identifier, EmptyList<IType>.Instance, SimpleNameLookupMode.Type) as TypeResolveResult;
return trr != null && trr.Type.Equals (rr.Type);
}
ResolveResult LookInCurrentType(string identifier, IList<IType> typeArguments, SimpleNameLookupMode lookupMode, bool parameterizeResultType)
{
int k = typeArguments.Count;

15
ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs

@ -1544,16 +1544,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -1544,16 +1544,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
return ie != null && ie.Target == node;
}
bool IsVariableReferenceWithSameType(ResolveResult rr, string identifier, out TypeResolveResult trr)
{
if (!(rr is MemberResolveResult || rr is LocalResolveResult)) {
trr = null;
return false;
}
trr = resolver.LookupSimpleNameOrTypeName(identifier, EmptyList<IType>.Instance, SimpleNameLookupMode.Type) as TypeResolveResult;
return trr != null && trr.Type.Equals(rr.Type);
}
/// <summary>
/// Gets whether 'rr' is considered a static access on the target identifier.
/// </summary>
@ -1593,7 +1584,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -1593,7 +1584,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
StoreCurrentState(identifierExpression);
ResolveResult target = resolver.ResolveSimpleName(identifierExpression.Identifier, EmptyList<IType>.Instance);
TypeResolveResult trr;
if (IsVariableReferenceWithSameType(target, identifierExpression.Identifier, out trr)) {
if (resolver.IsVariableReferenceWithSameType(target, identifierExpression.Identifier, out trr)) {
// It's ambiguous
ResolveResult rr = ResolveMemberReferenceOnGivenTarget(target, memberReferenceExpression);
ResolveResult simpleNameRR = IsStaticResult(rr, null) ? trr : target;
@ -1646,7 +1637,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -1646,7 +1637,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
Log.WriteLine("Member reference '{0}' on potentially-ambiguous simple-name was resolved to {1}", mre, target);
StoreResult(mre, target);
TypeResolveResult trr;
if (IsVariableReferenceWithSameType(idRR, identifierExpression.Identifier, out trr)) {
if (resolver.IsVariableReferenceWithSameType(idRR, identifierExpression.Identifier, out trr)) {
// It's ambiguous
ResolveResult rr = ResolveInvocationOnGivenTarget(target, invocationExpression);
ResolveResult simpleNameRR = IsStaticResult(target, rr) ? trr : idRR;

2
ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs

@ -4540,9 +4540,9 @@ class Test @@ -4540,9 +4540,9 @@ class Test
}
}
");
Assert.AreEqual (3, provider.Count);
Assert.IsNotNull (provider.Find ("Value1"), "field 'Value1' not found.");
Assert.IsNotNull (provider.Find ("Value2"), "field 'Value2' not found.");
Assert.IsNull (provider.Find ("ToString"), "'ToString' found.");
}
}

Loading…
Cancel
Save