diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj b/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj
index dbe11efa3e..9b8b82d568 100644
--- a/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj
+++ b/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj
@@ -61,7 +61,6 @@
-
diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Resources/CSharp-Semantic.xshd b/src/AddIns/BackendBindings/CSharpBinding/Project/Resources/CSharp-Semantic.xshd
index ca2c3f407a..e17dae7ade 100644
--- a/src/AddIns/BackendBindings/CSharpBinding/Project/Resources/CSharp-Semantic.xshd
+++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Resources/CSharp-Semantic.xshd
@@ -31,7 +31,7 @@
-
+
diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpAdvancedHighlighter.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpAdvancedHighlighter.cs
deleted file mode 100644
index dba086bf89..0000000000
--- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpAdvancedHighlighter.cs
+++ /dev/null
@@ -1,145 +0,0 @@
-// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
-// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
-
-/*
-using System;
-using System.Collections.Generic;
-using System.Drawing;
-using System.Diagnostics;
-using ICSharpCode.SharpDevelop.Dom.CSharp;
-using ICSharpCode.Core;
-using ICSharpCode.SharpDevelop;
-using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
-using ICSharpCode.SharpDevelop.Dom;
-using ICSharpCode.SharpDevelop.Gui;
-using ICSharpCode.TextEditor;
-using ICSharpCode.TextEditor.Document;
-
-namespace CSharpBinding
-{
- public class CSharpAdvancedHighlighter : AsynchronousAdvancedHighlighter
- {
- public override void Initialize(TextEditorControl textEditor)
- {
- base.Initialize(textEditor);
- ParserService.ParserUpdateStepFinished += OnUpdateStep;
- }
-
- public override void Dispose()
- {
- ParserService.ParserUpdateStepFinished -= OnUpdateStep;
- base.Dispose();
- }
-
- void OnUpdateStep(object sender, ParserUpdateStepEventArgs e)
- {
- if (FileUtility.IsEqualFileName(e.FileName, this.TextEditor.FileName)) {
- ParseInformation parseInfo = e.ParseInformation;
-// if (parseInfo == null && this.storedParseInformation)
-// parseInfo = ParserService.GetParseInformation(this.TextEditor.FileName);
-// if (parseInfo != null) {
-// ICompilationUnit cu = parseInfo.MostRecentCompilationUnit;
-// }
- WorkbenchSingleton.SafeThreadAsyncCall(MarkOutstanding);
- }
- }
-
- static bool IsInMultilineCommentOrStringLiteral(LineSegment line)
- {
- if (line.HighlightSpanStack == null || line.HighlightSpanStack.IsEmpty) {
- return false;
- }
- return !line.HighlightSpanStack.Peek().StopEOL;
- }
-
- protected override void MarkWords(int lineNumber, LineSegment currentLine, List words)
- {
- if (IsInMultilineCommentOrStringLiteral(currentLine)) {
- return;
- }
- ParseInformation parseInfo = ParserService.GetParseInformation(this.TextEditor.FileName);
- if (parseInfo == null) return;
-
- CSharpExpressionFinder finder = new CSharpExpressionFinder(parseInfo);
- Func findExpressionMethod;
- IClass callingClass = parseInfo.MostRecentCompilationUnit.GetInnermostClass(lineNumber, 0);
- if (callingClass != null) {
- if (GetCurrentMember(callingClass, lineNumber, 0) != null) {
- findExpressionMethod = finder.FindFullExpressionInMethod;
- } else {
- findExpressionMethod = finder.FindFullExpressionInTypeDeclaration;
- }
- } else {
- findExpressionMethod = finder.FindFullExpression;
- }
-
- string lineText = this.Document.GetText(currentLine.Offset, currentLine.Length);
- bool changedLine = false;
- // now go through the word list:
- foreach (TextWord word in words) {
- if (word.IsWhiteSpace) continue;
- if (char.IsLetter(lineText[word.Offset]) || lineText[word.Offset] == '_') {
- ExpressionResult result = findExpressionMethod(lineText, word.Offset);
- if (result.Expression != null) {
- // result.Expression
- if (ICSharpCode.NRefactory.Parser.CSharp.Keywords.IsNonIdentifierKeyword(result.Expression))
- continue;
- // convert text editor to DOM coordinates:
- resolveCount++;
- ResolveResult rr = ParserService.Resolve(result, lineNumber + 1, word.Offset + 1, this.TextEditor.FileName, this.TextEditor.Text);
- if (rr is MixedResolveResult || rr is TypeResolveResult) {
- changedLine = true;
- word.SyntaxColor = this.Document.HighlightingStrategy.GetColorFor("TypeReference");
- } else if (rr == null) {
- changedLine = true;
- word.SyntaxColor = this.Document.HighlightingStrategy.GetColorFor("UnknownEntity");
- }
- }
- }
- }
-
- if (markingOutstanding && changedLine) {
- this.Document.RequestUpdate(new TextAreaUpdate(TextAreaUpdateType.SingleLine, lineNumber));
- }
- }
-
- static IMember GetCurrentMember(IClass callingClass, int caretLine, int caretColumn)
- {
- if (callingClass == null)
- return null;
- foreach (IMethod method in callingClass.Methods) {
- if (method.Region.IsInside(caretLine, caretColumn) || method.BodyRegion.IsInside(caretLine, caretColumn)) {
- return method;
- }
- }
- foreach (IProperty property in callingClass.Properties) {
- if (property.Region.IsInside(caretLine, caretColumn) || property.BodyRegion.IsInside(caretLine, caretColumn)) {
- return property;
- }
- }
- return null;
- }
-
- bool markingOutstanding;
- int resolveCount;
-
- protected override void MarkOutstanding()
- {
- #if DEBUG
- int time = Environment.TickCount;
- #endif
- markingOutstanding = true;
- resolveCount = 0;
- base.MarkOutstanding();
- markingOutstanding = false;
- #if DEBUG
- time = Environment.TickCount - time;
- if (time > 0) {
- LoggingService.Info("CSharpHighlighter took " + time + "ms for " + resolveCount + " resolves");
- }
- #endif
- this.Document.CommitUpdate();
- }
- }
-}
-*/
diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs
index 7bf746c3dc..31f8e1536a 100644
--- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs
+++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs
@@ -34,7 +34,7 @@ namespace CSharpBinding
this.editor = editor;
ISyntaxHighlighter highlighter = editor.GetService(typeof(ISyntaxHighlighter)) as ISyntaxHighlighter;
if (highlighter != null) {
- semanticHighlighter = new CSharpSemanticHighlighter(editor, highlighter.HighlightingDefinition);
+ semanticHighlighter = new CSharpSemanticHighlighter(editor, highlighter);
highlighter.AddAdditionalHighlighter(semanticHighlighter);
}
}
@@ -44,6 +44,7 @@ namespace CSharpBinding
ISyntaxHighlighter highlighter = editor.GetService(typeof(ISyntaxHighlighter)) as ISyntaxHighlighter;
if (highlighter != null) {
highlighter.RemoveAdditionalHighlighter(semanticHighlighter);
+ semanticHighlighter.Dispose();
semanticHighlighter = null;
}
this.editor = null;
diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpSemanticHighlighter.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpSemanticHighlighter.cs
index 5cbf975504..080676edbf 100644
--- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpSemanticHighlighter.cs
+++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpSemanticHighlighter.cs
@@ -4,8 +4,7 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
-using System.Linq;
-using System.Threading.Tasks;
+
using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.CSharp;
@@ -21,34 +20,66 @@ namespace CSharpBinding
///
/// Semantic highlighting for C#.
///
- public class CSharpSemanticHighlighter : DepthFirstAstVisitor