classdef BuildTool < target.SystemCommandTool
    
    properties (Dependent)
        BuildToolType target.BuildToolType {mustBeScalarOrEmpty}
        Directives target.BaseDirective {mustBeVector(Directives, "allow-all-empties")}
        FileExtensions target.FileExtensionSet {mustBeVector(FileExtensions, "allow-all-empties")}
        FileSep (1, 1) string
    end

    methods

        function value = get.BuildToolType(this)
            value = this.wrapValue(this.InnerInstance.BuildToolType);
        end

        function set.BuildToolType(this, value)
            this.InnerInstance.BuildToolType = this.unwrapValue(value, this.InnerInstance.BuildToolType);
        end

        function value = get.Directives(this)
            value = this.wrapValue(this.InnerInstance.Directives);
        end

        function set.Directives(this, value)
            this.InnerInstance.Directives = this.unwrapValue(value, this.InnerInstance.Directives);
        end

        function value = get.FileExtensions(this)
            value = this.wrapValue(this.InnerInstance.FileExtensions);
        end

        function set.FileExtensions(this, value)
            this.InnerInstance.FileExtensions = this.unwrapValue(value, this.InnerInstance.FileExtensions);
        end

        function value = get.FileSep(this)
            value = this.InnerInstance.FileSep;
        end

        function set.FileSep(this, value)
            this.InnerInstance.FileSep = value;
        end

        function varargout = getDirective(this, varargin)
            [innerThis, varargin{:}] = targetframework.internal.user.commandline.matlab.Helpers.unwrapValues(this, varargin{:});
            [varargout{1:nargout}] = getDirective(innerThis, varargin{:});
            [varargout{:}] = targetframework.internal.user.commandline.matlab.Helpers.wrapValues(varargout{:});
        end

        function varargout = getFileExtensionSet(this, varargin)
            [innerThis, varargin{:}] = targetframework.internal.user.commandline.matlab.Helpers.unwrapValues(this, varargin{:});
            [varargout{1:nargout}] = getFileExtensionSet(innerThis, varargin{:});
            [varargout{:}] = targetframework.internal.user.commandline.matlab.Helpers.wrapValues(varargout{:});
        end

        function setDirective(this, varargin)
            [innerThis, varargin{:}] = targetframework.internal.user.commandline.matlab.Helpers.unwrapValues(this, varargin{:});
            setDirective(innerThis, varargin{:});
        end

        function setFileExtensions(this, varargin)
            [innerThis, varargin{:}] = targetframework.internal.user.commandline.matlab.Helpers.unwrapValues(this, varargin{:});
            setFileExtensions(innerThis, varargin{:});
        end

        function showDirectives(this)
            [innerThis] = targetframework.internal.user.commandline.matlab.Helpers.unwrapValues(this);
            showDirectives(innerThis);
        end

        function showFileExtensions(this)
            [innerThis] = targetframework.internal.user.commandline.matlab.Helpers.unwrapValues(this);
            showFileExtensions(innerThis);
        end
    end

    methods (Hidden)

        function initializeRequiredDirectives(this)
            [innerThis] = targetframework.internal.user.commandline.matlab.Helpers.unwrapValues(this);
            initializeRequiredDirectives(innerThis);
        end

        function initializeRequiredFileExtensions(this)
            [innerThis] = targetframework.internal.user.commandline.matlab.Helpers.unwrapValues(this);
            initializeRequiredFileExtensions(innerThis);
        end
    end

    methods (Static, Access = protected)

        function name = getQualifiedName()
            name = "target.BuildTool";
        end

        function name = getQualifiedInnerName()
            name = "target.internal.BuildTool";
        end
    end
end

%   Copyright 2022 The MathWorks, Inc.