From 4f2f3a918def28f29576e46b153e01b2a3b9756f Mon Sep 17 00:00:00 2001 From: Andrew Gvozdev Date: Thu, 3 Nov 2011 18:49:15 -0400 Subject: [PATCH] Ability to parse build output running project build from subfolder in Make Target view --- .../GCCBuildCommandParserTest.java | 40 +++++++++++++++++++ ...AbstractLanguageSettingsOutputScanner.java | 6 ++- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/build/org.eclipse.cdt.make.core.tests/src/org/eclipse/cdt/make/scannerdiscovery/GCCBuildCommandParserTest.java b/build/org.eclipse.cdt.make.core.tests/src/org/eclipse/cdt/make/scannerdiscovery/GCCBuildCommandParserTest.java index c2acde9bd33..e6f11f55714 100644 --- a/build/org.eclipse.cdt.make.core.tests/src/org/eclipse/cdt/make/scannerdiscovery/GCCBuildCommandParserTest.java +++ b/build/org.eclipse.cdt.make.core.tests/src/org/eclipse/cdt/make/scannerdiscovery/GCCBuildCommandParserTest.java @@ -950,6 +950,46 @@ public class GCCBuildCommandParserTest extends BaseTestCase { } } + /** + */ + public void testFileIgnoreWrongBuildDir() throws Exception { + // Create model project and accompanied descriptions + String projectName = getName(); + IProject project = ResourceHelper.createCDTProjectWithConfig(projectName); + IFolder folder1=ResourceHelper.createFolder(project, "Folder1"); + IFile file=ResourceHelper.createFile(project, "Folder1/Folder2/file.cpp"); + ICConfigurationDescription[] cfgDescriptions = getConfigurationDescriptions(project); + ICConfigurationDescription cfgDescription = cfgDescriptions[0]; + + ICLanguageSetting ls = cfgDescription.getLanguageSettingForFile(file.getProjectRelativePath(), true); + String languageId = ls.getLanguageId(); + + // create GCCBuildCommandParser + GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager.getExtensionProviderCopy(GCC_BUILD_COMMAND_PARSER_EXT); + ErrorParserManager epm = new ErrorParserManager(project, null); + // Shift build directory, that could happen if Make Target from folder1 was run + IFolder buildDir = folder1; + epm.pushDirectoryURI(buildDir.getLocationURI()); + + // parse line + parser.startup(cfgDescription); + parser.processLine("gcc " + + "-I/path0 " + + "-I. " + + "Folder1/Folder2/file.cpp", + epm); + parser.shutdown(); + + // check entries + IPath path0 = new Path("/path0").setDevice(project.getLocation().getDevice()); + { + List entries = parser.getSettingEntries(cfgDescription, file, languageId); + assertEquals(new CIncludePathEntry(path0, 0), entries.get(0)); + // Information from build output should take precedence over build dir + assertEquals(new CIncludePathEntry(project.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(1)); + } + } + /** */ public void testEndOfLine() throws Exception { diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/AbstractLanguageSettingsOutputScanner.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/AbstractLanguageSettingsOutputScanner.java index 18745eb003c..69366a058e5 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/AbstractLanguageSettingsOutputScanner.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/AbstractLanguageSettingsOutputScanner.java @@ -271,6 +271,8 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett List options = parseForOptions(line); if (options!=null) { for (String option : options) { + @SuppressWarnings("unused") + int i =0; for (AbstractOptionParser optionParser : getOptionParsers()) { try { if (optionParser.parseOption(option)) { @@ -647,7 +649,7 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett return null; } else { if (path.endsWith("/" + lastSegment)) { //$NON-NLS-1$ - int pos = path.lastIndexOf(lastSegment); + int pos = path.lastIndexOf("/" + lastSegment); //$NON-NLS-1$ path = path.substring(0, pos); continue; } else { @@ -660,7 +662,7 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett try { cwdURI = new URI(fileURI.getScheme(), fileURI.getUserInfo(), fileURI.getHost(), - fileURI.getPort(), path, fileURI.getQuery(), fileURI.getFragment()); + fileURI.getPort(), path + '/', fileURI.getQuery(), fileURI.getFragment()); } catch (URISyntaxException e) { // It should be valid URI here or something is wrong MakeCorePlugin.log(e);