Пример #1
0
        // 更新解析
        public void UpdateAnalysis()
        {
            // 这个分支一般不会出现
            // 如果没有在工程内,直接对file进行更新
            if (m_project == null)
            {
                m_file.UpdateAnalysis();
                return;
            }

            // 从工程中移除
            m_project.RemoveAnalysis(this);
            // 更新解析
            m_file.UpdateAnalysis();
            // 在添加到工程中
            m_project.AddAnalysis(this);
        }
Пример #2
0
        public void UpdateText(ITextView view, string text, long version)
        {
            m_version = version;
            m_view    = view;

            // 创建文件对象
            if (m_file == null)
            {
                m_file = CreateABnfFile(m_abnf, text);
            }
            else
            {
                m_file.UpdateText(text);
            }

            m_file.ClearAnalysisError();
            m_file.ClearCheckError();
            m_file.ClearReference();

            // 如果在工程中,那么就从工程中更新,否则直接更新
            if (m_project != null)
            {
                m_project.UpdateFileItem(m_item_id, m_file, true);
            }
            else
            {
                m_file.UpdateAnalysis();
            }

            // 解析ALanguageClassifierInfo
            {
                var info_list = new List <ALanguageClassifierInfo>();
                if (m_file.GetRoot() != null)
                {
                    AnalysisClassificationTag(m_file.GetRoot(), info_list, false);
                }

                try
                {
                    Application.Current.Dispatcher.Invoke(() =>
                    {
                        if (m_view.Properties.TryGetProperty(nameof(ALanguageClassifier), out ALanguageClassifier tagger))
                        {
                            tagger.Refresh(version, info_list);
                        }
                    });
                }
                catch (Exception)
                {
                }
            }
        }
Пример #3
0
        // 更新FileItem对象
        public void UpdateFileItem(uint item_id, ABnfFile file, bool need_analysis)
        {
            if (!m_id_map_node.TryGetValue(item_id, out FileItem value))
            {
                return;
            }

            // 设置所在工程
            file.SetProjectInfo(this);
            // 先移除,解析
            RemoveAnalysis(value);
            // 更新文件对象
            value.SetFile(file);
            if (need_analysis)
            {
                file.UpdateAnalysis();
            }
            // 再添加,解析
            AddAnalysis(value);
        }