diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpCompletionBinding.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpCompletionBinding.cs index 232168408b..19d96d51ea 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpCompletionBinding.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpCompletionBinding.cs @@ -101,7 +101,7 @@ namespace CSharpBinding ExpressionResult result = ef.FindExpression(editor.Text, cursor); LoggingService.Debug("CC: Beginning to type a word, result=" + result); if (result.Context != ExpressionContext.IdentifierExpected) { - editor.ShowCompletionWindow(new CtrlSpaceCompletionDataProvider(result.Context), '\0'); + editor.ShowCompletionWindow(new CtrlSpaceCompletionDataProvider(result.Context) { ShowTemplates = true }, '\0'); } } } diff --git a/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/DynamicHelpPad.cs b/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/DynamicHelpPad.cs index 2727e8e9e1..e18d128b3d 100644 --- a/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/DynamicHelpPad.cs +++ b/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/DynamicHelpPad.cs @@ -38,7 +38,7 @@ namespace HtmlHelp2 public class HtmlHelp2DynamicHelpPad : AbstractPadContent { HtmlHelp2DynamicHelpBrowserControl dynamicHelpBrowser; - private StringCollection dynamicHelpTerms = new StringCollection(); + private List dynamicHelpTerms = new List(); private TextLocation lastPoint = TextLocation.Empty; private string debugPreElement = String.Empty; private bool enableDebugInfo = HtmlHelp2Environment.Config.DynamicHelpDebugInfos; @@ -154,9 +154,13 @@ namespace HtmlHelp2 #region Taken from DefinitionView.cs private void UpdateTick(object sender, ParserUpdateStepEventArgs e) + { + WorkbenchSingleton.SafeThreadAsyncCall(UpdateTick, e); + } + + void UpdateTick(ParserUpdateStepEventArgs e) { this.dynamicHelpTerms.Clear(); - ResolveResult res = ResolveAtCaret(e); if (res == null) return; @@ -187,7 +191,7 @@ namespace HtmlHelp2 this.AddToStringCollection(0, types.ResolvedClass.FullyQualifiedName); } - WorkbenchSingleton.SafeThreadAsyncCall(BuildDynamicHelpList); + BuildDynamicHelpList(); } private ResolveResult ResolveAtCaret(ParserUpdateStepEventArgs e) diff --git a/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs b/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs index bc8eed1c2d..45ddd830b0 100644 --- a/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs +++ b/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs @@ -144,7 +144,7 @@ namespace ICSharpCode.SharpDevelop.Gui public IWorkbenchWindow ActiveWorkbenchWindow { get { - WorkbenchSingleton.DebugAssertMainThread(); + WorkbenchSingleton.AssertMainThread(); return activeWorkbenchWindow; } private set { @@ -187,7 +187,7 @@ namespace ICSharpCode.SharpDevelop.Gui /// public IViewContent ActiveViewContent { get { - WorkbenchSingleton.DebugAssertMainThread(); + WorkbenchSingleton.AssertMainThread(); return activeViewContent; } private set { diff --git a/src/Main/Base/Project/Src/Project/BuildEngine.cs b/src/Main/Base/Project/Src/Project/BuildEngine.cs index 1b47cea484..a73fa0677b 100644 --- a/src/Main/Base/Project/Src/Project/BuildEngine.cs +++ b/src/Main/Base/Project/Src/Project/BuildEngine.cs @@ -27,7 +27,7 @@ namespace ICSharpCode.SharpDevelop.Project public static void BuildInGui(IBuildable project, BuildOptions options) { - WorkbenchSingleton.DebugAssertMainThread(); + WorkbenchSingleton.AssertMainThread(); if (guiBuildProgressMonitor != null) { BuildResults results = new BuildResults(); results.Add(new BuildError(null, Core.ResourceService.GetString("MainWindow.CompilerMessages.MSBuildAlreadyRunning"))); @@ -44,14 +44,14 @@ namespace ICSharpCode.SharpDevelop.Project public static bool IsGuiBuildRunning { get { - WorkbenchSingleton.DebugAssertMainThread(); + WorkbenchSingleton.AssertMainThread(); return guiBuildProgressMonitor != null; } } public static void CancelGuiBuild() { - WorkbenchSingleton.DebugAssertMainThread(); + WorkbenchSingleton.AssertMainThread(); if (guiBuildProgressMonitor != null) { guiBuildProgressMonitor.Cancel(); } diff --git a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/AbstractCompletionDataProvider.cs b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/AbstractCompletionDataProvider.cs index d1ff254404..49ccd4ea78 100644 --- a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/AbstractCompletionDataProvider.cs +++ b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/AbstractCompletionDataProvider.cs @@ -167,7 +167,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor } } if (suggestedData != null) { - completionData.Sort(); + completionData.Sort(DefaultCompletionData.Compare); this.DefaultIndex = completionData.IndexOf(suggestedData); } } diff --git a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CtrlSpaceCompletionDataProvider.cs b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CtrlSpaceCompletionDataProvider.cs index 450e93ee81..06b770520f 100644 --- a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CtrlSpaceCompletionDataProvider.cs +++ b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CtrlSpaceCompletionDataProvider.cs @@ -38,6 +38,40 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor set { allowCompleteExistingExpression = value; } } + /// + /// Gets/Sets whether code templates should be included in code completion. + /// + public bool ShowTemplates { get; set; } + + void AddTemplates(TextArea textArea, char charTyped) + { + if (!ShowTemplates) + return; + ICompletionData suggestedData = DefaultIndex >= 0 ? completionData[DefaultIndex] : null; + ICompletionData[] templateCompletionData = new TemplateCompletionDataProvider().GenerateCompletionData(fileName, textArea, charTyped); + for (int i = 0; i < completionData.Count; i++) { + if (completionData[i].ImageIndex == ClassBrowserIconService.KeywordIndex) { + string text = completionData[i].Text; + for (int j = 0; j < templateCompletionData.Length; j++) { + if (templateCompletionData[j] != null && templateCompletionData[j].Text == text) { + // replace keyword with template + completionData[i] = templateCompletionData[j]; + templateCompletionData[j] = null; + } + } + } + } + // add non-keyword code templates + for (int j = 0; j < templateCompletionData.Length; j++) { + if (templateCompletionData[j] != null) + completionData.Add(templateCompletionData[j]); + } + if (suggestedData != null) { + completionData.Sort(DefaultCompletionData.Compare); + DefaultIndex = completionData.IndexOf(suggestedData); + } + } + protected override void GenerateCompletionData(TextArea textArea, char charTyped) { #if DEBUG @@ -53,24 +87,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor } ExpressionContext context = overrideContext ?? ExpressionContext.Default; AddResolveResults(ParserService.CtrlSpace(caretLineNumber, caretColumn, fileName, textArea.Document.TextContent, context), context); - ICompletionData[] templateCompletionData = new TemplateCompletionDataProvider().GenerateCompletionData(fileName, textArea, charTyped); - for (int i = 0; i < completionData.Count; i++) { - if (completionData[i].ImageIndex == ClassBrowserIconService.KeywordIndex) { - string text = completionData[i].Text; - for (int j = 0; j < templateCompletionData.Length; j++) { - if (templateCompletionData[j] != null && templateCompletionData[j].Text == text) { - // replace keyword with template - completionData[i] = templateCompletionData[j]; - templateCompletionData[j] = null; - } - } - } - } - // add non-keyword code templates - for (int j = 0; j < templateCompletionData.Length; j++) { - if (templateCompletionData[j] != null) - completionData.Add(templateCompletionData[j]); - } + AddTemplates(textArea, charTyped); return; }