From 5b30dbb1e2a51391e0b5c9b84d89e98ab6ac9a77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Kr=C3=BCger?= Date: Fri, 31 May 2013 11:55:33 +0200 Subject: [PATCH] ExpressionOfCompatibleTypeCastIssue no longer warns on implicit conversions. --- .../ExpressionOfCompatibleTypeCastIssue.cs | 3 +++ ...xpressionOfCompatibleTypeCastIssueTests.cs | 23 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/ExpressionOfCompatibleTypeCastIssue.cs b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/ExpressionOfCompatibleTypeCastIssue.cs index 25f8356c04..e828ebbb9a 100644 --- a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/ExpressionOfCompatibleTypeCastIssue.cs +++ b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/ExpressionOfCompatibleTypeCastIssue.cs @@ -78,6 +78,9 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring return; if (!foundConversion.IsExplicit) return; + var implicitConversion = conversion.ImplicitConversion(exprType, castToType); + if (implicitConversion != Conversion.None) + return; AddIssue(expression, string.Format(ctx.TranslateString("Cast to '{0}'"), castToType.Name), script => { diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ExpressionOfCompatibleTypeCastIssueTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ExpressionOfCompatibleTypeCastIssueTests.cs index 4d129a2d7a..6af34c8099 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ExpressionOfCompatibleTypeCastIssueTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ExpressionOfCompatibleTypeCastIssueTests.cs @@ -132,6 +132,29 @@ class TestClass Point p = new Point(); $p += new Vector(); } +}"; + Test(input, 0); + } + + [Test] + public void TestImplicitOperator() + { + var input = @" +struct Vector { + public static implicit operator Point(Vector v) { return new Point(); } +} + +struct Point { + +} + +class TestClass +{ + void TestMethod () + { + Point p; + p = new Vector (); + } }"; Test(input, 0); }