diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs index fbd05adfc5..6d21e0bb23 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs @@ -87,7 +87,7 @@ namespace CSharpBinding IEnumerable GetRelatedSymbols(ISymbol entity) { - TypeGraph typeGraph = new TypeGraph(new [] { compilation.MainAssembly }); + var typeGraph = new Lazy(() => new TypeGraph(new [] { compilation.MainAssembly })); var symbolCollector = new SymbolCollector(); return symbolCollector.GetRelatedSymbols(typeGraph, entity); } diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.Tests/Analysis/SymbolCollectorTests.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.Tests/Analysis/SymbolCollectorTests.cs index 8bf4338ff8..6ca6161415 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.Tests/Analysis/SymbolCollectorTests.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.Tests/Analysis/SymbolCollectorTests.cs @@ -60,7 +60,7 @@ namespace ICSharpCode.NRefactory.Analysis col.IncludeOverloads = includeOverloads; col.GroupForRenaming = true; - var result = col.GetRelatedSymbols (new TypeGraph (compilation.Assemblies), + var result = col.GetRelatedSymbols (new Lazy(() => new TypeGraph (compilation.Assemblies)), symbol); if (offsets.Count != result.Count()) { foreach (var a in result) diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.Tests/CSharp/Resolver/FindReferencesTest.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.Tests/CSharp/Resolver/FindReferencesTest.cs index e9cdc98d31..8a1470f232 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.Tests/CSharp/Resolver/FindReferencesTest.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.Tests/CSharp/Resolver/FindReferencesTest.cs @@ -469,7 +469,7 @@ namespace Foo { var sym = GetSymbol(compilation, fullyQualifiedName); Assert.NotNull(sym); - var graph = new TypeGraph(compilation.Assemblies); + var graph = new Lazy(() => new TypeGraph(compilation.Assemblies)); var col = new SymbolCollector(); col.IncludeOverloads = includeOverloads; col.GroupForRenaming = true; diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory/Analysis/SymbolCollector.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory/Analysis/SymbolCollector.cs index 1db8836a1d..6fa9128292 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory/Analysis/SymbolCollector.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory/Analysis/SymbolCollector.cs @@ -52,7 +52,7 @@ namespace ICSharpCode.NRefactory.Analysis } } - static IEnumerable CollectOverloads (TypeGraph g, IMethod method) + static IEnumerable CollectOverloads (IMethod method) { return method.DeclaringType .GetMethods (m => m.Name == method.Name) @@ -85,7 +85,7 @@ namespace ICSharpCode.NRefactory.Analysis /// The related symbols. /// The type graph. /// The symbol to search - public IEnumerable GetRelatedSymbols(TypeGraph g, ISymbol m) + public IEnumerable GetRelatedSymbols(Lazy g, ISymbol m) { switch (m.SymbolKind) { case SymbolKind.TypeDefinition: @@ -103,7 +103,7 @@ namespace ICSharpCode.NRefactory.Analysis return GetRelatedSymbols (g, ((IMethod)m).DeclaringTypeDefinition); List constructorSymbols = new List (); if (IncludeOverloads) { - foreach (var m3 in CollectOverloads (g, (IMethod)m)) { + foreach (var m3 in CollectOverloads ((IMethod)m)) { constructorSymbols.Add (m3); } } @@ -122,12 +122,16 @@ namespace ICSharpCode.NRefactory.Analysis List symbols = new List (); if (!member.IsExplicitInterfaceImplementation) symbols.Add (member); - foreach (var m2 in member.ImplementedInterfaceMembers) { - symbols.AddRange (GetRelatedSymbols (g, m2)); + if (GroupForRenaming) { + foreach (var m2 in member.ImplementedInterfaceMembers) { + symbols.AddRange (GetRelatedSymbols (g, m2)); + } + } else { + symbols.AddRange(member.ImplementedInterfaceMembers); } if (member.DeclaringType.Kind == TypeKind.Interface) { - var declaringTypeNode = g.GetNode(member.DeclaringTypeDefinition); + var declaringTypeNode = g.Value.GetNode(member.DeclaringTypeDefinition); if (declaringTypeNode != null) { foreach (var derivedType in declaringTypeNode.DerivedTypes) { var mem = SearchMember (derivedType.TypeDefinition, member); @@ -141,7 +145,7 @@ namespace ICSharpCode.NRefactory.Analysis if (IncludeOverloads) { IncludeOverloads = false; if (member is IMethod) { - foreach (var m3 in CollectOverloads (g, (IMethod)member)) { + foreach (var m3 in CollectOverloads ((IMethod)member)) { symbols.AddRange (GetRelatedSymbols (g, m3)); } } else if (member.SymbolKind == SymbolKind.Indexer) {