Browse Source

Fixed some more array initializer context bugs.

newNRvisualizers
mike 14 years ago
parent
commit
0a71c80a06
  1. 14
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
  2. 13
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs
  3. 37
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/ObjectInitializerTests.cs

14
ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs

@ -420,7 +420,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -420,7 +420,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
var contextList = new CompletionDataWrapper (this);
var identifierStart = GetExpressionAtCursor ();
if (identifierStart != null && identifierStart.Item2 is TypeParameterDeclaration)
return null;
@ -472,6 +471,11 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -472,6 +471,11 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return null;
}
if (n is ArrayInitializerExpression) {
// check for new [] {...} expression -> no need to resolve the type there
var parent = n.Parent as ArrayCreateExpression;
if (parent != null && parent.Type.IsNull)
return DefaultControlSpaceItems ();
var initalizerResult = ResolveExpression (identifierStart.Item1, n.Parent, identifierStart.Item3);
var concreteNode = identifierStart.Item3.GetNodeAt<IdentifierExpression> (location);
@ -479,8 +483,8 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -479,8 +483,8 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
if (concreteNode != null && concreteNode.Parent != null && concreteNode.Parent.Parent != null && concreteNode.Identifier != "a" && concreteNode.Parent.Parent is NamedExpression) {
return DefaultControlSpaceItems ();
}
if (initalizerResult != null) {
if (initalizerResult != null && initalizerResult.Item1.Type.Kind != TypeKind.Unknown) {
foreach (var property in initalizerResult.Item1.Type.GetProperties ()) {
if (!property.IsPublic)
@ -494,7 +498,8 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -494,7 +498,8 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
}
return contextList.Result;
}
return null;
Console.WriteLine ("blub");
return DefaultControlSpaceItems ();
}
if (n != null/* && !(identifierStart.Item2 is TypeDeclaration)*/) {
csResolver = new CSharpResolver (ctx);
@ -1894,6 +1899,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -1894,6 +1899,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
expr = baseUnit.GetNodeAt<TypeParameterDeclaration> (location.Line, location.Column - 1);
}
if (expr == null)
return null;
var member = Unit.GetNodeAt<AttributedNode> (memberLocation);

13
ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs

@ -413,7 +413,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -413,7 +413,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
} else {
memberLocation = new TextLocation (1, 1);
}
using (var stream = new System.IO.StringReader (wrapper.ToString ())) {
try {
var parser = new CSharpParser ();
@ -477,13 +476,21 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -477,13 +476,21 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
var memberLocation = currentMember != null ? currentMember.Region.Begin : currentType.Region.Begin;
var mref = baseUnit.GetNodeAt (location.Line, location.Column - 1, n => n is InvocationExpression || n is ObjectCreateExpression);
AstNode expr;
AstNode expr = null;
if (mref is InvocationExpression) {
expr = ((InvocationExpression)mref).Target;
} else if (mref is ObjectCreateExpression) {
expr = mref;
} else {
return null;
baseUnit = ParseStub (")};", false);
mref = baseUnit.GetNodeAt (location.Line, location.Column - 1, n => n is InvocationExpression || n is ObjectCreateExpression);
if (mref is InvocationExpression) {
expr = ((InvocationExpression)mref).Target;
} else if (mref is ObjectCreateExpression) {
expr = mref;
}
if (expr == null)
return null;
}
var member = Unit.GetNodeAt<AttributedNode> (memberLocation);
var member2 = baseUnit.GetNodeAt<AttributedNode> (memberLocation);

37
ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/ObjectInitializerTests.cs

@ -31,6 +31,24 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion @@ -31,6 +31,24 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion
{
public class ObjectInitializerTests : TestBase
{
[Test()]
public void TestArrayInitializerStart ()
{
CodeCompletionBugTests.CombinedProviderTest (
@"using System;
class MyTest
{
public void Test ()
{
$new [] { M$
}
}
", provider => {
Assert.IsNotNull (provider.Find ("Tuple"), "class 'MyTest' not found.");
});
}
[Test()]
public void TestArrayInitializerSimple ()
{
@ -49,6 +67,25 @@ class MyTest @@ -49,6 +67,25 @@ class MyTest
});
}
/// <summary>
/// Bug 432727 - No completion if no constructor
/// </summary>
[Test()]
public void TestArrayInitializerParameterContext ()
{
var provider = ParameterCompletionTests.CreateProvider (
@"using System;
class MyTest
{
public void Test ()
{
$new [] { Tuple.Create($
}
}");
Assert.IsNotNull (provider, "provider was not created.");
Assert.Greater (provider.OverloadCount, 1);
}
/// <summary>
/// Bug 487236 - Object initializer completion uses wrong type

Loading…
Cancel
Save