Exemplo n.º 1
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);
        }
Exemplo n.º 2
0
        public ClassDeclarationSyntax StubProperty(ClassDeclarationSyntax classDclr, IPropertySymbol propertySymbol,
                                                   INamedTypeSymbol stubbedInterface)
        {
            string indexerType = propertySymbol.Type.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat);
            BasePropertyDeclarationSyntax propDclr = null;

            if (propertySymbol.GetMethod != null)
            {
                IMethodSymbol getMethodSymbol = propertySymbol.GetMethod;
                string        parameters      = StubbingUtils.FormatParameters(getMethodSymbol);

                string delegateTypeName = NamingUtils.GetDelegateTypeName(getMethodSymbol, stubbedInterface);
                var    accessorDclr     = SF.AccessorDeclaration(SyntaxKind.GetAccessorDeclaration, SF.Block(
                                                                     SF.List(new[]
                {
                    SF.ParseStatement("return " + StubbingUtils.GenerateInvokeDelegateStmt(delegateTypeName, getMethodSymbol.Name, parameters))
                })));

                propDclr = CreatePropertyDclr(getMethodSymbol, indexerType);
                propDclr = propDclr.AddAccessorListAccessors(accessorDclr);
            }
            if (propertySymbol.SetMethod != null)
            {
                IMethodSymbol setMethodSymbol  = propertySymbol.SetMethod;
                string        parameters       = $"{StubbingUtils.FormatParameters(setMethodSymbol)}";
                string        delegateTypeName = NamingUtils.GetDelegateTypeName(setMethodSymbol, stubbedInterface);
                var           accessorDclr     = SF.AccessorDeclaration(SyntaxKind.SetAccessorDeclaration, SF.Block(
                                                                            SF.List(new[]
                {
                    SF.ParseStatement(StubbingUtils.GenerateInvokeDelegateStmt(delegateTypeName, setMethodSymbol.Name, parameters))
                })));
                if (propDclr == null)
                {
                    propDclr = CreatePropertyDclr(setMethodSymbol, indexerType);
                }
                propDclr = propDclr.AddAccessorListAccessors(accessorDclr);
            }

            classDclr = classDclr.AddMembers(propDclr);
            return(classDclr);
        }