Beispiel #1
0
 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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
            }
        }
Beispiel #5
0
        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);
        }
Beispiel #8
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);
        }
Beispiel #9
0
        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();
        }