From 03f66e700fe6422bf643a5852c9cc05179e95fad Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Thu, 4 Oct 2012 21:25:27 +0200 Subject: [PATCH] CastExpressionOfIncompatibleTypeIssue: don't produce an issue when the source or target type is unknown. --- .../CastExpressionOfIncompatibleTypeIssue.cs | 2 ++ ...tExpressionOfIncompatibleTypeIssueTests.cs | 34 ++++++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/CastExpressionOfIncompatibleTypeIssue.cs b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/CastExpressionOfIncompatibleTypeIssue.cs index 0cd039c107..c81d39693a 100644 --- a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/CastExpressionOfIncompatibleTypeIssue.cs +++ b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/CastExpressionOfIncompatibleTypeIssue.cs @@ -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")); diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/CastExpressionOfIncompatibleTypeIssueTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/CastExpressionOfIncompatibleTypeIssueTests.cs index be33b5ff15..290b346080 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/CastExpressionOfIncompatibleTypeIssueTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/CastExpressionOfIncompatibleTypeIssueTests.cs @@ -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 (input, 0); + } + + [Test] + public void UnknownIdentifierDoesNotCauseIncompatibleCastIssue () + { + var input = @" +class TestClass +{ + void TestMethod () + { + var x1 = unknown as string; + var x2 = (string)unknown; + } +}"; + + Test (input, 0); + } + + [Test] + public void UnknownTargetTypeDoesNotCauseIncompatibleCastIssue () + { + var input = @" +class TestClass +{ + void TestMethod (int p) + { + var x1 = (unknown)p; + var x2 = p as unknown; } }";