public override void VisitConditionalAccessExpression(ConditionalAccessExpressionSyntax node) { if (CodeSmells) { return; } CodeSmells = node.WhenNotNull is InvocationExpressionSyntax invocation && invocation.Expression is MemberAccessExpressionSyntax memberAccess && memberAccess.IsKind(SyntaxKind.SimpleMemberAccessExpression) && memberAccess.Expression is InvocationExpressionSyntax shouldInvocation && shouldInvocation.Expression is MemberBindingExpressionSyntax memberBinding && memberBinding.Name.Identifier.ValueText == "Should"; if (CodeSmells) { ConditionalAccess = node.GetLocation(); } }
public ConditionalAccessInfo(SemanticModel semanticModel, ConditionalAccessExpressionSyntax node) { Node = node; var expressionType = semanticModel.GetTypeInfo(node.Expression).Type; ExpressionType = SyntaxFactory.ParseTypeName(expressionType.ToMinimalDisplayString(semanticModel, node.Expression.GetLocation().SourceSpan.Start)); var resultType = semanticModel.GetTypeInfo(node).Type; ResultType = SyntaxFactory.ParseTypeName(resultType.ToMinimalDisplayString(semanticModel, node.GetLocation().SourceSpan.Start)); IsResultVoid = resultType.SpecialType == SpecialType.System_Void; IsComplex = IsExpressionComplexEnoughToGetATemporaryVariable.IsComplex(semanticModel, node.Expression); }
public ConditionalAccessInfo(SemanticModel semanticModel, ConditionalAccessExpressionSyntax node) { Node = node; var expressionType = semanticModel.GetTypeInfo(node.Expression).Type; ExpressionType = SyntaxFactory.ParseTypeName(expressionType.ToMinimalDisplayString(semanticModel, node.Expression.GetLocation().SourceSpan.Start)); this.IsNullable = expressionType.OriginalDefinition.SpecialType == SpecialType.System_Nullable_T; if (this.IsNullable) { UnderlyingNullableType = ((INamedTypeSymbol)expressionType).TypeArguments[0]; ExpressionType = SyntaxFactory.ParseTypeName(UnderlyingNullableType.ToMinimalDisplayString(semanticModel, node.Expression.GetLocation().SourceSpan.Start)); } var resultType = semanticModel.GetTypeInfo(node).Type; ResultType = SyntaxFactory.ParseTypeName(resultType.ToMinimalDisplayString(semanticModel, node.GetLocation().SourceSpan.Start)); IsResultVoid = resultType.SpecialType == SpecialType.System_Void; IsComplex = IsExpressionComplexEnoughToGetATemporaryVariable.IsComplex(semanticModel, node.Expression); }