public ClassDeclarationSyntax StubProperty(ClassDeclarationSyntax classDclr, IPropertySymbol propertySymbol, INamedTypeSymbol stubbedInterface, SemanticModel semanticModel)
        {
            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[]
                {
                    StubbingUtils.GetInvocationBlockSyntax(delegateTypeName, getMethodSymbol.Name, parameters,
                                                           Enumerable.Empty <IParameterSymbol>(), getMethodSymbol.ReturnType, semanticModel)
                })));

                propDclr = CreatePropertyDclr(getMethodSymbol, indexerType);
                propDclr = propDclr.AddAccessorListAccessors(accessorDclr);
            }

            if (propertySymbol.SetMethod != null)
            {
                var           voidType         = semanticModel.Compilation.GetTypeByMetadataName("System.Void");
                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[]
                {
                    StubbingUtils.GetInvocationBlockSyntax(delegateTypeName, setMethodSymbol.Name, parameters,
                                                           Enumerable.Empty <IParameterSymbol>(), voidType, semanticModel)
                })));
                if (propDclr == null)
                {
                    propDclr = CreatePropertyDclr(setMethodSymbol, indexerType);
                }
                propDclr = propDclr.AddAccessorListAccessors(accessorDclr);
            }

            classDclr = classDclr.AddMembers(propDclr);
            return(classDclr);
        }
示例#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);
        }
示例#3
0
        public PropertyDeclarationSyntax Build(PropertyType propertyType = PropertyType.ReadonlyGet)
        {
            if (this.propertyType == PropertyType.ReadonlyGet)
            {
                return(SF.PropertyDeclaration(
                           GeneratorHelper.EmptyAttributeList(),
                           SF.TokenList(this.modifiers),
                           this.type,
                           default(ExplicitInterfaceSpecifierSyntax),
                           GeneratorHelper.IdentifierToken(this.identifier),
                           SF.AccessorList(
                               GeneratorHelper.List(
                                   SF.AccessorDeclaration(SyntaxKind.GetAccessorDeclaration)
                                   .WithSemicolonToken(Tokens.Semicolon))),
                           default(ArrowExpressionClauseSyntax),
                           default(EqualsValueClauseSyntax)
                           ));
            }

            throw new NotImplementedException();
        }