// 更新解析 public void UpdateAnalysis() { // 这个分支一般不会出现 // 如果没有在工程内,直接对file进行更新 if (m_project == null) { m_file.UpdateAnalysis(); return; } // 从工程中移除 m_project.RemoveAnalysis(this); // 更新解析 m_file.UpdateAnalysis(); // 在添加到工程中 m_project.AddAnalysis(this); }
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) { } } }
// 更新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); }