Browse Source

FindReferences for IEnumerator.Current now finds foreach statements.

newNRvisualizers
Daniel Grunwald 14 years ago
parent
commit
eba021814c
  1. 4
      ICSharpCode.NRefactory.CSharp/Resolver/FindReferencedEntities.cs
  2. 35
      ICSharpCode.NRefactory.CSharp/Resolver/FindReferences.cs

4
ICSharpCode.NRefactory.CSharp/Resolver/FindReferencedEntities.cs

@ -60,9 +60,9 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -60,9 +60,9 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
if (ferr != null) {
Resolved(node, ferr.GetEnumeratorCall);
if (ferr.CurrentProperty != null)
referenceFound(node, ferr.CurrentProperty);
referenceFound(node, ferr.CurrentProperty.MemberDefinition);
if (ferr.MoveNextMethod != null)
referenceFound(node, ferr.MoveNextMethod);
referenceFound(node, ferr.MoveNextMethod.MemberDefinition);
}
}

35
ICSharpCode.NRefactory.CSharp/Resolver/FindReferences.cs

@ -203,6 +203,8 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -203,6 +203,8 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
break;
case EntityType.Property:
scope = FindMemberReferences(entity, m => new FindPropertyReferences((IProperty)m));
if (entity.Name == "Current")
additionalScope = FindEnumeratorCurrentReferences((IProperty)entity);
break;
case EntityType.Event:
scope = FindMemberReferences(entity, m => new FindEventReferences((IEvent)m));
@ -562,6 +564,39 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -562,6 +564,39 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
}
#endregion
#region Find References to IEnumerator.Current
SearchScope FindEnumeratorCurrentReferences(IProperty property)
{
IProperty propertyDefinition = (IProperty)property.MemberDefinition;
return new SearchScope(
delegate(ICompilation compilation) {
IProperty imported = compilation.Import(propertyDefinition);
return imported != null ? new FindEnumeratorCurrentReferencesNavigator(imported) : null;
});
}
sealed class FindEnumeratorCurrentReferencesNavigator : FindReferenceNavigator
{
IProperty property;
public FindEnumeratorCurrentReferencesNavigator(IProperty property)
{
this.property = property;
}
internal override bool CanMatch(AstNode node)
{
return node is ForeachStatement;
}
internal override bool IsMatch(ResolveResult rr)
{
ForEachResolveResult ferr = rr as ForEachResolveResult;
return ferr != null && ferr.CurrentProperty != null && ferr.CurrentProperty.MemberDefinition == property;
}
}
#endregion
#region Find Method References
SearchScope GetSearchScopeForMethod(IMethod method)
{

Loading…
Cancel
Save