From 9b34e460e564024d76ff7fb3e56de85ee671902e Mon Sep 17 00:00:00 2001 From: Marc-Andre Laperle Date: Thu, 26 Aug 2021 02:19:23 -0400 Subject: [PATCH] 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 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 --- .../internal/IncludePath_C_POSIXTest.java | 64 +++++++++---------- .../internal/ToolCommandlineParserTest.java | 12 ++-- .../cdt/jsoncdb/core/participant/Arglets.java | 2 +- .../microsoft/MsclToolCommandlineParser.java | 2 +- 4 files changed, 40 insertions(+), 40 deletions(-) diff --git a/jsoncdb/org.eclipse.cdt.jsoncdb.core.tests/src/org/eclipse/cdt/jsoncdb/core/internal/IncludePath_C_POSIXTest.java b/jsoncdb/org.eclipse.cdt.jsoncdb.core.tests/src/org/eclipse/cdt/jsoncdb/core/internal/IncludePath_C_POSIXTest.java index fc60881368c..4365adbb33e 100644 --- a/jsoncdb/org.eclipse.cdt.jsoncdb.core.tests/src/org/eclipse/cdt/jsoncdb/core/internal/IncludePath_C_POSIXTest.java +++ b/jsoncdb/org.eclipse.cdt.jsoncdb.core.tests/src/org/eclipse/cdt/jsoncdb/core/internal/IncludePath_C_POSIXTest.java @@ -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)); } } diff --git a/jsoncdb/org.eclipse.cdt.jsoncdb.core.tests/src/org/eclipse/cdt/jsoncdb/core/internal/ToolCommandlineParserTest.java b/jsoncdb/org.eclipse.cdt.jsoncdb.core.tests/src/org/eclipse/cdt/jsoncdb/core/internal/ToolCommandlineParserTest.java index 4bf8fdc862c..7415a793f5d 100644 --- a/jsoncdb/org.eclipse.cdt.jsoncdb.core.tests/src/org/eclipse/cdt/jsoncdb/core/internal/ToolCommandlineParserTest.java +++ b/jsoncdb/org.eclipse.cdt.jsoncdb.core.tests/src/org/eclipse/cdt/jsoncdb/core/internal/ToolCommandlineParserTest.java @@ -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)); } } diff --git a/jsoncdb/org.eclipse.cdt.jsoncdb.core/src/org/eclipse/cdt/jsoncdb/core/participant/Arglets.java b/jsoncdb/org.eclipse.cdt.jsoncdb.core/src/org/eclipse/cdt/jsoncdb/core/participant/Arglets.java index b12bf0329b9..ae5aadf66f3 100644 --- a/jsoncdb/org.eclipse.cdt.jsoncdb.core/src/org/eclipse/cdt/jsoncdb/core/participant/Arglets.java +++ b/jsoncdb/org.eclipse.cdt.jsoncdb.core/src/org/eclipse/cdt/jsoncdb/core/participant/Arglets.java @@ -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); } } diff --git a/jsoncdb/org.eclipse.cdt.jsoncdb.microsoft/src/org/eclipse/cdt/jsoncdb/microsoft/MsclToolCommandlineParser.java b/jsoncdb/org.eclipse.cdt.jsoncdb.microsoft/src/org/eclipse/cdt/jsoncdb/microsoft/MsclToolCommandlineParser.java index a2a99f3f63a..c1db7603fa0 100644 --- a/jsoncdb/org.eclipse.cdt.jsoncdb.microsoft/src/org/eclipse/cdt/jsoncdb/microsoft/MsclToolCommandlineParser.java +++ b/jsoncdb/org.eclipse.cdt.jsoncdb.microsoft/src/org/eclipse/cdt/jsoncdb/microsoft/MsclToolCommandlineParser.java @@ -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); } }