Browse Source

CastExpressionOfIncompatibleTypeIssue: don't produce an issue when the source or target type is unknown.

newNRvisualizers
Daniel Grunwald 13 years ago
parent
commit
03f66e700f
  1. 2
      ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/CastExpressionOfIncompatibleTypeIssue.cs
  2. 34
      ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/CastExpressionOfIncompatibleTypeIssueTests.cs

2
ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/CastExpressionOfIncompatibleTypeIssue.cs

@ -71,6 +71,8 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -71,6 +71,8 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
void VisitTypeCastExpression (Expression expression, IType exprType, IType castToType)
{
if (exprType.Kind == TypeKind.Unknown || castToType.Kind == TypeKind.Unknown)
return;
var foundConversion = conversion.ExplicitConversion(exprType, castToType);
if (foundConversion == Conversion.None)
AddIssue (expression, ctx.TranslateString ("Type cast expression of incompatible type"));

34
ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/CastExpressionOfIncompatibleTypeIssueTests.cs

@ -56,7 +56,39 @@ class TestClass @@ -56,7 +56,39 @@ class TestClass
void TestMethod ()
{
var x1 = (int)123;
var x2 = (int)System.ConsoleKey.A;
var x2 = (short)123;
var x3 = (int)System.ConsoleKey.A;
}
}";
Test<CastExpressionOfIncompatibleTypeIssue> (input, 0);
}
[Test]
public void UnknownIdentifierDoesNotCauseIncompatibleCastIssue ()
{
var input = @"
class TestClass
{
void TestMethod ()
{
var x1 = unknown as string;
var x2 = (string)unknown;
}
}";
Test<CastExpressionOfIncompatibleTypeIssue> (input, 0);
}
[Test]
public void UnknownTargetTypeDoesNotCauseIncompatibleCastIssue ()
{
var input = @"
class TestClass
{
void TestMethod (int p)
{
var x1 = (unknown)p;
var x2 = p as unknown;
}
}";

Loading…
Cancel
Save