public AgentConfig parseCommandLine()

in disco-java-agent/disco-java-agent-core/src/main/java/software/amazon/disco/agent/config/AgentConfigParser.java [32:76]


    public AgentConfig parseCommandLine(String args) {
        if (args == null || args.isEmpty()) {
            return new AgentConfig(null);
        }

        //TODO these regexes look overwrought.

        //split by colon so that e.g. "arg=value1:arg2=value2" becomes ["arg1=value1", "arg2=value2"]
        String[] individualArgs = args.split("(?<!\\\\):");

        //for each arg=value pair, split by "="
        final AgentConfig result = new AgentConfig(Arrays.asList(individualArgs));

        for (String arg : individualArgs) {
            String[] pair = arg.split("(?<!\\\\)=");
            String value = pair.length > 1
                    ? pair[1]
                        .replaceAll("\\\\:", ":")
                        .replaceAll("\\\\=", "=")
                    : "";

            switch (pair[0].toLowerCase()) {
                case "runtimeonly":
                    result.setRuntimeOnly(true);
                    break;
                case "pluginpath":
                    result.setPluginPath(value);
                    break;
                case "verbose":
                    result.setVerbose(true);
                    break;
                case "extraverbose":
                    result.setExtraverbose(true);
                    break;
                case "loggerfactory":
                    result.setLoggerFactoryClass(value);
                    break;
                default:
                    //not an error, do nothing. individual interceptors might receive this arg instead
                    break;
            }
        }

        return result;
    }