public void MethodParameterNullAnnotator_WithEmptyList_ReturnsInput()
        {
            var(_, methodSyntax) = CompiledSourceFileProvider.CompileMethod(
                "void T (object o1, object o2, string s1, string s2, int i1, double d1) {}");
            var rewriter = new MethodParameterNullAnnotator(new ParameterSyntax[0]);

            var rewritten = rewriter.Visit(methodSyntax);

            Assert.That(rewritten, Is.EqualTo(methodSyntax));
        }
Пример #2
0
        public void CastExpressionNullAnnotator_DoesNotAnnotateNonNullableCast(string castExpression)
        {
            var source = string.Format(c_castTemplate, castExpression);

            var(semanticModel, method) = CompiledSourceFileProvider.CompileMethod(source);
            var stmt = (method.Body !.Statements.First() as LocalDeclarationStatementSyntax) !;
            var castExpressionSyntax = (stmt.Declaration.Variables.First().Initializer !.Value as CastExpressionSyntax) !;
            var rewriter             = new CastExpressionNullAnnotator(semanticModel);

            var rewritten = rewriter.Visit(castExpressionSyntax);

            Assert.That(rewritten, Is.InstanceOf <CastExpressionSyntax>());
            Assert.That(rewritten, Is.EqualTo(castExpressionSyntax));
        }
        public void MethodParameterNullAnnotator_AnnotatesCanBeNullParameters()
        {
            var(_, methodSyntax) = CompiledSourceFileProvider.CompileMethod(
                "void T (object o1, [CanBeNull] object o2, string s1, [CanBeNull] string s2, int i1, double d1) {}");
            var rewriter = new MethodParameterNullAnnotator(new ParameterSyntax[0]);

            var rewritten = rewriter.Visit(methodSyntax);

            Assert.That(rewritten, Is.InstanceOf <MethodDeclarationSyntax>());
            var rewrittenMethod = (rewritten as MethodDeclarationSyntax) !;

            Assert.That(rewrittenMethod.ParameterList.Parameters[0], Is.EqualTo(methodSyntax.ParameterList.Parameters[0]).Using <SyntaxNode>((p1, p2) => p1.IsEquivalentTo(p2)));
            Assert.That(rewrittenMethod.ParameterList.Parameters[2], Is.EqualTo(methodSyntax.ParameterList.Parameters[2]).Using <SyntaxNode>((p1, p2) => p1.IsEquivalentTo(p2)));
            Assert.That(rewrittenMethod.ParameterList.Parameters[4], Is.EqualTo(methodSyntax.ParameterList.Parameters[4]).Using <SyntaxNode>((p1, p2) => p1.IsEquivalentTo(p2)));
            Assert.That(rewrittenMethod.ParameterList.Parameters[5], Is.EqualTo(methodSyntax.ParameterList.Parameters[5]).Using <SyntaxNode>((p1, p2) => p1.IsEquivalentTo(p2)));
            Assert.That(rewrittenMethod.ParameterList.Parameters[1].Type, Is.InstanceOf <NullableTypeSyntax>());
            Assert.That(rewrittenMethod.ParameterList.Parameters[3].Type, Is.InstanceOf <NullableTypeSyntax>());
        }
        public void MethodParameterNullAnnotator_WithNullableList_AnnotatesParameters()
        {
            var(_, methodSyntax) = CompiledSourceFileProvider.CompileMethod(
                "void T (object o1, object o2, string s1, string s2, int i1, double d1) {}");
            var nullableParameter = methodSyntax.ParameterList.Parameters.Where(parameter => parameter.Identifier.ToString().Contains("2"));
            var rewriter          = new MethodParameterNullAnnotator(nullableParameter.ToList());

            var rewritten = rewriter.Visit(methodSyntax);

            Assert.That(rewritten, Is.InstanceOf <MethodDeclarationSyntax>());
            var rewrittenMethod = (rewritten as MethodDeclarationSyntax) !;

            Assert.That(rewrittenMethod.ParameterList.Parameters[0], Is.EqualTo(methodSyntax.ParameterList.Parameters[0]).Using <SyntaxNode>((p1, p2) => p1.IsEquivalentTo(p2)));
            Assert.That(rewrittenMethod.ParameterList.Parameters[2], Is.EqualTo(methodSyntax.ParameterList.Parameters[2]).Using <SyntaxNode>((p1, p2) => p1.IsEquivalentTo(p2)));
            Assert.That(rewrittenMethod.ParameterList.Parameters[4], Is.EqualTo(methodSyntax.ParameterList.Parameters[4]).Using <SyntaxNode>((p1, p2) => p1.IsEquivalentTo(p2)));
            Assert.That(rewrittenMethod.ParameterList.Parameters[5], Is.EqualTo(methodSyntax.ParameterList.Parameters[5]).Using <SyntaxNode>((p1, p2) => p1.IsEquivalentTo(p2)));
            Assert.That(rewrittenMethod.ParameterList.Parameters[1].Type, Is.InstanceOf <NullableTypeSyntax>());
            Assert.That(rewrittenMethod.ParameterList.Parameters[3].Type, Is.InstanceOf <NullableTypeSyntax>());
        }