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;
 }
Пример #3
0
        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;
        }
Пример #4
0
        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);
        }