From c967815df08ff336249f2999e7a91133d5685b7a Mon Sep 17 00:00:00 2001 From: SerpentSpirale Date: Tue, 10 Aug 2021 11:40:17 +0200 Subject: [PATCH] Add java argument parser --- .../net/kdt/pojavlaunch/utils/JREUtils.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java index 95db566a9..1c9749974 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java @@ -346,6 +346,39 @@ public class JREUtils } return exitCode; } + + /** + * Parse and separate java arguments in a user friendly fashion + * It supports multi line and absence of spaces between arguments + * The function also supports auto-removal of improper arguments. + * + * @param args The un-parsed argument list. + * @return Parsed args as an ArrayList + */ + public static ArrayList parseJavaArguments(String args){ + ArrayList parsedArguments = new ArrayList<>(0); + args = args.trim().replace(" ", ""); + //For each prefixes, we separate args. + for(String prefix : new String[]{"-XX:-","-XX:+", "-XX:","-"}){ + while (true){ + int start = args.indexOf(prefix); + if(start == -1) break; + //Get the end of the current argument + int end = args.indexOf("-", start + prefix.length()); + if(end == -1) end = args.length(); + //Extract it + String parsedSubString = args.substring(start, end); + args = args.replace(parsedSubString, ""); + + //Check if two args aren't bundled together by mistake + if(parsedSubString.indexOf('=') == parsedSubString.lastIndexOf('=')) + parsedArguments.add(args.substring(start,end)); + else Log.w("JAVA ARGS PARSER", "Removed improper arguments: " + parsedSubString); + } + } + return parsedArguments; + } + private static void purgeArg(List argList, String argStart) { for(int i = 0; i < argList.size(); i++) { final String arg = argList.get(i);