Example #1
0
        public void AddMemberMethod(IMemberImplementationProvider implementationProvider, IBlockBodyProvider blockProvider, IParameterImplementationProvider parametersProvider = null)        // params ParameterData[] typeArgs)
        {
            if (implementationProvider == null)
            {
                throw new ArgumentNullException(nameof(implementationProvider), "The member implementation provider must not be null.");
            }

            if (blockProvider == null)
            {
                throw new ArgumentNullException(nameof(blockProvider), "The member method body block provider must not be null.");
            }

            MethodDeclarationSyntax methodSyntax = SyntaxFactory.MethodDeclaration(implementationProvider.Type, implementationProvider.MemberName)
                                                   .WithModifiers(implementationProvider.Modifiers)
                                                   .WithAttributeLists(implementationProvider.Attributes)
                                                   .WithBody(blockProvider.Block);

            //Not all methods have parameters so we don't want to require a provider
            if (parametersProvider != null)
            {
                methodSyntax = methodSyntax.WithParameterList(parametersProvider.Parameters);
            }

            lock (syncObj)
                memberSyntax.Add(methodSyntax);
        }
Example #2
0
        //TODO: Support property fields and merge duplicate code
        public void AddClassField(IMemberImplementationProvider implementationProvider)
        {
            VariableDeclarationSyntax variableSyntax = SyntaxFactory.VariableDeclaration(implementationProvider.Type)
                                                       .AddVariables(SyntaxFactory.VariableDeclarator(implementationProvider.MemberName));

            //New field using the information above that may be private or public.
            FieldDeclarationSyntax newField = SyntaxFactory.FieldDeclaration(variableSyntax)
                                              .WithAttributeLists(implementationProvider.Attributes)
                                              .WithModifiers(implementationProvider.Modifiers);

            lock (syncObj)
                memberSyntax.Add(newField);
        }