Browse Source

r7312@daniel-notebook (orig r3343): daniel | 2008-08-14 10:45:11 +0200

Fixed SD2-1401: Code completion fails for object initializers used in field initializers


git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@3345 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 18 years ago
parent
commit
2e5b261aa0
  1. 10
      src/Main/Base/Test/NRefactoryResolverTests.cs
  2. 19
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryResolver.cs

10
src/Main/Base/Test/NRefactoryResolverTests.cs

@ -1812,6 +1812,9 @@ class TestClass {
}; };
} }
Point field = new Point {
};
} }
public class Point public class Point
{ {
@ -1854,6 +1857,9 @@ public class MyCollectionType : System.Collections.IEnumerable
Assert.IsTrue(results.OfType<IField>().Any((IField f) => f.FullyQualifiedName == "MyCollectionType.Field")); Assert.IsTrue(results.OfType<IField>().Any((IField f) => f.FullyQualifiedName == "MyCollectionType.Field"));
Assert.IsFalse(results.OfType<IField>().Any((IField f) => f.FullyQualifiedName == "MyCollectionType.ReadOnlyValueTypeField")); Assert.IsFalse(results.OfType<IField>().Any((IField f) => f.FullyQualifiedName == "MyCollectionType.ReadOnlyValueTypeField"));
Assert.IsFalse(results.OfType<IProperty>().Any((IProperty f) => f.FullyQualifiedName == "MyCollectionType.ReadOnlyValueTypeProperty")); Assert.IsFalse(results.OfType<IProperty>().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] [Test]
@ -1874,6 +1880,10 @@ public class MyCollectionType : System.Collections.IEnumerable
LocalResolveResult lrr = (LocalResolveResult)Resolve(objectInitializerTestProgram, "r1", 13, 1, ExpressionContext.ObjectInitializer); LocalResolveResult lrr = (LocalResolveResult)Resolve(objectInitializerTestProgram, "r1", 13, 1, ExpressionContext.ObjectInitializer);
Assert.IsNotNull(lrr); Assert.IsNotNull(lrr);
Assert.AreEqual("r1", lrr.Field.Name); 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 #endregion

19
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; if (member.Region.IsEmpty) return null;
int startLine = member.Region.BeginLine; int startLine = member.Region.BeginLine;
if (startLine < 1) return null; if (startLine < 1) return null;
DomRegion bodyRegion; DomRegion bodyRegion = member.BodyRegion;
if (member is IMethodOrProperty) { if (bodyRegion.IsEmpty) bodyRegion = member.Region;
bodyRegion = ((IMethodOrProperty)member).BodyRegion;
} else if (member is IEvent) {
bodyRegion = ((IEvent)member).BodyRegion;
} else {
return null;
}
if (bodyRegion.IsEmpty) return null;
int endLine = bodyRegion.EndLine; int endLine = bodyRegion.EndLine;
// Fix for SD2-511 (Code completion in inserted line) // Fix for SD2-511 (Code completion in inserted line)
@ -903,6 +896,11 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
return ev; return ev;
} }
} }
foreach (IField f in callingClass.Fields) {
if (f.Region.IsInside(caretLine, caretColumn) || f.BodyRegion.IsInside(caretLine, caretColumn)) {
return f;
}
}
return null; return null;
} }
@ -1311,6 +1309,9 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
LocalVariableDeclaration lvd = expr.Parent.Parent as LocalVariableDeclaration; LocalVariableDeclaration lvd = expr.Parent.Parent as LocalVariableDeclaration;
if (lvd != null) if (lvd != null)
typeRef = lvd.TypeReference; typeRef = lvd.TypeReference;
FieldDeclaration fd = expr.Parent.Parent as FieldDeclaration;
if (fd != null)
typeRef = fd.TypeReference;
} }
return TypeVisitor.CreateReturnType(typeRef, this); return TypeVisitor.CreateReturnType(typeRef, this);
} }

Loading…
Cancel
Save