public static NamespaceDeclarationSyntax CreateTonModuleClass(string unitName, Module module) { var moduleName = $"{unitName}Module"; StatementSyntax statementSyntax = ParseStatement("_tonClientAdapter = tonClientAdapter;"); VariableDeclarationSyntax variableDeclaration = VariableDeclaration(ParseTypeName("ITonClientAdapter")) .AddVariables(VariableDeclarator("_tonClientAdapter")); FieldDeclarationSyntax fieldDeclaration = FieldDeclaration(variableDeclaration) .AddModifiers(Token(SyntaxKind.PrivateKeyword), Token(SyntaxKind.ReadOnlyKeyword)); ConstructorDeclarationSyntax constructorDeclaration = ConstructorDeclaration(moduleName) .AddParameterListParameters( Parameter(Identifier("tonClientAdapter")).WithType(IdentifierName("ITonClientAdapter"))) .WithModifiers(TokenList(Token(SyntaxKind.PublicKeyword))) .WithBody(Block(statementSyntax)); var methods = module .Functions .Select(f => GetMethodDeclaration(module, f, true)) .ToArray(); ClassDeclarationSyntax item = ClassDeclaration(moduleName) .AddModifiers(Token(SyntaxKind.PublicKeyword)) .AddBaseListTypes(SimpleBaseType(IdentifierName(NamingConventions.ToInterfaceName(moduleName)))) .AddMembers(fieldDeclaration) .AddMembers(constructorDeclaration) .AddMembers(methods); return(NamespaceDeclaration(IdentifierName(ClientGenerator.NamespaceModules)) .AddMembers(item)); }
public static NamespaceDeclarationSyntax CreateTonClientClass(string unitName, TonApi tonApi) { var propertyDeclarationSyntaxes = GetProperties(tonApi); var moduleNames = tonApi.Modules.Select(m => m.Name).ToArray(); VariableDeclarationSyntax variableDeclaration = VariableDeclaration(ParseTypeName("ServiceProvider")) .AddVariables(VariableDeclarator("_serviceProvider")); FieldDeclarationSyntax fieldDeclaration = FieldDeclaration(variableDeclaration) .AddModifiers(Token(SyntaxKind.PrivateKeyword), Token(SyntaxKind.ReadOnlyKeyword)); var statementSyntax = new[] { ParseStatement("_serviceProvider = TonClientServiceProviderBuilder.BuildTonClientServiceProvider(serviceProvider);") } .Union(moduleNames .Select(m => ParseStatement( $"{NamingConventions.Normalize(m)} = _serviceProvider.GetRequiredService<{NamingConventions.ToInterfaceName(m)}Module>();"))) .ToArray(); MethodDeclarationSyntax disposeMethod = MethodDeclaration(ParseTypeName("void"), "Dispose") .AddModifiers(Token(SyntaxKind.PublicKeyword)) .AddBodyStatements(ParseStatement("_serviceProvider?.Dispose();")); ConstructorDeclarationSyntax constructorDeclaration = ConstructorDeclaration(unitName) .AddParameterListParameters(Parameter(Identifier("serviceProvider = null")).WithType(IdentifierName("IServiceProvider"))) .WithModifiers(TokenList(Token(SyntaxKind.PublicKeyword))) .WithBody(Block(statementSyntax)); ClassDeclarationSyntax item = ClassDeclaration(unitName) .AddModifiers(Token(SyntaxKind.PublicKeyword)) .AddBaseListTypes(SimpleBaseType(IdentifierName("ITonClient")), SimpleBaseType(IdentifierName("IDisposable"))) .AddMembers(fieldDeclaration) .AddMembers(constructorDeclaration) .AddMembers(propertyDeclarationSyntaxes) .AddMembers(disposeMethod); return(NamespaceDeclaration(IdentifierName(ClientGenerator.Namespace)) .AddMembers(item)); }