From 199824d975c6c704ce6592cb38d6b6f07aafec1e Mon Sep 17 00:00:00 2001 From: Jonah Graham Date: Thu, 14 Nov 2019 10:47:04 -0500 Subject: [PATCH] Revert "Bug 552479: Reuse argument string to array from CommandLineUtil" This reverts commit 1060546c368966d04dcd6d64f4a05757b33e5716. --- .../cdt/core/build/CBuildConfiguration.java | 49 +++++++++++++++++-- 1 file changed, 46 insertions(+), 3 deletions(-) diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CBuildConfiguration.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CBuildConfiguration.java index 00635d77df6..3ac52345458 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CBuildConfiguration.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CBuildConfiguration.java @@ -34,6 +34,8 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.IConsoleParser; @@ -65,7 +67,6 @@ import org.eclipse.cdt.internal.core.build.Messages; import org.eclipse.cdt.internal.core.model.BinaryRunner; import org.eclipse.cdt.internal.core.model.CModelManager; import org.eclipse.cdt.internal.core.parser.ParserSettings2; -import org.eclipse.cdt.utils.CommandLineUtil; import org.eclipse.core.filesystem.URIUtil; import org.eclipse.core.resources.IBuildConfiguration; import org.eclipse.core.resources.IContainer; @@ -839,8 +840,50 @@ public abstract class CBuildConfiguration extends PlatformObject implements ICBu * @return List of arg Strings */ private List stripArgs(String argString) { - String[] args = CommandLineUtil.argumentsToArrayUnixStyle(argString); - return new ArrayList<>(Arrays.asList(args)); + Pattern p0 = Pattern.compile("('(.*?)').*"); //$NON-NLS-1$ + Pattern p1 = Pattern.compile("([\\-](\\w|[\\-])+[=]\\\".*?\\\").*"); //$NON-NLS-1$ + Pattern p2 = Pattern.compile("([\\-](\\w|[\\-])+[=]'.*?').*"); //$NON-NLS-1$ + Pattern p3 = Pattern.compile("([\\-](\\w|[\\-])+[=][^\\s]+).*"); //$NON-NLS-1$ + Pattern p4 = Pattern.compile("([^\\s]+).*"); //$NON-NLS-1$ + boolean finished = false; + List args = new ArrayList<>(); + while (!finished) { + Matcher m0 = p0.matcher(argString); + if (m0.matches()) { + argString = argString.replaceFirst("'.*?'", "").trim(); //$NON-NLS-1$ //$NON-NLS-2$ + String s = m0.group(2).trim(); // strip single quotes + args.add(s); + } else { + Matcher m1 = p1.matcher(argString); + if (m1.matches()) { + argString = argString.replaceFirst("[\\-](\\w|[\\-])+[=]\\\".*?\\\"", "").trim(); //$NON-NLS-1$ //$NON-NLS-2$ + String s = m1.group(1).trim(); + args.add(s); + } else { + Matcher m2 = p2.matcher(argString); + if (m2.matches()) { + argString = argString.replaceFirst("[\\-](\\w|[\\-])+[=]'.*?'", "").trim(); //$NON-NLS-1$ //$NON-NLS-2$ + String s = m2.group(1).trim(); + args.add(s); + } else { + Matcher m3 = p3.matcher(argString); + if (m3.matches()) { + argString = argString.replaceFirst("[\\-](\\w|[\\-])+[=][^\\s]+", "").trim(); //$NON-NLS-1$ //$NON-NLS-2$ + args.add(m3.group(1).trim()); + } else { + Matcher m4 = p4.matcher(argString); + if (m4.matches()) { + argString = argString.replaceFirst("[^\\s]+", "").trim(); //$NON-NLS-1$ //$NON-NLS-2$ + args.add(m4.group(1).trim()); + } else { + finished = true; + } + } + } + } + } + } + return args; } private boolean infoChanged = false;