public BaseMethodDeclarationSyntax FindMethodSyntax(MethodDescriptor method, out IMethodSymbol symbol) { var root = this.SyntaxTree.GetRoot(); var visitor = new MethodFinder(method, this.SemanticModel); visitor.Visit(root); Contract.Assert(visitor.Result != null); symbol = (IMethodSymbol)this.SemanticModel.GetDeclaredSymbol(visitor.Result); return visitor.Result; }
public async Task<Tuple<BaseMethodDeclarationSyntax, IMethodSymbol>> FindMethodSyntaxAsync(MethodDescriptor method) { var root = await this.SyntaxTree.GetRootAsync(); var visitor = new MethodFinder(method, this.SemanticModel); visitor.Visit(root); if (visitor.Result != null) { return new Tuple<BaseMethodDeclarationSyntax, IMethodSymbol>( visitor.Result, (IMethodSymbol)this.SemanticModel.GetDeclaredSymbol(visitor.Result) ); } else { return null; } }
internal static async Task<Tuple<ProjectCodeProvider, IMethodSymbol, SyntaxTree>> GetProviderContainingEntryPointAsync( Project project, CancellationToken cancellationToken = default(CancellationToken)) { var compilation = project.GetCompilationAsync().Result; var mainSymbol = compilation.GetEntryPoint(cancellationToken); if (mainSymbol == null) { return null; } else { try { foreach (var tree in compilation.SyntaxTrees) { var finder = new MethodFinder(mainSymbol, compilation.GetSemanticModel(tree)); var root = await tree.GetRootAsync(cancellationToken); finder.Visit(root); if (finder.Result != null) { return new Tuple<ProjectCodeProvider, IMethodSymbol, SyntaxTree> ( new ProjectCodeProvider(project, compilation), mainSymbol, tree ); } } } catch (OperationCanceledException) { Console.Error.WriteLine("Cancelling..."); } return null; } }
internal static ProjectCodeProvider GetProviderContainingEntryPoint(Project project, out IMethodSymbol mainSymbol) { var compilation = project.GetCompilationAsync().Result; mainSymbol = compilation.GetEntryPoint(new System.Threading.CancellationToken()); foreach (var tree in compilation.SyntaxTrees) { var finder = new MethodFinder(mainSymbol, compilation.GetSemanticModel(tree)); finder.Visit(tree.GetRoot()); if (finder.Result != null) { return new ProjectCodeProvider(project, compilation); } } return null; }