protected void AddRelay(ABnfElement element) { if (element == null) { return; } var full_path = element.GetFullPath(); if (full_path == m_file_path) { return; } if (ALittleScriptUtility.IsRegister(element)) { return; } if (m_is_define_relay) { if (!m_define_rely.Contains(full_path)) { m_define_rely.Add(full_path); } return; } if (!m_run_rely.Contains(full_path)) { m_run_rely.Add(full_path); } }
public override string FastGoto(ALanguageServer server, Dictionary <string, ProjectInfo> projects, string text) { // 按::切割 char[] sy = { ':', '.' }; string[] split = text.Split(sy); var temp_split = new List <string>(); foreach (var c in split) { if (c != "") { temp_split.Add(c); } } if (temp_split.Count == 0) { return(null); } var package = ""; string name = temp_split[temp_split.Count - 1]; temp_split.RemoveAt(temp_split.Count - 1); package = string.Join(".", temp_split); ABnfElement element = null; // 获取所有工程 foreach (var pair in projects) { if (GeneralOptions.Instance.ProjectTeam == ProjectTeamTypes.LW) { if (name.EndsWith("_struct")) { name = name.Substring(0, name.Length - "_struct".Length); } else if (name.EndsWith("_dirty")) { name = name.Substring(0, name.Length - "_dirty".Length); } } var project = pair.Value as AProtobufProjectInfo; if (project == null) { continue; } if (package == "") { element = project.FindElementInAllPackage(name); if (element != null) { break; } } else { element = project.FindElement(package, name); if (element != null) { break; } } } // 把package当做 enum枚举名,name当做枚举项名 if (element == null) { if (temp_split.Count == 1 || temp_split.Count == 2) { foreach (var pair in projects) { var project = pair.Value as AProtobufProjectInfo; if (project == null) { continue; } if (temp_split.Count == 1) { element = project.FindElementInAllPackage(temp_split[0]); if (element != null) { break; } } else if (temp_split.Count == 2) { element = project.FindElement(temp_split[0], temp_split[1]); if (element != null) { break; } } } } else if (GeneralOptions.Instance.ProjectTeam == ProjectTeamTypes.LW && temp_split.Count == 0) { if (name.EndsWith("_struct") || name.EndsWith("_dirty")) { var sub_name = name; if (sub_name.EndsWith("_struct")) { sub_name = sub_name.Substring(0, sub_name.Length - "_struct".Length); } else if (sub_name.EndsWith("_dirty")) { sub_name = sub_name.Substring(0, sub_name.Length - "_dirty".Length); } foreach (var pair in projects) { var project = pair.Value as AProtobufProjectInfo; if (project == null) { continue; } element = project.FindElementInAllPackage(sub_name); if (element != null) { break; } } } if (element == null) { foreach (var pair in projects) { var project = pair.Value as AProtobufProjectInfo; if (project == null) { continue; } element = project.FindElementInAllPackage(name); if (element != null) { break; } } } if (element == null) { foreach (var pair in projects) { var project = pair.Value as AProtobufProjectInfo; if (project == null) { continue; } element = project.FindElement("", "EMsgErrorCode"); if (element != null) { break; } } } } if (element is AProtobufEnumElement) { var body_dec = (element as AProtobufEnumElement).GetEnumBody(); if (body_dec != null) { foreach (var pair in body_dec.GetEnumVarList()) { if (pair.GetEnumVarName().GetElementText() == name) { element = pair.GetEnumVarName(); break; } } } } } if (element == null) { return("找不到在包(" + package + ")的协议或枚举(" + name + ")"); } if (element is AProtobufMessageElement) { element = (element as AProtobufMessageElement).GetMessageName(); } else if (element is AProtobufEnumElement) { element = (element as AProtobufEnumElement).GetEnumName(); } string full_path = element.GetFullPath(); int start = element.GetStart(); int length = element.GetLength(); Application.Current.Dispatcher.Invoke(() => { ALanguageUtility.OpenFile(m_open_document, m_adapters_factory , full_path, start, length); }); return(null); }