protected ConstructorDeclarationCodeGenerator(
     ILanguageAbstraction languageAbstraction,
     AccessModifier accessModifier,
     bool isStatic,
     string name,
     ArgumentInfo[] arguments,
     ParentConstructorType parentConstructorType,
     string[] parentConstructorParameters,
     ScopeCodeGenerator bodyGenerator)
     : base(languageAbstraction, accessModifier, isStatic, null, null, name, arguments, bodyGenerator)
 {
     this.parentConstructorType       = parentConstructorType;
     this.parentConstructorParameters = parentConstructorParameters ?? new string[0];
 }
        public MethodDeclarationCodeGenerator(ILanguageAbstraction languageAbstraction, AccessModifier accessModifier, bool isStatic, string[] additionalModifiers, string returnType, string name, ArgumentInfo[] arguments, ScopeCodeGenerator bodyGenerator)
        {
            if (languageAbstraction == null)
            {
                throw new ArgumentNullException(nameof(languageAbstraction));
            }
            CodeGenerationUtility.CheckValidIdentifierArgument(name, nameof(name));

            Language = languageAbstraction;

            this.accessModifier      = accessModifier;
            this.isStatic            = isStatic;
            this.additionalModifiers = additionalModifiers;
            if (string.IsNullOrWhiteSpace(returnType) == false)
            {
                this.returnType = returnType.Trim();
            }
            this.name          = name;
            this.arguments     = arguments;
            this.bodyGenerator = bodyGenerator;
        }