mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-12 02:35:37 +02:00
Fix for PR 82408 [ScannerConfig] GCCScannerInfoConsoleParser throws exception on "quoted spaces".
The problem was incorrect parsing of lines containing "matched" characters (`, ' and ").
This commit is contained in:
parent
70a3403e0b
commit
2758147c93
1 changed files with 40 additions and 1 deletions
|
@ -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();
|
||||
|
@ -180,6 +182,43 @@ public class GCCScannerInfoConsoleParser implements IScannerInfoConsoleParser {
|
|||
return rc;
|
||||
}
|
||||
|
||||
/**
|
||||
* @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
|
||||
|
|
Loading…
Add table
Reference in a new issue