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