diff --git a/Source/Editor/CustomEditors/CustomEditorPresenter.cs b/Source/Editor/CustomEditors/CustomEditorPresenter.cs index ccf712904..c7832cfe1 100644 --- a/Source/Editor/CustomEditors/CustomEditorPresenter.cs +++ b/Source/Editor/CustomEditors/CustomEditorPresenter.cs @@ -343,6 +343,7 @@ namespace FlaxEditor.CustomEditors } private bool _buildOnUpdate; + private bool _initialized; private bool _readOnly; /// @@ -430,6 +431,7 @@ namespace FlaxEditor.CustomEditors ClearLayout(); _buildOnUpdate = false; + _initialized = true; Editor.Setup(this); Panel.IsLayoutLocked = false; @@ -506,7 +508,11 @@ namespace FlaxEditor.CustomEditors /// protected virtual void OnSelectionChanged() { - BuildLayout(); + // Defer building the layout after we have initialized to improve initial loading times + if (!_initialized) + _buildOnUpdate = true; + else + BuildLayout(); SelectionChanged?.Invoke(); } diff --git a/Source/Editor/Modules/SourceCodeEditing/CodeDocsModule.cs b/Source/Editor/Modules/SourceCodeEditing/CodeDocsModule.cs index 48cbda951..fe50e022f 100644 --- a/Source/Editor/Modules/SourceCodeEditing/CodeDocsModule.cs +++ b/Source/Editor/Modules/SourceCodeEditing/CodeDocsModule.cs @@ -310,6 +310,7 @@ namespace FlaxEditor.Modules.SourceCodeEditing using (var xmlReader = XmlReader.Create(new StreamReader(xmlFilePath))) { result = new Dictionary(); + StringBuilder content = new StringBuilder(2048); while (xmlReader.Read()) { if (xmlReader.NodeType == XmlNodeType.Element && string.Equals(xmlReader.Name, "member", StringComparison.Ordinal)) @@ -318,9 +319,39 @@ namespace FlaxEditor.Modules.SourceCodeEditing var memberReader = xmlReader.ReadSubtree(); if (memberReader.ReadToDescendant("summary")) { - // Remove and replace them with the captured group (the content of the cref). Additionally, getting rid of prefixes - const string crefPattern = @""; - result[rawName] = Regex.Replace(memberReader.ReadInnerXml(), crefPattern, "$1").Replace('\n', ' ').Trim(); + content.Clear(); + do + { + if (memberReader.NodeType == XmlNodeType.Element && memberReader.Read()) + { + while (memberReader.NodeType == XmlNodeType.Text) + { + content.Append(memberReader.Value); + if (memberReader.Read() && memberReader.NodeType == XmlNodeType.Element) + { + var nodeRef = TrimRef(memberReader.GetAttribute("cref")); // + if (nodeRef == null) + nodeRef = memberReader.GetAttribute("name"); // + content.Append(nodeRef); + memberReader.Read(); + + string TrimRef(string str) + { + if (str == null) + return null; + if (str.IndexOf(":FlaxEngine.") == 1) + return str.Substring("T:FlaxEngine.".Length); + return str.Substring("T:".Length); + } + } + } + } + + if (memberReader.NodeType == XmlNodeType.EndElement && memberReader.Name == "summary") + break; + } while (memberReader.Read()); + + result[rawName] = content.ToString().Trim(' ', '\r', '\n'); } } } @@ -343,7 +374,12 @@ namespace FlaxEditor.Modules.SourceCodeEditing { _typeCache.Clear(); _memberCache.Clear(); - _xmlCache.Clear(); + + foreach (var asm in _xmlCache.Keys.ToArray()) + { + if (asm.IsCollectible) + _xmlCache.Remove(asm); + } } ///