public ICompletionData[] GenerateCompletionDataForOverridableMethods(string fileName, TextArea textArea) { controller = new CodeCompletion.CodeCompletionController(); List<ICompletionData> lst = new List<ICompletionData>(); int line = textArea.Caret.Line; int col = textArea.Caret.Column; try { CodeCompletion.DomConverter dconv = (CodeCompletion.DomConverter)CodeCompletion.CodeCompletionController.comp_modules[fileName]; SymInfo[] mis = null; if (dconv != null) { mis = dconv.GetOverridableMethods(line, col); } if (mis != null) { foreach (SymInfo mi in mis) { UserDefaultCompletionData ddd = new UserDefaultCompletionData(mi.name, mi.describe, ImagesProvider.GetPictureNum(mi), true); lst.Add(ddd); } } } catch (Exception e) { } //lst.Sort(); ICompletionData[] res_arr = lst.ToArray(); controller = null; return res_arr; }
public ICompletionData[] GetCompletionDataByFirst(int off, string Text, int line, int col, char charTyped, PascalABCCompiler.Parsers.KeywordKind keyw) { List<ICompletionData> resultList = new List<ICompletionData>(); List<ICompletionData> lst = new List<ICompletionData>(); try { CodeCompletion.DomConverter dconv = (CodeCompletion.DomConverter)CodeCompletion.CodeCompletionController.comp_modules[FileName]; /*if (dconv == null && CodeCompletion.CodeCompletionNameHelper.system_unit_file_full_name != null && (keyw == CodeCompletion.KeywordKind.kw_colon || keyw == CodeCompletion.KeywordKind.kw_of)) { dconv = (CodeCompletion.DomConverter)CodeCompletion.CodeCompletionController.comp_modules[CodeCompletion.CodeCompletionNameHelper.system_unit_file_full_name]; special_module = true; }*/ string pattern = charTyped.ToString(); string[] keywords = CodeCompletion.CodeCompletionNameHelper.Helper.GetKeywords(); if (CodeCompletion.CodeCompletionController.CurrentParser.LanguageInformation.IsTypeAfterKeyword(keyw)) { keywords = CodeCompletion.CodeCompletionNameHelper.Helper.GetTypeKeywords(); } if (!CodeCompletion.CodeCompletionController.CurrentParser.LanguageInformation.IsNamespaceAfterKeyword(keyw)) foreach (string key in keywords) { //if (key.StartsWith(pattern, StringComparison.CurrentCultureIgnoreCase)) resultList.Add(new UserDefaultCompletionData(key, null, ImagesProvider.IconNumberKeyword, false)); } PascalABCCompiler.Parsers.SymInfo[] mis = null; if (CodeCompletion.CodeCompletionController.CurrentParser.LanguageInformation.IsNamespaceAfterKeyword(keyw)) { mis = CodeCompletion.DomConverter.standard_units; } if (dconv != null) { //if (keyw == PascalABCCompiler.Parsers.KeywordKind.Colon || keyw == PascalABCCompiler.Parsers.KeywordKind.Of || keyw == PascalABCCompiler.Parsers.KeywordKind.TypeDecl) if (CodeCompletion.CodeCompletionController.CurrentParser.LanguageInformation.IsTypeAfterKeyword(keyw)) mis = dconv.GetTypeByPattern(pattern, line, col, true, VisualPABCSingleton.MainForm.UserOptions.CodeCompletionNamespaceVisibleRange); else if (CodeCompletion.CodeCompletionController.CurrentParser.LanguageInformation.IsNamespaceAfterKeyword(keyw) && mis == null) mis = dconv.GetNamespaces(); else mis = dconv.GetNameByPattern(null, line, col, true, VisualPABCSingleton.MainForm.UserOptions.CodeCompletionNamespaceVisibleRange); } Hashtable cache = new Hashtable(); int num = 0; if (mis != null) { bool stop = false; ICompletionData data = CompletionDataDispatcher.GetLastUsedItem(charTyped); foreach (PascalABCCompiler.Parsers.SymInfo mi in mis) { if (mi.not_include) continue; if (cache.Contains(mi.name)) continue; UserDefaultCompletionData ddd = new UserDefaultCompletionData(mi.name, mi.describe, ImagesProvider.GetPictureNum(mi), false); if (!stop && data != null && string.Compare(mi.name, data.Text, true) == 0) { defaultCompletionElement = ddd; stop = true; } else if (!stop && data == null && mi.name.StartsWith(charTyped.ToString(), StringComparison.CurrentCultureIgnoreCase)) { //defaultCompletionElement = ddd; lst.Add(ddd); //stop = true; } disp.Add(mi, ddd); resultList.Add(ddd); cache[mi.name] = mi; } //resultList.Sort(); //defaultCompletionElement = resultList[0] as DefaultCompletionData; } } catch (Exception e) { } lst.Sort(); if (lst.Count > 0) defaultCompletionElement = lst[0] as UserDefaultCompletionData; ICompletionData[] res_arr = resultList.ToArray(); this.ByFirstChar = true; return res_arr; }
public ICompletionData[] GetCompletionData(int off, string Text, int line, int col, char charTyped, PascalABCCompiler.Parsers.KeywordKind keyw) { List<ICompletionData> resultList = new List<ICompletionData>(); try { string pattern = null; string expr = null; bool ctrl_space = charTyped == '\0' || charTyped == '_'; bool shift_space = charTyped == '\0'; bool new_space = keyw == PascalABCCompiler.Parsers.KeywordKind.New; if (ctrl_space) { bool is_pattern = false; pattern = CodeCompletion.CodeCompletionController.CurrentParser.LanguageInformation.FindPattern(off, Text, out is_pattern); } else if (new_space) { expr = CodeCompletion.CodeCompletionController.CurrentParser.LanguageInformation.SkipNew(off - 1, Text, ref keyword); } else if (!new_space && keyw != PascalABCCompiler.Parsers.KeywordKind.Uses) if (charTyped != '$') expr = FindExpression(off, Text, line, col); else expr = FindExpression(off - 1, Text, line, col); List<PascalABCCompiler.Errors.Error> Errors = new List<PascalABCCompiler.Errors.Error>(); PascalABCCompiler.SyntaxTree.expression e = null; if (ctrl_space && !shift_space && (pattern == null || pattern == "")) { string[] keywords = CodeCompletion.CodeCompletionNameHelper.Helper.GetKeywords(); foreach (string key in keywords) { //if (key.StartsWith(pattern, StringComparison.CurrentCultureIgnoreCase)) resultList.Add(new UserDefaultCompletionData(key, null, ImagesProvider.IconNumberKeyword, false)); } } if (!ctrl_space && expr != null) { e = WorkbenchServiceFactory.Workbench.VisualEnvironmentCompiler.StandartCompiler.ParsersController.GetTypeAsExpression("test" + System.IO.Path.GetExtension(FileName), expr, Errors); if (e == null) { Errors.Clear(); e = WorkbenchServiceFactory.Workbench.VisualEnvironmentCompiler.StandartCompiler.ParsersController.GetExpression("test" + System.IO.Path.GetExtension(FileName), expr, Errors); } if ((e == null || Errors.Count > 0) && !new_space) return null; } SymInfo[] mis = null; CodeCompletion.DomConverter dconv = (CodeCompletion.DomConverter)CodeCompletion.CodeCompletionController.comp_modules[FileName]; if (dconv == null) { if (keyw == PascalABCCompiler.Parsers.KeywordKind.Uses) mis = CodeCompletion.DomConverter.standard_units; else if (!ctrl_space) return new ICompletionData[0]; } string fname = FileName; SymInfo sel_si = null; string last_used_member = null; if (dconv != null) { if (new_space) mis = dconv.GetTypes(e, line, col, out sel_si); else if (keyw == PascalABCCompiler.Parsers.KeywordKind.Uses && mis == null) mis = dconv.GetNamespaces(); else if (!ctrl_space) { CodeCompletion.SymScope dot_sc = null; mis = dconv.GetName(e, expr, line, col, keyword, ref dot_sc); if (dot_sc != null && VisualPABCSingleton.MainForm.UserOptions.EnableSmartIntellisense) { CompletionDataDispatcher.AddMemberBeforeDot(dot_sc); last_used_member = CompletionDataDispatcher.GetRecentUsedMember(dot_sc); } } else mis = dconv.GetNameByPattern(pattern, line, col, charTyped == '_', VisualPABCSingleton.MainForm.UserOptions.CodeCompletionNamespaceVisibleRange); } Hashtable cache = null; if (!CodeCompletion.CodeCompletionController.CurrentParser.CaseSensitive) cache = new Hashtable(StringComparer.CurrentCultureIgnoreCase); else cache = new Hashtable(); int num = 0; if (mis != null) { bool stop = false; ICompletionData data = null; foreach (SymInfo mi in mis) { if (mi.not_include) continue; if (cache.Contains(mi.name)) continue; UserDefaultCompletionData ddd = new UserDefaultCompletionData(mi.addit_name != null ? mi.addit_name : mi.name, mi.describe, ImagesProvider.GetPictureNum(mi), false); disp.Add(mi, ddd); resultList.Add(ddd); cache[mi.name] = mi; /*if (VisualPABCSingleton.MainForm.UserOptions.EnableSmartIntellisense && mi.name != null && mi.name != "" && data == null) { data = CompletionDataDispatcher.GetLastUsedItem(mi.name[0]); if (data != null && data.Text == ddd.Text) data = ddd; }*/ if (last_used_member != null && last_used_member == mi.name) { defaultCompletionElement = ddd; } if (sel_si != null && mi == sel_si) { defaultCompletionElement = ddd; stop = true; } } if (defaultCompletionElement == null && data != null) defaultCompletionElement = data as UserDefaultCompletionData; } } catch (Exception e) { } return resultList.ToArray(); }
private ICompletionData[] SortByGroup(ICompletionData[] compData) { UserDefaultCompletionData ddd = null; List <ICompletionData> consts = new List <ICompletionData>(); List <ICompletionData> meths = new List <ICompletionData>(); List <ICompletionData> extension_meths = new List <ICompletionData>(); List <ICompletionData> props = new List <ICompletionData>(); List <ICompletionData> fields = new List <ICompletionData>(); List <ICompletionData> vars = new List <ICompletionData>(); List <ICompletionData> events = new List <ICompletionData>(); List <ICompletionData> others = new List <ICompletionData>(); List <ICompletionData> res = new List <ICompletionData>(); foreach (ICompletionData data in compData) { if (data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberLocal) { vars.Add(data); } else if (data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberConstant) { consts.Add(data); } else if (data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberMethod || data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberInternalMethod || data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberPrivateMethod || data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberProtectedMethod) { if (!data.Description.Contains("(" + PascalABCCompiler.StringResources.Get("CODE_COMPLETION_EXTENSION") + ")")) { meths.Add(data); } else { extension_meths.Add(data); } } else if (data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberProperty || data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberInternalProperty || data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberPrivateProperty || data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberProtectedProperty) { props.Add(data); } else if (data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberField || data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberInternalField || data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberPrivateField || data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberProtectedField) { fields.Add(data); } else if (data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberEvent || data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberInternalEvent || data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberPrivateEvent || data.ImageIndex == VisualPascalABC.CodeCompletionProvider.ImagesProvider.IconNumberProtectedEvent) { events.Add(data); } else { others.Add(data); } } meths.Sort(); extension_meths.Sort(); props.Sort(); fields.Sort(); vars.Sort(); consts.Sort(); events.Sort(); others.Sort(); res.AddRange(vars); res.AddRange(consts); res.AddRange(fields); res.AddRange(props); res.AddRange(meths); res.AddRange(events); res.AddRange(others); res.AddRange(extension_meths); return(res.ToArray()); }