Browse Source

Improved performance of local variable renaming in big projects.

pull/315/head
Andreas Weizel 12 years ago
parent
commit
ccb795912e
  1. 6
      src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Resolver/FindReferenceSearchScope.cs
  2. 18
      src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Resolver/FindReferences.cs

6
src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Resolver/FindReferenceSearchScope.cs

@ -48,6 +48,12 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -48,6 +48,12 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
/// </summary>
ITypeDefinition TopLevelTypeDefinition { get; }
/// <summary>
/// Gets the file name that defines the search scope.
/// If null, all files are searched.
/// </summary>
string FileName { get; }
/// <summary>
/// Creates a navigator that can find references to this entity and reports
/// them to the specified callback.

18
src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Resolver/FindReferences.cs

@ -151,6 +151,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -151,6 +151,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
internal ICompilation declarationCompilation;
internal Accessibility accessibility;
internal ITypeDefinition topLevelTypeDefinition;
internal string fileName;
IResolveVisitorNavigator IFindReferenceSearchScope.GetNavigator(ICompilation compilation, FoundReferenceCallback callback)
{
@ -179,6 +180,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -179,6 +180,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
ITypeDefinition IFindReferenceSearchScope.TopLevelTypeDefinition {
get { return topLevelTypeDefinition; }
}
string IFindReferenceSearchScope.FileName {
get { return fileName; }
}
}
abstract class FindReferenceNavigator : IResolveVisitorNavigator
@ -233,12 +238,11 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -233,12 +238,11 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
}
SearchScope scope;
SearchScope additionalScope = null;
IEntity entity;
IEntity entity = null;
if (symbol.SymbolKind == SymbolKind.Variable) {
var variable = (IVariable) symbol;
scope = GetSearchScopeForLocalVariable(variable);
entity = null;
} else if (symbol.SymbolKind == SymbolKind.Parameter) {
var par = (IParameter)symbol;
scope = GetSearchScopeForParameter(par);
@ -375,7 +379,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -375,7 +379,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
return pc.Files.OfType<CSharpUnresolvedFile>();
}
} else {
return pc.Files.OfType<CSharpUnresolvedFile>();
if (searchScope.FileName == null)
return pc.Files.OfType<CSharpUnresolvedFile>();
else
return pc.Files.OfType<CSharpUnresolvedFile>().Where(f => f.FileName == searchScope.FileName);
}
}
@ -1385,6 +1392,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -1385,6 +1392,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
return new FindLocalReferencesNavigator(variable);
}
);
scope.fileName = variable.Region.FileName;
return scope;
}
@ -1516,7 +1524,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -1516,7 +1524,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
return true;
var st = node as SimpleType;
if (st != null && st.Identifier == ns.Name)
if (st != null && st.Identifier == ns.Name)
return !st.AncestorsAndSelf.TakeWhile (n => n is AstType).Any (m => m.Role == NamespaceDeclaration.NamespaceNameRole);
var mt = node as MemberType;
@ -1542,7 +1550,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -1542,7 +1550,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
}
}
#endregion
#region Find Parameter References
SearchScope GetSearchScopeForParameter(IParameter parameter)

Loading…
Cancel
Save