void VisitTypeCastExpression(Expression expression, IType exprType, IType castToType) { if (TypeCompatibilityHelper.CheckTypeCompatibility(exprType, castToType) == TypeCompatibilityHelper.TypeCompatiblity.NeverOfProvidedType) { AddIssue(expression, ctx.TranslateString("Type cast expression of incompatible type")); } }
public override void VisitIsExpression(IsExpression isExpression) { base.VisitIsExpression(isExpression); var exprType = ctx.Resolve(isExpression.Expression).Type; var providedType = ctx.ResolveType(isExpression.Type); if (TypeCompatibilityHelper.CheckTypeCompatibility(exprType, providedType) == TypeCompatibilityHelper.TypeCompatiblity.NeverOfProvidedType) { AddIssue(isExpression, ctx.TranslateString("Given expression is never of the provided type")); } }
public override void VisitIsExpression(IsExpression isExpression) { base.VisitIsExpression(isExpression); var type = ctx.Resolve(isExpression.Expression).Type; var providedType = ctx.ResolveType(isExpression.Type); if (TypeCompatibilityHelper.CheckTypeCompatibility(type, providedType) != TypeCompatibilityHelper.TypeCompatiblity.AlwaysOfProvidedType) { return; } var action = new CodeAction(ctx.TranslateString("Compare with 'null'"), scrpit => scrpit.Replace(isExpression, new BinaryOperatorExpression( isExpression.Expression.Clone(), BinaryOperatorType.InEquality, new PrimitiveExpression(null)))); AddIssue(isExpression, ctx.TranslateString("Given expression is always of the provided type. " + "Consider comparing with 'null' instead"), new [] { action }); }