diff --git a/src/Main/Base/Test/NRefactoryResolverTests.cs b/src/Main/Base/Test/NRefactoryResolverTests.cs index bf093165c8..56a84d46a4 100644 --- a/src/Main/Base/Test/NRefactoryResolverTests.cs +++ b/src/Main/Base/Test/NRefactoryResolverTests.cs @@ -1812,6 +1812,9 @@ class TestClass { }; } + Point field = new Point { + + }; } public class Point { @@ -1854,6 +1857,9 @@ public class MyCollectionType : System.Collections.IEnumerable Assert.IsTrue(results.OfType().Any((IField f) => f.FullyQualifiedName == "MyCollectionType.Field")); Assert.IsFalse(results.OfType().Any((IField f) => f.FullyQualifiedName == "MyCollectionType.ReadOnlyValueTypeField")); Assert.IsFalse(results.OfType().Any((IProperty f) => f.FullyQualifiedName == "MyCollectionType.ReadOnlyValueTypeProperty")); + + results = CtrlSpaceResolveCSharp(objectInitializerTestProgram, 17, ExpressionContext.ObjectInitializer); + Assert.AreEqual(new[] { "X", "Y" }, (from IMember p in results orderby p.Name select p.Name).ToArray() ); } [Test] @@ -1874,6 +1880,10 @@ public class MyCollectionType : System.Collections.IEnumerable LocalResolveResult lrr = (LocalResolveResult)Resolve(objectInitializerTestProgram, "r1", 13, 1, ExpressionContext.ObjectInitializer); Assert.IsNotNull(lrr); Assert.AreEqual("r1", lrr.Field.Name); + + mrr = (MemberResolveResult)Resolve(objectInitializerTestProgram, "X", 17, 1, ExpressionContext.ObjectInitializer); + Assert.IsNotNull(mrr); + Assert.AreEqual("Point.X", mrr.ResolvedMember.FullyQualifiedName); } #endregion diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryResolver.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryResolver.cs index f734743353..3645277b97 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryResolver.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryResolver.cs @@ -448,15 +448,8 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver if (member.Region.IsEmpty) return null; int startLine = member.Region.BeginLine; if (startLine < 1) return null; - DomRegion bodyRegion; - if (member is IMethodOrProperty) { - bodyRegion = ((IMethodOrProperty)member).BodyRegion; - } else if (member is IEvent) { - bodyRegion = ((IEvent)member).BodyRegion; - } else { - return null; - } - if (bodyRegion.IsEmpty) return null; + DomRegion bodyRegion = member.BodyRegion; + if (bodyRegion.IsEmpty) bodyRegion = member.Region; int endLine = bodyRegion.EndLine; // Fix for SD2-511 (Code completion in inserted line) @@ -903,6 +896,11 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver return ev; } } + foreach (IField f in callingClass.Fields) { + if (f.Region.IsInside(caretLine, caretColumn) || f.BodyRegion.IsInside(caretLine, caretColumn)) { + return f; + } + } return null; } @@ -1311,6 +1309,9 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver LocalVariableDeclaration lvd = expr.Parent.Parent as LocalVariableDeclaration; if (lvd != null) typeRef = lvd.TypeReference; + FieldDeclaration fd = expr.Parent.Parent as FieldDeclaration; + if (fd != null) + typeRef = fd.TypeReference; } return TypeVisitor.CreateReturnType(typeRef, this); }