public Task<FindReferenceResult> GoToDefinition(FindReferenceParameter findReferenceParameter) { return Task.Factory.StartNew<FindReferenceResult>(() => { if (this.findProgressListener is IClientCallback) { ((IClientCallback)this.findProgressListener).ProjectConnectionId = ControllerContext.Request.Cookie("ProjectConnectionId"); } return this.editorService.GoToDefinition(findReferenceParameter, findProgressListener); }); }
public List<FindReferenceResult> FindRefernces(FindReferenceParameter parameter, IFindReferenceProgress findReferenceProgressListener) { var result = new List<FindReferenceResult>(); var findReferenceSyntaxWalker = new FindReferenceSyntaxWalker(); TraverseThroughAllTheProjectFiles(parameter, findReferenceProgressListener, (documentName, documentRelativePath, syntaxRoot) => { findReferenceSyntaxWalker.DoVisit(syntaxRoot, parameter.Text, (foundlocation) => { result.Add(new FindReferenceResult { FileName = documentName, Path = documentRelativePath, Position = foundlocation }); }); }); findReferenceProgressListener.OnFindReferenceCompleted(result.Count); return result; }
public FindReferenceResult GoToDefinition(FindReferenceParameter parameter, IFindReferenceProgress findReferenceProgressListener) { FindReferenceResult result = null; var goToDefinitionSyntaxWalker = new GoToDefinitionSyntaxWalker(); TokenKind searchedTokenKind = (TokenKind)Enum.Parse(typeof(TokenKind), parameter.Kind); TraverseThroughAllTheProjectFiles(parameter, findReferenceProgressListener, (documentName, documentRelativePath, syntaxRoot) => { goToDefinitionSyntaxWalker.DoVisit(syntaxRoot, parameter.Text, searchedTokenKind, (foundlocation) => { result = new FindReferenceResult { FileName = documentName, Path = documentRelativePath, Position = foundlocation }; }); }); findReferenceProgressListener.OnFindReferenceCompleted(); return result; }
private void TraverseThroughAllTheProjectFiles(FindReferenceParameter parameter, IFindReferenceProgress findReferenceProgressListener, Action<string, string, CommonSyntaxNode> visitorAction) { findReferenceProgressListener.OnFindReferenceStarted(); var projectSourceCodeDirectory = this.applicationConfigurationProvider.GetProjectSourceCodePath(parameter.Username, parameter.Project); var projectCodeDirectory = new DirectoryInfo(projectSourceCodeDirectory).GetDirectories()[0]; var solutionPath = FindSolutionPath(projectCodeDirectory, parameter.Project); if (solutionPath == null) { findReferenceProgressListener.OnFindReferenceCompleted(0); return; } findReferenceProgressListener.OnFindReferenceInProgress(); var workspace = Roslyn.Services.Workspace.LoadSolution(solutionPath); var currentFilePath = Path.Combine(projectCodeDirectory.FullName, parameter.Path.Replace(@"/", @"\")); var solution = workspace.CurrentSolution; foreach (var project in solution.Projects) { try { if (!project.HasDocuments) { continue; } foreach (var document in project.Documents) { var documentSemanticModel = document.GetSemanticModel(); var findReferenceSyntaxtWalker = new FindReferenceSyntaxWalker(); CommonSyntaxNode syntaxRoot = null; if (documentSemanticModel.SyntaxTree.TryGetRoot(out syntaxRoot)) { var documentRelativePath = new Uri(projectCodeDirectory.FullName + Path.DirectorySeparatorChar).MakeRelativeUri(new Uri(document.FilePath)).ToString(); visitorAction(document.Name, documentRelativePath, syntaxRoot); } } } catch (Exception ex) { this.logger.Error(ex, "An error has occured while loading the project {0}", project.Name); } } }