Browse Source

Fixed forum-7331: Deleting .cs code template group causes code completion to throw NullReferenceException

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2939 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 18 years ago
parent
commit
2d0d13aae7
  1. 6
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/CompletionWindow/CodeCompletionWindow.cs
  2. 8
      src/Main/Base/Project/Src/TextEditor/Gui/Dialogs/GotoDialog.cs
  3. 1
      src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/AbstractCompletionDataProvider.cs
  4. 2
      src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/AttributesDataProvider.cs
  5. 2
      src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CachedCompletionDataProvider.cs
  6. 4
      src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CtrlSpaceCompletionDataProvider.cs

6
src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/CompletionWindow/CodeCompletionWindow.cs

@ -320,7 +320,7 @@ namespace ICSharpCode.TextEditor.Gui.CompletionWindow
/// <param name="defaultWidth">The default width of the list view.</param> /// <param name="defaultWidth">The default width of the list view.</param>
/// <param name="height">The height of the list view. This is /// <param name="height">The height of the list view. This is
/// used to determine if the scrollbar is visible.</param> /// used to determine if the scrollbar is visible.</param>
/// <returns>The list view width to accommodate the longest completion /// <returns>The list view width to accommodate the longest completion
/// data text string; otherwise the default width.</returns> /// data text string; otherwise the default width.</returns>
int GetListViewWidth(int defaultWidth, int height) int GetListViewWidth(int defaultWidth, int height)
{ {
@ -337,8 +337,8 @@ namespace ICSharpCode.TextEditor.Gui.CompletionWindow
float totalItemsHeight = codeCompletionListView.ItemHeight * completionData.Length; float totalItemsHeight = codeCompletionListView.ItemHeight * completionData.Length;
if (totalItemsHeight > height) { if (totalItemsHeight > height) {
width += ScrollbarWidth; // Compensate for scroll bar. width += ScrollbarWidth; // Compensate for scroll bar.
} }
return (int)width; return (int)width;
} }
} }
} }

8
src/Main/Base/Project/Src/TextEditor/Gui/Dialogs/GotoDialog.cs

@ -101,9 +101,10 @@ namespace ICSharpCode.SharpDevelop.Gui
if (editor != null) { if (editor != null) {
CtrlSpaceCompletionDataProvider cdp = new CtrlSpaceCompletionDataProvider(ExpressionContext.Default); CtrlSpaceCompletionDataProvider cdp = new CtrlSpaceCompletionDataProvider(ExpressionContext.Default);
ctrlSpaceCompletionData = cdp.GenerateCompletionData(editor.FileName, editor.ActiveTextAreaControl.TextArea, '\0'); ctrlSpaceCompletionData = cdp.GenerateCompletionData(editor.FileName, editor.ActiveTextAreaControl.TextArea, '\0');
return ctrlSpaceCompletionData;
} }
return new ICompletionData[0]; if (ctrlSpaceCompletionData == null)
ctrlSpaceCompletionData = new ICompletionData[0];
return ctrlSpaceCompletionData;
} }
ICompletionData[] Resolve(string expression) ICompletionData[] Resolve(string expression)
@ -111,7 +112,8 @@ namespace ICSharpCode.SharpDevelop.Gui
TextEditorControl editor = GetEditor(); TextEditorControl editor = GetEditor();
if (editor != null) { if (editor != null) {
CodeCompletionDataProvider cdp = new CodeCompletionDataProvider(new ExpressionResult(expression)); CodeCompletionDataProvider cdp = new CodeCompletionDataProvider(new ExpressionResult(expression));
return cdp.GenerateCompletionData(editor.FileName, editor.ActiveTextAreaControl.TextArea, '.'); return cdp.GenerateCompletionData(editor.FileName, editor.ActiveTextAreaControl.TextArea, '.')
?? new ICompletionData[0];
} }
return new ICompletionData[0]; return new ICompletionData[0];
} }

1
src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/AbstractCompletionDataProvider.cs

