diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/language/settings/providers/tests/GCCBuildCommandParserTest.java b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/language/settings/providers/tests/GCCBuildCommandParserTest.java index b719fbf4312..bd56882895e 100644 --- a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/language/settings/providers/tests/GCCBuildCommandParserTest.java +++ b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/language/settings/providers/tests/GCCBuildCommandParserTest.java @@ -417,8 +417,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { // check populated entries List entries = parser.getSettingEntries(cfgDescription, file, languageId); { - IPath path = new Path("/path0").setDevice(project.getLocation().getDevice()); - CIncludePathEntry expected = new CIncludePathEntry(path, 0); + CIncludePathEntry expected = new CIncludePathEntry("/path0", 0); CIncludePathEntry entry = (CIncludePathEntry)entries.get(0); assertEquals(expected.getName(), entry.getName()); assertEquals(expected.getValue(), entry.getValue()); @@ -469,46 +468,45 @@ public class GCCBuildCommandParserTest extends BaseTestCase { parser.shutdown(); // check populated entries - IPath path0 = new Path("/path0").setDevice(project.getLocation().getDevice()); { List entries = parser.getSettingEntries(cfgDescription, file1, languageId); - assertEquals(new CIncludePathEntry(path0, 0), entries.get(0)); + assertEquals(new CIncludePathEntry("/path0", 0), entries.get(0)); } { List entries = parser.getSettingEntries(cfgDescription, file2, languageId); - assertEquals(new CIncludePathEntry(path0, 0), entries.get(0)); + assertEquals(new CIncludePathEntry("/path0", 0), entries.get(0)); } { List entries = parser.getSettingEntries(cfgDescription, file3, languageId); - assertEquals(new CIncludePathEntry(path0, 0), entries.get(0)); + assertEquals(new CIncludePathEntry("/path0", 0), entries.get(0)); } { List entries = parser.getSettingEntries(cfgDescription, file4, languageId); - assertEquals(new CIncludePathEntry(path0, 0), entries.get(0)); + assertEquals(new CIncludePathEntry("/path0", 0), entries.get(0)); } { List entries = parser.getSettingEntries(cfgDescription, file5, languageId); - assertEquals(new CIncludePathEntry(path0, 0), entries.get(0)); + assertEquals(new CIncludePathEntry("/path0", 0), entries.get(0)); } { List entries = parser.getSettingEntries(cfgDescription, file6, languageId); - assertEquals(new CIncludePathEntry(path0, 0), entries.get(0)); + assertEquals(new CIncludePathEntry("/path0", 0), entries.get(0)); } { List entries = parser.getSettingEntries(cfgDescription, file7, languageId); - assertEquals(new CIncludePathEntry(path0, 0), entries.get(0)); + assertEquals(new CIncludePathEntry("/path0", 0), entries.get(0)); } { List entries = parser.getSettingEntries(cfgDescription, file8, languageId); - assertEquals(new CIncludePathEntry(path0, 0), entries.get(0)); + assertEquals(new CIncludePathEntry("/path0", 0), entries.get(0)); } { List entries = parser.getSettingEntries(cfgDescription, file9, languageId); - assertEquals(new CIncludePathEntry(path0, 0), entries.get(0)); + assertEquals(new CIncludePathEntry("/path0", 0), entries.get(0)); } { List entries = parser.getSettingEntries(cfgDescription, file10, languageId); - assertEquals(new CIncludePathEntry(path0, 0), entries.get(0)); + assertEquals(new CIncludePathEntry("/path0", 0), entries.get(0)); } } @@ -549,40 +547,18 @@ public class GCCBuildCommandParserTest extends BaseTestCase { // check populated entries List entries = parser.getSettingEntries(cfgDescription, file, languageId); - { - IPath path = new Path("/path0").setDevice(project.getLocation().getDevice()); - CIncludePathEntry expected = new CIncludePathEntry(path, 0); - CIncludePathEntry entry = (CIncludePathEntry)entries.get(0); - assertEquals(expected.getName(), entry.getName()); - assertEquals(expected.getValue(), entry.getValue()); - assertEquals(expected.getKind(), entry.getKind()); - assertEquals(expected.getFlags(), entry.getFlags()); - assertEquals(expected, entry); - } - { - IPath path = new Path("/path1").setDevice(project.getLocation().getDevice()); - CIncludePathEntry expected = new CIncludePathEntry(path, 0); - CIncludePathEntry entry = (CIncludePathEntry)entries.get(1); - assertEquals(expected, entry); - } - { - IPath path = new Path("/path with spaces").setDevice(project.getLocation().getDevice()); - CIncludePathEntry expected = new CIncludePathEntry(path, 0); - CIncludePathEntry entry = (CIncludePathEntry)entries.get(2); - assertEquals(expected, entry); - } - { - IPath path = new Path("/path with spaces2").setDevice(project.getLocation().getDevice()); - CIncludePathEntry expected = new CIncludePathEntry(path, 0); - CIncludePathEntry entry = (CIncludePathEntry)entries.get(3); - assertEquals(expected, entry); - } - { - IPath path = new Path("/path with spaces3").setDevice(project.getLocation().getDevice()); - CIncludePathEntry expected = new CIncludePathEntry(path, 0); - CIncludePathEntry entry = (CIncludePathEntry)entries.get(4); - assertEquals(expected, entry); - } + CIncludePathEntry expected = new CIncludePathEntry("/path0", 0); + CIncludePathEntry entry = (CIncludePathEntry)entries.get(0); + assertEquals(expected.getName(), entry.getName()); + assertEquals(expected.getValue(), entry.getValue()); + assertEquals(expected.getKind(), entry.getKind()); + assertEquals(expected.getFlags(), entry.getFlags()); + assertEquals(expected, entry); + + assertEquals(new CIncludePathEntry("/path1", 0), entries.get(1)); + assertEquals(new CIncludePathEntry("/path with spaces", 0), entries.get(2)); + assertEquals(new CIncludePathEntry("/path with spaces2", 0), entries.get(3)); + assertEquals(new CIncludePathEntry("/path with spaces3", 0), entries.get(4)); } /** @@ -616,18 +592,9 @@ public class GCCBuildCommandParserTest extends BaseTestCase { // check populated entries List entries = parser.getSettingEntries(cfgDescription, file, languageId); - { - IPath path = new Path("/Framework").setDevice(project.getLocation().getDevice()); - assertEquals(new CIncludePathEntry(path, ICSettingEntry.FRAMEWORKS_MAC), entries.get(0)); - } - { - IPath path = new Path("/framework/system").setDevice(project.getLocation().getDevice()); - assertEquals(new CIncludePathEntry(path, ICSettingEntry.FRAMEWORKS_MAC), entries.get(1)); - } - { - IPath path = new Path("/Framework with spaces").setDevice(project.getLocation().getDevice()); - assertEquals(new CIncludePathEntry(path, ICSettingEntry.FRAMEWORKS_MAC), entries.get(2)); - } + assertEquals(new CIncludePathEntry("/Framework", ICSettingEntry.FRAMEWORKS_MAC), entries.get(0)); + assertEquals(new CIncludePathEntry("/framework/system", ICSettingEntry.FRAMEWORKS_MAC), entries.get(1)); + assertEquals(new CIncludePathEntry("/Framework with spaces", ICSettingEntry.FRAMEWORKS_MAC), entries.get(2)); } /** @@ -663,50 +630,21 @@ public class GCCBuildCommandParserTest extends BaseTestCase { // check populated entries List entries = parser.getSettingEntries(cfgDescription, file, languageId); - { - CMacroEntry expected = new CMacroEntry("MACRO0", "", 0); - CMacroEntry entry = (CMacroEntry)entries.get(0); - assertEquals(expected.getName(), entry.getName()); - assertEquals(expected.getValue(), entry.getValue()); - assertEquals(expected.getKind(), entry.getKind()); - assertEquals(expected.getFlags(), entry.getFlags()); - assertEquals(expected, entry); - } - { - CMacroEntry expected = new CMacroEntry("MACRO1", "value", 0); - CMacroEntry entry = (CMacroEntry)entries.get(1); - assertEquals(expected, entry); - } - { - CMacroEntry expected = new CMacroEntry("MACRO2", "value with spaces", 0); - CMacroEntry entry = (CMacroEntry)entries.get(2); - assertEquals(expected, entry); - } - { - CMacroEntry expected = new CMacroEntry("MACRO3", "value with spaces", 0); - CMacroEntry entry = (CMacroEntry)entries.get(3); - assertEquals(expected, entry); - } - { - CMacroEntry expected = new CMacroEntry("MACRO4", "\"quoted value\"", 0); - CMacroEntry entry = (CMacroEntry)entries.get(4); - assertEquals(expected, entry); - } - { - CMacroEntry expected = new CMacroEntry("MACRO5", "\"quoted value\"", 0); - CMacroEntry entry = (CMacroEntry)entries.get(5); - assertEquals(expected, entry); - } - { - CMacroEntry expected = new CMacroEntry("MACRO6", "\"escape-quoted value\"", 0); - CMacroEntry entry = (CMacroEntry)entries.get(6); - assertEquals(expected, entry); - } - { - CMacroEntry expected = new CMacroEntry("MACRO7", "'single-quoted value'", 0); - CMacroEntry entry = (CMacroEntry)entries.get(7); - assertEquals(expected, entry); - } + CMacroEntry expected = new CMacroEntry("MACRO0", "", 0); + CMacroEntry entry = (CMacroEntry)entries.get(0); + assertEquals(expected.getName(), entry.getName()); + assertEquals(expected.getValue(), entry.getValue()); + assertEquals(expected.getKind(), entry.getKind()); + assertEquals(expected.getFlags(), entry.getFlags()); + assertEquals(expected, entry); + + assertEquals(new CMacroEntry("MACRO1", "value", 0), entries.get(1)); + assertEquals(new CMacroEntry("MACRO2", "value with spaces", 0), entries.get(2)); + assertEquals(new CMacroEntry("MACRO3", "value with spaces", 0), entries.get(3)); + assertEquals(new CMacroEntry("MACRO4", "\"quoted value\"", 0), entries.get(4)); + assertEquals(new CMacroEntry("MACRO5", "\"quoted value\"", 0), entries.get(5)); + assertEquals(new CMacroEntry("MACRO6", "\"escape-quoted value\"", 0), entries.get(6)); + assertEquals(new CMacroEntry("MACRO7", "'single-quoted value'", 0), entries.get(7)); } /** @@ -735,9 +673,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { // check populated entries List entries = parser.getSettingEntries(cfgDescription, file, languageId); - { - assertEquals(new CMacroEntry("MACRO", null, ICSettingEntry.UNDEFINED), entries.get(0)); - } + assertEquals(new CMacroEntry("MACRO", null, ICSettingEntry.UNDEFINED), entries.get(0)); } /** @@ -770,26 +706,18 @@ public class GCCBuildCommandParserTest extends BaseTestCase { // check populated entries List entries = parser.getSettingEntries(cfgDescription, file, languageId); - { - IPath incFile = new Path("/include.file1").setDevice(project.getLocation().getDevice()); - CIncludeFileEntry expected = new CIncludeFileEntry(incFile, 0); - CIncludeFileEntry entry = (CIncludeFileEntry)entries.get(0); - assertEquals(expected.getName(), entry.getName()); - assertEquals(expected.getValue(), entry.getValue()); - assertEquals(expected.getKind(), entry.getKind()); - assertEquals(expected.getFlags(), entry.getFlags()); - assertEquals(expected, entry); - } + CIncludeFileEntry expected = new CIncludeFileEntry("/include.file1", 0); + CIncludeFileEntry entry = (CIncludeFileEntry)entries.get(0); + assertEquals(expected.getName(), entry.getName()); + assertEquals(expected.getValue(), entry.getValue()); + assertEquals(expected.getKind(), entry.getKind()); + assertEquals(expected.getFlags(), entry.getFlags()); + assertEquals(expected, entry); - { - IPath incFile = new Path("/include.file with spaces").setDevice(project.getLocation().getDevice()); - assertEquals(new CIncludeFileEntry(incFile, 0), entries.get(1)); - } - { - assertEquals(new CIncludeFileEntry(project.getLocation().removeLastSegments(2).append("include.file2"), 0), entries.get(2)); - assertEquals(new CIncludeFileEntry(project.getFullPath().append("include.file3"), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(3)); - assertEquals(new CIncludeFileEntry(project.getLocation().removeLastSegments(2).append("include-file-with-dashes"), 0), entries.get(4)); - } + assertEquals(new CIncludeFileEntry("/include.file with spaces", 0), entries.get(1)); + assertEquals(new CIncludeFileEntry(project.getLocation().removeLastSegments(2).append("include.file2"), 0), entries.get(2)); + assertEquals(new CIncludeFileEntry(project.getFullPath().append("include.file3"), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(3)); + assertEquals(new CIncludeFileEntry(project.getLocation().removeLastSegments(2).append("include-file-with-dashes"), 0), entries.get(4)); } /** @@ -820,22 +748,16 @@ public class GCCBuildCommandParserTest extends BaseTestCase { // check populated entries List entries = parser.getSettingEntries(cfgDescription, file, languageId); - { - IPath path = new Path("/macro.file").setDevice(project.getLocation().getDevice()); - CMacroFileEntry expected = new CMacroFileEntry(path, 0); - CMacroFileEntry entry = (CMacroFileEntry)entries.get(0); - assertEquals(expected.getName(), entry.getName()); - assertEquals(expected.getValue(), entry.getValue()); - assertEquals(expected.getKind(), entry.getKind()); - assertEquals(expected.getFlags(), entry.getFlags()); - assertEquals(expected, entry); - } - { - IPath path = new Path("/macro.file with spaces").setDevice(project.getLocation().getDevice()); - CMacroFileEntry expected = new CMacroFileEntry(path, 0); - CMacroFileEntry entry = (CMacroFileEntry)entries.get(1); - assertEquals(expected, entry); - } + CMacroFileEntry expected = new CMacroFileEntry("/macro.file", 0); + CMacroFileEntry entry = (CMacroFileEntry)entries.get(0); + assertEquals(expected.getName(), entry.getName()); + assertEquals(expected.getValue(), entry.getValue()); + assertEquals(expected.getKind(), entry.getKind()); + assertEquals(expected.getFlags(), entry.getFlags()); + assertEquals(expected, entry); + + assertEquals(new CMacroFileEntry("/macro.file with spaces", 0), entries.get(1)); + } /** @@ -865,22 +787,15 @@ public class GCCBuildCommandParserTest extends BaseTestCase { // check populated entries List entries = parser.getSettingEntries(cfgDescription, file, languageId); - { - IPath path = new Path("/path0").setDevice(project.getLocation().getDevice()); - CLibraryPathEntry expected = new CLibraryPathEntry(path, 0); - CLibraryPathEntry entry = (CLibraryPathEntry)entries.get(0); - assertEquals(expected.getName(), entry.getName()); - assertEquals(expected.getValue(), entry.getValue()); - assertEquals(expected.getKind(), entry.getKind()); - assertEquals(expected.getFlags(), entry.getFlags()); - assertEquals(expected, entry); - } - { - IPath path = new Path("/path with spaces").setDevice(project.getLocation().getDevice()); - CLibraryPathEntry expected = new CLibraryPathEntry(path, 0); - CLibraryPathEntry entry = (CLibraryPathEntry)entries.get(1); - assertEquals(expected, entry); - } + CLibraryPathEntry expected = new CLibraryPathEntry("/path0", 0); + CLibraryPathEntry entry = (CLibraryPathEntry)entries.get(0); + assertEquals(expected.getName(), entry.getName()); + assertEquals(expected.getValue(), entry.getValue()); + assertEquals(expected.getKind(), entry.getKind()); + assertEquals(expected.getFlags(), entry.getFlags()); + assertEquals(expected, entry); + + assertEquals(new CLibraryPathEntry("/path with spaces", 0), entries.get(1)); } /** @@ -953,20 +868,12 @@ public class GCCBuildCommandParserTest extends BaseTestCase { // check populated entries List entries = parser.getSettingEntries(cfgDescription, file, languageId); - String device = project.getLocation().getDevice(); -// + " -I/path0 " - assertEquals(new CIncludePathEntry(new Path("/path0").setDevice(device), 0), entries.get(0)); -// + " -I /path1 " - assertEquals(new CIncludePathEntry(new Path("/path1").setDevice(device), 0), entries.get(1)); -// + " -I\"/path with spaces\"" - assertEquals(new CIncludePathEntry(new Path("/path with spaces").setDevice(device), 0), entries.get(2)); -// + " -DMACRO1=value" + assertEquals(new CIncludePathEntry("/path0", 0), entries.get(0)); + assertEquals(new CIncludePathEntry("/path1", 0), entries.get(1)); + assertEquals(new CIncludePathEntry("/path with spaces", 0), entries.get(2)); assertEquals(new CMacroEntry("MACRO1", "value", 0), entries.get(3)); -// + " -DMACRO2=\"value with spaces\"" assertEquals(new CMacroEntry("MACRO2", "value with spaces", 0), entries.get(4)); -// + " -L/usr/lib" - assertEquals(new CLibraryPathEntry(new Path("/usr/lib").setDevice(device), 0), entries.get(5)); -// + " -ldomain" + assertEquals(new CLibraryPathEntry("/usr/lib", 0), entries.get(5)); assertEquals(new CLibraryFileEntry("libdomain.a", 0), entries.get(6)); assertEquals(7, entries.size()); } @@ -1019,12 +926,9 @@ public class GCCBuildCommandParserTest extends BaseTestCase { 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)); - assertEquals(new CIncludePathEntry(project.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(1)); - } + List entries = parser.getSettingEntries(cfgDescription, file, languageId); + assertEquals(new CIncludePathEntry("/path0", 0), entries.get(0)); + assertEquals(new CIncludePathEntry(project.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(1)); } /** @@ -1053,12 +957,8 @@ public class GCCBuildCommandParserTest extends BaseTestCase { parser.shutdown(); // check entries - IPath path0 = new Path("/path0").setDevice(project.getLocation().getDevice()); - { - List entries = parser.getSettingEntries(null, file, languageId); - assertEquals(new CIncludePathEntry(path0, 0), entries.get(0)); - assertEquals(new CIncludePathEntry(file.getParent().getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(1)); - } + assertEquals(new CIncludePathEntry("/path0", 0), parser.getSettingEntries(null, file, languageId).get(0)); + assertEquals(new CIncludePathEntry(file.getParent().getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), parser.getSettingEntries(null, file, languageId).get(1)); } /** @@ -1090,31 +990,14 @@ public class GCCBuildCommandParserTest extends BaseTestCase { parser.shutdown(); // check populated entries - IPath path0 = new Path("/path0").setDevice(project.getLocation().getDevice()); - { - // in single quotes - List entries = parser.getSettingEntries(cfgDescription, file1, languageId); - CIncludePathEntry expected = new CIncludePathEntry(path0, 0); - assertEquals(expected, entries.get(0)); - } - { - // in double quotes - List entries = parser.getSettingEntries(cfgDescription, file2, languageId); - CIncludePathEntry expected = new CIncludePathEntry(path0, 0); - assertEquals(expected, entries.get(0)); - } - { - // Unix EOL - List entries = parser.getSettingEntries(cfgDescription, file3, languageId); - CIncludePathEntry expected = new CIncludePathEntry(path0, 0); - assertEquals(expected, entries.get(0)); - } - { - // Windows EOL - List entries = parser.getSettingEntries(cfgDescription, file4, languageId); - CIncludePathEntry expected = new CIncludePathEntry(path0, 0); - assertEquals(expected, entries.get(0)); - } + // in single quotes + assertEquals(new CIncludePathEntry("/path0", 0), parser.getSettingEntries(cfgDescription, file1, languageId).get(0)); + // in double quotes + assertEquals(new CIncludePathEntry("/path0", 0), parser.getSettingEntries(cfgDescription, file2, languageId).get(0)); + // Unix EOL + assertEquals(new CIncludePathEntry("/path0", 0), parser.getSettingEntries(cfgDescription, file3, languageId).get(0)); + // Windows EOL + assertEquals(new CIncludePathEntry("/path0", 0), parser.getSettingEntries(cfgDescription, file4, languageId).get(0)); } /** @@ -1150,13 +1033,9 @@ public class GCCBuildCommandParserTest extends BaseTestCase { 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)); - } + assertEquals(new CIncludePathEntry("/path0", 0), parser.getSettingEntries(cfgDescription, file, languageId).get(0)); + // Information from build output should take precedence over build dir + assertEquals(new CIncludePathEntry(project.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), parser.getSettingEntries(cfgDescription, file, languageId).get(1)); } /** @@ -1186,24 +1065,17 @@ public class GCCBuildCommandParserTest extends BaseTestCase { parser.shutdown(); // check populated entries - IPath path0 = new Path("/path0").setDevice(project.getLocation().getDevice()); { List entries = parser.getSettingEntries(cfgDescription, file0, languageId); - CIncludePathEntry expected = new CIncludePathEntry(path0, 0); - CIncludePathEntry entry = (CIncludePathEntry)entries.get(0); - assertEquals(expected, entry); + assertEquals(new CIncludePathEntry("/path0", 0), entries.get(0)); } { List entries = parser.getSettingEntries(cfgDescription, file1, languageId); - CIncludePathEntry expected = new CIncludePathEntry(path0, 0); - CIncludePathEntry entry = (CIncludePathEntry)entries.get(0); - assertEquals(expected, entry); + assertEquals(new CIncludePathEntry("/path0", 0), entries.get(0)); } { List entries = parser.getSettingEntries(cfgDescription, file2, languageId); - CIncludePathEntry expected = new CIncludePathEntry(path0, 0); - CIncludePathEntry entry = (CIncludePathEntry)entries.get(0); - assertEquals(expected, entry); + assertEquals(new CIncludePathEntry("/path0", 0), entries.get(0)); } } @@ -1273,13 +1145,11 @@ public class GCCBuildCommandParserTest extends BaseTestCase { // check populated entries List entries = parser.getSettingEntries(cfgDescription, file, languageId); - { - // check that relative paths are relative to CWD which is the location of the project - assertEquals(new CIncludePathEntry(project.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(0)); - assertEquals(new CIncludePathEntry(project.getLocation().removeLastSegments(1), 0), entries.get(1)); - assertEquals(new CIncludePathEntry(folder.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(2)); - assertEquals(new CIncludePathEntry(folderComposite.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(3)); - } + // check that relative paths are relative to CWD which is the location of the project + assertEquals(new CIncludePathEntry(project.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(0)); + assertEquals(new CIncludePathEntry(project.getLocation().removeLastSegments(1), 0), entries.get(1)); + assertEquals(new CIncludePathEntry(folder.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(2)); + assertEquals(new CIncludePathEntry(folderComposite.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(3)); } /** @@ -1313,11 +1183,9 @@ public class GCCBuildCommandParserTest extends BaseTestCase { // check populated entries List entries = parser.getSettingEntries(cfgDescription, file, languageId); - { - assertEquals(new CIncludePathEntry(".", 0), entries.get(0)); - assertEquals(new CIncludePathEntry("..", 0), entries.get(1)); - assertEquals(new CIncludePathEntry("Folder", 0), entries.get(2)); - } + assertEquals(new CIncludePathEntry(".", 0), entries.get(0)); + assertEquals(new CIncludePathEntry("..", 0), entries.get(1)); + assertEquals(new CIncludePathEntry("Folder", 0), entries.get(2)); } /** @@ -1349,10 +1217,8 @@ public class GCCBuildCommandParserTest extends BaseTestCase { // check populated entries List entries = parser.getSettingEntries(cfgDescription, file, languageId); - { - assertEquals(new CIncludePathEntry(folder.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(0)); - assertEquals(1, entries.size()); - } + assertEquals(new CIncludePathEntry(folder.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(0)); + assertEquals(1, entries.size()); } /** @@ -1392,13 +1258,11 @@ public class GCCBuildCommandParserTest extends BaseTestCase { // check populated entries List entries = parser.getSettingEntries(cfgDescription, file, languageId); - { - assertEquals(new CIncludePathEntry(buildDir.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(0)); - assertEquals(new CIncludePathEntry(buildDir.getFullPath().removeLastSegments(1), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(1)); - assertEquals(new CIncludePathEntry(buildDir.getLocation().removeLastSegments(3), 0), entries.get(2)); - assertEquals(new CIncludePathEntry(folder.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(3)); - assertEquals(new CIncludePathEntry(buildDir.getFullPath().append("MissingFolder"), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(4)); - } + assertEquals(new CIncludePathEntry(buildDir.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(0)); + assertEquals(new CIncludePathEntry(buildDir.getFullPath().removeLastSegments(1), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(1)); + assertEquals(new CIncludePathEntry(buildDir.getLocation().removeLastSegments(3), 0), entries.get(2)); + assertEquals(new CIncludePathEntry(folder.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(3)); + assertEquals(new CIncludePathEntry(buildDir.getFullPath().append("MissingFolder"), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(4)); } /** @@ -1467,11 +1331,9 @@ public class GCCBuildCommandParserTest extends BaseTestCase { // check populated entries List entries = parser.getSettingEntries(cfgDescription, file, languageId); - { - assertEquals(new CIncludePathEntry(buildDir.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(0)); - assertEquals(new CIncludePathEntry(buildDir.getFullPath().removeLastSegments(1), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(1)); - assertEquals(new CIncludePathEntry(buildDir.getFullPath().append("Folder"), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(2)); - } + assertEquals(new CIncludePathEntry(buildDir.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(0)); + assertEquals(new CIncludePathEntry(buildDir.getFullPath().removeLastSegments(1), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(1)); + assertEquals(new CIncludePathEntry(buildDir.getFullPath().append("Folder"), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(2)); } /** @@ -1509,12 +1371,10 @@ public class GCCBuildCommandParserTest extends BaseTestCase { // check populated entries List entries = parser.getSettingEntries(cfgDescription, file, languageId); - { - IPath buildPath = new Path(uriBuildDir.getPath()).setDevice(project.getLocation().getDevice()); - assertEquals(new CIncludePathEntry(buildPath, 0), entries.get(0)); - assertEquals(new CIncludePathEntry(buildPath.removeLastSegments(1), 0), entries.get(1)); - assertEquals(new CIncludePathEntry(buildPath.append("Folder"), 0), entries.get(2)); - } + IPath buildPath = new Path(uriBuildDir.getPath()).setDevice(project.getLocation().getDevice()); + assertEquals(new CIncludePathEntry(buildPath, 0), entries.get(0)); + assertEquals(new CIncludePathEntry(buildPath.removeLastSegments(1), 0), entries.get(1)); + assertEquals(new CIncludePathEntry(buildPath.append("Folder"), 0), entries.get(2)); } /** @@ -1555,13 +1415,11 @@ public class GCCBuildCommandParserTest extends BaseTestCase { // check populated entries List entries = parser.getSettingEntries(cfgDescription, file, languageId); - { - assertEquals(new CIncludePathEntry(buildDir.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(0)); - assertEquals(new CIncludePathEntry(folder.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(1)); - assertEquals(new CIncludePathEntry(folder2.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(2)); - assertEquals(new CIncludePathEntry(buildDir.getFullPath().append("MissingFolder"), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(3)); - assertEquals(new CIncludePathEntry(buildDir.getFullPath().append("MissingFolder2"), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(4)); - } + assertEquals(new CIncludePathEntry(buildDir.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(0)); + assertEquals(new CIncludePathEntry(folder.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(1)); + assertEquals(new CIncludePathEntry(folder2.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(2)); + assertEquals(new CIncludePathEntry("/BuildDir/MissingFolder", 0), entries.get(3)); + assertEquals(new CIncludePathEntry(buildDir.getFullPath().append("MissingFolder2"), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(4)); } /** @@ -1601,18 +1459,10 @@ public class GCCBuildCommandParserTest extends BaseTestCase { // check populated entries List entries = parser.getSettingEntries(cfgDescription, file, languageId); - { - assertEquals(new CIncludePathEntry(folder.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(0)); - assertEquals(new CIncludePathEntry(mappedFolder.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(1)); - } - { - IPath path = new Path("/Ambiguous/Folder").setDevice(file.getLocation().getDevice()); - assertEquals(new CIncludePathEntry(path, 0), entries.get(2)); - } - { - IPath path = new Path("/Missing/Folder").setDevice(file.getLocation().getDevice()); - assertEquals(new CIncludePathEntry(path, 0), entries.get(3)); - } + assertEquals(new CIncludePathEntry(folder.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(0)); + assertEquals(new CIncludePathEntry(mappedFolder.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(1)); + assertEquals(new CIncludePathEntry("/Ambiguous/Folder", 0), entries.get(2)); + assertEquals(new CIncludePathEntry("/Missing/Folder", 0), entries.get(3)); } /** @@ -1654,17 +1504,9 @@ public class GCCBuildCommandParserTest extends BaseTestCase { // check populated entries List entries = parser.getSettingEntries(cfgDescription, file, languageId); - { - assertEquals(new CIncludePathEntry(folder.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(0)); - } - { - IPath path = new Path("/Ambiguous/Folder").setDevice(file.getLocation().getDevice()); - assertEquals(new CIncludePathEntry(path, 0), entries.get(1)); - } - { - IPath path = new Path("/Missing/Folder").setDevice(file.getLocation().getDevice()); - assertEquals(new CIncludePathEntry(path, 0), entries.get(2)); - } + assertEquals(new CIncludePathEntry(folder.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(0)); + assertEquals(new CIncludePathEntry("/Ambiguous/Folder", 0), entries.get(1)); + assertEquals(new CIncludePathEntry("/Missing/Folder", 0), entries.get(2)); } /** @@ -1713,12 +1555,8 @@ public class GCCBuildCommandParserTest extends BaseTestCase { // check populated entries List entries = parser.getSettingEntries(cfgDescription, file, languageId); - { - assertEquals(new CIncludePathEntry(folderInReferencedProject.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(0)); - - IPath path = new Path("/Ambiguous/Folder").setDevice(file.getLocation().getDevice()); - assertEquals(new CIncludePathEntry(path, 0), entries.get(1)); - } + assertEquals(new CIncludePathEntry(folderInReferencedProject.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(0)); + assertEquals(new CIncludePathEntry("/Ambiguous/Folder", 0), entries.get(1)); } /** @@ -1755,11 +1593,9 @@ public class GCCBuildCommandParserTest extends BaseTestCase { parser.shutdown(); // check populated entries - { - List entries = parser.getSettingEntries(cfgDescription, file, languageId); - CIncludePathEntry expected = new CIncludePathEntry(dir2.removeLastSegments(1), 0); - assertEquals(expected, entries.get(0)); - } + List entries = parser.getSettingEntries(cfgDescription, file, languageId); + CIncludePathEntry expected = new CIncludePathEntry(dir2.removeLastSegments(1), 0); + assertEquals(expected, entries.get(0)); } /** @@ -1796,11 +1632,9 @@ public class GCCBuildCommandParserTest extends BaseTestCase { parser.shutdown(); // check populated entries - { - List entries = parser.getSettingEntries(cfgDescription, file, languageId); - CIncludePathEntry expected = new CIncludePathEntry(folder.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED); - assertEquals(expected, entries.get(0)); - } + List entries = parser.getSettingEntries(cfgDescription, file, languageId); + CIncludePathEntry expected = new CIncludePathEntry(folder.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED); + assertEquals(expected, entries.get(0)); } /** @@ -1841,10 +1675,8 @@ public class GCCBuildCommandParserTest extends BaseTestCase { // check populated entries List entries = parser.getSettingEntries(cfgDescription, file, languageId); - { - assertEquals(new CIncludePathEntry(buildDir.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(0)); - assertEquals(new CIncludePathEntry(includeDir.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(1)); - } + assertEquals(new CIncludePathEntry(buildDir.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(0)); + assertEquals(new CIncludePathEntry(includeDir.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(1)); } /** @@ -1886,11 +1718,8 @@ public class GCCBuildCommandParserTest extends BaseTestCase { // check populated entries List entries = parser.getSettingEntries(cfgDescription, file, languageId); - { - assertEquals(new CIncludePathEntry(buildDir.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(0)); - assertEquals(new CIncludePathEntry(includeDir.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(1)); - } - + assertEquals(new CIncludePathEntry(buildDir.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(0)); + assertEquals(new CIncludePathEntry(includeDir.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(1)); } /** @@ -1964,12 +1793,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { parser.shutdown(); // check populated entries - IPath path0 = new Path("/path0").setDevice(project.getLocation().getDevice()); - { - List entries = parser.getSettingEntries(cfgDescription, file, languageId); - CIncludePathEntry expected = new CIncludePathEntry(path0, 0); - assertEquals(expected, entries.get(0)); - } + assertEquals(new CIncludePathEntry("/path0", 0), parser.getSettingEntries(cfgDescription, file, languageId).get(0)); // cleanup contentType.removeFileSpec("x++", IContentTypeSettings.FILE_EXTENSION_SPEC); @@ -1999,12 +1823,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { parser.shutdown(); // check populated entries - IPath path0 = new Path("/path0").setDevice(project.getLocation().getDevice()); - { - List entries = parser.getSettingEntries(cfgDescription, file, languageId); - CIncludePathEntry expected = new CIncludePathEntry(path0, 0); - assertEquals(expected, entries.get(0)); - } + assertEquals(new CIncludePathEntry("/path0", 0), parser.getSettingEntries(cfgDescription, file, languageId).get(0)); } /** @@ -2039,15 +1858,15 @@ public class GCCBuildCommandParserTest extends BaseTestCase { parser.shutdown(); // check populated entries - { - List entries = parser.getSettingEntries(cfgDescription, file, languageId); - assertEquals(new CIncludePathEntry(project.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(0)); - assertEquals(new CIncludePathEntry(new Path("/Python1025/Include").setDevice(project.getLocation().getDevice()), 0), entries.get(1)); - assertEquals(new CMacroEntry("BOOST_ALL_NO_LIB", "1", 0), entries.get(2)); - assertEquals(new CMacroEntry("BOOST_PYTHON_SOURCE", "", 0), entries.get(3)); - assertEquals(new CMacroEntry("BOOST_PYTHON_STATIC_LIB", "", 0), entries.get(4)); - assertEquals(5, entries.size()); - } + List entries = parser.getSettingEntries(cfgDescription, file, languageId); + assertEquals(new CIncludePathEntry(project.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(0)); + // "/Python1025/Include" not expected to be there + assertFalse(new java.io.File("/Python1025/Include").exists()); + assertEquals(new CIncludePathEntry("/Python1025/Include", 0), entries.get(1)); + assertEquals(new CMacroEntry("BOOST_ALL_NO_LIB", "1", 0), entries.get(2)); + assertEquals(new CMacroEntry("BOOST_PYTHON_SOURCE", "", 0), entries.get(3)); + assertEquals(new CMacroEntry("BOOST_PYTHON_STATIC_LIB", "", 0), entries.get(4)); + assertEquals(5, entries.size()); } /** @@ -2082,11 +1901,9 @@ public class GCCBuildCommandParserTest extends BaseTestCase { // check populated entries List entries = parser.getSettingEntries(cfgDescription, file, languageId); - { - String device = project.getLocation().getDevice(); - assertEquals(new CIncludePathEntry(folder.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(0)); - assertEquals(new CIncludePathEntry(new Path("/Absolute/Folder").setDevice(device), 0), entries.get(1)); - } + String device = project.getLocation().getDevice(); + assertEquals(new CIncludePathEntry(folder.getFullPath(), ICSettingEntry.VALUE_WORKSPACE_PATH | ICSettingEntry.RESOLVED), entries.get(0)); + assertEquals(new CIncludePathEntry(new Path("/Absolute/Folder").setDevice(device), 0), entries.get(1)); } /** @@ -2121,10 +1938,8 @@ public class GCCBuildCommandParserTest extends BaseTestCase { // check populated entries List entries = parser.getSettingEntries(cfgDescription, file, languageId); - { - String device = project.getLocation().getDevice(); - assertEquals(new CIncludePathEntry(new Path("/LocallyMappedTo/Folder").setDevice(device), 0), entries.get(0)); - } + String device = project.getLocation().getDevice(); + assertEquals(new CIncludePathEntry(new Path("/LocallyMappedTo/Folder").setDevice(device), 0), entries.get(0)); } /** @@ -2153,14 +1968,10 @@ public class GCCBuildCommandParserTest extends BaseTestCase { // check populated entries List expected = new ArrayList(); - expected.add(new CIncludePathEntry(new Path("/path0").setDevice(project.getLocation().getDevice()), 0)); - - List entriesFile = parser.getSettingEntries(cfgDescription, file, languageId); - assertEquals(expected, entriesFile); - List entriesFolder = parser.getSettingEntries(cfgDescription, folder, languageId); - assertEquals(null, entriesFolder); - List entriesProject = parser.getSettingEntries(cfgDescription, project, languageId); - assertEquals(null, entriesProject); + expected.add(new CIncludePathEntry("/path0", 0)); + assertEquals(expected, parser.getSettingEntries(cfgDescription, file, languageId)); + assertEquals(null, parser.getSettingEntries(cfgDescription, folder, languageId)); + assertEquals(null, parser.getSettingEntries(cfgDescription, project, languageId)); } /** @@ -2189,14 +2000,10 @@ public class GCCBuildCommandParserTest extends BaseTestCase { // check populated entries List expected = new ArrayList(); - expected.add(new CIncludePathEntry(new Path("/path0").setDevice(project.getLocation().getDevice()), 0)); - - List entriesFile = parser.getSettingEntries(cfgDescription, file, languageId); - assertEquals(null, entriesFile); - List entriesFolder = parser.getSettingEntries(cfgDescription, folder, languageId); - assertEquals(expected, entriesFolder); - List entriesProject = parser.getSettingEntries(cfgDescription, project, languageId); - assertEquals(null, entriesProject); + expected.add(new CIncludePathEntry("/path0", 0)); + assertEquals(null, parser.getSettingEntries(cfgDescription, file, languageId)); + assertEquals(expected, parser.getSettingEntries(cfgDescription, folder, languageId)); + assertEquals(null, parser.getSettingEntries(cfgDescription, project, languageId)); } /** @@ -2225,14 +2032,11 @@ public class GCCBuildCommandParserTest extends BaseTestCase { // check populated entries List expected = new ArrayList(); - expected.add(new CIncludePathEntry(new Path("/path0").setDevice(project.getLocation().getDevice()), 0)); + expected.add(new CIncludePathEntry("/path0", 0)); - List entriesFile = parser.getSettingEntries(cfgDescription, file, languageId); - assertEquals(null, entriesFile); - List entriesFolder = parser.getSettingEntries(cfgDescription, folder, languageId); - assertEquals(null, entriesFolder); - List entriesProject = parser.getSettingEntries(cfgDescription, project, languageId); - assertEquals(expected, entriesProject); + assertEquals(null, parser.getSettingEntries(cfgDescription, file, languageId)); + assertEquals(null, parser.getSettingEntries(cfgDescription, folder, languageId)); + assertEquals(expected, parser.getSettingEntries(cfgDescription, project, languageId)); } /** @@ -2261,7 +2065,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { // check populated entries List expected = new ArrayList(); - expected.add(new CIncludePathEntry(new Path("/path0").setDevice(project.getLocation().getDevice()), 0)); + expected.add(new CIncludePathEntry("/path0", 0)); assertEquals(expected, parser.getSettingEntries(null, project, languageId)); } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractLanguageSettingsOutputScanner.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractLanguageSettingsOutputScanner.java index b6c51da59f0..9d8d5347644 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractLanguageSettingsOutputScanner.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractLanguageSettingsOutputScanner.java @@ -12,7 +12,6 @@ package org.eclipse.cdt.managedbuilder.language.settings.providers; import java.io.File; -import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; @@ -741,38 +740,61 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett } /** - * The manipulations here are done to resolve "../" navigation for symbolic links where "link/.." cannot - * be collapsed as it must follow the real file-system path. {@link java.io.File#getCanonicalPath()} deals - * with that correctly but {@link Path} or {@link URI} try to normalize the path which would be incorrect - * here. + * The manipulations here are done to resolve problems such as "../" navigation for symbolic links where + * "link/.." cannot be collapsed as it must follow the real file-system path. {@link java.io.File#getCanonicalPath()} + * deals with that correctly but {@link Path} or {@link URI} try to normalize the path which would be incorrect here. + * Another issue being resolved here is fixing drive letters in URI syntax. */ - private static URI resolvePathFromBaseLocation(String name, IPath baseLocation) { - String pathName = name; + private static URI resolvePathFromBaseLocation(String pathStr0, IPath baseLocation) { + String pathStr = pathStr0; if (baseLocation != null && !baseLocation.isEmpty()) { - pathName = pathName.replace(File.separatorChar, '/'); - String device = new Path(pathName).getDevice(); - if (device==null || device.equals(baseLocation.getDevice())) { + pathStr = pathStr.replace(File.separatorChar, '/'); + String device = new Path(pathStr).getDevice(); + if (device == null || device.equals(baseLocation.getDevice())) { if (device != null && device.length() > 0) { - pathName = pathName.substring(device.length()); + pathStr = pathStr.substring(device.length()); } baseLocation = baseLocation.addTrailingSeparator(); - if (pathName.startsWith("/")) { //$NON-NLS-1$ - pathName = pathName.substring(1); + if (pathStr.startsWith("/")) { //$NON-NLS-1$ + pathStr = pathStr.substring(1); } - pathName = baseLocation.toString() + pathName; + pathStr = baseLocation.toString() + pathStr; } } try { - File file = new File(pathName); + File file = new File(pathStr); file = file.getCanonicalFile(); - return file.toURI(); - } catch (IOException e) { - // if error just leave it as is + URI uri = file.toURI(); + if (file.exists()) { + return uri; + } + + IPath path0 = new Path(pathStr0); + if (!path0.isAbsolute()) { + return uri; + } + + String device = path0.getDevice(); + if (device == null || device.isEmpty()) { + // Avoid spurious adding of drive letters on Windows + pathStr = path0.setDevice(null).toString(); + } else { + // On Windows "C:/folder/" -> "/C:/folder/" + if (pathStr.charAt(0) != IPath.SEPARATOR) { + pathStr = IPath.SEPARATOR + pathStr; + } + } + + return new URI(uri.getScheme(), uri.getAuthority(), pathStr, uri.getQuery(), uri.getFragment()); + + } catch (Exception e) { + // if error will leave it as is + ManagedBuilderCorePlugin.log(e); } - return org.eclipse.core.filesystem.URIUtil.toURI(pathName); + return org.eclipse.core.filesystem.URIUtil.toURI(pathStr); } /** @@ -916,12 +938,17 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett String pathStr = EFSExtensionManager.getDefault().getMappedPath(uri); uri = org.eclipse.core.filesystem.URIUtil.toURI(pathStr); - try { - File file = new java.io.File(uri); - String canonicalPathStr = file.getCanonicalPath(); - return new Path(canonicalPathStr); - } catch (Exception e) { - ManagedBuilderCorePlugin.log(e); + if (uri != null && uri.isAbsolute()) { + try { + File file = new java.io.File(uri); + String canonicalPathStr = file.getCanonicalPath(); + if (new Path(pathStr).getDevice() == null) { + return new Path(canonicalPathStr).setDevice(null); + } + return new Path(canonicalPathStr); + } catch (Exception e) { + ManagedBuilderCorePlugin.log(e); + } } return null; } diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildBehaviourTab.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildBehaviourTab.java index 46cf3e813f5..f7bc7f82ccf 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildBehaviourTab.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildBehaviourTab.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2011 Intel Corporation and others. + * Copyright (c) 2007, 2012 Intel Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -163,6 +163,13 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab { updateButtons(); } }); + s_parallelNumber.getAccessible().addAccessibleListener(new AccessibleAdapter() { + @Override + public void getName(AccessibleEvent e) { + e.result = Messages.BuilderSettingsTab_UseParallelJobs; + } + }); + s_parallelNumber.setToolTipText(Messages.BuilderSettingsTab_UseParallelJobs); b_parallelUnlimited= new Button(c3, SWT.RADIO); b_parallelUnlimited.setText(Messages.BuilderSettingsTab_UseUnlimitedJobs); diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionSettingsUI.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionSettingsUI.java index 80f927fc86e..eb5f833f8d6 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionSettingsUI.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionSettingsUI.java @@ -1302,6 +1302,9 @@ public class BuildOptionSettingsUI extends AbstractToolSettingUI { return selected; } + /** + * @since 8.2 + */ public void setSelection(ITreeOption option) { if (treeRoot == getRoot(option)) { // only work in the same tree selected = option; diff --git a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/resources/tests/RefreshScopeTests.java b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/resources/tests/RefreshScopeTests.java index a8ef6802ed6..4bc8323db72 100644 --- a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/resources/tests/RefreshScopeTests.java +++ b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/resources/tests/RefreshScopeTests.java @@ -22,6 +22,7 @@ import junit.framework.TestSuite; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.IPDOMManager; +import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.resources.ExclusionInstance; import org.eclipse.cdt.core.resources.ExclusionType; @@ -29,6 +30,7 @@ import org.eclipse.cdt.core.resources.RefreshExclusion; import org.eclipse.cdt.core.resources.RefreshScopeManager; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICProjectDescription; +import org.eclipse.cdt.core.settings.model.WriteAccessException; import org.eclipse.cdt.core.testplugin.CProjectHelper; import org.eclipse.cdt.core.testplugin.CTestPlugin; import org.eclipse.cdt.internal.core.resources.ResourceExclusion; @@ -408,10 +410,8 @@ public class RefreshScopeTests extends TestCase { IResource config1_resource = fProject; - CProjectDescriptionManager descriptionManager = CProjectDescriptionManager.getInstance(); - ICProjectDescription projectDescription = descriptionManager.getProjectDescription(fProject, false); - ICConfigurationDescription conf = projectDescription.getActiveConfiguration(); - String conf_name = conf.getName(); + + String conf_name = getCurrentConfigName(); manager.addResourceToRefresh(fProject, conf_name, config1_resource); @@ -567,6 +567,101 @@ public class RefreshScopeTests extends TestCase { } + public void closeProject(ICProjectDescription projDesc) { + + try { + // save the project description + CCorePlugin.getDefault().setProjectDescription(fProject, projDesc); + fProject.close(null); + } catch (CoreException e1) { + fail(); + } + } + + public void openProject() { + try { + fProject.open(null); + } catch (CoreException e) { + fail(); + } + } + + public String getCurrentConfigName() { + CProjectDescriptionManager descriptionManager = CProjectDescriptionManager.getInstance(); + ICProjectDescription projectDescription = descriptionManager.getProjectDescription(fProject, false); + ICConfigurationDescription conf = projectDescription.getActiveConfiguration(); + return conf.getName(); + } + + public void testEmptyRefreshScopeCloseAndReopen() { + + RefreshScopeManager manager = RefreshScopeManager.getInstance(); + manager.clearAllData(); + + String config_name = getCurrentConfigName(); + + // get the resources. since we are not loading ... the project should auto-magically be added by default. + List config_resources = manager.getResourcesToRefresh(fProject, config_name); + assertEquals(1,config_resources.size()); + assertEquals(true, config_resources.contains(fProject)); + + // now delete it. + manager.deleteResourceToRefresh(fProject, config_name, fProject); + + // and make sure it is empty. + config_resources = manager.getResourcesToRefresh(fProject, config_name); + assertEquals(0,config_resources.size()); + + // write the persistent data. + ICProjectDescription projectDescription = CCorePlugin.getDefault().getProjectDescription(fProject); + try { + manager.persistSettings(projectDescription); + } catch (CoreException e) { + fail(); + } + + // close and reopen + closeProject(projectDescription); + openProject(); + + // now verify that there are no resources. + HashMap>> config_map = manager.getConfigurationToResourcesMap(fProject); + assertEquals(1,config_map.size()); + config_resources = manager.getResourcesToRefresh(fProject, config_name); + assertEquals(0,config_resources.size()); + } + + public void testAddEmptyConfiguration() { + final String CFG_NAME="empty_config"; + + CoreModel model = CoreModel.getDefault(); + RefreshScopeManager manager = RefreshScopeManager.getInstance(); + manager.clearAllData(); + + CProjectDescriptionManager descriptionManager = CProjectDescriptionManager.getInstance(); + ICProjectDescription projectDescription = descriptionManager.getProjectDescription(fProject, false); + ICConfigurationDescription base = projectDescription.getActiveConfiguration(); + + ICProjectDescription propertyProjectDescription = CoreModel.getDefault().getProjectDescription(fProject); + ICConfigurationDescription propertyDefaultConfigurationDescription = propertyProjectDescription.getConfigurations()[0]; + try { + projectDescription.setReadOnly(false, true); + ICConfigurationDescription newCfg = projectDescription.createConfiguration(CFG_NAME + ".id", CFG_NAME, propertyDefaultConfigurationDescription); + } catch (WriteAccessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (CoreException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + + List empty_config_resources = manager.getResourcesToRefresh(fProject, CFG_NAME); + assertEquals(1,empty_config_resources.size()); + assertEquals(true,empty_config_resources.contains(fProject)); + + } + public static Test suite() { return new TestSuite(RefreshScopeTests.class); } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java index 21cbf20cf06..16deb2d5f4e 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java @@ -982,8 +982,10 @@ public class CModelManager implements IResourceChangeListener, IContentTypeChang try { IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(event.getProjectName()); - // Recalculate cached settings - CoreModel.getDefault().updateProjectDescriptions(new IProject[] {project}, null); + // Recalculate cached settings unless already inside CProjectDescriptionManager.setProjectDescription() + if (!CProjectDescriptionManager.getInstance().isCurrentThreadSetProjectDescription()) { + CoreModel.getDefault().updateProjectDescriptions(new IProject[] {project}, null); + } // Notify listeners ICProject cproject = CModelManager.getDefault().getCModel().getCProject(project); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTAmbiguousTemplateArgument.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTAmbiguousTemplateArgument.java index 54038f30d43..a11c134330e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTAmbiguousTemplateArgument.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTAmbiguousTemplateArgument.java @@ -6,8 +6,8 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Andrew Ferguson (Symbian) - Initial Implementation - * Markus Schorn (Wind River Systems) + * Andrew Ferguson (Symbian) - Initial Implementation + * Markus Schorn (Wind River Systems) *******************************************************************************/ package org.eclipse.cdt.core.dom.ast.cpp; @@ -17,8 +17,7 @@ import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTTypeId; /** - * Place-holder in the AST for template arguments that are not yet - * understood. + * Place-holder in the AST for template arguments that are not yet understood. * * @noextend This interface is not intended to be extended by clients. * @noimplement This interface is not intended to be implemented by clients. diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTAmbiguousNode.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTAmbiguousNode.java index 566ff3a9c0e..0a234b35410 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTAmbiguousNode.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTAmbiguousNode.java @@ -6,8 +6,8 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * IBM - Initial API and implementation - * Markus Schorn (Wind River Systems) + * IBM - Initial API and implementation + * Markus Schorn (Wind River Systems) *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.parser; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguousTemplateArgument.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguousTemplateArgument.java index bd2101e22f1..7b702c2bcf5 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguousTemplateArgument.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguousTemplateArgument.java @@ -34,14 +34,14 @@ import org.eclipse.core.runtime.Assert; */ public class CPPASTAmbiguousTemplateArgument extends ASTAmbiguousNode implements ICPPASTAmbiguousTemplateArgument { private List fNodes; - + /** * @param nodes nodes of type {@link IASTTypeId}, {@link IASTIdExpression} * or {@link ICPPASTPackExpansionExpression}. */ public CPPASTAmbiguousTemplateArgument(IASTNode... nodes) { fNodes= new ArrayList(2); - for(IASTNode node : nodes) { + for (IASTNode node : nodes) { if (node instanceof IASTTypeId || node instanceof IASTIdExpression) { fNodes.add(node); } else if (node instanceof ICPPASTPackExpansionExpression) { @@ -92,10 +92,10 @@ public class CPPASTAmbiguousTemplateArgument extends ASTAmbiguousNode implements IASTNode[] copyNodes = new IASTNode[sizeOfNodes]; int arrayIndex = 0; for (IASTNode node : fNodes) { - if (node != null){ + if (node != null) { copyNodes[arrayIndex] = node.copy(style); } else { - copyNodes[arrayIndex]= null; + copyNodes[arrayIndex] = null; } arrayIndex++; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateArgument.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateArgument.java index 77956c14b9f..a7a33a6a73e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateArgument.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateArgument.java @@ -6,7 +6,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Markus Schorn - initial API and implementation + * Markus Schorn - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.parser.cpp; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java index 8fbb1cb8149..acec6713497 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java @@ -51,6 +51,7 @@ import org.eclipse.cdt.core.dom.ast.ISemanticProblem; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.ITypedef; import org.eclipse.cdt.core.dom.ast.IValue; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTAmbiguousTemplateArgument; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeclSpecifier; @@ -1706,6 +1707,10 @@ public class CPPTemplates { IType type= expr.getExpressionType(); IValue value= Value.create((IASTExpression) arg, Value.MAX_RECURSION_DEPTH); result[i]= new CPPTemplateArgument(value, type); + } else if (arg instanceof ICPPASTAmbiguousTemplateArgument) { + throw new IllegalArgumentException(id.getRawSignature() + + " contains an ambiguous template argument at position " + i + " in " //$NON-NLS-1$ //$NON-NLS-2$ + + id.getContainingFilename()); } else { throw new IllegalArgumentException("Unexpected type: " + arg.getClass().getName()); //$NON-NLS-1$ } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/filters/CustomFiltersDialog.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/filters/CustomFiltersDialog.java index 2afb5902155..e83ea702b5b 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/filters/CustomFiltersDialog.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/filters/CustomFiltersDialog.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2009 IBM Corporation and others. + * Copyright (c) 2000, 2012 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -32,6 +32,8 @@ import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.swt.SWT; +import org.eclipse.swt.accessibility.AccessibleAdapter; +import org.eclipse.swt.accessibility.AccessibleEvent; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; @@ -183,6 +185,14 @@ public class CustomFiltersDialog extends SelectionDialog { List initialSelection= getInitialElementSelections(); if (initialSelection != null && !initialSelection.isEmpty()) checkInitialSelections(); + + fCheckBoxList.getTable().getAccessible().addAccessibleListener(new AccessibleAdapter() { + @Override + public void getName(AccessibleEvent e) { + e.result = FilterMessages.CustomFiltersDialog_filterList_label; + } + }); + fCheckBoxList.getTable().setToolTipText(FilterMessages.CustomFiltersDialog_filterList_label); // Description info= new Label(parent, SWT.LEFT); diff --git a/cross/org.eclipse.cdt.launch.remote/pom.xml b/cross/org.eclipse.cdt.launch.remote/pom.xml index 05c23752a6f..53c688df2c2 100644 --- a/cross/org.eclipse.cdt.launch.remote/pom.xml +++ b/cross/org.eclipse.cdt.launch.remote/pom.xml @@ -7,7 +7,7 @@ org.eclipse.cdt cdt-parent - 8.1.0-SNAPSHOT + 8.2.0-SNAPSHOT ../../pom.xml diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/expression/ExpressionVMProvider.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/expression/ExpressionVMProvider.java index ba3b733c1f1..33ee22a6df5 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/expression/ExpressionVMProvider.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/expression/ExpressionVMProvider.java @@ -430,7 +430,6 @@ public class ExpressionVMProvider extends AbstractDMVMProvider if (input instanceof IExpressionDMContext) { IExpressionDMContext dmc = (IExpressionDMContext) input; SingleExpressionVMNode vmNode = (SingleExpressionVMNode) getChildVMNodes(getRootVMNode())[0]; - vmNode.setExpression(dmc); final IDMVMContext viewerInput= vmNode.createVMContext(dmc); // provide access to viewer (needed by details pane) diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/expression/SingleExpressionVMNode.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/expression/SingleExpressionVMNode.java index a511fbeb7ab..e9e6acc2334 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/expression/SingleExpressionVMNode.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/expression/SingleExpressionVMNode.java @@ -15,14 +15,10 @@ import java.util.LinkedList; import java.util.List; import org.eclipse.cdt.dsf.concurrent.CountingRequestMonitor; -import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor; import org.eclipse.cdt.dsf.concurrent.RequestMonitor; import org.eclipse.cdt.dsf.datamodel.IDMContext; import org.eclipse.cdt.dsf.debug.service.IExpressions.IExpressionDMContext; -import org.eclipse.cdt.dsf.debug.ui.viewmodel.expression.ExpressionVMProvider; -import org.eclipse.cdt.dsf.debug.ui.viewmodel.expression.ExpressionsChangedEvent; -import org.eclipse.cdt.dsf.debug.ui.viewmodel.expression.InvalidExpressionVMContext; -import org.eclipse.cdt.dsf.ui.concurrent.ViewerCountingRequestMonitor; +import org.eclipse.cdt.dsf.ui.concurrent.ViewerDataRequestMonitor; import org.eclipse.cdt.dsf.ui.viewmodel.AbstractVMContext; import org.eclipse.cdt.dsf.ui.viewmodel.AbstractVMNode; import org.eclipse.cdt.dsf.ui.viewmodel.IVMNode; @@ -38,6 +34,7 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProv import org.eclipse.debug.internal.ui.viewers.model.provisional.IHasChildrenUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; +import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate; import org.eclipse.jface.viewers.TreePath; /** @@ -90,6 +87,10 @@ public class SingleExpressionVMNode extends AbstractVMNode implements IElementLa return getVMNode().hashCode() + fDmc.hashCode(); } + @Override + public String toString() { + return fDmc.toString(); + } } private static class SimpleExpression implements IExpression { @@ -141,27 +142,8 @@ public class SingleExpressionVMNode extends AbstractVMNode implements IElementLa } } - private static class SingleExpressionManager { - private static final IExpression[] NO_EXPRESSIONS = {}; - IExpression fExpression; - public IExpression[] getExpressions() { - if (fExpression != null) { - return new IExpression[] { fExpression }; - } - return NO_EXPRESSIONS; - } - public void setExpression(IExpression expression) { - fExpression = expression; - } - - } - - /** Local reference to the expression manager */ - private final SingleExpressionManager fManager; - public SingleExpressionVMNode(ExpressionVMProvider provider) { super(provider); - fManager = new SingleExpressionManager(); } @Override @@ -173,14 +155,21 @@ public class SingleExpressionVMNode extends AbstractVMNode implements IElementLa return (ExpressionVMProvider)getVMProvider(); } + private IExpressionDMContext getUpdateExpressionDMC(IViewerUpdate update) { + if (update.getElement() instanceof IDMVMContext) { + IDMContext dmc = ((IDMVMContext)update.getElement()).getDMContext(); + if (dmc instanceof IExpressionDMContext) { + return (IExpressionDMContext)dmc; + } + } + return null; + } + + @Override public void update(IHasChildrenUpdate[] updates) { - // Test availability of children based on whether there are any expressions - // in the manager. We assume that the getExpressions() will just read - // local state data, so we don't bother using a job to perform this - // operation. for (int i = 0; i < updates.length; i++) { - updates[i].setHasChilren(fManager.getExpressions().length != 0); + updates[i].setHasChilren(getUpdateExpressionDMC(updates[i]) != null); updates[i].done(); } } @@ -192,7 +181,7 @@ public class SingleExpressionVMNode extends AbstractVMNode implements IElementLa // We assume that the getExpressions() will just read local state data, // so we don't bother using a job to perform this operation. - update.setChildCount(fManager.getExpressions().length); + update.setChildCount(getUpdateExpressionDMC(update) != null ? 1 : 0); update.done(); } } @@ -200,62 +189,38 @@ public class SingleExpressionVMNode extends AbstractVMNode implements IElementLa @Override public void update(final IChildrenUpdate[] updates) { for (IChildrenUpdate update : updates) { - doUpdateChildren(update); + IExpressionDMContext dmc = getUpdateExpressionDMC(update); + if (dmc != null) { + doUpdateChildren(update, new SimpleExpression(dmc.getExpression())); + } + else { + handleFailedUpdate(update); + } } } - public void doUpdateChildren(final IChildrenUpdate update) { - final IExpression[] expressions = fManager.getExpressions(); - - // For each (expression) element in update, find the layout node that can - // parse it. And for each expression that has a corresponding layout node, - // call IExpressionLayoutNode#getElementForExpression to generate a VMC. - // Since the last is an async call, we need to create a multi-RM to wait - // for all the calls to complete. - final CountingRequestMonitor multiRm = new ViewerCountingRequestMonitor(getVMProvider().getExecutor(), update); - int multiRmCount = 0; - - int lowOffset= update.getOffset(); - if (lowOffset < 0) { - lowOffset = 0; - } - int length= update.getLength(); - if (length <= 0) { - length = expressions.length; - } - final int highOffset= lowOffset + length; - for (int i = lowOffset; i < highOffset && i < expressions.length + 1; i++) { - if (i < expressions.length) { - multiRmCount++; - final int childIndex = i; - final IExpression expression = expressions[i]; - // getElementForExpression() accepts a IElementsUpdate as an argument. - // Construct an instance of VMElementsUpdate which will call a - // the request monitor when it is finished. The request monitor - // will in turn set the element in the update argument in this method. - ((ExpressionVMProvider)getVMProvider()).update( - new VMExpressionUpdate( - update, expression, - new DataRequestMonitor(getVMProvider().getExecutor(), multiRm) { - @Override - protected void handleSuccess() { - update.setChild(getData(), childIndex); - multiRm.done(); - } - - @Override - protected void handleError() { - update.setChild(new InvalidExpressionVMContext(SingleExpressionVMNode.this, expression), childIndex); - multiRm.done(); - } - }) - ); - } - } - - // If no expressions were parsed, we're finished. - // Set the count to the counting RM. - multiRm.setDoneCount(multiRmCount); + public void doUpdateChildren(final IChildrenUpdate update, final IExpression expression) { + // getElementForExpression() accepts a IElementsUpdate as an argument. + // Construct an instance of VMElementsUpdate which will call a + // the request monitor when it is finished. The request monitor + // will in turn set the element in the update argument in this method. + ((ExpressionVMProvider)getVMProvider()).update( + new VMExpressionUpdate( + update, expression, + new ViewerDataRequestMonitor(getVMProvider().getExecutor(), update) { + @Override + protected void handleSuccess() { + update.setChild(getData(), 0); + update.done(); + } + + @Override + protected void handleError() { + update.setChild(new InvalidExpressionVMContext(SingleExpressionVMNode.this, expression), 0); + update.done(); + } + }) + ); } @Override @@ -267,7 +232,7 @@ public class SingleExpressionVMNode extends AbstractVMNode implements IElementLa update.done(); } } - + @Override public int getDeltaFlags(Object event) { int retVal = 0; @@ -277,41 +242,48 @@ public class SingleExpressionVMNode extends AbstractVMNode implements IElementLa retVal |= IModelDelta.ADDED | IModelDelta.REMOVED | IModelDelta.INSERTED | IModelDelta.CONTENT ; } - for (IExpression expression : fManager.getExpressions()) { - retVal |= getExpressionVMProvider().getDeltaFlagsForExpression(expression, event); + // The expression in the hover is not known here, so assume that all + // expression nodes need to provide delta flags for event. Iterate + // through them here and collect the flags. + for (IExpressionVMNode node : getExpressionVMProvider().getExpressionNodes()) { + retVal |= getDeltaFlagsForNode(node, event); } return retVal; } + private int getDeltaFlagsForNode(IVMNode node, Object event) { + int retVal = node.getDeltaFlags(event); + for (IVMNode child : getVMProvider().getChildVMNodes(node)) { + if (!node.equals(child)) { + retVal |= getDeltaFlagsForNode(child, event); + } + } + return retVal; + } + @Override public void buildDelta(final Object event, final VMDelta parentDelta, final int nodeOffset, final RequestMonitor requestMonitor) { if (event instanceof ExpressionsChangedEvent) { buildDeltaForExpressionsChangedEvent((ExpressionsChangedEvent)event, parentDelta, nodeOffset, requestMonitor); } else { - - // For each expression, find its corresponding node and ask that - // layout node for its delta flags for given event. If there are delta flags to be - // generated, call the asynchronous method to do so. - CountingRequestMonitor multiRm = new CountingRequestMonitor(getExecutor(), requestMonitor); - - int buildDeltaForExpressionCallCount = 0; - - IExpression[] expressions = fManager.getExpressions(); - for (int i = 0; i < expressions.length; i++ ) { - int flags = getExpressionVMProvider().getDeltaFlagsForExpression(expressions[i], event); - // If the given expression has no delta flags, skip it. - if (flags == IModelDelta.NO_CHANGE) continue; - - int elementOffset = nodeOffset >= 0 ? nodeOffset + i : -1; - getExpressionVMProvider().buildDeltaForExpression( - expressions[i], elementOffset, event, parentDelta, getTreePathFromDelta(parentDelta), - new RequestMonitor(getExecutor(), multiRm)); - buildDeltaForExpressionCallCount++; + Object parent = parentDelta.getElement(); + if (parent instanceof IDMVMContext) { + IDMContext dmc = ((IDMVMContext)parent).getDMContext(); + if (dmc instanceof IExpressionDMContext) { + IExpression expression = new SimpleExpression( ((IExpressionDMContext)dmc).getExpression() ); + int flags = getExpressionVMProvider().getDeltaFlagsForExpression(expression, event); + // If the given expression has no delta flags, skip it. + if (flags != IModelDelta.NO_CHANGE) { + getExpressionVMProvider().buildDeltaForExpression( + expression, nodeOffset, event, parentDelta, getTreePathFromDelta(parentDelta), + requestMonitor); + return; + } + } } - - multiRm.setDoneCount(buildDeltaForExpressionCallCount); } + requestMonitor.done(); } private void buildDeltaForExpressionsChangedEvent(ExpressionsChangedEvent event, VMDelta parentDelta, @@ -340,16 +312,8 @@ public class SingleExpressionVMNode extends AbstractVMNode implements IElementLa return new TreePath(elementList.toArray()); } - protected void updateElementsInSessionThread(IChildrenUpdate update) { - doUpdateChildren(update); - } - public IDMVMContext createVMContext(IDMContext dmc) { return new RootDMVMContext(getVMProvider().getRootVMNode(), dmc); } - public void setExpression(IExpressionDMContext dmc) { - String text = dmc.getExpression(); - fManager.setExpression(new SimpleExpression(text)); - } }