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 17 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 { @@ -1812,6 +1812,9 @@ class TestClass {
};
}
Point field = new Point {
};
}
public class Point
{
@ -1854,6 +1857,9 @@ public class MyCollectionType : System.Collections.IEnumerable @@ -1854,6 +1857,9 @@ public class MyCollectionType : System.Collections.IEnumerable
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<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]
@ -1874,6 +1880,10 @@ public class MyCollectionType : System.Collections.IEnumerable @@ -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

19
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryResolver.cs

@ -448,15 +448,8 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -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 @@ -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 @@ -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);
}

Loading…
Cancel
Save