Browse Source

Fix false positive in ExpressionOfCompatibleTypeCastIssue

pull/45/merge
Daniel Grunwald 12 years ago
parent
commit
b9e4d4841b
  1. 5
      ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/ExpressionOfCompatibleTypeCastIssue.cs
  2. 21
      ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ExpressionOfCompatibleTypeCastIssueTests.cs
  3. 2
      ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeSystemConvertVisitorTests.cs

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

@ -43,7 +43,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -43,7 +43,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
return new GatherVisitor(context).GetIssues();
}
class GatherVisitor : GatherVisitorBase<CastExpressionOfIncompatibleTypeIssue>
class GatherVisitor : GatherVisitorBase<ExpressionOfCompatibleTypeCastIssue>
{
readonly CSharpConversions conversion;
@ -55,6 +55,9 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -55,6 +55,9 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
public override void VisitAssignmentExpression(AssignmentExpression assignmentExpression)
{
base.VisitAssignmentExpression(assignmentExpression);
if (assignmentExpression.Operator != AssignmentOperatorType.Assign)
return;
var rightExpressionType = ctx.Resolve(assignmentExpression.Right).Type;
var leftExpressionType = ctx.Resolve(assignmentExpression.Left).Type;
VisitTypeCastExpression(assignmentExpression, rightExpressionType, leftExpressionType);

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

@ -111,6 +111,27 @@ class TestClass @@ -111,6 +111,27 @@ class TestClass
int y = 1;
$x = i;
}
}";
Test<ExpressionOfCompatibleTypeCastIssue>(input, 0);
}
[Test]
public void TestUserDefinedAddition()
{
var input = @"
struct Vector {
public static explicit operator Point(Vector v) { return new Point(); }
}
struct Point {
public static Point operator +(Point p, Vector v) { return new Point(); }
}
class TestClass
{
void TestMethod ()
{
Point p = new Point();
$p += new Vector();
}
}";
Test<ExpressionOfCompatibleTypeCastIssue>(input, 0);
}

2
ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeSystemConvertVisitorTests.cs

@ -108,7 +108,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser @@ -108,7 +108,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser
var ts = cu.ToTypeSystem();
var compilation = new CSharpProjectContent()
.UpdateProjectContent(null, ts)
.AddOrUpdateFiles(ts)
.AddAssemblyReferences(new[] { CecilLoaderTests.Mscorlib })
.CreateCompilation();
var type = ReflectionHelper.ParseReflectionName("C").Resolve(compilation).GetDefinition();

Loading…
Cancel
Save