public override SyntaxNode?VisitInvocationExpression(InvocationExpressionSyntax node)
        {
            var nullableArguments = node.ArgumentList.Arguments
                                    .Select((arg, index) => (Argument: arg, Index: index))
                                    .Where(indexedArg => NullUtilities.CanBeNull(indexedArg.Argument.Expression, _semanticModel))
                                    .ToList();

            if (nullableArguments.Count == 0)
            {
                return(node);
            }

            var methodDeclaration = _semanticModel.GetSymbolInfo(node);

            var methodSyntax = (MethodDeclarationSyntax?)methodDeclaration.Symbol?.DeclaringSyntaxReferences
                               .FirstOrDefault()?
                               .GetSyntaxAsync()?.GetAwaiter().GetResult();

            if (methodSyntax == null)
            {
                return(node);
            }

            foreach (var indexedArg in nullableArguments)
            {
                var nullableParameter = methodSyntax.ParameterList.Parameters[indexedArg.Index];
                _parameterCallback(nullableParameter);
            }

            return(node);
        }
        private bool IsInitializedToNull(VariableDeclaratorSyntax variableDeclarator)
        {
            if (variableDeclarator.Initializer != null)
            {
                return(NullUtilities.CanBeNull(variableDeclarator.Initializer.Value, _semanticModel));
            }

            return(false);
        }
Beispiel #3
0
        public override SyntaxNode?VisitCastExpression(CastExpressionSyntax node)
        {
            var type = node.Type;

            if (type is NullableTypeSyntax)
            {
                return(node);
            }

            return(NullUtilities.CanBeNull(node.Expression, _semanticModel)
          ? node.WithType(NullUtilities.ToNullable(type))
          : node);
        }
Beispiel #4
0
        private bool GetterReturnsNull(PropertyDeclarationSyntax node)
        {
            var propertySymbol = _semanticModel.GetDeclaredSymbol(node);

            if (propertySymbol.GetMethod == null)
            {
                return(false);
            }

            var getter       = propertySymbol.GetMethod;
            var getterSyntax = getter.DeclaringSyntaxReferences.FirstOrDefault()?.GetSyntax() as AccessorDeclarationSyntax;

            if (getterSyntax?.Body != null)
            {
                return(NullUtilities.ReturnsNull(getterSyntax.Body.Statements, _semanticModel));
            }
            if (getterSyntax?.ExpressionBody != null)
            {
                return(NullUtilities.CanBeNull(getterSyntax.ExpressionBody.Expression, _semanticModel));
            }
            return(false);
        }
Beispiel #5
0
 private bool IsNotNullInitialized(PropertyDeclarationSyntax node)
 {
     return(node.Initializer != null &&
            !NullUtilities.CanBeNull(node.Initializer.Value, _semanticModel));
 }