From 08b56873fd077d2cb0ee600bf30cdf2c395b1013 Mon Sep 17 00:00:00 2001 From: James Blackburn Date: Wed, 3 Jun 2009 19:49:56 +0000 Subject: [PATCH] Bug 264704 Error parsing: if failing to resolve absolute IPath, search all workspace projects for IPath. --- .../tests/ErrorParserFileMatchingTest.java | 19 +++++++++++++++++++ .../eclipse/cdt/core/ErrorParserManager.java | 9 ++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) 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 355f43f364f..aee1e9224da 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 @@ -1239,4 +1239,23 @@ public class ErrorParserFileMatchingTest extends TestCase { } } + /** + * Checks if a file from error output can be found. + * + * @throws Exception... + */ + public void testMappedRemoteAbsolutePath_Bug264704() throws Exception { + ResourceHelper.createFolder(fProject, "Folder"); + ResourceHelper.createFolder(fProject, "Folder/AbsoluteRemoteFolder"); + IFile file = ResourceHelper.createFile(fProject, "Folder/AbsoluteRemoteFolder/testMappedRemoteAbsolutePath.h"); + + parseOutput("/AbsoluteRemoteFolder/testMappedRemoteAbsolutePath.h:1:error"); + assertEquals(1, errorList.size()); + + ProblemMarkerInfo problemMarkerInfo = errorList.get(0); + assertEquals("L/FindMatchingFilesTest/Folder/AbsoluteRemoteFolder/testMappedRemoteAbsolutePath.h",problemMarkerInfo.file.toString()); + assertEquals(1,problemMarkerInfo.lineNumber); + assertEquals("error",problemMarkerInfo.description); + } + } diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/ErrorParserManager.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/ErrorParserManager.java index f046a8f1218..5b32993e1c3 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/ErrorParserManager.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/ErrorParserManager.java @@ -31,6 +31,7 @@ import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceProxy; import org.eclipse.core.resources.IResourceProxyVisitor; +import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; @@ -342,11 +343,17 @@ public class ErrorParserManager extends OutputStream { IFile file = findFileInWorkspace(path); // Try to find best match considering known partial path - if (file==null && !path.isAbsolute()) { + if (file==null) { IProject[] prjs = new IProject[] { fProject }; IFile[] files = ResourceLookup.findFilesByName(path, prjs, false); if (files.length == 0) files = ResourceLookup.findFilesByName(path, prjs, /* ignoreCase */ true); + if (files.length == 0) { + prjs = ResourcesPlugin.getWorkspace().getRoot().getProjects(); + files = ResourceLookup.findFilesByName(path, prjs, false); + if (files.length == 0) + files = ResourceLookup.findFilesByName(path, prjs, /* ignoreCase */ true); + } if (files.length == 1) file = files[0]; }