From a976bd75529d961cd391542bc6ced5ab83f40f6f Mon Sep 17 00:00:00 2001 From: Matt Parker <61717342+MattParkerDev@users.noreply.github.com> Date: Wed, 12 Nov 2025 00:03:55 +1000 Subject: [PATCH] temporarily fix completions --- src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit.cs | 7 ++++--- .../Features/Problems/RefCountedContainer.cs | 5 +++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit.cs b/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit.cs index 77f172c..e337500 100644 --- a/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit.cs +++ b/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit.cs @@ -500,7 +500,7 @@ public partial class SharpIdeCodeEdit : CodeEdit var selectedIndex = GetCodeCompletionSelectedIndex(); var selectedText = GetCodeCompletionOption(selectedIndex); if (selectedText is null) return; - var completionItem = selectedText["default_value"].As>().Item; + var completionItem = selectedText["default_value"].As>().Item; _ = Task.GodotRun(async () => { await _ideApplyCompletionService.ApplyCompletion(_currentFile, completionItem.CompletionItem, completionItem.Document); @@ -519,7 +519,7 @@ public partial class SharpIdeCodeEdit : CodeEdit var linePos = new LinePosition(caretLine, caretColumn); var completionsResult = await _roslynAnalysis.GetCodeCompletionsForDocumentAtPosition(_currentFile, linePos); - var completionOptions = new List<(CodeCompletionKind kind, string displayText, Texture2D? icon, RefCountedContainer refCountedContainer)>(completionsResult.CompletionList.ItemsList.Count); + var completionOptions = new List<(CodeCompletionKind kind, string displayText, Texture2D? icon, GodotObjectContainer refCountedContainer)>(completionsResult.CompletionList.ItemsList.Count); foreach (var completionItem in completionsResult.CompletionList.ItemsList) { @@ -546,7 +546,8 @@ public partial class SharpIdeCodeEdit : CodeEdit if (symbolKind is null && (isMethod || isExtensionMethod)) symbolKind = SymbolKind.Method; var icon = GetIconForCompletion(symbolKind, typeKind, accessibilityModifier, isKeyword); var ideItem = new IdeCompletionItem(completionItem, completionsResult.Document); - var refContainer = new RefCountedContainer(ideItem); + // TODO: This is a GodotObjectContainer to avoid errors with the RefCountedContainer?? But the workaround 100% causes a memory leak as these are never freed, unlike RefCounted. Do this better + var refContainer = new GodotObjectContainer(ideItem); completionOptions.Add((godotCompletionType, completionItem.DisplayText, icon, refContainer)); } diff --git a/src/SharpIDE.Godot/Features/Problems/RefCountedContainer.cs b/src/SharpIDE.Godot/Features/Problems/RefCountedContainer.cs index 84b0067..3783c73 100644 --- a/src/SharpIDE.Godot/Features/Problems/RefCountedContainer.cs +++ b/src/SharpIDE.Godot/Features/Problems/RefCountedContainer.cs @@ -6,3 +6,8 @@ public partial class RefCountedContainer(T item) : RefCounted { public T Item { get; } = item; } + +public partial class GodotObjectContainer(T item) : GodotObject +{ + public T Item { get; } = item; +}