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); }
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); }
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(); }