@ -92,6 +92,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
/// <summary> /// <summary>
/// Generates the completion data. This method is called by the text editor control. /// Generates the completion data. This method is called by the text editor control.
/// This method may return null.
/// </summary> /// </summary>
public abstract ICompletionData[] GenerateCompletionData(string fileName, TextArea textArea, char charTyped); public abstract ICompletionData[] GenerateCompletionData(string fileName, TextArea textArea, char charTyped);
} }

2
src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/AttributesDataProvider.cs

@ -40,7 +40,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
public override ICompletionData[] GenerateCompletionData(string fileName, TextArea textArea, char charTyped) public override ICompletionData[] GenerateCompletionData(string fileName, TextArea textArea, char charTyped)
{ {
ICompletionData[] data = base.GenerateCompletionData(fileName, textArea, charTyped); ICompletionData[] data = base.GenerateCompletionData(fileName, textArea, charTyped);
if (removeAttributeSuffix) { if (removeAttributeSuffix && data != null) {
foreach (ICompletionData d in data) { foreach (ICompletionData d in data) {
if (d.Text.EndsWith("Attribute")) { if (d.Text.EndsWith("Attribute")) {
d.Text = d.Text.Substring(0, d.Text.Length - 9); d.Text = d.Text.Substring(0, d.Text.Length - 9);

2
src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CachedCompletionDataProvider.cs

@ -51,7 +51,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
public override ICompletionData[] GenerateCompletionData(string fileName, TextArea textArea, char charTyped) public override ICompletionData[] GenerateCompletionData(string fileName, TextArea textArea, char charTyped)
{ {
if (completionData == null) { if (completionData == null) {
completionData = baseProvider.GenerateCompletionData(fileName, textArea, charTyped); completionData = baseProvider.GenerateCompletionData(fileName, textArea, charTyped) ?? new ICompletionData[0];
preSelection = baseProvider.PreSelection; preSelection = baseProvider.PreSelection;
this.DefaultIndex = baseProvider.DefaultIndex; this.DefaultIndex = baseProvider.DefaultIndex;
} }

4
src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CtrlSpaceCompletionDataProvider.cs

@ -49,6 +49,8 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
return; return;
ICompletionData suggestedData = DefaultIndex >= 0 ? completionData[DefaultIndex] : null; ICompletionData suggestedData = DefaultIndex >= 0 ? completionData[DefaultIndex] : null;
ICompletionData[] templateCompletionData = new TemplateCompletionDataProvider().GenerateCompletionData(fileName, textArea, charTyped); ICompletionData[] templateCompletionData = new TemplateCompletionDataProvider().GenerateCompletionData(fileName, textArea, charTyped);
if (templateCompletionData == null || templateCompletionData.Length == 0)
return;
for (int i = 0; i < completionData.Count; i++) { for (int i = 0; i < completionData.Count; i++) {
if (completionData[i].ImageIndex == ClassBrowserIconService.KeywordIndex) { if (completionData[i].ImageIndex == ClassBrowserIconService.KeywordIndex) {
string text = completionData[i].Text; string text = completionData[i].Text;
@ -101,6 +103,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
preSelection = null; preSelection = null;
} }
AddResolveResults(ParserService.CtrlSpace(caretLineNumber, caretColumn, fileName, textArea.Document.TextContent, expressionResult.Context), expressionResult.Context); AddResolveResults(ParserService.CtrlSpace(caretLineNumber, caretColumn, fileName, textArea.Document.TextContent, expressionResult.Context), expressionResult.Context);
AddTemplates(textArea, charTyped);
return; return;
} }
@ -119,6 +122,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
} }
ArrayList results = ParserService.CtrlSpace(caretLineNumber, caretColumn, fileName, textArea.Document.TextContent, expressionResult.Context); ArrayList results = ParserService.CtrlSpace(caretLineNumber, caretColumn, fileName, textArea.Document.TextContent, expressionResult.Context);
AddResolveResults(results, expressionResult.Context); AddResolveResults(results, expressionResult.Context);
AddTemplates(textArea, charTyped);
} }
} }
} }

Loading…
Cancel
Save