diff --git a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs index 4f3357baa7..eb46e309ef 100644 --- a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs +++ b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs @@ -699,34 +699,16 @@ namespace ICSharpCode.NRefactory.CSharp.Completion } } - string cachedText = null; +// string cachedText = null; protected virtual void Reset () { - cachedText = null; +// cachedText = null; } protected Tuple GetMemberTextToCaret() { - int startOffset; - if (currentMember != null && currentType != null && currentType.Kind != TypeKind.Enum) { - startOffset = document.GetOffset(currentMember.Region.Begin); - } else if (currentType != null) { - startOffset = document.GetOffset(currentType.Region.Begin); - } else { - startOffset = 0; - } - while (startOffset > 0) { - char ch = document.GetCharAt(startOffset - 1); - if (ch != ' ' && ch != '\t') { - break; - } - --startOffset; - } - if (cachedText == null) - cachedText = document.GetText (startOffset, offset - startOffset); - - return Tuple.Create (cachedText, document.GetLocation (startOffset)); + return MemberProvider.GetMemberTextToCaret(offset, currentType, currentMember); } protected ExpressionResult GetInvocationBeforeCursor(bool afterBracket) diff --git a/ICSharpCode.NRefactory.CSharp/Completion/IMemberProvider.cs b/ICSharpCode.NRefactory.CSharp/Completion/IMemberProvider.cs index e41a006695..fddc43846e 100644 --- a/ICSharpCode.NRefactory.CSharp/Completion/IMemberProvider.cs +++ b/ICSharpCode.NRefactory.CSharp/Completion/IMemberProvider.cs @@ -35,6 +35,8 @@ namespace ICSharpCode.NRefactory.CSharp.Completion public interface IMemberProvider { void GetCurrentMembers (int offset, out IUnresolvedTypeDefinition currentType, out IUnresolvedMember currentMember); + + Tuple GetMemberTextToCaret(int caretOffset, IUnresolvedTypeDefinition currentType, IUnresolvedMember currentMember); } public class DefaultMemberProvider : IMemberProvider @@ -159,6 +161,29 @@ namespace ICSharpCode.NRefactory.CSharp.Completion } return bracketStack.Any (t => t == '{'); } + + public Tuple GetMemberTextToCaret(int caretOffset, IUnresolvedTypeDefinition currentType, IUnresolvedMember currentMember) + { + int startOffset; + if (currentMember != null && currentType != null && currentType.Kind != TypeKind.Enum) { + startOffset = document.GetOffset(currentMember.Region.Begin); + } else if (currentType != null) { + startOffset = document.GetOffset(currentType.Region.Begin); + } else { + startOffset = 0; + } + while (startOffset > 0) { + char ch = document.GetCharAt(startOffset - 1); + if (ch != ' ' && ch != '\t') { + break; + } + --startOffset; + } + + return Tuple.Create (document.GetText (startOffset, caretOffset - startOffset), document.GetLocation (startOffset)); + } + + } }