void CollectMembers(string code, string memberName, bool includeOverloads = true) { StringBuilder sb = new StringBuilder(); List<int> offsets = new List<int>(); foreach (var ch in code) { if (ch == '$') { offsets.Add(sb.Length); continue; } sb.Append(ch); } var syntaxTree = SyntaxTree.Parse(sb.ToString (), "test.cs"); var unresolvedFile = syntaxTree.ToTypeSystem(); var compilation = TypeSystemHelper.CreateCompilation(unresolvedFile); var symbol = FindReferencesTest.GetSymbol(compilation, memberName); var col = new SymbolCollector(); col.IncludeOverloads = includeOverloads; col.GroupForRenaming = true; var result = col.GetRelatedSymbols (new Lazy<TypeGraph>(() => new TypeGraph (compilation.Assemblies)), symbol); if (offsets.Count != result.Count()) { foreach (var a in result) Console.WriteLine(a); } Assert.AreEqual(offsets.Count, result.Count()); var doc = new ReadOnlyDocument(sb.ToString ()); result .Select(r => doc.GetOffset ((r as IEntity).Region.Begin)) .SequenceEqual(offsets); }
void CollectMembers(string code, string memberName, bool includeOverloads = true) { StringBuilder sb = new StringBuilder(); List <int> offsets = new List <int>(); foreach (var ch in code) { if (ch == '$') { offsets.Add(sb.Length); continue; } sb.Append(ch); } var syntaxTree = SyntaxTree.Parse(sb.ToString(), "test.cs"); var unresolvedFile = syntaxTree.ToTypeSystem(); var compilation = TypeSystemHelper.CreateCompilation(unresolvedFile); var symbol = FindReferencesTest.GetSymbol(compilation, memberName); var col = new SymbolCollector(); col.IncludeOverloads = includeOverloads; col.GroupForRenaming = true; var result = col.GetRelatedSymbols(new Lazy <TypeGraph>(() => new TypeGraph(compilation.Assemblies)), symbol); if (offsets.Count != result.Count()) { foreach (var a in result) { Console.WriteLine(a); } } Assert.AreEqual(offsets.Count, result.Count()); var doc = new ReadOnlyDocument(sb.ToString()); result .Select(r => doc.GetOffset((r as IEntity).Region.Begin)) .SequenceEqual(offsets); }
IEnumerable<ISymbol> GetRelatedSymbols(ISymbol entity) { var typeGraph = new Lazy<TypeGraph>(() => new TypeGraph(new [] { compilation.MainAssembly })); var symbolCollector = new SymbolCollector(); return symbolCollector.GetRelatedSymbols(typeGraph, entity); }
IList<AstNode> Rename(string fullyQualifiedName, string newName, bool includeOverloads) { var sym = GetSymbol(compilation, fullyQualifiedName); Assert.NotNull(sym); var graph = new TypeGraph(compilation.Assemblies); var col = new SymbolCollector(); col.IncludeOverloads = includeOverloads; col.GroupForRenaming = true; var scopes = findReferences.GetSearchScopes(col.GetRelatedSymbols(graph, sym)); List<AstNode> result = new List<AstNode>(); findReferences.RenameReferencesInFile( scopes, newName, new CSharpAstResolver(compilation, syntaxTree, unresolvedFile), delegate(RenameCallbackArguments obj) { result.Add (obj.NodeToReplace); }, delegate(Error obj) { }); return result; }