diff --git a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs index dd7a147ab4..36ddcfc6e6 100644 --- a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs +++ b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs @@ -1980,6 +1980,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion case "internal": case "sealed": case "override": + case "partial": case "async": declarationBegin = j; break; diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs index 5871e9f3d4..c0f36908ac 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs @@ -138,6 +138,19 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion } } + public class OverrideCompletionData : CompletionData + { + public int DeclarationBegin { + get; + set; + } + + public OverrideCompletionData (string text, int declarationBegin) : base(text) + { + this.DeclarationBegin = declarationBegin; + } + } + public class EntityCompletionData : CompletionData, IEntityCompletionData { #region IEntityCompletionData implementation @@ -237,12 +250,12 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion public ICompletionData CreateNewOverrideCompletionData (int declarationBegin, ICSharpCode.NRefactory.TypeSystem.IUnresolvedTypeDefinition type, ICSharpCode.NRefactory.TypeSystem.IMember m) { - return new CompletionData (m.Name); + return new OverrideCompletionData (m.Name, declarationBegin); } public ICompletionData CreateNewPartialCompletionData (int declarationBegin, IUnresolvedTypeDefinition type, IUnresolvedMember m) { - return new CompletionData (m.Name); + return new OverrideCompletionData (m.Name, declarationBegin); } public ICompletionData CreateImportCompletionData(IType type, bool useFullName) diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/KeywordTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/KeywordTests.cs index 727919a030..edd38ca99b 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/KeywordTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/KeywordTests.cs @@ -489,7 +489,7 @@ class Test } - [Test()] + [Test] public void ForeachInKeywordTest () { CodeCompletionBugTests.CombinedProviderTest ( @@ -507,6 +507,32 @@ class Test Assert.IsNotNull (provider.Find ("in"), "keyword 'in' not found."); }); } + + [Test] + public void OverrideCompletionDeclarationBeginTest () + { + var start = @"class A { public virtual void FooBar () {} } +class Test : A +{ + "; + var provider = CodeCompletionBugTests.CreateProvider (start + "$override $\n}"); + + var data = provider.Find("FooBar") as CodeCompletionBugTests.TestFactory.OverrideCompletionData; + Assert.AreEqual(start.Length, data.DeclarationBegin); + } + + [Test] + public void PartialCompletionDeclarationBeginTest () + { + var start = @"partial class A { partial void FooBar (); } +partial class A +{ + "; + var provider = CodeCompletionBugTests.CreateProvider (start + "$partial $\n}"); + + var data = provider.Find("FooBar") as CodeCompletionBugTests.TestFactory.OverrideCompletionData; + Assert.AreEqual(start.Length, data.DeclarationBegin); + } } }