private void tsbFindNode_Click(object sender, EventArgs e) { try { if (!ide.IsDocumentOpen()) { return; } PointOfInterest pt = null;//= EditPointHelper.FindPointUnderCursor(ide, treeManager); if (pt != null) { pt.Text = ide.GetCurrentLine(); pt = TreeSearchEngine.FindPointInAspectTree(Manager.WorkingAspect, pt); if (pt != null) { TreeNode tn = Adapter.FindNodeByValue(pt); tvAspects.SelectedNode = tn; tvAspects.Focus(); SetStatus(""); return; } } SetStatus(Strings.CannotFindSubAspect); } catch (Exception exc) { ExceptionInfoHelper.ShowInfo(exc); } }
/// <summary> /// Поиск точки в текущем документе в позиции курсора /// Документ должен быть открыт. /// </summary> /// <param name="dte"></param> /// <param name="Wrapper"></param> /// <param name="Manager"></param> /// <returns></returns> public static List <PointOfInterest> FindPointUnderCursor(IDEInterop ide, TreeManager treeManager) { string SourceText = ide.GetCurrentTextDocument(); PointOfInterest root = treeManager.GetTree(ide.GetCurrentDocumentFileName(), SourceText); LexLocation loc = ide.GetCursorPosition(); string Text = ide.GetLine(loc.StartLine); List <PointOfInterest> Points = TreeSearchEngine.FindPointByLocation(root, loc.StartLine, loc.StartColumn); if (Points == null || Points.Count == 0) { return(null); } List <PointOfInterest> Result = new List <PointOfInterest>(); foreach (PointOfInterest pt in Points) { PointOfInterest p2 = pt.ClonePointAssignItems(); p2.ApplyInnerContext(); p2.Items = new List <PointOfInterest>(); Result.Add(p2); TreeSearchEngine.SetNearLG(root, pt, SourceText, out p2.NearL, out p2.NearG); } int len = loc.StartLine == loc.EndLine ? loc.EndColumn - loc.StartColumn : Text.Length - loc.StartColumn; Result[0].Title = GetCurrentWord(Text, loc.StartColumn, len); return(Result); }
internal List <PointOfInterest> ParseAndBuildList(string FileName, string BaseDirectory, float Ratio = 1) { List <PointOfInterest> result = new List <PointOfInterest>(); try { PointOfInterest TreeRoot = Parse(FileName); foreach (PointOfInterest pt in TreeRoot.Items) { FillListFromTree(pt, ref result, Ratio); } string SourceText = File.ReadAllText(FileName, Encoding.Default); Parallel.For(0, result.Count, (i) => //for (int i=0; i< result.Count; ++i) { TreeSearchEngine.SetNearLG(TreeRoot, result[i], SourceText, out result[i].NearL, out result[i].NearG); result[i].FileName = "\\" + GetRelativePath(result[i].FileName, BaseDirectory); result[i] = result[i].ClonePointWithoutItems(); } ); } catch (Exception e) { Console.WriteLine(e.Message); } return(result); }
private void перейтиККодуToolStripMenuItem_Click(object sender, EventArgs e) { try { if (tvAspects.SelectedNode == null) { return; } PointOfInterest pt = Adapter.GetPointByNode(tvAspects.SelectedNode); if ((pt?.Context?.Count ?? 0) == 0) { return; } string fileName = Manager.GetFullFilePath(pt.FileName); PointOfInterest Tree = ide.IsDocumentOpen(fileName) ? treeManager.GetTree(fileName, ide.GetDocument(fileName)) : treeManager.GetTree(fileName); TreeSearchResult Search = TreeSearchEngine.FindPointInTree2(Tree, pt, treeManager.GetText(fileName)); if (Search.Count == 0) { SetStatus(string.Format(Strings.CannotFindPoint, pt.Title)); } else if (Search.Singular && (ModifierKeys != Keys.Control)) { //update point anchor if similarity != 1 string path = Manager.GetFullFilePath(pt.FileName); ide.NavigateToFileAndPosition(path, Search[0].Location.StartLine, Search[0].Location.StartColumn); SetStatus(""); } else { if (Search.Count >= 2) { int d1 = TreeSearchOptions.Equility - Search.GetTotalMatch(0); int d2 = TreeSearchOptions.Equility - Search.GetTotalMatch(1); //float near = Math.Max(pt.NearG, pt.NearL); //float threshold = ((near + 4) / 5 + 1) / 2; //hardcoded //if (Search._result[0].TotalMatch > threshold*TreeSearchOptions.Equility && Search._result[1].TotalMatch < threshold * TreeSearchOptions.Equility) if (d2 != 0 && d2 >= d1 * 2 && (ModifierKeys != Keys.Control)) { string path = Manager.GetFullFilePath(pt.FileName); ide.NavigateToFileAndPosition(path, Search[0].Location.StartLine, Search[0].Location.StartColumn); SetStatus(""); return; } } fmSelectPoint.Launch(Search, pt); SetStatus(""); } } catch (Exception exc) { ExceptionInfoHelper.ShowInfo(exc); } }
private PointOfInterest FindPointInCurrentPosition(PointOfInterest ParsedPoints) { int line = tbEditor.GetLineFromCharIndex(tbEditor.SelectionStart) + 1; int col = tbEditor.SelectionStart - tbEditor.GetFirstCharIndexFromLine(line - 1); try { return(TreeSearchEngine.FindPointByLocation(ParsedPoints, line, col)[0]); } catch (Exception) {} return(null); }
private void lbCandidates_MouseDoubleClick(object sender, MouseEventArgs e) { if (lbCandidates.SelectedIndex < 0) { return; } PointOfInterest currentPoint = _search[lbCandidates.SelectedIndex]; PointOfInterest TreeRoot = _treeManager.GetTree(currentPoint.FileName, true); TreeSearchEngine.SetNearLG(TreeRoot, currentPoint, _treeManager.GetText(currentPoint.FileName), out _point.NearL, out _point.NearG); _point.Context = currentPoint.Context; _point.InnerContext = currentPoint.InnerContext; _point.Text = _ide.GetCurrentLine().Trim(); Hide(); }
private void lbCandidates_SelectedIndexChanged(object sender, EventArgs e) { PointOfInterest currentPoint = _search[lbCandidates.SelectedIndex]; currentPoint.Text = _point.Text; int line = currentPoint.Location.StartLine; int col = currentPoint.Location.StartColumn; if (_point.Text != "") { QUT.Gppg.LexLocation Loc = TreeSearchEngine.FindTextPosition(currentPoint, _treeManager.GetText(currentPoint.FileName)); line = Loc.StartLine; col = Loc.StartColumn; } _ide.NavigateToFileAndPosition(currentPoint.FileName, line, 0); }
public PointOfInterest FindPointByLocation(string Text, string FileName, int Line, int Column) { PointOfInterest point; try { point = treeManager.GetTree(FileName, Text); } catch (Exception e) { throw new Exception(Strings.CannotParseFile + " " + FileName); } List <PointOfInterest> RList = TreeSearchEngine.FindPointByLocation(point, Line, Column); PointOfInterest Res = null; if (RList != null && RList.Count != 0) { Res = RList[0].ClonePointWithoutItems(); Res.Text = ide.GetLine(Line); } return(Res); }
private static void ProcessInputFile(string BaseDir, string inputFile) { AspectManager AM = new AspectManager(); ParserWrapper pw = _parser._pool.GetParserWrapper(); AM.WorkingAspect = AM.DeserializeAspect(inputFile, pw); _parser._pool.ReleaseParserWrapper(pw); int TotalNodes = AM.WorkingAspect.Items.Count; int NotFound = 0; int Errors = 0; int Found = 0; int NotChanged = 0; TreeManager TM = new TreeManager(); PointOfInterest NewAspect = new PointOfInterest(); Semaphore S = new Semaphore(1, 1); int counter = 0; Parallel.For(0, AM.WorkingAspect.Items.Count, (i) => //for (int i = 0; i < AM.WorkingAspect.Items.Count; ++i) { Interlocked.Increment(ref counter); if (counter % 10 == 0) { S.WaitOne(); Console.Write("\rNodes left: " + (AM.WorkingAspect.Items.Count - counter) + " "); S.Release(); } try { PointOfInterest Pt = AM.WorkingAspect.Items[i]; PointOfInterest Root = TM.GetTree(BaseDir + Pt.FileName); string text = TM.GetText(BaseDir + Pt.FileName); TreeSearchResult Search = TreeSearchEngine.FindPointInTree2(Root, Pt, text); if (Search.Count == 0) { Interlocked.Increment(ref NotFound); } else if (Search.Singular) { if (Search.GetNodeSimilarity(0) == 1) { Interlocked.Increment(ref NotChanged); return; //continue; } else { Interlocked.Increment(ref Found); AM.WorkingAspect.Items[i].Title = "+ " + AM.WorkingAspect.Items[i].Title; } } else { if (Search.Count >= 2) { float d1 = 1 - Search.GetNodeSimilarity(0); float d2 = 1 - Search.GetNodeSimilarity(1); //float near = Math.Max(Pt.NearG, Pt.NearL); //float threshold = ((near + 4) / 5 + 1) /2 ; //hardcoded //if (Search.GetNodeSimilarity(0) >= threshold && Search.GetNodeSimilarity(1) < threshold) if (d2 != 0 && d2 >= d1 * 2) { Interlocked.Increment(ref Found); AM.WorkingAspect.Items[i].Title = "+ " + AM.WorkingAspect.Items[i].Title; //return; //continue; } } } S.WaitOne(); NewAspect.Items.Add(AM.WorkingAspect.Items[i]); S.Release(); } catch (Exception e) { S.WaitOne(); Console.WriteLine(e.Message); Errors += 1; S.Release(); } } ); AM.WorkingAspect = NewAspect; int Ambiguous = AM.WorkingAspect.Items.Count - Found; AM.SerializeAspect(inputFile, true); File.WriteAllText(inputFile + ".report.txt", "Total: " + TotalNodes + ", Not changed: " + NotChanged + ", found: " + Found + ", Not found: " + NotFound + ", errors: " + Errors + ", ambiguous: " + Ambiguous); Console.Write("\rNodes left: 0 "); Console.WriteLine(); }