Browse Source

Fixed code completion exception.

newNRvisualizers
Mike Krüger 14 years ago
parent
commit
3eff925c8f
  1. 2
      ICSharpCode.NRefactory.CSharp/Completion/CSharpParameterCompletionEngine.cs
  2. 20
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs
  3. 10
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/ParameterCompletionTests.cs

2
ICSharpCode.NRefactory.CSharp/Completion/CSharpParameterCompletionEngine.cs

@ -173,6 +173,8 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -173,6 +173,8 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
}
if (invoke.Node is ObjectCreateExpression) {
var createType = ResolveExpression(((ObjectCreateExpression)invoke.Node).Type, invoke.Unit);
if (createType.Item1.Type.Kind == TypeKind.Unknown)
return null;
return factory.CreateConstructorProvider(document.GetOffset(invoke.Node.StartLocation), createType.Item1.Type);
}

20
ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs

@ -4951,5 +4951,25 @@ $#region S$ @@ -4951,5 +4951,25 @@ $#region S$
}");
Assert.IsTrue(provider == null || provider.Count == 0);
}
/// <summary>
/// Bug 4323 - Parameter completion exception while attempting to instantiate unknown class
/// </summary>
[Test()]
public void TestBug4323()
{
// just test for exception
ParameterCompletionTests.CreateProvider(
@"namespace Test
{
class TestClass
{
public static void Main(string[] args)
{
$object foo = new Foo($
}
}
}");
}
}
}

10
ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/ParameterCompletionTests.cs

@ -212,9 +212,9 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion @@ -212,9 +212,9 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion
}
#region IParameterCompletionDataFactory implementation
public IParameterDataProvider CreateConstructorProvider (int startOffset, ICSharpCode.NRefactory.TypeSystem.IType type)
public IParameterDataProvider CreateConstructorProvider(int startOffset, ICSharpCode.NRefactory.TypeSystem.IType type)
{
Assert.IsTrue(type.Kind != TypeKind.Unknown);
return new Provider () {
Data = type.GetConstructors (m => m.Accessibility == Accessibility.Public)
};
@ -227,15 +227,17 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion @@ -227,15 +227,17 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion
};
}
public IParameterDataProvider CreateDelegateDataProvider (int startOffset, ICSharpCode.NRefactory.TypeSystem.IType type)
public IParameterDataProvider CreateDelegateDataProvider(int startOffset, ICSharpCode.NRefactory.TypeSystem.IType type)
{
Assert.IsTrue(type.Kind != TypeKind.Unknown);
return new Provider () {
Data = new [] { type.GetDelegateInvokeMethod () }
};
}
public IParameterDataProvider CreateIndexerParameterDataProvider (int startOffset, IType type, AstNode resolvedNode)
public IParameterDataProvider CreateIndexerParameterDataProvider(int startOffset, IType type, AstNode resolvedNode)
{
Assert.IsTrue(type.Kind != TypeKind.Unknown);
if (type.Kind == TypeKind.Array)
return new ArrayProvider ();
return new IndexerProvider () {

Loading…
Cancel
Save