public Map<String, Object> generate( List<ConfigOption> configList, String... args ) {

        // default arguments
        configList.add( 0, format );
        configList.add( 1, help );
        for( ConfigOption co : configList ) {
            if( co.hasDefault() ) {
                parsedOptions.put( co.getLongName(), co.getValue() );
            }
        }

        // command line arguments
        for( String arg : args ) {
            boolean found = false;
            for( ConfigOption co : configList ) {
                found |= commandLineLookup( arg, co, configList );
            }
            if( !found ) {
                printSuggestion( arg, configList );
            }
        }

        // checking for non-optional flags
        for( ConfigOption co : configList ) {
            if( !co.isOptional() && !parsedOptions.containsKey( co.getLongName() ) ) {
                System.err.println( "Anticipating value for non-optional flag " + co.getCommandLineOption().showFlagInfo() );
                printUsageAndExit( configList );
            }
        }

        // TODO properties
        // TODO environment

        // help
        if( this.hasValue( help ) ) {
            printUsageAndExit( configList );
        }

        return parsedOptions;
    }
Parses the configuration list and tries to create a mapping of the corresponding objects from the command line, properties
or environment variables

As long as the {@link com.tngtech.jgiven.report.config.converter.StringConverter} are implemented with a null as fail
and a working conversion the mapped objects are always in a correct state and castable to their representation

@param configList the configuration list by which to search for the objects
@param args command line arguments
@return returns the map of config.longName keys and corresponding castable objects
jgiven-core/src/main/java/com/tngtech/jgiven/report/config/ConfigOptionParser.java