private List <SymbolsViewerSymbol> InternalFindReferences(string fname, PascalABCCompiler.SyntaxTree.expression expr, int line, int col, bool for_refact) { List <PascalABCCompiler.Parsers.Position> lst = new List <PascalABCCompiler.Parsers.Position>(); List <SymbolsViewerSymbol> svs_lst = new List <SymbolsViewerSymbol>(); try { CodeCompletion.DomConverter dc = CodeCompletion.CodeCompletionController.comp_modules[fname] as CodeCompletion.DomConverter; IBaseScope fnd_scope = null; IBaseScope cur_sc = null; if (dc != null) { fnd_scope = dc.GetSymDefinition(expr, line, col, keyword); cur_sc = dc.FindScopeByLocation(line, col); } if (fnd_scope != null) { foreach (string FileName in CodeCompletionParserController.open_files.Keys) { CodeCompletion.CodeCompletionController controller = new CodeCompletion.CodeCompletionController(); string text = VisualPABCSingleton.MainForm.VisualEnvironmentCompiler.SourceFilesProvider(FileName, PascalABCCompiler.SourceFileOperation.GetText) as string; PascalABCCompiler.SyntaxTree.compilation_unit cu = controller.ParseOnlySyntaxTree(FileName, text); if (cu != null) { dc = CodeCompletion.CodeCompletionController.comp_modules[FileName] as CodeCompletion.DomConverter; CodeCompletion.ReferenceFinder rf = null; if (dc != null && dc.visitor.entry_scope != null) { rf = new CodeCompletion.ReferenceFinder(fnd_scope, dc.visitor.entry_scope, cu, FileName, for_refact); lst.AddRange(rf.FindPositions()); } } } PascalABCCompiler.Parsers.Position p = fnd_scope.GetPosition(); bool need_add_def = !for_refact; // true if (p.file_name != null && need_add_def) { svs_lst.Add(new SymbolsViewerSymbol(new PascalABCCompiler.SourceLocation(p.file_name, p.line, p.column, p.end_line, p.end_column), ImagesProvider.GetPictureNum(fnd_scope.SymbolInfo))); } foreach (PascalABCCompiler.Parsers.Position pos in lst) { if (pos.file_name != null) { svs_lst.Add(new SymbolsViewerSymbol(new PascalABCCompiler.SourceLocation(pos.file_name, pos.line, pos.column, pos.end_line, pos.end_column), ImagesProvider.IconNumberGotoText)); } } } } catch (Exception e) { } GC.Collect(); return(svs_lst); //return svs_lst.ToArray(); }
public ComboBoxItem(IBaseScope item, string text, int iconIndex, bool isInCurrentPart, bool is_global) { this.item = item; if (item != null) { pos = item.GetPosition(); } this.text = text; this.iconIndex = iconIndex; this.isInCurrentPart = true; this.is_global = is_global; }
private List<FoldMarker> GetFoldMarkers(IDocument doc, IBaseScope root) { List<FoldMarker> foldMarkers = new List<FoldMarker>(); if (!(root is TypeScope)) { Position pos = root.GetPosition(); if (pos.file_name != null) { Position head_pos = root.GetHeaderPosition(); FoldMarker newFoldMarker = null; if (head_pos.file_name == null) newFoldMarker = new FoldMarker(doc, pos.line - 1, pos.column - 1, pos.end_line - 1, pos.end_column, FoldType.MemberBody); else newFoldMarker = new FoldMarker(doc, head_pos.end_line - 1, head_pos.end_column - 1, pos.end_line - 1, pos.end_column, FoldType.MemberBody); if (newFoldMarker.Length > 0) { foldMarkers.Add(newFoldMarker); } } if (root.Regions != null) { foreach (Position p in root.Regions) { foldMarkers.Add(new FoldMarker(doc, p.line - 1, p.column, p.end_line - 1, p.end_column, FoldType.MemberBody, p.fold_text)); } } Position body_pos = root.GetBodyPosition(); if (body_pos.file_name != null) { FoldMarker newFoldMarker = null; newFoldMarker = new FoldMarker(doc, body_pos.line - 1, body_pos.column - 1, body_pos.end_line - 1, body_pos.end_column, FoldType.MemberBody); if (newFoldMarker.Length > 0) { foldMarkers.Add(newFoldMarker); } } } foreach (IBaseScope ss in root.Members) { if (ss is ITypeScope) { Position body_pos = ss.GetBodyPosition(); Position head_pos = ss.GetHeaderPosition(); if (head_pos.file_name == null || body_pos.file_name == null) continue; FoldMarker newFoldMarker = new FoldMarker(doc, head_pos.end_line - 1, head_pos.end_column - 1, body_pos.end_line - 1, body_pos.end_column, FoldType.TypeBody); if (newFoldMarker.Length > 0) { foldMarkers.Add(newFoldMarker); } foldMarkers.AddRange(GetFoldMarkers(doc, ss)); } else if (ss is IProcScope) { FoldType ft = FoldType.MemberBody; Position head_pos = ss.GetHeaderPosition(); Position body_pos = ss.GetBodyPosition(); if (head_pos.file_name == null || body_pos.file_name == null) continue; FoldMarker newFoldMarker = new FoldMarker(doc, head_pos.end_line - 1, head_pos.end_column, body_pos.end_line - 1, body_pos.end_column, ft); if (newFoldMarker.Length > 0) { foldMarkers.Add(newFoldMarker); } } else if (ss is IImplementationUnitScope) foldMarkers.AddRange(GetFoldMarkers(doc, ss)); } return foldMarkers; }
private List <FoldMarker> GetFoldMarkers(IDocument doc, IBaseScope root, string fileName) { List <FoldMarker> foldMarkers = new List <FoldMarker>(); if (!(root is ITypeScope)) { Position pos = root.GetPosition(); if (pos.file_name != null) { Position head_pos = root.GetHeaderPosition(); FoldMarker newFoldMarker = null; if (head_pos.file_name == null) { if (root is ImplementationUnitScope) { Position unit_pos = root.TopScope.GetPosition(); newFoldMarker = new FoldMarker(doc, pos.line - 1, pos.column - 1, unit_pos.end_line - 1, unit_pos.end_column, FoldType.MemberBody); } else { newFoldMarker = new FoldMarker(doc, pos.line - 1, pos.column - 1, pos.end_line - 1, pos.end_column, FoldType.MemberBody); } } else { newFoldMarker = new FoldMarker(doc, head_pos.end_line - 1, head_pos.end_column - 1, pos.end_line - 1, pos.end_column, FoldType.MemberBody); } if (newFoldMarker.Length > 0) { foldMarkers.Add(newFoldMarker); } } if (root.Regions != null) { foreach (Position p in root.Regions) { foldMarkers.Add(new RegionFoldMarker(doc, p.line - 1, p.column, p.end_line - 1, p.end_column, FoldType.MemberBody, p.fold_text)); } } Position body_pos = root.GetBodyPosition(); if (body_pos.file_name != null) { FoldMarker newFoldMarker = null; newFoldMarker = new FoldMarker(doc, body_pos.line - 1, body_pos.column - 1, body_pos.end_line - 1, body_pos.end_column, FoldType.MemberBody); if (newFoldMarker.Length > 0) { foldMarkers.Add(newFoldMarker); } } } foreach (IBaseScope ss in root.Members) { if (ss is ITypeScope) { Position body_pos = ss.GetBodyPosition(); Position head_pos = ss.GetHeaderPosition(); if (head_pos.file_name == null || body_pos.file_name == null) { continue; } FoldMarker newFoldMarker = new FoldMarker(doc, head_pos.end_line - 1, head_pos.end_column - 1, body_pos.end_line - 1, body_pos.end_column, FoldType.TypeBody); if (newFoldMarker.Length > 0) { foldMarkers.Add(newFoldMarker); } foldMarkers.AddRange(GetFoldMarkers(doc, ss, fileName)); } else if (ss is IProcScope) { FoldType ft = FoldType.MemberBody; Position head_pos = ss.GetHeaderPosition(); Position body_pos = ss.GetBodyPosition(); if (head_pos.file_name == null || body_pos.file_name == null) { continue; } FoldMarker newFoldMarker = new FoldMarker(doc, head_pos.end_line - 1, head_pos.end_column, body_pos.end_line - 1, body_pos.end_column, ft); if (newFoldMarker.Length > 0) { foldMarkers.Add(newFoldMarker); } } else if (ss is IImplementationUnitScope) { foldMarkers.AddRange(GetFoldMarkers(doc, ss, fileName)); } } return(foldMarkers); }