public ClassDeclarationSyntax StubMethod(ClassDeclarationSyntax classDclr, IMethodSymbol methodSymbol, INamedTypeSymbol stubbedInterface, SemanticModel semanticModel)
        {
            if (!methodSymbol.IsOrdinaryMethod())
            {
                return(classDclr);
            }

            MethodDeclarationSyntax methodDclr = SF.MethodDeclaration(
                SF.ParseTypeName(methodSymbol.ReturnType.GetFullyQualifiedName()), methodSymbol.GetGenericName());

            methodDclr = methodDclr.WithParameterList(methodDclr.ParameterList.AddParameters(
                                                          RoslynUtils.GetMethodParameterSyntaxList(methodSymbol).ToArray()));
            methodDclr = methodDclr.WithSemicolonToken(SF.Token(SyntaxKind.None))
                         .WithExplicitInterfaceSpecifier(
                SF.ExplicitInterfaceSpecifier(
                    SF.IdentifierName(methodSymbol.GetContainingInterfaceGenericQualifiedName())));

            string delegateTypeName = NamingUtils.GetDelegateTypeName(methodSymbol, stubbedInterface);
            string parameters       = StubbingUtils.FormatParameters(methodSymbol);
            var    outParameters    = methodSymbol.Parameters.Where(p => p.RefKind == RefKind.Out);

            var methodBlock = StubbingUtils.GetInvocationBlockSyntax(delegateTypeName, methodSymbol.GetGenericName(),
                                                                     parameters, outParameters, methodSymbol.ReturnType, semanticModel);

            classDclr = classDclr.AddMembers(methodDclr.WithBody(methodBlock));

            return(classDclr);
        }
Example #2
0
        public ClassDeclarationSyntax StubMethod(ClassDeclarationSyntax classDclr, IMethodSymbol methodSymbol,
                                                 INamedTypeSymbol stubbedInterface)
        {
            if (!methodSymbol.IsOrdinaryMethod())
            {
                return(classDclr);
            }

            MethodDeclarationSyntax methodDclr = SF.MethodDeclaration(
                SF.ParseTypeName(methodSymbol.ReturnType.GetFullyQualifiedName()), methodSymbol.GetGenericName());

            methodDclr = methodDclr.WithParameterList(methodDclr.ParameterList.AddParameters(
                                                          RoslynUtils.GetMethodParameterSyntaxList(methodSymbol).ToArray()));
            methodDclr = methodDclr.WithSemicolonToken(SF.Token(SyntaxKind.None))
                         .WithExplicitInterfaceSpecifier(
                SF.ExplicitInterfaceSpecifier(
                    SF.IdentifierName(methodSymbol.GetContainingInterfaceGenericQualifiedName())));

            string delegateTypeName = NamingUtils.GetDelegateTypeName(methodSymbol, stubbedInterface);
            string parameters       = StubbingUtils.FormatParameters(methodSymbol);

            string callDelegateStmt = StubbingUtils.GenerateInvokeDelegateStmt(delegateTypeName, methodSymbol.GetGenericName(), parameters);

            if (!methodSymbol.ReturnsVoid)
            {
                callDelegateStmt = callDelegateStmt.Insert(0, "return ");
            }

            classDclr = classDclr.AddMembers(
                methodDclr.WithBody(SF.Block(SF.ParseStatement(callDelegateStmt))));

            return(classDclr);
        }
Example #3
0
        private BasePropertyDeclarationSyntax CreatePropertyDclr(IMethodSymbol methodSymbol, string propType)
        {
            if (methodSymbol.IsIndexerAccessor())
            {
                IndexerDeclarationSyntax indexerDclr = SF.IndexerDeclaration(
                    SF.ParseTypeName(propType))
                                                       .WithExplicitInterfaceSpecifier(SF.ExplicitInterfaceSpecifier(
                                                                                           SF.IdentifierName(methodSymbol.GetContainingInterfaceGenericQualifiedName())));
                indexerDclr = indexerDclr.AddParameterListParameters(
                    RoslynUtils.GetMethodParameterSyntaxList(methodSymbol).ToArray());
                return(indexerDclr);
            }

            string propName = methodSymbol.AssociatedSymbol.Name;
            PropertyDeclarationSyntax propDclr = SF.PropertyDeclaration(SF.ParseTypeName(propType), SF.Identifier(propName))
                                                 .WithExplicitInterfaceSpecifier(SF.ExplicitInterfaceSpecifier(
                                                                                     SF.IdentifierName(methodSymbol.GetContainingInterfaceGenericQualifiedName())));

            return(propDclr);
        }