Skip to content
This repository was archived by the owner on Oct 16, 2020. It is now read-only.

Commit bede4f6

Browse files
committed
Make SymbolCollector take a Lazy<TypeGraph> - it's expensive to construct and only used for some members.
1 parent 14dc190 commit bede4f6

4 files changed

Lines changed: 14 additions & 10 deletions

File tree

src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ public CSharpSymbolSearch(IProject project, ISymbol entity)
8787

8888
IEnumerable<ISymbol> GetRelatedSymbols(ISymbol entity)
8989
{
90-
TypeGraph typeGraph = new TypeGraph(new [] { compilation.MainAssembly });
90+
var typeGraph = new Lazy<TypeGraph>(() => new TypeGraph(new [] { compilation.MainAssembly }));
9191
var symbolCollector = new SymbolCollector();
9292
return symbolCollector.GetRelatedSymbols(typeGraph, entity);
9393
}

src/Libraries/NRefactory/ICSharpCode.NRefactory.Tests/Analysis/SymbolCollectorTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ void CollectMembers(string code, string memberName, bool includeOverloads = true
6060
col.IncludeOverloads = includeOverloads;
6161
col.GroupForRenaming = true;
6262

63-
var result = col.GetRelatedSymbols (new TypeGraph (compilation.Assemblies),
63+
var result = col.GetRelatedSymbols (new Lazy<TypeGraph>(() => new TypeGraph (compilation.Assemblies)),
6464
symbol);
6565
if (offsets.Count != result.Count()) {
6666
foreach (var a in result)

src/Libraries/NRefactory/ICSharpCode.NRefactory.Tests/CSharp/Resolver/FindReferencesTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -469,7 +469,7 @@ IList<AstNode> Rename(string fullyQualifiedName, string newName, bool includeOve
469469
{
470470
var sym = GetSymbol(compilation, fullyQualifiedName);
471471
Assert.NotNull(sym);
472-
var graph = new TypeGraph(compilation.Assemblies);
472+
var graph = new Lazy<TypeGraph>(() => new TypeGraph(compilation.Assemblies));
473473
var col = new SymbolCollector();
474474
col.IncludeOverloads = includeOverloads;
475475
col.GroupForRenaming = true;

src/Libraries/NRefactory/ICSharpCode.NRefactory/Analysis/SymbolCollector.cs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ static IEnumerable<ISymbol> CollectTypeRelatedMembers (ITypeDefinition type)
5252
}
5353
}
5454

55-
static IEnumerable<ISymbol> CollectOverloads (TypeGraph g, IMethod method)
55+
static IEnumerable<ISymbol> CollectOverloads (IMethod method)
5656
{
5757
return method.DeclaringType
5858
.GetMethods (m => m.Name == method.Name)
@@ -85,7 +85,7 @@ static IEnumerable<ISymbol> MakeUnique (List<ISymbol> symbols)
8585
/// <returns>The related symbols.</returns>
8686
/// <param name="g">The type graph.</param>
8787
/// <param name="m">The symbol to search</param>
88-
public IEnumerable<ISymbol> GetRelatedSymbols(TypeGraph g, ISymbol m)
88+
public IEnumerable<ISymbol> GetRelatedSymbols(Lazy<TypeGraph> g, ISymbol m)
8989
{
9090
switch (m.SymbolKind) {
9191
case SymbolKind.TypeDefinition:
@@ -103,7 +103,7 @@ public IEnumerable<ISymbol> GetRelatedSymbols(TypeGraph g, ISymbol m)
103103
return GetRelatedSymbols (g, ((IMethod)m).DeclaringTypeDefinition);
104104
List<ISymbol> constructorSymbols = new List<ISymbol> ();
105105
if (IncludeOverloads) {
106-
foreach (var m3 in CollectOverloads (g, (IMethod)m)) {
106+
foreach (var m3 in CollectOverloads ((IMethod)m)) {
107107
constructorSymbols.Add (m3);
108108
}
109109
}
@@ -122,12 +122,16 @@ public IEnumerable<ISymbol> GetRelatedSymbols(TypeGraph g, ISymbol m)
122122
List<ISymbol> symbols = new List<ISymbol> ();
123123
if (!member.IsExplicitInterfaceImplementation)
124124
symbols.Add (member);
125-
foreach (var m2 in member.ImplementedInterfaceMembers) {
126-
symbols.AddRange (GetRelatedSymbols (g, m2));
125+
if (GroupForRenaming) {
126+
foreach (var m2 in member.ImplementedInterfaceMembers) {
127+
symbols.AddRange (GetRelatedSymbols (g, m2));
128+
}
129+
} else {
130+
symbols.AddRange(member.ImplementedInterfaceMembers);
127131
}
128132

129133
if (member.DeclaringType.Kind == TypeKind.Interface) {
130-
var declaringTypeNode = g.GetNode(member.DeclaringTypeDefinition);
134+
var declaringTypeNode = g.Value.GetNode(member.DeclaringTypeDefinition);
131135
if (declaringTypeNode != null) {
132136
foreach (var derivedType in declaringTypeNode.DerivedTypes) {
133137
var mem = SearchMember (derivedType.TypeDefinition, member);
@@ -141,7 +145,7 @@ public IEnumerable<ISymbol> GetRelatedSymbols(TypeGraph g, ISymbol m)
141145
if (IncludeOverloads) {
142146
IncludeOverloads = false;
143147
if (member is IMethod) {
144-
foreach (var m3 in CollectOverloads (g, (IMethod)member)) {
148+
foreach (var m3 in CollectOverloads ((IMethod)member)) {
145149
symbols.AddRange (GetRelatedSymbols (g, m3));
146150
}
147151
} else if (member.SymbolKind == SymbolKind.Indexer) {

0 commit comments

Comments
 (0)