public static void TestIntellisense(string dir) { //string dir = Path.Combine(@"c:\Work\Miks\_PABCNETGitHub\TestSuite", "intellisense_tests"); var comp = new PascalABCCompiler.Compiler(); var controller = new CodeCompletion.CodeCompletionController(); CodeCompletion.CodeCompletionController.comp = comp; CodeCompletion.CodeCompletionController.SetParser(".pas"); CodeCompletion.CodeCompletionController.ParsersController = comp.ParsersController; var files = Directory.GetFiles(dir, "*.pas"); var parser = comp.ParsersController; for (int i = 0; i < files.Length; i++) { var FileName = files[i]; var content = File.ReadAllText(FileName); var dc = controller.Compile(FileName, content); string expr_without_brackets = null; var tmp = content; var ind = -1; ind = tmp.IndexOf("{@"); while (ind != -1) { var lines = tmp.Split(new string[] { System.Environment.NewLine }, System.StringSplitOptions.None); var pos = ind - 1; var line = GetLineByPos(lines, pos); var col = GetColByPos(lines, pos); var desc = CodeCompletion.CodeCompletionTester.GetDescription(pos, tmp, line, col, FileName, dc, comp.ParsersController); var should_desc = tmp.Substring(ind + 2, tmp.IndexOf("@}") - ind - 2); if (desc == null) { desc = ""; } desc = desc.Split(new string[] { "\n" }, StringSplitOptions.None)[0].Trim(); assert(desc.Replace(", ", ",") == should_desc.Replace(", ", ","), FileName + ", should: " + should_desc + ", is: " + desc); tmp = tmp.Remove(ind, tmp.IndexOf("@}") + 2 - ind); ind = tmp.IndexOf("{@"); } } }
public static void TestIntellisense(string dir) { //string dir = Path.Combine(@"c:\Work\Miks\_PABCNETGitHub\TestSuite", "intellisense_tests"); var comp = new PascalABCCompiler.Compiler(); var controller = new CodeCompletion.CodeCompletionController(); CodeCompletion.CodeCompletionController.comp = comp; CodeCompletion.CodeCompletionController.SetParser(".pas"); CodeCompletion.CodeCompletionController.ParsersController = comp.ParsersController; var files = Directory.GetFiles(dir, "*.pas"); var parser = comp.ParsersController; for (int i = 0; i < files.Length; i++) { var FileName = files[i]; var content = File.ReadAllText(FileName); var dc = controller.Compile(FileName, content); string expr_without_brackets = null; var tmp = content; var ind = -1; ind = tmp.IndexOf("{@"); while (ind != -1) { var lines = tmp.Split(new string[] { System.Environment.NewLine }, System.StringSplitOptions.None); var pos = ind-1; var line = GetLineByPos(lines, pos); var col = GetColByPos(lines, pos); var desc = CodeCompletion.CodeCompletionTester.GetDescription(pos, tmp, line, col, FileName, dc, comp.ParsersController); var should_desc = tmp.Substring(ind + 2, tmp.IndexOf("@}") - ind - 2); if (desc == null) desc = ""; desc = desc.Split(new string[] { "\n"},StringSplitOptions.None)[0].Trim(); assert(desc == should_desc, FileName+", should: "+should_desc+", is: "+desc); tmp = tmp.Remove(ind, tmp.IndexOf("@}") + 2 - ind); ind = tmp.IndexOf("{@"); } } }
public void CompileInThread() { controller.Compile(FileName, Text /*+ ")))));end."*/); }
internal void ParseInThread() { try { Hashtable open_files2 = (Hashtable)open_files.Clone(); Hashtable recomp_files = new Hashtable(StringComparer.OrdinalIgnoreCase); bool is_comp = false; foreach (string FileName in open_files2.Keys) { //(ssyy) 18.05.08 Вставил проверку на null object o = open_files[FileName]; if (o != null && (bool)o == true) { is_comp = true; CodeCompletion.CodeCompletionController controller = new CodeCompletion.CodeCompletionController(); string text = visualEnvironmentCompiler.SourceFilesProvider(FileName, PascalABCCompiler.SourceFileOperation.GetText) as string; CodeCompletion.DomConverter tmp = CodeCompletion.CodeCompletionController.comp_modules[FileName] as CodeCompletion.DomConverter; long cur_mem = Environment.WorkingSet; CodeCompletion.DomConverter dc = controller.Compile(FileName, text); mem_delta += Environment.WorkingSet - cur_mem; open_files[FileName] = false; if (dc.is_compiled) { //CodeCompletion.CodeCompletionController.comp_modules.Remove(FileName); if (tmp != null && tmp.stv.entry_scope != null) { tmp.stv.entry_scope.Clear(); if (tmp.stv.cur_scope != null) tmp.stv.cur_scope.Clear(); } CodeCompletion.CodeCompletionController.comp_modules[FileName] = dc; recomp_files[FileName] = FileName; open_files[FileName] = false; if (ParseInformationUpdated != null) ParseInformationUpdated(dc.stv.entry_scope, FileName); } else if (CodeCompletion.CodeCompletionController.comp_modules[FileName] == null) CodeCompletion.CodeCompletionController.comp_modules[FileName] = dc; } } foreach (string FileName in open_files2.Keys) { CodeCompletion.DomConverter dc = CodeCompletion.CodeCompletionController.comp_modules[FileName] as CodeCompletion.DomConverter; CodeCompletion.SymScope ss = null; if (dc != null) { if (dc.stv.entry_scope != null) ss = dc.stv.entry_scope; else if (dc.stv.impl_scope != null) ss = dc.stv.impl_scope; int j = 0; while (j < 2) { if (j == 0) { ss = dc.stv.entry_scope; j++; } else { ss = dc.stv.impl_scope; j++; } if (ss != null) { for (int i = 0; i < ss.used_units.Count; i++) { string s = ss.used_units[i].file_name; if (s != null && open_files2.ContainsKey(s) && recomp_files.ContainsKey(s)) { is_comp = true; CodeCompletion.CodeCompletionController controller = new CodeCompletion.CodeCompletionController(); string text = visualEnvironmentCompiler.SourceFilesProvider(FileName, PascalABCCompiler.SourceFileOperation.GetText) as string; CodeCompletion.DomConverter tmp = CodeCompletion.CodeCompletionController.comp_modules[FileName] as CodeCompletion.DomConverter; long cur_mem = Environment.WorkingSet; dc = controller.Compile(FileName, text); mem_delta += Environment.WorkingSet - cur_mem; open_files[FileName] = false; CodeCompletion.CodeCompletionController.comp_modules[FileName] = dc; if (dc.is_compiled) { /*if (tmp != null && tmp.stv.entry_scope != null) { tmp.stv.entry_scope.Clear(); if (tmp.stv.cur_scope != null) tmp.stv.cur_scope.Clear(); }*/ CodeCompletion.CodeCompletionController.comp_modules[FileName] = dc; recomp_files[FileName] = FileName; ss.used_units[i] = dc.stv.entry_scope; if (ParseInformationUpdated != null) ParseInformationUpdated(dc.stv.entry_scope, FileName); } else if (CodeCompletion.CodeCompletionController.comp_modules[FileName] == null) CodeCompletion.CodeCompletionController.comp_modules[FileName] = dc; } } } } } } if (is_comp && Environment.WorkingSet > 60000000 /*&& mem_delta > 10000000*/) //postavil delta dlja pamjati, posle kototoj delaetsja sborka musora { mem_delta = 0; GC.Collect(); } } catch (Exception e) { } }
internal void ParseInThread() { try { Hashtable open_files2 = (Hashtable)open_files.Clone(); Hashtable recomp_files = new Hashtable(StringComparer.OrdinalIgnoreCase); bool is_comp = false; foreach (string FileName in open_files2.Keys) { //(ssyy) 18.05.08 Вставил проверку на null object o = open_files[FileName]; if (o != null && (bool)o == true) { is_comp = true; CodeCompletion.CodeCompletionController controller = new CodeCompletion.CodeCompletionController(); string text = visualEnvironmentCompiler.SourceFilesProvider(FileName, PascalABCCompiler.SourceFileOperation.GetText) as string; if (string.IsNullOrEmpty(text)) { text = "begin end."; } CodeCompletion.DomConverter tmp = CodeCompletion.CodeCompletionController.comp_modules[FileName] as CodeCompletion.DomConverter; long cur_mem = Environment.WorkingSet; CodeCompletion.DomConverter dc = controller.Compile(FileName, text); mem_delta += Environment.WorkingSet - cur_mem; open_files[FileName] = false; if (dc.is_compiled) { //CodeCompletion.CodeCompletionController.comp_modules.Remove(FileName); if (tmp != null && tmp.visitor.entry_scope != null) { tmp.visitor.entry_scope.Clear(); if (tmp.visitor.cur_scope != null) { tmp.visitor.cur_scope.Clear(); } } CodeCompletion.CodeCompletionController.comp_modules[FileName] = dc; recomp_files[FileName] = FileName; open_files[FileName] = false; if (ParseInformationUpdated != null) { ParseInformationUpdated(dc.visitor.entry_scope, FileName); } } else if (CodeCompletion.CodeCompletionController.comp_modules[FileName] == null) { CodeCompletion.CodeCompletionController.comp_modules[FileName] = dc; } } } foreach (string FileName in open_files2.Keys) { CodeCompletion.DomConverter dc = CodeCompletion.CodeCompletionController.comp_modules[FileName] as CodeCompletion.DomConverter; CodeCompletion.SymScope ss = null; if (dc != null) { if (dc.visitor.entry_scope != null) { ss = dc.visitor.entry_scope; } else if (dc.visitor.impl_scope != null) { ss = dc.visitor.impl_scope; } int j = 0; while (j < 2) { if (j == 0) { ss = dc.visitor.entry_scope; j++; } else { ss = dc.visitor.impl_scope; j++; } if (ss != null) { for (int i = 0; i < ss.used_units.Count; i++) { string s = ss.used_units[i].file_name; if (s != null && open_files2.ContainsKey(s) && recomp_files.ContainsKey(s)) { is_comp = true; CodeCompletion.CodeCompletionController controller = new CodeCompletion.CodeCompletionController(); string text = visualEnvironmentCompiler.SourceFilesProvider(FileName, PascalABCCompiler.SourceFileOperation.GetText) as string; CodeCompletion.DomConverter tmp = CodeCompletion.CodeCompletionController.comp_modules[FileName] as CodeCompletion.DomConverter; long cur_mem = Environment.WorkingSet; dc = controller.Compile(FileName, text); mem_delta += Environment.WorkingSet - cur_mem; open_files[FileName] = false; CodeCompletion.CodeCompletionController.comp_modules[FileName] = dc; if (dc.is_compiled) { /*if (tmp != null && tmp.stv.entry_scope != null) * { * tmp.stv.entry_scope.Clear(); * if (tmp.stv.cur_scope != null) tmp.stv.cur_scope.Clear(); * }*/ CodeCompletion.CodeCompletionController.comp_modules[FileName] = dc; recomp_files[FileName] = FileName; ss.used_units[i] = dc.visitor.entry_scope; if (ParseInformationUpdated != null) { ParseInformationUpdated(dc.visitor.entry_scope, FileName); } } else if (CodeCompletion.CodeCompletionController.comp_modules[FileName] == null) { CodeCompletion.CodeCompletionController.comp_modules[FileName] = dc; } } } } } } } if (is_comp && mem_delta > 20000000 /*&& mem_delta > 10000000*/) //postavil delta dlja pamjati, posle kototoj delaetsja sborka musora { mem_delta = 0; GC.Collect(); } } catch (Exception e) { } }