mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-08 02:06:01 +02:00
Bug 575628 - jsoncdb parser defines normal includes as local includes
When using jsoncdb and parsing either -I (POSIX) or /I (CL) arguments, the include paths are flagged as local include paths. Local include paths are treated by the CDT preprocessor only for #include "foo.h" (quoted paths). So when using jsoncdb, several of my #include <foo.h> don't work because they cannot be found on the wrongly flagged local include path whereas others can sometimes be found because of a feature in the indexer preferences called "heuristic resolution" which works if the header happens to be in the workspace (but it can also silently pick up the wrong one on name clash). Change-Id: Ibb5317ed73f4a1700f21e8e3531db74995542d13 Signed-off-by: Marc-Andre Laperle <malaperle@gmail.com>
This commit is contained in:
parent
139e82268b
commit
9b34e460e5
4 changed files with 40 additions and 40 deletions
|
@ -48,42 +48,42 @@ public class IncludePath_C_POSIXTest {
|
||||||
// -I/an/Include/Path
|
// -I/an/Include/Path
|
||||||
result = new ParseContext();
|
result = new ParseContext();
|
||||||
assertEquals(2 + name.length(), testee.processArgument(result, cwd, "-I" + name + more));
|
assertEquals(2 + name.length(), testee.processArgument(result, cwd, "-I" + name + more));
|
||||||
assertEquals("#entries", 1, result.getIncludePaths().size());
|
assertEquals("#entries", 1, result.getSystemIncludePaths().size());
|
||||||
assertEquals("name", name, result.getIncludePaths().get(0));
|
assertEquals("name", name, result.getSystemIncludePaths().get(0));
|
||||||
// -I'/an/Include/Path'
|
// -I'/an/Include/Path'
|
||||||
result = new ParseContext();
|
result = new ParseContext();
|
||||||
assertEquals(2 + name.length() + 2, testee.processArgument(result, cwd, "-I" + "'" + name + "'" + more));
|
assertEquals(2 + name.length() + 2, testee.processArgument(result, cwd, "-I" + "'" + name + "'" + more));
|
||||||
assertEquals("#entries", 1, result.getIncludePaths().size());
|
assertEquals("#entries", 1, result.getSystemIncludePaths().size());
|
||||||
assertEquals("name", name, result.getIncludePaths().get(0));
|
assertEquals("name", name, result.getSystemIncludePaths().get(0));
|
||||||
// -I"/an/Include/Path"
|
// -I"/an/Include/Path"
|
||||||
result = new ParseContext();
|
result = new ParseContext();
|
||||||
assertEquals(2 + name.length() + 2, testee.processArgument(result, cwd, "-I" + "\"" + name + "\"" + more));
|
assertEquals(2 + name.length() + 2, testee.processArgument(result, cwd, "-I" + "\"" + name + "\"" + more));
|
||||||
assertEquals("#entries", 1, result.getIncludePaths().size());
|
assertEquals("#entries", 1, result.getSystemIncludePaths().size());
|
||||||
assertEquals("name", name, result.getIncludePaths().get(0));
|
assertEquals("name", name, result.getSystemIncludePaths().get(0));
|
||||||
|
|
||||||
// -I /an/Include/Path
|
// -I /an/Include/Path
|
||||||
result = new ParseContext();
|
result = new ParseContext();
|
||||||
assertEquals(2 + name.length() + 3, testee.processArgument(result, cwd, "-I " + name + more));
|
assertEquals(2 + name.length() + 3, testee.processArgument(result, cwd, "-I " + name + more));
|
||||||
assertEquals("#entries", 1, result.getIncludePaths().size());
|
assertEquals("#entries", 1, result.getSystemIncludePaths().size());
|
||||||
assertEquals("name", name, result.getIncludePaths().get(0));
|
assertEquals("name", name, result.getSystemIncludePaths().get(0));
|
||||||
// -I '/an/Include/Path'
|
// -I '/an/Include/Path'
|
||||||
result = new ParseContext();
|
result = new ParseContext();
|
||||||
assertEquals(2 + name.length() + 3 + 2, testee.processArgument(result, cwd, "-I " + "'" + name + "'" + more));
|
assertEquals(2 + name.length() + 3 + 2, testee.processArgument(result, cwd, "-I " + "'" + name + "'" + more));
|
||||||
assertEquals("#entries", 1, result.getIncludePaths().size());
|
assertEquals("#entries", 1, result.getSystemIncludePaths().size());
|
||||||
assertEquals("name", name, result.getIncludePaths().get(0));
|
assertEquals("name", name, result.getSystemIncludePaths().get(0));
|
||||||
// -I "/an/Include/Path"
|
// -I "/an/Include/Path"
|
||||||
result = new ParseContext();
|
result = new ParseContext();
|
||||||
assertEquals(2 + name.length() + 3 + 2,
|
assertEquals(2 + name.length() + 3 + 2,
|
||||||
testee.processArgument(result, cwd, "-I " + "\"" + name + "\"" + more));
|
testee.processArgument(result, cwd, "-I " + "\"" + name + "\"" + more));
|
||||||
assertEquals("#entries", 1, result.getIncludePaths().size());
|
assertEquals("#entries", 1, result.getSystemIncludePaths().size());
|
||||||
assertEquals("name", name, result.getIncludePaths().get(0));
|
assertEquals("name", name, result.getSystemIncludePaths().get(0));
|
||||||
|
|
||||||
name = (new Path("A:an\\Include/Path")).toOSString();
|
name = (new Path("A:an\\Include/Path")).toOSString();
|
||||||
// -IA:an\Include/Path
|
// -IA:an\Include/Path
|
||||||
result = new ParseContext();
|
result = new ParseContext();
|
||||||
assertEquals(2 + name.length(), testee.processArgument(result, cwd, "-I" + name + more));
|
assertEquals(2 + name.length(), testee.processArgument(result, cwd, "-I" + name + more));
|
||||||
assertEquals("#entries", 1, result.getIncludePaths().size());
|
assertEquals("#entries", 1, result.getSystemIncludePaths().size());
|
||||||
assertEquals("name", name, result.getIncludePaths().get(0));
|
assertEquals("name", name, result.getSystemIncludePaths().get(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -101,32 +101,32 @@ public class IncludePath_C_POSIXTest {
|
||||||
// -I'/ye olde/In clu de/Pa the'
|
// -I'/ye olde/In clu de/Pa the'
|
||||||
result = new ParseContext();
|
result = new ParseContext();
|
||||||
assertEquals(2 + name.length() + 2, testee.processArgument(result, cwd, "-I" + "'" + name + "'" + more));
|
assertEquals(2 + name.length() + 2, testee.processArgument(result, cwd, "-I" + "'" + name + "'" + more));
|
||||||
assertEquals("#entries", 1, result.getIncludePaths().size());
|
assertEquals("#entries", 1, result.getSystemIncludePaths().size());
|
||||||
assertEquals("name", name, result.getIncludePaths().get(0));
|
assertEquals("name", name, result.getSystemIncludePaths().get(0));
|
||||||
// -I"/ye olde/In clu de/Pa the"
|
// -I"/ye olde/In clu de/Pa the"
|
||||||
result = new ParseContext();
|
result = new ParseContext();
|
||||||
assertEquals(2 + name.length() + 2, testee.processArgument(result, cwd, "-I" + "\"" + name + "\"" + more));
|
assertEquals(2 + name.length() + 2, testee.processArgument(result, cwd, "-I" + "\"" + name + "\"" + more));
|
||||||
assertEquals("#entries", 1, result.getIncludePaths().size());
|
assertEquals("#entries", 1, result.getSystemIncludePaths().size());
|
||||||
assertEquals("name", name, result.getIncludePaths().get(0));
|
assertEquals("name", name, result.getSystemIncludePaths().get(0));
|
||||||
|
|
||||||
// -I '/ye olde/In clu de/Pa the'
|
// -I '/ye olde/In clu de/Pa the'
|
||||||
result = new ParseContext();
|
result = new ParseContext();
|
||||||
assertEquals(2 + name.length() + 3 + 2, testee.processArgument(result, cwd, "-I " + "'" + name + "'" + more));
|
assertEquals(2 + name.length() + 3 + 2, testee.processArgument(result, cwd, "-I " + "'" + name + "'" + more));
|
||||||
assertEquals("#entries", 1, result.getIncludePaths().size());
|
assertEquals("#entries", 1, result.getSystemIncludePaths().size());
|
||||||
assertEquals("name", name, result.getIncludePaths().get(0));
|
assertEquals("name", name, result.getSystemIncludePaths().get(0));
|
||||||
// -I "/ye olde/In clu de/Pa the"
|
// -I "/ye olde/In clu de/Pa the"
|
||||||
result = new ParseContext();
|
result = new ParseContext();
|
||||||
assertEquals(2 + name.length() + 3 + 2,
|
assertEquals(2 + name.length() + 3 + 2,
|
||||||
testee.processArgument(result, cwd, "-I " + "\"" + name + "\"" + more));
|
testee.processArgument(result, cwd, "-I " + "\"" + name + "\"" + more));
|
||||||
assertEquals("#entries", 1, result.getIncludePaths().size());
|
assertEquals("#entries", 1, result.getSystemIncludePaths().size());
|
||||||
assertEquals("name", name, result.getIncludePaths().get(0));
|
assertEquals("name", name, result.getSystemIncludePaths().get(0));
|
||||||
|
|
||||||
name = (new Path("A:an\\In CLU de/Pat h")).toOSString();
|
name = (new Path("A:an\\In CLU de/Pat h")).toOSString();
|
||||||
// -I'A:an\In CLU de/Pat h'
|
// -I'A:an\In CLU de/Pat h'
|
||||||
result = new ParseContext();
|
result = new ParseContext();
|
||||||
assertEquals(2 + name.length() + 2, testee.processArgument(result, cwd, "-I" + "\"" + name + "\"" + more));
|
assertEquals(2 + name.length() + 2, testee.processArgument(result, cwd, "-I" + "\"" + name + "\"" + more));
|
||||||
assertEquals("#entries", 1, result.getIncludePaths().size());
|
assertEquals("#entries", 1, result.getSystemIncludePaths().size());
|
||||||
assertEquals("name", name, result.getIncludePaths().get(0));
|
assertEquals("name", name, result.getSystemIncludePaths().get(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -143,32 +143,32 @@ public class IncludePath_C_POSIXTest {
|
||||||
IPath cwd = new Path("/compiler/working/dir");
|
IPath cwd = new Path("/compiler/working/dir");
|
||||||
ParseContext result = new ParseContext();
|
ParseContext result = new ParseContext();
|
||||||
assertEquals(2 + name.length(), testee.processArgument(result, cwd, "-I" + name + more));
|
assertEquals(2 + name.length(), testee.processArgument(result, cwd, "-I" + name + more));
|
||||||
assertEquals("#entries", 1, result.getIncludePaths().size());
|
assertEquals("#entries", 1, result.getSystemIncludePaths().size());
|
||||||
String absPath = cwd.append(name).toString();
|
String absPath = cwd.append(name).toString();
|
||||||
assertEquals("name", absPath, result.getIncludePaths().get(0));
|
assertEquals("name", absPath, result.getSystemIncludePaths().get(0));
|
||||||
|
|
||||||
name = (new Path("a\\relative\\Include\\Path")).toOSString();
|
name = (new Path("a\\relative\\Include\\Path")).toOSString();
|
||||||
cwd = new Path("\\compiler\\working\\dir");
|
cwd = new Path("\\compiler\\working\\dir");
|
||||||
result = new ParseContext();
|
result = new ParseContext();
|
||||||
assertEquals(2 + name.length(), testee.processArgument(result, cwd, "-I" + name + more));
|
assertEquals(2 + name.length(), testee.processArgument(result, cwd, "-I" + name + more));
|
||||||
assertEquals("#entries", 1, result.getIncludePaths().size());
|
assertEquals("#entries", 1, result.getSystemIncludePaths().size());
|
||||||
absPath = cwd.append(name).toString();
|
absPath = cwd.append(name).toString();
|
||||||
assertEquals("name", absPath, result.getIncludePaths().get(0));
|
assertEquals("name", absPath, result.getSystemIncludePaths().get(0));
|
||||||
|
|
||||||
name = (new Path("../../src/Include/Path")).toOSString();
|
name = (new Path("../../src/Include/Path")).toOSString();
|
||||||
cwd = new Path("/compiler/working/dir");
|
cwd = new Path("/compiler/working/dir");
|
||||||
result = new ParseContext();
|
result = new ParseContext();
|
||||||
assertEquals(2 + name.length(), testee.processArgument(result, cwd, "-I" + name + more));
|
assertEquals(2 + name.length(), testee.processArgument(result, cwd, "-I" + name + more));
|
||||||
assertEquals("#entries", 1, result.getIncludePaths().size());
|
assertEquals("#entries", 1, result.getSystemIncludePaths().size());
|
||||||
absPath = cwd.append(name).toString();
|
absPath = cwd.append(name).toString();
|
||||||
assertEquals("name", absPath, result.getIncludePaths().get(0));
|
assertEquals("name", absPath, result.getSystemIncludePaths().get(0));
|
||||||
|
|
||||||
name = (new Path("..\\..\\src\\Include\\Path")).toOSString();
|
name = (new Path("..\\..\\src\\Include\\Path")).toOSString();
|
||||||
cwd = new Path("\\compiler\\working\\dir");
|
cwd = new Path("\\compiler\\working\\dir");
|
||||||
result = new ParseContext();
|
result = new ParseContext();
|
||||||
assertEquals(2 + name.length(), testee.processArgument(result, cwd, "-I" + name + more));
|
assertEquals(2 + name.length(), testee.processArgument(result, cwd, "-I" + name + more));
|
||||||
assertEquals("#entries", 1, result.getIncludePaths().size());
|
assertEquals("#entries", 1, result.getSystemIncludePaths().size());
|
||||||
absPath = cwd.append(name).toString();
|
absPath = cwd.append(name).toString();
|
||||||
assertEquals("name", absPath, result.getIncludePaths().get(0));
|
assertEquals("name", absPath, result.getSystemIncludePaths().get(0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,8 +66,8 @@ public class ToolCommandlineParserTest {
|
||||||
assertTrue("found", result.getDefines().containsKey(defName));
|
assertTrue("found", result.getDefines().containsKey(defName));
|
||||||
assertEquals("value", "", result.getDefines().get(defName));
|
assertEquals("value", "", result.getDefines().get(defName));
|
||||||
|
|
||||||
assertEquals("#paths", 1, result.getIncludePaths().size());
|
assertEquals("#paths", 1, result.getSystemIncludePaths().size());
|
||||||
assertEquals("value", cwdP.resolve(incDirName).toString(), result.getIncludePaths().get(0));
|
assertEquals("value", cwdP.resolve(incDirName).toString(), result.getSystemIncludePaths().get(0));
|
||||||
|
|
||||||
// @ a/response.file.txt
|
// @ a/response.file.txt
|
||||||
result = testee.processArgs(new Path(cwdP.toString()), "@ " + relRspP.toString() + " -D" + defName + more);
|
result = testee.processArgs(new Path(cwdP.toString()), "@ " + relRspP.toString() + " -D" + defName + more);
|
||||||
|
@ -79,8 +79,8 @@ public class ToolCommandlineParserTest {
|
||||||
assertTrue("found", result.getDefines().containsKey(defName));
|
assertTrue("found", result.getDefines().containsKey(defName));
|
||||||
assertEquals("value", "", result.getDefines().get(defName));
|
assertEquals("value", "", result.getDefines().get(defName));
|
||||||
|
|
||||||
assertEquals("#paths", 1, result.getIncludePaths().size());
|
assertEquals("#paths", 1, result.getSystemIncludePaths().size());
|
||||||
assertEquals("value", cwdP.resolve(incDirName).toString(), result.getIncludePaths().get(0));
|
assertEquals("value", cwdP.resolve(incDirName).toString(), result.getSystemIncludePaths().get(0));
|
||||||
|
|
||||||
Files.delete(absRspP);
|
Files.delete(absRspP);
|
||||||
}
|
}
|
||||||
|
@ -102,7 +102,7 @@ public class ToolCommandlineParserTest {
|
||||||
result = new ParseContext();
|
result = new ParseContext();
|
||||||
// @<< ... <<
|
// @<< ... <<
|
||||||
result = testee.processArgs(cwd, "@<<" + " -I" + name + " <<" + more);
|
result = testee.processArgs(cwd, "@<<" + " -I" + name + " <<" + more);
|
||||||
assertEquals("#paths", 1, result.getIncludePaths().size());
|
assertEquals("#paths", 1, result.getSystemIncludePaths().size());
|
||||||
assertEquals("name", name, result.getIncludePaths().get(0));
|
assertEquals("name", name, result.getSystemIncludePaths().get(0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -338,7 +338,7 @@ public final class Arglets {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public int processArgument(IArgumentCollector resultCollector, IPath cwd, String argsLine) {
|
public int processArgument(IArgumentCollector resultCollector, IPath cwd, String argsLine) {
|
||||||
return processArgument(false, resultCollector, cwd, argsLine, optionMatchers);
|
return processArgument(true, resultCollector, cwd, argsLine, optionMatchers);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -64,7 +64,7 @@ class MsclToolCommandlineParser extends DefaultToolCommandlineParser {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public int processArgument(IArgumentCollector resultCollector, IPath cwd, String argsLine) {
|
public int processArgument(IArgumentCollector resultCollector, IPath cwd, String argsLine) {
|
||||||
return processArgument(false, resultCollector, cwd, argsLine, optionMatchers);
|
return processArgument(true, resultCollector, cwd, argsLine, optionMatchers);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue