public void Execute(IDataContext context, DelegateExecute nextExecute) { var solution = context.GetData(JetBrains.ProjectModel.DataContext.DataConstants.SOLUTION); if (solution != null) { var documentOffset = context.GetData(JetBrains.DocumentModel.DataConstants.DOCUMENT_OFFSET); if (documentOffset == null) return; //var psiServices = solution.GetPsiServices(); var psiFile = documentOffset.Document.GetPsiSourceFile(solution); if (psiFile == null) return; var projectFile = psiFile.ToProjectFile(); if (projectFile == null) return; var project = projectFile.GetProject(); if (project == null) return; var nitraProject = _nitraSolution.GetProject(project); if (nitraProject == null) return; var nitraFile = nitraProject.TryGetFile(projectFile); if (nitraFile == null) return; var pos = documentOffset.Value; var symbolCollector = new CollectSymbolsAndRefsInSpanAstVisitor(new NSpan(pos)); nitraFile.Ast.Accept(symbolCollector); var popupWindowContext = context.GetData(JetBrains.UI.DataConstants.PopupWindowContextSource); if (popupWindowContext == null) return; var symbols = symbolCollector.Refs.Where(r => r.IsSymbolEvaluated).Select(r => r.Symbol).ToArray(); if (symbols.Length == 0) { if (symbolCollector.Names.Count == 0) return; symbols = symbolCollector.Names.Where(n => n.IsSymbolEvaluated).Select(n => n.Symbol).ToArray(); } List<IOccurence> items = new List<IOccurence>(); var s = nitraFile.Project.Solution; foreach (var p in s.Projects) { foreach (var file in p.Files) { foreach (var symbol in symbols) { var collectRefs = new CollectSymbolRefsAstVisitor(symbol); file.Ast.Accept(collectRefs); foreach (var r in collectRefs.FoundSymbols) { var refNitraFile = r.File as XXLanguageXXFile; // TODO: add INitraReSharperFile if (refNitraFile == null) continue; items.Add(new RangeOccurence(refNitraFile.PsiSourceFile, new DocumentRange(refNitraFile.Document, new TextRange(r.Span.StartPos, r.Span.EndPos)))); } } } } var descriptor = new NitraOccurenceBrowserDescriptor(solution, items); FindResultsBrowser.ShowResults(descriptor); } nextExecute(); }
public void Execute(IDataContext context, DelegateExecute nextExecute) { var solution = context.GetData(JetBrains.ProjectModel.DataContext.DataConstants.SOLUTION); if (solution != null) { var documentOffset = context.GetData(JetBrains.DocumentModel.DataConstants.DOCUMENT_OFFSET); if (documentOffset == null) { return; } //var psiServices = solution.GetPsiServices(); var psiFile = documentOffset.Document.GetPsiSourceFile(solution); if (psiFile == null) { return; } var projectFile = psiFile.ToProjectFile(); if (projectFile == null) { return; } var project = projectFile.GetProject(); if (project == null) { return; } var nitraProject = _nitraSolution.GetProject(project); if (nitraProject == null) { return; } var nitraFile = nitraProject.TryGetFile(projectFile); if (nitraFile == null) { return; } var pos = documentOffset.Value; var symbolCollector = new CollectSymbolsAndRefsInSpanAstVisitor(new NSpan(pos)); nitraFile.Ast.Accept(symbolCollector); var popupWindowContext = context.GetData(JetBrains.UI.DataConstants.PopupWindowContextSource); if (popupWindowContext == null) { return; } var symbols = symbolCollector.Refs.Where(r => r.IsSymbolEvaluated).Select(r => r.Symbol).ToArray(); if (symbols.Length == 0) { if (symbolCollector.Names.Count == 0) { return; } symbols = symbolCollector.Names.Where(n => n.IsSymbolEvaluated).Select(n => n.Symbol).ToArray(); } List <IOccurence> items = new List <IOccurence>(); var s = nitraFile.Project.Solution; foreach (var p in s.Projects) { foreach (var file in p.Files) { foreach (var symbol in symbols) { var collectRefs = new CollectSymbolRefsAstVisitor(symbol); file.Ast.Accept(collectRefs); foreach (var r in collectRefs.FoundSymbols) { var refNitraFile = r.File as XXLanguageXXFile; // TODO: add INitraReSharperFile if (refNitraFile == null) { continue; } items.Add(new RangeOccurence(refNitraFile.PsiSourceFile, new DocumentRange(refNitraFile.Document, new TextRange(r.Span.StartPos, r.Span.EndPos)))); } } } } var descriptor = new NitraOccurenceBrowserDescriptor(solution, items); FindResultsBrowser.ShowResults(descriptor); } nextExecute(); }