whole_func_string: function() {
        var result = {};
        this.__classes.forEach(name => result[name] = true);
        this.__expandClassnames(this.getInclude()).forEach(name => result[name] = true);
        this.__expandClassnames(this.getExclude()).forEach(name => delete result[name]);
        
        // We sort the result so that we can get a consistent ordering for loading classes, otherwise the order in
        //  which the filing system returns the files can cause classes to be loaded in a lightly different sequence;
        //  that would not cause a problem, except that the build is not 100% repeatable.
        return Object.keys(result).sort();
      }
func_code_string: function() {
        var result = {};
        this.__classes.forEach(name => result[name] = true);
        this.__expandClassnames(this.getInclude()).forEach(name => result[name] = true);
        this.__expandClassnames(this.getExclude()).forEach(name => delete result[name]);
        
        // We sort the result so that we can get a consistent ordering for loading classes, otherwise the order in
        //  which the filing system returns the files can cause classes to be loaded in a lightly different sequence;
        //  that would not cause a problem, except that the build is not 100% repeatable.
        return Object.keys(result).sort();
      }
func_documentation_string: Returns the classes required for the application
  @returns {String[]}