Browse Source

Fixed some bugs in code completion and error drawing.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@122 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
42b4743835
  1. 2
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs
  2. 2
      src/Main/Base/Project/Src/Services/ParserService/CaseSensitiveProjectContent.cs
  3. 11
      src/Main/Base/Project/Src/Services/Tasks/TaskService.cs
  4. 128
      src/Main/Base/Project/Src/TextEditor/Gui/Editor/ErrorDrawer.cs
  5. 2
      src/Main/Base/Project/Src/TextEditor/Gui/Editor/InsightWindow/IndexerInsightDataProvider.cs
  6. 1
      src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextAreaControl.cs

2
src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs

@ -739,7 +739,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -739,7 +739,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
}
result.AddRange(projectContent.GetNamespaceContents(""));
foreach (IUsing u in cu.Usings) {
if (u != null && (u.Region == null || u.Region.IsInside(caretLine, caretColumn))) {
if (u != null) {
foreach (string name in u.Usings) {
result.AddRange(projectContent.GetNamespaceContents(name));
}

2
src/Main/Base/Project/Src/Services/ParserService/CaseSensitiveProjectContent.cs

@ -318,7 +318,7 @@ namespace ICSharpCode.Core @@ -318,7 +318,7 @@ namespace ICSharpCode.Core
}
foreach (IUsing u in unit.Usings) {
if (u != null && (u.Region == null || u.Region.IsInside(caretLine, caretColumn))) {
if (u != null) {
string nameSpace = u.SearchNamespace(name);
if (nameSpace != null) {
return nameSpace;

11
src/Main/Base/Project/Src/Services/Tasks/TaskService.cs

@ -177,15 +177,14 @@ namespace ICSharpCode.Core @@ -177,15 +177,14 @@ namespace ICSharpCode.Core
for (int i = 0; i < newTasks.Count; ++i) {
for (int j = 0; j < oldTasks.Count; ++j) {
if (newTasks[i].Line == oldTasks[j].Line &&
if (oldTasks[j] != null &&
newTasks[i].Line == oldTasks[j].Line &&
newTasks[i].Column == oldTasks[j].Column &&
newTasks[i].Description == oldTasks[j].Description) {
newTasks[i].Description == oldTasks[j].Description)
{
newTasks[i] = null;
oldTasks[j] = null;
++i;
if (i >= newTasks.Count) {
break;
}
break;
}
}
}

128
src/Main/Base/Project/Src/TextEditor/Gui/Editor/ErrorDrawer.cs

@ -24,16 +24,26 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor @@ -24,16 +24,26 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
/// </summary>
public class VisualError : TextMarker
{
public VisualError(int offset, int length, string description, bool isError) : base(offset, length, TextMarkerType.WaveLine, isError ? Color.Red : Color.Orange)
Task task;
public Task Task {
get {
return task;
}
}
public VisualError(int offset, int length, Task task)
: base(offset, length, TextMarkerType.WaveLine, (task.TaskType == TaskType.Error) ? Color.Red : Color.Orange)
{
base.ToolTip = description.Replace("&", "&&&");
this.task = task;
base.ToolTip = task.Description.Replace("&", "&&&");
}
}
/// <summary>
/// This class draws error underlines.
/// </summary>
public class ErrorDrawer
public class ErrorDrawer : IDisposable
{
ArrayList errors = new ArrayList();
TextEditorControl textEditor;
@ -42,55 +52,111 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor @@ -42,55 +52,111 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
{
this.textEditor = textEditor;
// TODO: Tasks Changed!!!
// TaskService.TasksChanged += new EventHandler(SetErrors);
TaskService.Added += new TaskEventHandler(OnAdded);
TaskService.Removed += new TaskEventHandler(OnRemoved);
TaskService.Cleared += new EventHandler(OnCleared);
textEditor.FileNameChanged += new EventHandler(SetErrors);
}
void ClearErrors()
/// <summary>
/// Deregisters the event handlers so the error drawer (and associated TextEditorControl)
/// can be garbage collected.
/// </summary>
public void Dispose()
{
TaskService.Added -= new TaskEventHandler(OnAdded);
TaskService.Removed -= new TaskEventHandler(OnRemoved);
TaskService.Cleared -= new EventHandler(OnCleared);
textEditor.FileNameChanged -= new EventHandler(SetErrors);
ClearErrors();
}
void OnAdded(object sender, TaskEventArgs e)
{
AddTask(e.Task, true);
}
void OnRemoved(object sender, TaskEventArgs e)
{
Task t = e.Task;
List<TextMarker> markers = textEditor.Document.MarkerStrategy.TextMarker;
for (int i = 0; i < markers.Count; ++i) {
VisualError ve = markers[i] as VisualError;
if (ve != null && ve.Task == t) {
markers.RemoveAt(i);
textEditor.Refresh();
break;
}
}
}
void OnCleared(object sender, EventArgs e)
{
if (ClearErrors()) {
textEditor.Refresh();
}
}
/// <summary>
/// Clears all TextMarkers representing errors.
/// </summary>
/// <returns>Returns true when there were markers deleted, false when there were no error markers.</returns>
bool ClearErrors()
{
bool removed = false;
List<TextMarker> markers = textEditor.Document.MarkerStrategy.TextMarker;
for (int i = 0; i < markers.Count;) {
if (markers[i] is VisualError) {
removed = true;
markers.RemoveAt(i);
} else {
i++; // Check next one
}
}
return removed;
}
void SetErrors(object sender, EventArgs e)
bool CheckTask(Task task)
{
ClearErrors();
if (textEditor.FileName == null) {
return;
}
foreach (Task task in TaskService.Tasks) {
if (task.FileName == null || task.FileName.Length == 0 || task.Column < 0) {
continue;
}
if (Path.GetFullPath(task.FileName).ToLower() == Path.GetFullPath(textEditor.FileName).ToLower() && (task.TaskType == TaskType.Warning || task.TaskType == TaskType.Error)) {
if (task.Line >= 0 && task.Line < textEditor.Document.TotalNumberOfLines) {
LineSegment line = textEditor.Document.GetLineSegment(task.Line);
if (line.Words != null) {
int offset = line.Offset + task.Column;
foreach (TextWord tw in line.Words) {
if (task.Column >= tw.Offset && task.Column < (tw.Offset + tw.Length)) {
textEditor.Document.MarkerStrategy.TextMarker.Add(new VisualError(offset, tw.Length, task.Description, task.TaskType == TaskType.Error));
break;
}
if (textEditor.FileName == null)
return false;
if (task.FileName == null || task.FileName.Length == 0 || task.Column < 0)
return false;
if (task.TaskType != TaskType.Warning && task.TaskType != TaskType.Error)
return false;
return string.Equals(Path.GetFullPath(task.FileName), Path.GetFullPath(textEditor.FileName), StringComparison.CurrentCultureIgnoreCase);
}
void AddTask(Task task, bool refresh)
{
if (!CheckTask(task)) return;
if (task.Line >= 0 && task.Line < textEditor.Document.TotalNumberOfLines) {
LineSegment line = textEditor.Document.GetLineSegment(task.Line);
if (line.Words != null) {
int offset = line.Offset + task.Column;
foreach (TextWord tw in line.Words) {
if (task.Column >= tw.Offset && task.Column < (tw.Offset + tw.Length)) {
textEditor.Document.MarkerStrategy.TextMarker.Add(new VisualError(offset, tw.Length, task));
if (refresh) {
textEditor.Refresh();
}
return;
}
/*
}
}
/*
int startOffset = offset;//Math.Min(textEditor.Document.TextLength, TextUtilities.FindWordStart(textEditor.Document, offset));
int endOffset = Math.Max(1, TextUtilities.FindWordEnd(textEditor.Document, offset));
textEditor.Document.MarkerStrategy.TextMarker.Add(new VisualError(startOffset, endOffset - startOffset + 1, task.Description, task.TaskType == TaskType.Error));*/
}
}
}
}
void SetErrors(object sender, EventArgs e)
{
ClearErrors();
foreach (Task task in TaskService.Tasks) {
AddTask(task, false);
}
textEditor.Refresh();
}
}

2
src/Main/Base/Project/Src/TextEditor/Gui/Editor/InsightWindow/IndexerInsightDataProvider.cs

@ -75,9 +75,9 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor @@ -75,9 +75,9 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
if (projectContent == null)
return;
IClass c = projectContent.GetClass(type.FullyQualifiedName);
bool canViewProtected = c.IsTypeInInheritanceTree(result.CallingClass);
if (c == null)
return;
bool canViewProtected = c.IsTypeInInheritanceTree(result.CallingClass);
foreach (IIndexer i in c.Indexer) {
if (i.IsAccessible(result.CallingClass, canViewProtected)) {
methods.Add(i);

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

@ -92,6 +92,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor @@ -92,6 +92,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
{
base.Dispose(Disposing);
if (disposing) {
errorDrawer.Dispose();
CloseCodeCompletionWindow(this, EventArgs.Empty);
CloseInsightWindow(this, EventArgs.Empty);
}

Loading…
Cancel
Save