Browse Source

Fix ExpressionOfCompatibleTypeCastIssue.

pull/32/merge
Daniel Grunwald 12 years ago
parent
commit
a2580063dd
  1. 27
      ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/ExpressionOfCompatibleTypeCastIssue.cs
  2. 96
      ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ExpressionOfCompatibleTypeCastIssueTests.cs

27
ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/ExpressionOfCompatibleTypeCastIssue.cs

@ -30,11 +30,11 @@ using ICSharpCode.NRefactory.TypeSystem; @@ -30,11 +30,11 @@ using ICSharpCode.NRefactory.TypeSystem;
namespace ICSharpCode.NRefactory.CSharp.Refactoring
{
/* [IssueDescription("Type cast expression of compatible type",
Description = "Type cast expression of compatible type",
Category = IssueCategories.CodeQualityIssues,
Severity = Severity.Warning,
IssueMarker = IssueMarker.Underline)]*/
[IssueDescription("Type cast expression of compatible type",
Description = "Type cast expression of compatible type",
Category = IssueCategories.CodeQualityIssues,
Severity = Severity.Warning,
IssueMarker = IssueMarker.Underline)]
public class ExpressionOfCompatibleTypeCastIssue : ICodeIssueProvider
{
public IEnumerable<CodeIssue> GetIssues(BaseRefactoringContext context)
@ -54,12 +54,9 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -54,12 +54,9 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
public override void VisitAssignmentExpression(AssignmentExpression assignmentExpression)
{
var rightExpressionType = ctx.Resolve(assignmentExpression.Right).Type;
if (rightExpressionType.Kind == TypeKind.Class)
return;
var leftExpressionType = ctx.Resolve(assignmentExpression.Left).Type;
VisitTypeCastExpression(assignmentExpression, leftExpressionType,
rightExpressionType);
var rightExpressionType = ctx.Resolve(assignmentExpression.Right).Type;
var leftExpressionType = ctx.Resolve(assignmentExpression.Left).Type;
VisitTypeCastExpression(assignmentExpression, rightExpressionType, leftExpressionType);
}
private AstType CreateShortType(AstNode node, IType fullType)
@ -80,10 +77,10 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -80,10 +77,10 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
AddIssue(expression, string.Format(ctx.TranslateString("Cast to '{0}'"), castToType.Name),
script => {
var right = expression.Right.Clone();
var castRight = right.CastTo(CreateShortType(expression, castToType));
script.Replace(expression.Right, castRight);
});
var right = expression.Right.Clone();
var castRight = right.CastTo(CreateShortType(expression, castToType));
script.Replace(expression.Right, castRight);
});
}
}
}

96
ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ExpressionOfCompatibleTypeCastIssueTests.cs

@ -3,38 +3,38 @@ using NUnit.Framework; @@ -3,38 +3,38 @@ using NUnit.Framework;
namespace ICSharpCode.NRefactory.CSharp.CodeIssues
{
[TestFixture]
public class ExpressionOfCompatibleTypeCastIssueTests : InspectionActionTestBase
{
[Test]
public void TestConversion()
{
var input = @"
[TestFixture]
public class ExpressionOfCompatibleTypeCastIssueTests : InspectionActionTestBase
{
[Test]
public void TestConversion()
{
var input = @"
class TestClass
{
enum Enum{ };
void TestMethod (Enum i)
{
int x;
x = i;
x = i;
}
}";
var output = @"
var output = @"
class TestClass
{
enum Enum{ };
void TestMethod (Enum i)
{
int x;
x = (Enum)i;
x = (int)i;
}
}";
Test<ExpressionOfCompatibleTypeCastIssue>(input, output);
}
[Test]
public void TestClassConversion()
{
var input = @"
}
[Test]
public void TestClassConversion()
{
var input = @"
class Base {}
class Test: Base {}
class TestClass
@ -42,45 +42,41 @@ class TestClass @@ -42,45 +42,41 @@ class TestClass
void TestMethod (Test i)
{
Base x;
x = i;
x = i;
}
}";
Test<ExpressionOfCompatibleTypeCastIssue>(input, 0);
}
}
[Test]
public void TestConversionDoubleFloat()
{
var input = @"
[Test]
public void TestConversionDoubleFloat()
{
var input = @"
class Foo
{
void Bar () {
double c = 3.5;
float fc;
fc = c;
float fc;
fc = c;
}
}";
var output = @"
var output = @"
class Foo
{
void Bar (){
void Bar () {
double c = 3.5;
float fc;
fc = (float)c;
float fc;
fc = (float)c;
}
}";
//TODO:
//Test is failing as conversion seems to have a bug that
//considers that double is implicit convertible to float,
//when should it be explicitly convertible to float
//Test<ExpressionOfCompatibleTypeCastIssue>(input, output);
}
Test<ExpressionOfCompatibleTypeCastIssue>(input, output);
}
[Test]
public void TestConversionEnumToInt()
{
var input = @"
[Test]
public void TestConversionEnumToInt()
{
var input = @"
class Foo
{
enum Enum { Zero }
@ -90,33 +86,33 @@ class Foo @@ -90,33 +86,33 @@ class Foo
val = e;
}
}";
var output = @"
var output = @"
class Foo
{
enum Enum { Zero }
void Bar () {
var e = Enum.Zero;
int val;
val = (Enum)e;
val = (int)e;
}
}";
Test<ExpressionOfCompatibleTypeCastIssue>(input, output);
}
Test<ExpressionOfCompatibleTypeCastIssue>(input, output);
}
[Test]
public void TestConversionSameType()
{
var input = @"
[Test]
public void TestConversionSameType()
{
var input = @"
class TestClass
{
void TestMethod ()
{
int x =0;
int y = 1;
$x = i;
int y = 1;
$x = i;
}
}";
Test<ExpressionOfCompatibleTypeCastIssue>(input, 0);
}
}
Test<ExpressionOfCompatibleTypeCastIssue>(input, 0);
}
}
}
Loading…
Cancel
Save