1
0
Fork 0
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:
Marc-Andre Laperle 2021-08-26 02:19:23 -04:00
parent 139e82268b
commit 9b34e460e5
4 changed files with 40 additions and 40 deletions

View file

@ -48,42 +48,42 @@ public class IncludePath_C_POSIXTest {
// -I/an/Include/Path
result = new ParseContext();
assertEquals(2 + name.length(), testee.processArgument(result, cwd, "-I" + name + more));
assertEquals("#entries", 1, result.getIncludePaths().size());
assertEquals("name", name, result.getIncludePaths().get(0));
assertEquals("#entries", 1, result.getSystemIncludePaths().size());
assertEquals("name", name, result.getSystemIncludePaths().get(0));
// -I'/an/Include/Path'
result = new ParseContext();
assertEquals(2 + name.length() + 2, testee.processArgument(result, cwd, "-I" + "'" + name + "'" + more));
assertEquals("#entries", 1, result.getIncludePaths().size());
assertEquals("name", name, result.getIncludePaths().get(0));
assertEquals("#entries", 1, result.getSystemIncludePaths().size());
assertEquals("name", name, result.getSystemIncludePaths().get(0));
// -I"/an/Include/Path"
result = new ParseContext();
assertEquals(2 + name.length() + 2, testee.processArgument(result, cwd, "-I" + "\"" + name + "\"" + more));
assertEquals("#entries", 1, result.getIncludePaths().size());
assertEquals("name", name, result.getIncludePaths().get(0));
assertEquals("#entries", 1, result.getSystemIncludePaths().size());
assertEquals("name", name, result.getSystemIncludePaths().get(0));
// -I /an/Include/Path
result = new ParseContext();
assertEquals(2 + name.length() + 3, testee.processArgument(result, cwd, "-I " + name + more));
assertEquals("#entries", 1, result.getIncludePaths().size());
assertEquals("name", name, result.getIncludePaths().get(0));
assertEquals("#entries", 1, result.getSystemIncludePaths().size());
assertEquals("name", name, result.getSystemIncludePaths().get(0));
// -I '/an/Include/Path'
result = new ParseContext();
assertEquals(2 + name.length() + 3 + 2, testee.processArgument(result, cwd, "-I " + "'" + name + "'" + more));
assertEquals("#entries", 1, result.getIncludePaths().size());
assertEquals("name", name, result.getIncludePaths().get(0));
assertEquals("#entries", 1, result.getSystemIncludePaths().size());
assertEquals("name", name, result.getSystemIncludePaths().get(0));
// -I "/an/Include/Path"
result = new ParseContext();
assertEquals(2 + name.length() + 3 + 2,
testee.processArgument(result, cwd, "-I " + "\"" + name + "\"" + more));
assertEquals("#entries", 1, result.getIncludePaths().size());
assertEquals("name", name, result.getIncludePaths().get(0));
assertEquals("#entries", 1, result.getSystemIncludePaths().size());
assertEquals("name", name, result.getSystemIncludePaths().get(0));
name = (new Path("A:an\\Include/Path")).toOSString();
// -IA:an\Include/Path
result = new ParseContext();
assertEquals(2 + name.length(), testee.processArgument(result, cwd, "-I" + name + more));
assertEquals("#entries", 1, result.getIncludePaths().size());
assertEquals("name", name, result.getIncludePaths().get(0));
assertEquals("#entries", 1, result.getSystemIncludePaths().size());
assertEquals("name", name, result.getSystemIncludePaths().get(0));
}
/**
@ -101,32 +101,32 @@ public class IncludePath_C_POSIXTest {
// -I'/ye olde/In clu de/Pa the'
result = new ParseContext();
assertEquals(2 + name.length() + 2, testee.processArgument(result, cwd, "-I" + "'" + name + "'" + more));
assertEquals("#entries", 1, result.getIncludePaths().size());
assertEquals("name", name, result.getIncludePaths().get(0));
assertEquals("#entries", 1, result.getSystemIncludePaths().size());
assertEquals("name", name, result.getSystemIncludePaths().get(0));
// -I"/ye olde/In clu de/Pa the"
result = new ParseContext();
assertEquals(2 + name.length() + 2, testee.processArgument(result, cwd, "-I" + "\"" + name + "\"" + more));
assertEquals("#entries", 1, result.getIncludePaths().size());
assertEquals("name", name, result.getIncludePaths().get(0));
assertEquals("#entries", 1, result.getSystemIncludePaths().size());
assertEquals("name", name, result.getSystemIncludePaths().get(0));
// -I '/ye olde/In clu de/Pa the'
result = new ParseContext();
assertEquals(2 + name.length() + 3 + 2, testee.processArgument(result, cwd, "-I " + "'" + name + "'" + more));
assertEquals("#entries", 1, result.getIncludePaths().size());
assertEquals("name", name, result.getIncludePaths().get(0));
assertEquals("#entries", 1, result.getSystemIncludePaths().size());
assertEquals("name", name, result.getSystemIncludePaths().get(0));
// -I "/ye olde/In clu de/Pa the"
result = new ParseContext();
assertEquals(2 + name.length() + 3 + 2,
testee.processArgument(result, cwd, "-I " + "\"" + name + "\"" + more));
assertEquals("#entries", 1, result.getIncludePaths().size());
assertEquals("name", name, result.getIncludePaths().get(0));
assertEquals("#entries", 1, result.getSystemIncludePaths().size());
assertEquals("name", name, result.getSystemIncludePaths().get(0));
name = (new Path("A:an\\In CLU de/Pat h")).toOSString();
// -I'A:an\In CLU de/Pat h'
result = new ParseContext();
assertEquals(2 + name.length() + 2, testee.processArgument(result, cwd, "-I" + "\"" + name + "\"" + more));
assertEquals("#entries", 1, result.getIncludePaths().size());
assertEquals("name", name, result.getIncludePaths().get(0));
assertEquals("#entries", 1, result.getSystemIncludePaths().size());
assertEquals("name", name, result.getSystemIncludePaths().get(0));
}
/**
@ -143,32 +143,32 @@ public class IncludePath_C_POSIXTest {
IPath cwd = new Path("/compiler/working/dir");
ParseContext result = new ParseContext();
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();
assertEquals("name", absPath, result.getIncludePaths().get(0));
assertEquals("name", absPath, result.getSystemIncludePaths().get(0));
name = (new Path("a\\relative\\Include\\Path")).toOSString();
cwd = new Path("\\compiler\\working\\dir");
result = new ParseContext();
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();
assertEquals("name", absPath, result.getIncludePaths().get(0));
assertEquals("name", absPath, result.getSystemIncludePaths().get(0));
name = (new Path("../../src/Include/Path")).toOSString();
cwd = new Path("/compiler/working/dir");
result = new ParseContext();
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();
assertEquals("name", absPath, result.getIncludePaths().get(0));
assertEquals("name", absPath, result.getSystemIncludePaths().get(0));
name = (new Path("..\\..\\src\\Include\\Path")).toOSString();
cwd = new Path("\\compiler\\working\\dir");
result = new ParseContext();
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();
assertEquals("name", absPath, result.getIncludePaths().get(0));
assertEquals("name", absPath, result.getSystemIncludePaths().get(0));
}
}

View file

@ -66,8 +66,8 @@ public class ToolCommandlineParserTest {
assertTrue("found", result.getDefines().containsKey(defName));
assertEquals("value", "", result.getDefines().get(defName));
assertEquals("#paths", 1, result.getIncludePaths().size());
assertEquals("value", cwdP.resolve(incDirName).toString(), result.getIncludePaths().get(0));
assertEquals("#paths", 1, result.getSystemIncludePaths().size());
assertEquals("value", cwdP.resolve(incDirName).toString(), result.getSystemIncludePaths().get(0));
// @ a/response.file.txt
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));
assertEquals("value", "", result.getDefines().get(defName));
assertEquals("#paths", 1, result.getIncludePaths().size());
assertEquals("value", cwdP.resolve(incDirName).toString(), result.getIncludePaths().get(0));
assertEquals("#paths", 1, result.getSystemIncludePaths().size());
assertEquals("value", cwdP.resolve(incDirName).toString(), result.getSystemIncludePaths().get(0));
Files.delete(absRspP);
}
@ -102,7 +102,7 @@ public class ToolCommandlineParserTest {
result = new ParseContext();
// @<< ... <<
result = testee.processArgs(cwd, "@<<" + " -I" + name + " <<" + more);
assertEquals("#paths", 1, result.getIncludePaths().size());
assertEquals("name", name, result.getIncludePaths().get(0));
assertEquals("#paths", 1, result.getSystemIncludePaths().size());
assertEquals("name", name, result.getSystemIncludePaths().get(0));
}
}

View file

@ -338,7 +338,7 @@ public final class Arglets {
*/
@Override
public int processArgument(IArgumentCollector resultCollector, IPath cwd, String argsLine) {
return processArgument(false, resultCollector, cwd, argsLine, optionMatchers);
return processArgument(true, resultCollector, cwd, argsLine, optionMatchers);
}
}

View file

@ -64,7 +64,7 @@ class MsclToolCommandlineParser extends DefaultToolCommandlineParser {
*/
@Override
public int processArgument(IArgumentCollector resultCollector, IPath cwd, String argsLine) {
return processArgument(false, resultCollector, cwd, argsLine, optionMatchers);
return processArgument(true, resultCollector, cwd, argsLine, optionMatchers);
}
}