diff options
author | Vladimir Hirsl | 2005-01-11 17:28:26 +0000 |
---|---|---|
committer | Vladimir Hirsl | 2005-01-11 17:28:26 +0000 |
commit | 2758147c933f562c333c81f20df8073301465085 (patch) | |
tree | 3caeb2ab668966a9ab0447ab9994ae7b86c19425 /build | |
parent | 70a3403e0bb8dc728aa97d162156c79c925462fd (diff) | |
download | org.eclipse.cdt-2758147c933f562c333c81f20df8073301465085.tar.gz org.eclipse.cdt-2758147c933f562c333c81f20df8073301465085.tar.xz org.eclipse.cdt-2758147c933f562c333c81f20df8073301465085.zip |
Fix for PR 82408 [ScannerConfig] GCCScannerInfoConsoleParser throws exception on "quoted spaces".
The problem was incorrect parsing of lines containing "matched" characters (`, ' and ").
Diffstat (limited to 'build')
-rw-r--r-- | build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCScannerInfoConsoleParser.java | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCScannerInfoConsoleParser.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCScannerInfoConsoleParser.java index e043164cdb0..3e534d8f0b5 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCScannerInfoConsoleParser.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCScannerInfoConsoleParser.java @@ -34,6 +34,7 @@ import java.util.Map; public class GCCScannerInfoConsoleParser implements IScannerInfoConsoleParser { private final static String SINGLE_QUOTE_STRING = "\'"; //$NON-NLS-1$ private final static String DOUBLE_QUOTE_STRING = "\""; //$NON-NLS-1$ + private final static char[] matchingChars = {'`', '\'', '\"'}; private IProject fProject = null; private IScannerInfoConsoleParserUtility fUtil = null; @@ -89,7 +90,8 @@ public class GCCScannerInfoConsoleParser implements IScannerInfoConsoleParser { } // Known patterns: // (a) gcc|g++ ... -Dxxx -Iyyy ... - ArrayList allTokens = new ArrayList(Arrays.asList(line.split("\\s")));//$NON-NLS-1$ + List allTokens = tokenize(line); +// ArrayList allTokens = new ArrayList(Arrays.asList(line.split("\\s+")));//$NON-NLS-1$ if (allTokens.size() <= 1) return false; Iterator I = allTokens.iterator(); @@ -182,6 +184,43 @@ public class GCCScannerInfoConsoleParser implements IScannerInfoConsoleParser { /** * @param line + * @return + */ + private List tokenize(String line) { + List rv = new ArrayList(2); + // find special characters that need to be matched: `, ' and " + // First Matching Chararcter + int prevFmc = line.length(); + int emc = -1; + char matchingChar = 0; + for (int i = 0; i < matchingChars.length; ++i) { + char ch = matchingChars[i]; + int fmc = line.indexOf(ch); + if (fmc > -1 && fmc < prevFmc) { + emc = line.indexOf(ch, fmc+1); + if (emc > fmc) { + matchingChar = ch; + prevFmc = fmc; + } + } + } + if (matchingChar != 0) { // found matched chars + String prefix = line.substring(0, prevFmc).trim(); + rv.addAll(Arrays.asList(prefix.split("\\s+")));//$NON-NLS-1$ + + rv.add(line.substring(prevFmc, emc+1)); + + // recursion + rv.addAll(tokenize(line.substring(emc+1).trim())); + } + else { + rv.addAll(Arrays.asList(line.split("\\s+")));//$NON-NLS-1$ + } + return rv; + } + + /** + * @param line * @param includes */ private void parseLineForIncludePaths(String line, List includes) { |