diff options
2 files changed, 45 insertions, 4 deletions
diff --git a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/internal/errorparsers/tests/ErrorParserFileMatchingTest.java b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/internal/errorparsers/tests/ErrorParserFileMatchingTest.java index 0f7b4c86998..d5475bdd7b7 100644 --- a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/internal/errorparsers/tests/ErrorParserFileMatchingTest.java +++ b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/internal/errorparsers/tests/ErrorParserFileMatchingTest.java @@ -1206,6 +1206,36 @@ public class ErrorParserFileMatchingTest extends TestCase { } /** + * Checks if output of '-n'/'--just-print' or '-w'/'--print-directory' options of make can be recognized. + * + * @throws Exception... + */ + public void testPushPop_WithNoLevel() throws Exception { + String fileName = getName() + ".c"; + + ResourceHelper.createFolder(fProject, "Folder"); + ResourceHelper.createFolder(fProject, "Folder/SubFolder"); + + ResourceHelper.createFile(fProject, fileName); + ResourceHelper.createFile(fProject, "Folder/"+fileName); + ResourceHelper.createFile(fProject, "Folder/SubFolder/"+fileName); + + String lines = "make: Entering directory `Folder'\n" + + "make: Entering directory `SubFolder'\n" + + "make: Leaving directory `SubFolder'\n" + + fileName+":1:error\n"; + + String[] errorParsers = {CWD_LOCATOR_ID, mockErrorParserId }; + parseOutput(fProject, fProject.getLocation(), errorParsers, lines); + assertEquals(1, errorList.size()); + + ProblemMarkerInfo problemMarkerInfo = errorList.get(0); + assertEquals("L/FindMatchingFilesTest/Folder/"+fileName,problemMarkerInfo.file.toString()); + assertEquals(1,problemMarkerInfo.lineNumber); + assertEquals("error",problemMarkerInfo.description); + } + + /** * Checks if a file from error output can be found. * * @throws Exception... diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/errorparsers/CWDLocator.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/errorparsers/CWDLocator.java index e1324c82e04..ce6125841c4 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/errorparsers/CWDLocator.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/errorparsers/CWDLocator.java @@ -24,14 +24,14 @@ import org.eclipse.core.runtime.Path; */ public class CWDLocator extends AbstractErrorParser { private static boolean enabled = true; - + @Override public boolean processLine(String line, ErrorParserManager manager) { int lineNumber = manager.getLineCounter(); // enable on first line (can be previously disabled if processed parallel build) if (lineNumber==1) enabled = true; - + if (enabled) return super.processLine(line, manager); return false; @@ -53,7 +53,8 @@ public class CWDLocator extends AbstractErrorParser { } return false; } - }, new ErrorPattern("make\\[(.*)\\]: Entering directory `(.*)'", 0, 0) { //$NON-NLS-1$ + }, + new ErrorPattern("make\\[(.*)\\]: Entering directory `(.*)'", 0, 0) { //$NON-NLS-1$ @Override protected boolean recordError(Matcher matcher, ErrorParserManager eoParser) { int level; @@ -74,7 +75,17 @@ public class CWDLocator extends AbstractErrorParser { eoParser.pushDirectory(new Path(dir)); return true; } - }, new ErrorPattern("make\\[.*\\]: Leaving directory", 0, 0) { //$NON-NLS-1$ + }, + // This is emitted by GNU make using options -n, --just-print or -w, --print-directory. + new ErrorPattern("make: Entering directory `(.*)'", 0, 0) { //$NON-NLS-1$ + @Override + protected boolean recordError(Matcher matcher, ErrorParserManager eoParser) { + String dir = matcher.group(1); + eoParser.pushDirectory(new Path(dir)); + return true; + } + }, + new ErrorPattern("make(\\[.*\\])?: Leaving directory", 0, 0) { //$NON-NLS-1$ @Override protected boolean recordError(Matcher matcher, ErrorParserManager eoParser) { eoParser.popDirectoryURI(); |