public CodeFile(CstGenerator cstGenerator, FileInfo info) { Info = info; Code = GuessEncoding.ReadAllText(info.FullName); Ast = cstGenerator.GenerateTreeFromCodeText(Code); Range2Elements = new Dictionary <CodeRange, CstNode>(); }
public static IEnumerable <Tuple <int, LocationInfo> > GetSimilarElements( CstGenerator cstGenerator, IEnumerable <LocationInfo> locations, IEnumerable <FileInfo> targets, int range = 5, bool inner = true, bool outer = true) { var path2Ast = new Dictionary <string, CstNode>(); var paths = locations.Select(l => l.FileInfo).Concat(targets) .Select(f => f.FullName) .ToHashSet(); foreach (var path in paths) { path2Ast.Add(path, cstGenerator.GenerateTreeFromCodePath(path)); } var elements = new List <CstNode>(); foreach (var location in locations) { var root = path2Ast[location.FileInfo.FullName]; elements.Add(location.CodeRange.FindOutermostNode(root)); } var names = AdoptNodeNames(elements); var candidates = new Dictionary <string, IEnumerable <CstNode> >(); foreach (var keyAndValue in path2Ast) { candidates.Add( keyAndValue.Key, keyAndValue.Value.Descendants() .Where(e => names.Contains(e.Name))); } var commonKeys = elements.GetCommonKeys(range, true, true); return(candidates.SelectMany( kv => { var fileInfo = new FileInfo(kv.Key); return kv.Value.Select( e => Tuple.Create( e.GetSurroundingKeys(range, inner, outer) .Count(commonKeys.Contains), e)) .Select( t => Tuple.Create( t.Item1, new LocationInfo { FileInfo = fileInfo, CodeRange = CodeRange.Locate(t.Item2), })); }) .OrderByDescending(t => t.Item1)); }
private void MainForm_Load(object sender, EventArgs e) { var menuItems = new List <ToolStripMenuItem>(); var processors = new CstGenerator[] { CstGenerators.JavaUsingAntlr3, CstGenerators.CSharpUsingAntlr3, CstGenerators.JavaScriptUsingAntlr3, CstGenerators.Python2, CstGenerators.PhpUsingAntlr3, CstGenerators.LuaUsingAntlr3, }; foreach (var processor in processors) { var menuItem = menuItemLanguage.DropDownItems.Add(processor.LanguageNameWithVersion) as ToolStripMenuItem; menuItems.Add(menuItem); var processorForClosure = processor; menuItem.Click += (o, args) => { _activeProcessor = processorForClosure; foreach (var item in menuItems) { item.Checked = false; } menuItem.Checked = true; Code = ""; _activeFile = null; lvModifiableFile.Items.Clear(); lvFreezedFile.Items.Clear(); lvModifiableRule.Items.Clear(); lvFreezedRule.Items.Clear(); lvWillBeMarkedElements.Items.Clear(); lvMarkedElements.Items.Clear(); }; // Set default processor if (processor is JavaCstGeneratorUsingAntlr3) { menuItem.PerformClick(); } } InitializeModeMenu(); }
public CodeFile(CstGenerator cstGenerator, FileInfo info) { Info = info; Code = GuessEncoding.ReadAllText(info.FullName); Ast = cstGenerator.GenerateTreeFromCodeText(Code); Range2Elements = new Dictionary<CodeRange, CstNode>(); }
public MemoryCacheCstGenerator(CstGenerator delegatingCstGenerator) : base(delegatingCstGenerator.SupportedExtensions) { DelegatingCstGenerator = delegatingCstGenerator; }
private void MainForm_Load(object sender, EventArgs e) { var menuItems = new List<ToolStripMenuItem>(); var processors = new CstGenerator[] { CstGenerators.JavaUsingAntlr3, CstGenerators.CSharpUsingAntlr3, CstGenerators.JavaScriptUsingAntlr3, CstGenerators.Python2, CstGenerators.PhpUsingAntlr3, CstGenerators.LuaUsingAntlr3, }; foreach (var processor in processors) { var menuItem = menuItemLanguage.DropDownItems.Add(processor.LanguageNameWithVersion) as ToolStripMenuItem; menuItems.Add(menuItem); var processorForClosure = processor; menuItem.Click += (o, args) => { _activeProcessor = processorForClosure; foreach (var item in menuItems) { item.Checked = false; } menuItem.Checked = true; Code = ""; _activeFile = null; lvModifiableFile.Items.Clear(); lvFreezedFile.Items.Clear(); lvModifiableRule.Items.Clear(); lvFreezedRule.Items.Clear(); lvWillBeMarkedElements.Items.Clear(); lvMarkedElements.Items.Clear(); }; // Set default processor if (processor is JavaCstGeneratorUsingAntlr3) { menuItem.PerformClick(); } } InitializeModeMenu(); }
public static IEnumerable<Tuple<int, LocationInfo>> GetSimilarElements( CstGenerator cstGenerator, IEnumerable<LocationInfo> locations, IEnumerable<FileInfo> targets, int range = 5, bool inner = true, bool outer = true) { var path2Ast = new Dictionary<string, CstNode>(); var paths = locations.Select(l => l.FileInfo).Concat(targets) .Select(f => f.FullName) .ToHashSet(); foreach (var path in paths) { path2Ast.Add(path, cstGenerator.GenerateTreeFromCodePath(path)); } var elements = new List<CstNode>(); foreach (var location in locations) { var root = path2Ast[location.FileInfo.FullName]; elements.Add(location.CodeRange.FindOutermostNode(root)); } var names = AdoptNodeNames(elements); var candidates = new Dictionary<string, IEnumerable<CstNode>>(); foreach (var keyAndValue in path2Ast) { candidates.Add( keyAndValue.Key, keyAndValue.Value.Descendants() .Where(e => names.Contains(e.Name))); } var commonKeys = elements.GetCommonKeys(range, true, true); return candidates.SelectMany( kv => { var fileInfo = new FileInfo(kv.Key); return kv.Value.Select( e => Tuple.Create( e.GetSurroundingKeys(range, inner, outer) .Count(commonKeys.Contains), e)) .Select( t => Tuple.Create( t.Item1, new LocationInfo { FileInfo = fileInfo, CodeRange = CodeRange.Locate(t.Item2), })); }) .OrderByDescending(t => t.Item1); }