@@ -131,59 +131,43 @@ public static Map<String, List<String>> parseJvmArgs(List<String> args) {
131131
132132 // Handle system properties (-Dkey=value)
133133 if (arg .startsWith ("-D" )) {
134- int equalsIndex = arg .indexOf ('=' );
135- if (equalsIndex >= 0 ) {
136- String key = arg .substring (0 , equalsIndex );
137- String value = arg .substring (equalsIndex + 1 );
138- parsedArgs .computeIfAbsent (key , k -> new ArrayList <>()).add (value );
139- } else {
140- parsedArgs .computeIfAbsent (arg , k -> new ArrayList <>()).add (null );
141- }
134+ addEntryToMap ('=' , arg , parsedArgs );
142135 continue ;
143136 }
144137
145138 // Handle -XX flags
146139 if (arg .startsWith ("-XX:" )) {
147140 // -XX flags can have values after = (like -XX:MaxMetaspaceSize=128m)
148- int equalsIndex = arg .indexOf ('=' );
149- if (equalsIndex >= 0 ) {
150- String key = arg .substring (0 , equalsIndex );
151- String value = arg .substring (equalsIndex + 1 );
152- parsedArgs .computeIfAbsent ("-XX:" + key , k -> new ArrayList <>()).add (value );
153- } else {
154- parsedArgs .computeIfAbsent (arg , k -> new ArrayList <>()).add (null );
155- }
141+ addEntryToMap ('=' , arg , parsedArgs );
142+ continue ;
156143 }
157144
158145 // Handle -javaagent
159146 if (arg .startsWith ("-javaagent:" )) {
160- String keyValue = arg .substring (11 ); // Remove "-javaagent:" prefix
161- int equalsIndex = keyValue .indexOf ('=' );
162- if (equalsIndex >= 0 ) {
163- String key = keyValue .substring (0 , equalsIndex );
164- String value = keyValue .substring (equalsIndex + 1 );
165- parsedArgs .computeIfAbsent ("-javaagent:" + key , k -> new ArrayList <>()).add (value );
166- } else {
167- parsedArgs .computeIfAbsent (arg , k -> new ArrayList <>()).add (null );
168- }
147+ addEntryToMap (':' , arg , parsedArgs );
169148 continue ;
170149 }
171150
172151 // Handle other flags that might have values
173152 // Note that -X flags will not be parsed into key-vals; they'll be caught by the value-less
174153 // case and stored as a key. Therefore, duplicate keys are not supported for -X flags
175154 if (arg .startsWith ("-" )) {
176- int equalsIndex = arg .indexOf ('=' );
177- if (equalsIndex >= 0 ) {
178- String key = arg .substring (0 , equalsIndex );
179- String value = arg .substring (equalsIndex + 1 );
180- parsedArgs .computeIfAbsent (key , k -> new ArrayList <>()).add (value );
181- } else {
182- parsedArgs .computeIfAbsent (arg , k -> new ArrayList <>()).add (null );
183- }
155+ addEntryToMap ('=' , arg , parsedArgs );
184156 }
185157 }
186158
187159 return parsedArgs ;
188160 }
161+
162+ private static void addEntryToMap (
163+ char equalsOperator , String arg , Map <String , List <String >> parsedArgs ) {
164+ int equalsIndex = arg .indexOf (equalsOperator );
165+ if (equalsIndex >= 0 && equalsIndex < (arg .length () - 1 )) {
166+ String key = arg .substring (0 , equalsIndex );
167+ String value = arg .substring (equalsIndex + 1 );
168+ parsedArgs .computeIfAbsent (key , k -> new ArrayList <>()).add (value );
169+ } else {
170+ parsedArgs .computeIfAbsent (arg , k -> new ArrayList <>()).add (null );
171+ }
172+ }
189173}
0 commit comments