diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeBuilder.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeBuilder.java
index 9a6eb5609ca..18a64ede80e 100644
--- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeBuilder.java
+++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeBuilder.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2010 QNX Software Systems and others.
+ * Copyright (c) 2000, 2012 QNX Software Systems 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
@@ -11,6 +11,7 @@
* Dmitry Kozlov (CodeSourcery) - Build error highlighting and navigation
* Save build output (bug 294106)
* Andrew Gvozdev (Quoin Inc) - Saving build output implemented in different way (bug 306222)
+ * IBM Corporation
*******************************************************************************/
package org.eclipse.cdt.make.core;
@@ -279,7 +280,7 @@ public class MakeBuilder extends ACBuilder {
*/
protected void refreshProject(IProject project) {
if (buildRunnerHelper != null) {
- buildRunnerHelper.refreshProject(null);
+ buildRunnerHelper.refreshProject(null, null);
}
}
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ExternalBuildRunner.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ExternalBuildRunner.java
index 75ffcba9195..3198a69760e 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ExternalBuildRunner.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ExternalBuildRunner.java
@@ -9,6 +9,7 @@
* Wind River Systems - Initial API and implementation
* James Blackburn (Broadcom Corp.)
* Andrew Gvozdev
+ * IBM Corporation
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.core;
@@ -129,7 +130,7 @@ public class ExternalBuildRunner extends AbstractBuildRunner {
buildRunnerHelper.goodbye();
if (state != ICommandLauncher.ILLEGAL_COMMAND) {
- buildRunnerHelper.refreshProject(new SubProgressMonitor(monitor, TICKS_REFRESH_PROJECT, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK));
+ buildRunnerHelper.refreshProject(cfgName, new SubProgressMonitor(monitor, TICKS_REFRESH_PROJECT, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK));
}
} else {
String msg = ManagedMakeMessages.getFormattedString("ManagedMakeBuilder.message.undefined.build.command", builder.getId()); //$NON-NLS-1$
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/InternalBuildRunner.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/InternalBuildRunner.java
index 92e447a093c..e48974cb29a 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/InternalBuildRunner.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/InternalBuildRunner.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2010, 2011 Wind River Systems and others.
+ * Copyright (c) 2010, 2012 Wind River Systems 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
@@ -8,6 +8,7 @@
* Contributors:
* Wind River Systems - Initial API and implementation
* James Blackburn (Broadcom Corp.)
+ * IBM Corporation
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.core;
@@ -136,7 +137,7 @@ public class InternalBuildRunner extends AbstractBuildRunner {
buildRunnerHelper.goodbye();
if (status != ICommandLauncher.ILLEGAL_COMMAND) {
- buildRunnerHelper.refreshProject(new SubProgressMonitor(monitor, TICKS_REFRESH_PROJECT, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK));
+ buildRunnerHelper.refreshProject(cfgName, new SubProgressMonitor(monitor, TICKS_REFRESH_PROJECT, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK));
}
} catch (Exception e) {
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/CommonBuilder.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/CommonBuilder.java
index 5dda8ac90d4..533334735e6 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/CommonBuilder.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/CommonBuilder.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2010 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
@@ -1211,7 +1211,7 @@ public class CommonBuilder extends ACBuilder {
buildRunnerHelper.goodbye();
if (status != ICommandLauncher.ILLEGAL_COMMAND) {
- buildRunnerHelper.refreshProject(new SubProgressMonitor(monitor, TICKS_REFRESH_PROJECT));
+ buildRunnerHelper.refreshProject(cfgName, new SubProgressMonitor(monitor, TICKS_REFRESH_PROJECT));
}
//Throw a core exception indicating that the clean command failed
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java
index 57ad26d3516..cc2297c59a5 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2002, 2011 IBM Corporation and others.
+ * Copyright (c) 2002, 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
@@ -1118,7 +1118,7 @@ public class GeneratedMakefileBuilder extends ACBuilder {
// use the refresh scope manager to refresh
RefreshScopeManager refreshManager = RefreshScopeManager.getInstance();
- IWorkspaceRunnable runnable = refreshManager.getRefreshRunnable(project);
+ IWorkspaceRunnable runnable = refreshManager.getRefreshRunnable(project, cfg.getName());
ResourcesPlugin.getWorkspace().run(runnable, null, IWorkspace.AVOID_UPDATE, null);
} catch (CoreException e) {
monitor.subTask(ManagedMakeMessages
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/language/settings/providers/BuiltinSpecsDetectorOptionPage.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/language/settings/providers/BuiltinSpecsDetectorOptionPage.java
index 9888493ed5e..bb8d0062a53 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/language/settings/providers/BuiltinSpecsDetectorOptionPage.java
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/language/settings/providers/BuiltinSpecsDetectorOptionPage.java
@@ -10,11 +10,14 @@
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.internal.ui.language.settings.providers;
+import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvider;
import org.eclipse.cdt.managedbuilder.internal.ui.Messages;
import org.eclipse.cdt.managedbuilder.language.settings.providers.AbstractBuiltinSpecsDetector;
import org.eclipse.cdt.ui.language.settings.providers.AbstractLanguageSettingProviderOptionPage;
import org.eclipse.cdt.utils.ui.controls.ControlFactory;
+import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.SWT;
@@ -32,6 +35,8 @@ import org.eclipse.swt.widgets.Text;
/**
* Options page for {@link AbstractBuiltinSpecsDetector}.
+ *
+ * @noinstantiate This class is not intended to be instantiated by clients.
*/
public final class BuiltinSpecsDetectorOptionPage extends AbstractLanguageSettingProviderOptionPage {
private boolean fEditable;
@@ -152,4 +157,18 @@ public final class BuiltinSpecsDetectorOptionPage extends AbstractLanguageSettin
});
}
+ @Override
+ public void performApply(IProgressMonitor monitor) throws CoreException {
+ ILanguageSettingsProvider provider = providerTab.getProvider(providerId);
+ if ((provider instanceof AbstractBuiltinSpecsDetector)) { // basically check for working copy
+ ILanguageSettingsProvider initialProvider = providerTab.getInitialProvider(providerId);
+ if (!(initialProvider instanceof AbstractBuiltinSpecsDetector) || !((AbstractBuiltinSpecsDetector) initialProvider).getCommand().equals(((AbstractBuiltinSpecsDetector) provider).getCommand())) {
+ // clear and reset isExecuted flag
+ ((AbstractBuiltinSpecsDetector) provider).clear();
+ }
+ }
+
+ super.performApply(monitor);
+ }
+
}
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/RefreshPolicyTab.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/RefreshPolicyTab.java
index cf8f9a0afb0..7f3746e5386 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/RefreshPolicyTab.java
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/RefreshPolicyTab.java
@@ -144,8 +144,7 @@ public class RefreshPolicyTab extends AbstractCBuildPropertyTab {
private void loadInfo() {
HashMap>> configMap = fManager.getConfigurationToResourcesMap(fProject);
- if (configMap != null)
- fConfigurationToResourcesToExclusionsMap = copyHashMap(configMap);
+ fConfigurationToResourcesToExclusionsMap = copyHashMap(configMap);
}
private List getExclusions(String configName, IResource resource) {
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 c6d45b6ffff..a8ef6802ed6 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
@@ -486,7 +486,7 @@ public class RefreshScopeTests extends TestCase {
createTestFile(path);
// now refresh
- IWorkspaceRunnable runnable = manager.getRefreshRunnable(fProject);
+ IWorkspaceRunnable runnable = manager.getRefreshRunnable(fProject, conf_name);
try {
ResourcesPlugin.getWorkspace().run(runnable, null, IWorkspace.AVOID_UPDATE, null);
} catch (CoreException e) {
diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsListenersTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsListenersTests.java
index 9e1c4c4badf..cc6424a42bd 100644
--- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsListenersTests.java
+++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsListenersTests.java
@@ -13,6 +13,7 @@ package org.eclipse.cdt.core.language.settings.providers;
import java.util.ArrayList;
import java.util.List;
+import java.util.Set;
import junit.framework.TestSuite;
@@ -25,7 +26,10 @@ import org.eclipse.cdt.core.testplugin.ResourceHelper;
import org.eclipse.cdt.core.testplugin.util.BaseTestCase;
import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsProvidersSerializer;
import org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.jobs.Job;
/**
@@ -1131,5 +1135,371 @@ public class LanguageSettingsListenersTests extends BaseTestCase {
assertEquals(cfgDescriptionId, event.getConfigurationDescriptionIds()[0]);
}
}
+
+ /**
+ * Test case when a project is present in the list of resources in delta.
+ */
+ public void testDelta_AffectedResources_Project() throws Exception {
+ // create project
+ IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName());
+ ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, true);
+
+ // create a mock provider and add to cfgDescription
+ {
+ // get project descriptions
+ ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project, true);
+ assertNotNull(prjDescriptionWritable);
+ ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations();
+ assertEquals(1, cfgDescriptions.length);
+ ICConfigurationDescription cfgDescription = cfgDescriptions[0];
+ assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
+
+ // add mock provider to cfgDescription
+ List providers = new ArrayList();
+ MockLanguageSettingsEditableProvider mockProvider = new MockLanguageSettingsEditableProvider(PROVIDER_1, PROVIDER_NAME_1);
+ providers.add(mockProvider);
+ ((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(providers);
+ List storedProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
+ assertEquals(1, storedProviders.size());
+
+ // write to project description
+ CoreModel.getDefault().setProjectDescription(project, prjDescriptionWritable);
+ }
+
+ // register mock listener to inspect the notifications
+ {
+ LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener);
+ assertEquals(0, mockLseListener.getCount());
+ assertEquals(null, mockLseListener.getLastEvent());
+ }
+
+ // trigger an event on the project
+ ICConfigurationDescription cfgDescription;
+ {
+ // get project descriptions
+ ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, false);
+ assertNotNull(prjDescription);
+ ICConfigurationDescription[] cfgDescriptions = prjDescription.getConfigurations();
+ assertEquals(1, cfgDescriptions.length);
+ cfgDescription = cfgDescriptions[0];
+ assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
+ List providers = ((ILanguageSettingsProvidersKeeper)cfgDescription).getLanguageSettingProviders();
+ assertEquals(1, providers.size());
+ MockLanguageSettingsEditableProvider mockProvider = (MockLanguageSettingsEditableProvider) providers.get(0);
+
+ List entries = new ArrayList();
+ entries.add(SAMPLE_LSE);
+ mockProvider.setSettingEntries(cfgDescription, project, null, entries);
+ mockProvider.serializeLanguageSettings(cfgDescription);
+ }
+
+ // inspect event
+ {
+ assertEquals(1, mockLseListener.getCount());
+ ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent();
+ assertNotNull(event);
+ assertEquals(event.getProjectName(), project.getName());
+
+ Set resources = event.getAffectedResources(cfgDescription.getId());
+ assertNotNull(resources);
+ assertEquals(project, resources.toArray()[0]);
+ assertEquals(1, resources.size());
+ }
+ }
+
+ /**
+ * Test case when a default resource (null) is represented in the list of resources in delta.
+ */
+ public void testDelta_AffectedResources_DefaultResource() throws Exception {
+ // create project
+ IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName());
+ ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, true);
+
+ // create a mock provider and add to cfgDescription
+ {
+ // get project descriptions
+ ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project, true);
+ assertNotNull(prjDescriptionWritable);
+ ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations();
+ assertEquals(1, cfgDescriptions.length);
+ ICConfigurationDescription cfgDescription = cfgDescriptions[0];
+ assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
+
+ // add mock provider to cfgDescription
+ List providers = new ArrayList();
+ MockLanguageSettingsEditableProvider mockProvider = new MockLanguageSettingsEditableProvider(PROVIDER_1, PROVIDER_NAME_1);
+ providers.add(mockProvider);
+ ((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(providers);
+ List storedProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
+ assertEquals(1, storedProviders.size());
+
+ // write to project description
+ CoreModel.getDefault().setProjectDescription(project, prjDescriptionWritable);
+ }
+
+ // register mock listener to inspect the notifications
+ {
+ LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener);
+ assertEquals(0, mockLseListener.getCount());
+ assertEquals(null, mockLseListener.getLastEvent());
+ }
+
+ // trigger an event on the project
+ ICConfigurationDescription cfgDescription;
+ {
+ // get project descriptions
+ ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, false);
+ assertNotNull(prjDescription);
+ ICConfigurationDescription[] cfgDescriptions = prjDescription.getConfigurations();
+ assertEquals(1, cfgDescriptions.length);
+ cfgDescription = cfgDescriptions[0];
+ assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
+ List providers = ((ILanguageSettingsProvidersKeeper)cfgDescription).getLanguageSettingProviders();
+ assertEquals(1, providers.size());
+ MockLanguageSettingsEditableProvider mockProvider = (MockLanguageSettingsEditableProvider) providers.get(0);
+
+ List entries = new ArrayList();
+ entries.add(SAMPLE_LSE);
+ mockProvider.setSettingEntries(cfgDescription, null, null, entries);
+ mockProvider.serializeLanguageSettings(cfgDescription);
+ }
+
+ // inspect event
+ {
+ assertEquals(1, mockLseListener.getCount());
+ ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent();
+ assertNotNull(event);
+ assertEquals(event.getProjectName(), project.getName());
+
+ Set resources = event.getAffectedResources(cfgDescription.getId());
+ assertNotNull(resources);
+ assertEquals(project, resources.toArray()[0]);
+ assertEquals(1, resources.size());
+ }
+ }
+
+ /**
+ * Test case when a folder is present in the list of resources in delta.
+ */
+ public void testDelta_AffectedResources_Folder() throws Exception {
+ // create project
+ IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName());
+ IFolder folder = ResourceHelper.createFolder(project, "Folder");
+ ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, true);
+
+ // create a mock provider and add to cfgDescription
+ {
+ // get project descriptions
+ ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project, true);
+ assertNotNull(prjDescriptionWritable);
+ ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations();
+ assertEquals(1, cfgDescriptions.length);
+ ICConfigurationDescription cfgDescription = cfgDescriptions[0];
+ assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
+
+ // add mock provider to cfgDescription
+ List providers = new ArrayList();
+ MockLanguageSettingsEditableProvider mockProvider = new MockLanguageSettingsEditableProvider(PROVIDER_1, PROVIDER_NAME_1);
+ providers.add(mockProvider);
+ ((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(providers);
+ List storedProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
+ assertEquals(1, storedProviders.size());
+
+ // write to project description
+ CoreModel.getDefault().setProjectDescription(project, prjDescriptionWritable);
+ }
+
+ // register mock listener to inspect the notifications
+ {
+ LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener);
+ assertEquals(0, mockLseListener.getCount());
+ assertEquals(null, mockLseListener.getLastEvent());
+ }
+
+ // trigger an event on the project
+ ICConfigurationDescription cfgDescription;
+ {
+ // get project descriptions
+ ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, false);
+ assertNotNull(prjDescription);
+ ICConfigurationDescription[] cfgDescriptions = prjDescription.getConfigurations();
+ assertEquals(1, cfgDescriptions.length);
+ cfgDescription = cfgDescriptions[0];
+ assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
+ List providers = ((ILanguageSettingsProvidersKeeper)cfgDescription).getLanguageSettingProviders();
+ assertEquals(1, providers.size());
+ MockLanguageSettingsEditableProvider mockProvider = (MockLanguageSettingsEditableProvider) providers.get(0);
+
+ List entries = new ArrayList();
+ entries.add(SAMPLE_LSE);
+ mockProvider.setSettingEntries(cfgDescription, folder, null, entries);
+ mockProvider.serializeLanguageSettings(cfgDescription);
+ }
+
+ // inspect event
+ {
+ assertEquals(1, mockLseListener.getCount());
+ ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent();
+ assertNotNull(event);
+ assertEquals(event.getProjectName(), project.getName());
+
+ Set resources = event.getAffectedResources(cfgDescription.getId());
+ assertNotNull(resources);
+ assertEquals(folder, resources.toArray()[0]);
+ assertEquals(1, resources.size());
+ }
+ }
+
+ /**
+ * Test case when a file is present in the list of resources in delta.
+ */
+ public void testDelta_AffectedResources_File() throws Exception {
+ // create project
+ IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName());
+ IFile file = ResourceHelper.createFile(project, "file.cpp");
+ ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, true);
+
+ // create a mock provider and add to cfgDescription
+ {
+ // get project descriptions
+ ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project, true);
+ assertNotNull(prjDescriptionWritable);
+ ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations();
+ assertEquals(1, cfgDescriptions.length);
+ ICConfigurationDescription cfgDescription = cfgDescriptions[0];
+ assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
+
+ // add mock provider to cfgDescription
+ List providers = new ArrayList();
+ MockLanguageSettingsEditableProvider mockProvider = new MockLanguageSettingsEditableProvider(PROVIDER_1, PROVIDER_NAME_1);
+ providers.add(mockProvider);
+ ((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(providers);
+ List storedProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
+ assertEquals(1, storedProviders.size());
+
+ // write to project description
+ CoreModel.getDefault().setProjectDescription(project, prjDescriptionWritable);
+ }
+
+ // register mock listener to inspect the notifications
+ {
+ LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener);
+ assertEquals(0, mockLseListener.getCount());
+ assertEquals(null, mockLseListener.getLastEvent());
+ }
+
+ // trigger an event on the project
+ ICConfigurationDescription cfgDescription;
+ {
+ // get project descriptions
+ ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, false);
+ assertNotNull(prjDescription);
+ ICConfigurationDescription[] cfgDescriptions = prjDescription.getConfigurations();
+ assertEquals(1, cfgDescriptions.length);
+ cfgDescription = cfgDescriptions[0];
+ assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
+ List providers = ((ILanguageSettingsProvidersKeeper)cfgDescription).getLanguageSettingProviders();
+ assertEquals(1, providers.size());
+ MockLanguageSettingsEditableProvider mockProvider = (MockLanguageSettingsEditableProvider) providers.get(0);
+
+ List entries = new ArrayList();
+ entries.add(SAMPLE_LSE);
+ mockProvider.setSettingEntries(cfgDescription, file, null, entries);
+ mockProvider.serializeLanguageSettings(cfgDescription);
+ }
+
+ // inspect event
+ {
+ assertEquals(1, mockLseListener.getCount());
+ ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent();
+ assertNotNull(event);
+ assertEquals(event.getProjectName(), project.getName());
+
+ Set resources = event.getAffectedResources(cfgDescription.getId());
+ assertNotNull(resources);
+ assertEquals(file, resources.toArray()[0]);
+ assertEquals(1, resources.size());
+ }
+ }
+
+ /**
+ * Test case when a mix of files and folders is present in the list of resources in delta.
+ */
+ public void testDelta_AffectedResources_Mix() throws Exception {
+ // create project
+ IProject project = ResourceHelper.createCDTProjectWithConfig(this.getName());
+ IFolder folder = ResourceHelper.createFolder(project, "Folder");
+ IFile file1 = ResourceHelper.createFile(project, "file1.cpp");
+ IFile file2 = ResourceHelper.createFile(project, "file2.cpp");
+ IFile file3 = ResourceHelper.createFile(project, "file3.cpp");
+ ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, true);
+
+ // create a mock provider and add to cfgDescription
+ {
+ // get project descriptions
+ ICProjectDescription prjDescriptionWritable = CProjectDescriptionManager.getInstance().getProjectDescription(project, true);
+ assertNotNull(prjDescriptionWritable);
+ ICConfigurationDescription[] cfgDescriptions = prjDescriptionWritable.getConfigurations();
+ assertEquals(1, cfgDescriptions.length);
+ ICConfigurationDescription cfgDescription = cfgDescriptions[0];
+ assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
+
+ // add mock provider to cfgDescription
+ List providers = new ArrayList();
+ MockLanguageSettingsEditableProvider mockProvider = new MockLanguageSettingsEditableProvider(PROVIDER_1, PROVIDER_NAME_1);
+ providers.add(mockProvider);
+ ((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(providers);
+ List storedProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
+ assertEquals(1, storedProviders.size());
+
+ // write to project description
+ CoreModel.getDefault().setProjectDescription(project, prjDescriptionWritable);
+ }
+
+ // register mock listener to inspect the notifications
+ {
+ LanguageSettingsManager.registerLanguageSettingsChangeListener(mockLseListener);
+ assertEquals(0, mockLseListener.getCount());
+ assertEquals(null, mockLseListener.getLastEvent());
+ }
+
+ // trigger an event on the project
+ ICConfigurationDescription cfgDescription;
+ {
+ // get project descriptions
+ ICProjectDescription prjDescription = CProjectDescriptionManager.getInstance().getProjectDescription(project, false);
+ assertNotNull(prjDescription);
+ ICConfigurationDescription[] cfgDescriptions = prjDescription.getConfigurations();
+ assertEquals(1, cfgDescriptions.length);
+ cfgDescription = cfgDescriptions[0];
+ assertTrue(cfgDescription instanceof ILanguageSettingsProvidersKeeper);
+ List providers = ((ILanguageSettingsProvidersKeeper)cfgDescription).getLanguageSettingProviders();
+ assertEquals(1, providers.size());
+ MockLanguageSettingsEditableProvider mockProvider = (MockLanguageSettingsEditableProvider) providers.get(0);
+
+ List entries = new ArrayList();
+ entries.add(SAMPLE_LSE);
+ mockProvider.setSettingEntries(cfgDescription, folder, null, entries);
+ mockProvider.setSettingEntries(cfgDescription, file1, null, entries);
+ mockProvider.setSettingEntries(cfgDescription, file2, null, entries);
+ mockProvider.serializeLanguageSettings(cfgDescription);
+ }
+
+ // inspect event
+ {
+ assertEquals(1, mockLseListener.getCount());
+ ILanguageSettingsChangeEvent event = mockLseListener.getLastEvent();
+ assertNotNull(event);
+ assertEquals(event.getProjectName(), project.getName());
+
+ Set resources = event.getAffectedResources(cfgDescription.getId());
+ assertNotNull(resources);
+ assertTrue(resources.contains(folder));
+ assertTrue(resources.contains(file1));
+ assertTrue(resources.contains(file2));
+ assertFalse(resources.contains(file3));
+ assertEquals(3, resources.size());
+ }
+ }
}
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java
index 2ec49ee1839..ceb452abbd8 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java
@@ -27,6 +27,7 @@ import java.util.Iterator;
import junit.framework.TestSuite;
+import org.eclipse.cdt.core.dom.IName;
import org.eclipse.cdt.core.dom.ast.ASTTypeUtil;
import org.eclipse.cdt.core.dom.ast.EScopeKind;
import org.eclipse.cdt.core.dom.ast.IASTArrayDeclarator;
@@ -9684,4 +9685,13 @@ public class AST2CPPTests extends AST2BaseTest {
f= bh.assertNonProblem("f( 0 )", 1);
assertEquals("void (int)", ASTTypeUtil.getType(f.getType()));
}
+
+ // void foo(struct S s);
+ public void testParameterForwardDeclaration_379511() throws Exception {
+ BindingAssertionHelper bh= new BindingAssertionHelper(getAboveComment(), true);
+ ICPPClassType struct= bh.assertNonProblem("S", 1, ICPPClassType.class);
+ IName[] declarations= bh.getTranslationUnit().getDeclarations(struct);
+ assertEquals(1, declarations.length);
+ assertEquals(bh.findName("S", 1), declarations[0]);
+ }
}
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ILanguageSettingsChangeEvent.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ILanguageSettingsChangeEvent.java
index 8bcb1046571..caf2240d028 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ILanguageSettingsChangeEvent.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ILanguageSettingsChangeEvent.java
@@ -10,7 +10,10 @@
*******************************************************************************/
package org.eclipse.cdt.core.language.settings.providers;
+import java.util.Set;
+
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
+import org.eclipse.core.resources.IResource;
/**
* Contains the details of changes that occurred as a result of modifying
@@ -21,7 +24,7 @@ import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
*
* EXPERIMENTAL. This class interface is not stable yet as
* it is not currently clear how it may need to be used in future. Only bare
- * minimum is provided here at this point (CDT 9.0, Juno).
+ * minimum is provided here at this point (CDT 8.1, Juno).
* There is no guarantee that this API will work or that it will remain the same.
* Please do not use this API without consulting with the CDT team.
*
@@ -38,8 +41,12 @@ public interface ILanguageSettingsChangeEvent {
public String getProjectName();
/**
- * @return configuration IDs which are affected by the language settings changes.
+ * @return configuration IDs which are affected by the language settings entries changes.
*/
public String[] getConfigurationDescriptionIds();
+ /**
+ * @return list of resources affected by the language settings entries changes.
+ */
+ public Set getAffectedResources(String cfgId);
}
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsStorage.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsStorage.java
index 33db176254d..d1dd06f6fce 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsStorage.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/LanguageSettingsStorage.java
@@ -14,6 +14,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -91,8 +92,10 @@ public class LanguageSettingsStorage implements Cloneable {
/**
* Sets language settings entries for the resource and language.
*
- * @param rcProjectPath - path to the resource relative to the project.
- * @param languageId - language id.
+ * @param rcProjectPath - path to the resource relative to the project. If {@code null} the entries are
+ * considered to be being defined as default entries for resources.
+ * @param languageId - language id. If {@code null}, then entries are considered
+ * to be defined for the language scope.
* @param entries - language settings entries to set.
*/
public void setSettingEntries(String rcProjectPath, String languageId, List entries) {
@@ -134,6 +137,31 @@ public class LanguageSettingsStorage implements Cloneable {
}
}
+ /**
+ * @return set of all languages associated with the entries.
+ * Note that the storage can keep default entries for the language scope
+ * of the provider, so the set can contain {@code null}.
+ */
+ public Set getLanguages() {
+ return new HashSet(fStorage.keySet());
+ }
+
+ /**
+ * Returns set of paths for all resources associated with entries for given language.
+ * The paths are project relative.
+ *
+ * @param languageId - language ID.
+ * @return the set of resource paths associated with entries for the given language or empty set.
+ * Note that the storage can keep default entries for resources, so the set can contain {@code null}.
+ */
+ public Set getResourcePaths(String languageId) {
+ Map> rcPathsMap = fStorage.get(languageId);
+ if (rcPathsMap == null) {
+ return new HashSet();
+ }
+ return new HashSet(rcPathsMap.keySet());
+ }
+
/**
* Find and return the equal list of entries from the pool.
*
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsDelta.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsDelta.java
index 5fd372612aa..5aef3614481 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsDelta.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsDelta.java
@@ -11,6 +11,9 @@
package org.eclipse.cdt.internal.core.language.settings.providers;
import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsStorage;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
@@ -24,7 +27,7 @@ import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
*
* EXPERIMENTAL. This class interface is not stable yet as
* it is not currently clear how it may need to be used in future. Only bare
- * minimum is provided here at this point (CDT 9.0, Juno).
+ * minimum is provided here at this point (CDT 8.1, Juno).
* There is no guarantee that this API will work or that it will remain the same.
* Please do not use this API without consulting with the CDT team.
*
@@ -33,12 +36,12 @@ import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
* @noinstantiate This class is not intended to be instantiated by clients.
*/
public class LanguageSettingsDelta {
- // maps need to be ordered by providers
- @SuppressWarnings("unused")
+ // maps are ordered by providers
private LinkedHashMap oldLanguageSettingsState;
- @SuppressWarnings("unused")
private LinkedHashMap newLanguageSettingsState;
+ private Set paths = null;
+
/**
* Constructor.
*
@@ -50,4 +53,64 @@ public class LanguageSettingsDelta {
newLanguageSettingsState = newState;
}
+ /**
+ * @return resource paths affected by changes represented by this delta.
+ */
+ public Set getAffectedResourcePaths() {
+ if (paths != null) {
+ return paths;
+ }
+
+ paths = new TreeSet();
+
+ LanguageSettingsStorage oldCombinedStorage = combineStorage(oldLanguageSettingsState);
+ LanguageSettingsStorage newCombinedStorage = combineStorage(newLanguageSettingsState);
+
+ for (String lang : oldCombinedStorage.getLanguages()) {
+ for (String path : oldCombinedStorage.getResourcePaths(lang)) {
+ if (oldCombinedStorage.getSettingEntries(path, lang) != newCombinedStorage.getSettingEntries(path, lang)) {
+ if (path == null) {
+ // add path of the project
+ path = ""; //$NON-NLS-1$
+ }
+ paths.add(path);
+ }
+ }
+ }
+
+ for (String lang : newCombinedStorage.getLanguages()) {
+ for (String path : newCombinedStorage.getResourcePaths(lang)) {
+ if (newCombinedStorage.getSettingEntries(path, lang) != oldCombinedStorage.getSettingEntries(path, lang)) {
+ if (path == null) {
+ // add path of the project
+ path = ""; //$NON-NLS-1$
+ }
+ paths.add(path);
+ }
+ }
+ }
+
+ return paths;
+ }
+
+ /**
+ * Language settings entries from different providers can overlap. This method resolves all overlapping
+ * ones combining entries into one aggregate storage.
+ */
+ private LanguageSettingsStorage combineStorage(LinkedHashMap state) {
+ LanguageSettingsStorage combinedStore = new LanguageSettingsStorage();
+ for (LanguageSettingsStorage providerStore : state.values()) {
+ for (String lang : providerStore.getLanguages()) {
+ for (String path : providerStore.getResourcePaths(lang)) {
+ // provider (store) higher on the list overrides others below
+ if (combinedStore.getSettingEntries(path, lang) == null) {
+ List entries = providerStore.getSettingEntries(path, lang);
+ combinedStore.setSettingEntries(path, lang, entries);
+ }
+ }
+ }
+ }
+
+ return combinedStore;
+ }
}
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsProvidersSerializer.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsProvidersSerializer.java
index 1b90a90267b..814856a9041 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsProvidersSerializer.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsProvidersSerializer.java
@@ -14,8 +14,10 @@ import java.net.URI;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.language.settings.providers.ICListenerAgent;
@@ -305,6 +307,26 @@ public class LanguageSettingsProvidersSerializer {
return "LanguageSettingsChangeEvent for project=[" + getProjectName() + "]"
+ ", configurations=" + deltaMap.keySet();
}
+
+ @Override
+ public Set getAffectedResources(String cfgId) {
+ LanguageSettingsDelta delta = deltaMap.get(cfgId);
+ if (delta != null) {
+ Set paths = delta.getAffectedResourcePaths();
+ if (!paths.isEmpty()) {
+ IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
+ Set resources = new HashSet();
+ for (String path : paths) {
+ IResource rc = project.findMember(path);
+ if (rc != null) {
+ resources.add(rc);
+ }
+ }
+ return resources;
+ }
+ }
+ return null;
+ }
}
/** static initializer */
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTElaboratedTypeSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTElaboratedTypeSpecifier.java
index 4bb8807777f..563e28a4c29 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTElaboratedTypeSpecifier.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTElaboratedTypeSpecifier.java
@@ -6,7 +6,7 @@
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
- * John Camelon (IBM Rational Software) - Initial API and implementation
+ * John Camelon (IBM Rational Software) - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.core.dom.ast;
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java
index af69d010bf4..7b13aa7ef33 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java
@@ -13,7 +13,11 @@
*******************************************************************************/
package org.eclipse.cdt.internal.core.dom.parser.cpp.semantics;
-import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil.*;
+import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil.ALLCVQ;
+import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil.CVTYPE;
+import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil.TDEF;
+import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil.getNestedType;
+import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil.getUltimateTypeUptoPointers;
import java.util.ArrayList;
import java.util.Arrays;
@@ -1468,8 +1472,9 @@ public class CPPVisitor extends ASTQueries {
break;
} else if (prop == IASTElaboratedTypeSpecifier.TYPE_NAME) {
IASTNode p = name.getParent().getParent();
- if (p instanceof IASTSimpleDeclaration &&
- ((IASTSimpleDeclaration) p).getDeclarators().length == 0) {
+ if (p instanceof IASTParameterDeclaration ||
+ (p instanceof IASTSimpleDeclaration &&
+ ((IASTSimpleDeclaration) p).getDeclarators().length == 0)) {
break;
}
} else if (prop == IASTDeclarator.DECLARATOR_NAME) {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/LanguageSettingsChangeListener.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/LanguageSettingsChangeListener.java
index c66d3c455bd..b1c26471852 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/LanguageSettingsChangeListener.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/LanguageSettingsChangeListener.java
@@ -10,15 +10,23 @@
*******************************************************************************/
package org.eclipse.cdt.internal.core.pdom;
+import java.util.HashSet;
+import java.util.Set;
+
import org.eclipse.cdt.core.CCorePlugin;
+import org.eclipse.cdt.core.index.IIndexManager;
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsChangeEvent;
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsChangeListener;
-import org.eclipse.cdt.core.model.CoreModel;
+import org.eclipse.cdt.core.model.ICElement;
+import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICProjectDescription;
+import org.eclipse.cdt.internal.core.model.CModelManager;
import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
/**
* This class handles changes in language settings for the PDOM.
@@ -43,16 +51,36 @@ public class LanguageSettingsChangeListener implements ILanguageSettingsChangeLi
if (project != null) {
ICProjectDescription prjDescription = CCorePlugin.getDefault().getProjectDescription(project);
if (prjDescription != null) {
- ICConfigurationDescription indexedCfgDescription = prjDescription.getDefaultSettingConfiguration();
- String indexedCfgId = indexedCfgDescription.getId();
+ // cfgDescription being indexed
+ ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
+ String indexedId = cfgDescription.getId();
- for (String cfgId : event.getConfigurationDescriptionIds()) {
- if (cfgId.equals(indexedCfgId)) {
- fManager.reindex(CoreModel.getDefault().getCModel().getCProject(project.getName()));
+ for (String id : event.getConfigurationDescriptionIds()) {
+ if (id.equals(indexedId)) {
+ reindex(id, event);
return;
}
}
}
}
}
+
+ private void reindex(String cfgId, ILanguageSettingsChangeEvent event) {
+ CModelManager manager = CModelManager.getDefault();
+ ICProject cProject = manager.getCModel().getCProject(event.getProjectName());
+ Set tuSelection = new HashSet();
+
+ Set resources = event.getAffectedResources(cfgId);
+ if (resources != null && !resources.isEmpty()) {
+ for (IResource rc : resources) {
+ tuSelection.add(manager.create(rc, cProject));
+ }
+
+ try {
+ fManager.update(tuSelection.toArray(new ICElement[tuSelection.size()]), IIndexManager.UPDATE_ALL);
+ } catch (CoreException e) {
+ CCorePlugin.log(e);
+ }
+ }
+ }
}
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/RefreshScopeManager.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/RefreshScopeManager.java
index c3cb38ae4e6..39cd795b69e 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/RefreshScopeManager.java
+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/RefreshScopeManager.java
@@ -11,11 +11,11 @@
package org.eclipse.cdt.core.resources;
import java.util.ArrayList;
-
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
+
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.CProjectNature;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
@@ -97,6 +97,7 @@ public class RefreshScopeManager {
private boolean fIsLoaded = false;
private boolean fIsLoading = false;
+ private boolean fIsNewProject = false;
private HashMap>>> fProjToConfToResToExcluMap;
private int fVersion = 2;
@@ -214,9 +215,7 @@ public class RefreshScopeManager {
}
private synchronized void clearDataForProject(IProject project) {
- HashMap>> configMap = fProjToConfToResToExcluMap.get(project);
- if (configMap != null)
- configMap.clear();
+ fProjToConfToResToExcluMap.remove(project);
}
/**
@@ -286,7 +285,8 @@ public class RefreshScopeManager {
if (resourceMap == null) {
resourceMap = new HashMap>();
- resourceMap.put(project, new LinkedList());
+ if (!fIsLoading)
+ resourceMap.put(project, new LinkedList());
configMap.put(configName, resourceMap);
}
@@ -317,9 +317,24 @@ public class RefreshScopeManager {
return fProjToConfToResToExcluMap;
}
-
+ /**
+ * Refresh the given project using the refresh setting for the active configuration
+ * @param project
+ * @return the refresh runnable for the given project
+ */
public IWorkspaceRunnable getRefreshRunnable(final IProject project) {
+ return getRefreshRunnable(project, null);
+ }
+
+ /**
+ * Refresh the given project using the refresh setting for the configuration with the given name
+ * @param project
+ * @param configName
+ * @return the refresh runnable for the given project
+ * @since 5.4
+ */
+ public IWorkspaceRunnable getRefreshRunnable(final IProject project, final String configName) {
IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
/**
@@ -345,13 +360,14 @@ public class RefreshScopeManager {
@Override
public void run(IProgressMonitor monitor) throws CoreException {
-
-
- CProjectDescriptionManager descriptionManager = CProjectDescriptionManager
- .getInstance();
- ICProjectDescription projectDescription = descriptionManager.getProjectDescription(project, false);
- ICConfigurationDescription active_conf = projectDescription.getActiveConfiguration();
- String name = active_conf.getName();
+ String name = configName;
+ if (name == null) {
+ CProjectDescriptionManager descriptionManager = CProjectDescriptionManager
+ .getInstance();
+ ICProjectDescription projectDescription = descriptionManager.getProjectDescription(project, false);
+ ICConfigurationDescription active_conf = projectDescription.getActiveConfiguration();
+ name = active_conf.getName();
+ }
List resourcesToRefresh = getResourcesToRefresh(project,name);
for (IResource resource : resourcesToRefresh) {
List exclusions = getExclusions(project,name,resource);
@@ -473,7 +489,7 @@ public class RefreshScopeManager {
// walk the tree and load the settings
String str = storageElement.getAttribute(VERSION_NUMBER_ATTRIBUTE_NAME);
- if ((str == null) || (str.equals("1"))) { //$NON-NLS-1$
+ if ( (children.length != 0) && ((str == null) || (str.equals("1")))) { //$NON-NLS-1$
ICConfigurationDescription cfgDescs[] = projectDescription.getConfigurations();
for (ICConfigurationDescription cfgDesc : cfgDescs)
loadResourceData(workspaceRoot, project, cfgDesc.getName(), children);
@@ -488,7 +504,9 @@ public class RefreshScopeManager {
// else there are no children, and this is a "new" project.
// so initialize it.
if (children.length == 0) {
+ fIsNewProject = true;
getConfigurationToResourcesMap(project); // this will initialize the config map.
+ fIsNewProject = false;
}
}
}
@@ -506,7 +524,7 @@ public class RefreshScopeManager {
for (ICConfigurationDescription cfgDesc : cfgDescs) {
String configName = cfgDesc.getName();
HashMap> resourceMap = new HashMap>();
- if (!fIsLoading)
+ if (!fIsLoading || fIsNewProject) //config settings could be loading and detects a new project and if so, add the default refresh setting
resourceMap.put(project, new LinkedList());
configMap.put(configName, resourceMap);
}
@@ -520,76 +538,80 @@ public class RefreshScopeManager {
*/
public synchronized void loadResourceData(IWorkspaceRoot workspaceRoot, IProject project, String configName, ICStorageElement[] children) {
- for (ICStorageElement child : children) {
- if (child.getName().equals(RESOURCE_ELEMENT_NAME)) {
-
- // get the resource path
- String resourcePath = child.getAttribute(WORKSPACE_PATH_ATTRIBUTE_NAME);
-
- if (resourcePath == null) {
- // error... skip this resource
- continue;
-
- }
-
- else {
- String resourceTypeString = child
- .getAttribute(RESOURCE_TYPE_ATTRIBUTE_NAME);
-
- if (resourceTypeString == null) {
- // we'll do our best, but we won't be able to create handles to non-existent
- // resources
- resourceTypeString = OTHER_VALUE;
- }
-
- // find the resource
- IResource resource = null;
-
- if (resourceTypeString.equals(PROJECT_VALUE)) {
- resource = workspaceRoot.getProject(resourcePath);
- }
-
- else if (resourceTypeString.equals(FILE_VALUE)) {
- resource = workspaceRoot.getFile(new Path(resourcePath));
- }
-
- else if (resourceTypeString.equals(FOLDER_VALUE)) {
- resource = workspaceRoot.getFolder(new Path(resourcePath));
- }
-
- else {
- // Find arbitrary resource.
- // The only way to do this is to ask the workspace root to find
- // it, if it exists. If it doesn't exist, we have no way of
- // creating a handle to the right type of object, so we must
- // give up. In practice, this would likely happen if we had
- // a virtual group resource that has been deleted somehow since
- // the settings were created, and since the resource is virtual,
- // it's impossible to refresh it if it doesn't exist anyway.
- resource = workspaceRoot.findMember(resourcePath);
- }
-
- if (resource == null) {
- // error.. skip this resource
+ if (children.length == 0) {
+ // we have an empty config to resource map. This call will create an empty resource set for the config name.
+ getResourcesToExclusionsMap(project,configName);
+ } else {
+ for (ICStorageElement child : children) {
+ if (child.getName().equals(RESOURCE_ELEMENT_NAME)) {
+
+ // get the resource path
+ String resourcePath = child.getAttribute(WORKSPACE_PATH_ATTRIBUTE_NAME);
+
+ if (resourcePath == null) {
+ // error... skip this resource
continue;
}
else {
- addResourceToRefresh(project,configName, resource);
+ String resourceTypeString = child
+ .getAttribute(RESOURCE_TYPE_ATTRIBUTE_NAME);
+
+ if (resourceTypeString == null) {
+ // we'll do our best, but we won't be able to create handles to non-existent
+ // resources
+ resourceTypeString = OTHER_VALUE;
+ }
+
+ // find the resource
+ IResource resource = null;
+
+ if (resourceTypeString.equals(PROJECT_VALUE)) {
+ resource = workspaceRoot.getProject(resourcePath);
+ }
+
+ else if (resourceTypeString.equals(FILE_VALUE)) {
+ resource = workspaceRoot.getFile(new Path(resourcePath));
+ }
+
+ else if (resourceTypeString.equals(FOLDER_VALUE)) {
+ resource = workspaceRoot.getFolder(new Path(resourcePath));
+ }
+
+ else {
+ // Find arbitrary resource.
+ // The only way to do this is to ask the workspace root to find
+ // it, if it exists. If it doesn't exist, we have no way of
+ // creating a handle to the right type of object, so we must
+ // give up. In practice, this would likely happen if we had
+ // a virtual group resource that has been deleted somehow since
+ // the settings were created, and since the resource is virtual,
+ // it's impossible to refresh it if it doesn't exist anyway.
+ resource = workspaceRoot.findMember(resourcePath);
+ }
+
+ if (resource == null) {
+ // error.. skip this resource
+ continue;
+ }
+
+ else {
+ addResourceToRefresh(project,configName, resource);
+
+ // load any exclusions
+ List exclusions;
+ try {
+ exclusions = RefreshExclusion.loadData(
+ child, null, resource, this);
- // load any exclusions
- List exclusions;
- try {
- exclusions = RefreshExclusion.loadData(
- child, null, resource, this);
-
- // add them
- for (RefreshExclusion exclusion : exclusions) {
- addExclusion(project, configName, resource, exclusion);
+ // add them
+ for (RefreshExclusion exclusion : exclusions) {
+ addExclusion(project, configName, resource, exclusion);
+ }
+ } catch (CoreException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
}
- } catch (CoreException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
}
}
}
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/BuildRunnerHelper.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/BuildRunnerHelper.java
index 6af783585db..ec9e248bd70 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/BuildRunnerHelper.java
+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/BuildRunnerHelper.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2012, 2012 Andrew Gvozdev and others.
+ * Copyright (c) 2012 Andrew Gvozdev 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
@@ -7,6 +7,7 @@
*
* Contributors:
* Andrew Gvozdev - initial API and implementation
+ * IBM Corporation
*******************************************************************************/
package org.eclipse.cdt.internal.core;
@@ -313,10 +314,11 @@ public class BuildRunnerHelper implements Closeable {
/**
* Refresh project in the workspace.
*
+ * @param configName - the configuration to refresh
* @param monitor - progress monitor in the initial state where {@link IProgressMonitor#beginTask(String, int)}
* has not been called yet.
*/
- public void refreshProject(IProgressMonitor monitor) {
+ public void refreshProject(String configName, IProgressMonitor monitor) {
if (monitor == null) {
monitor = new NullProgressMonitor();
}
@@ -328,7 +330,7 @@ public class BuildRunnerHelper implements Closeable {
// The caveat is for huge projects, it may take sometimes at every build.
// Use the refresh scope manager to refresh
RefreshScopeManager refreshManager = RefreshScopeManager.getInstance();
- IWorkspaceRunnable runnable = refreshManager.getRefreshRunnable(project);
+ IWorkspaceRunnable runnable = refreshManager.getRefreshRunnable(project, configName);
ResourcesPlugin.getWorkspace().run(runnable, null, IWorkspace.AVOID_UPDATE, null);
} catch (CoreException e) {
// ignore exceptions
diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CIndenterTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CIndenterTest.java
index 9abe5b5291f..99588a8b8dc 100644
--- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CIndenterTest.java
+++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CIndenterTest.java
@@ -25,7 +25,6 @@ import org.eclipse.cdt.core.formatter.DefaultCodeFormatterConstants;
import org.eclipse.cdt.core.formatter.DefaultCodeFormatterOptions;
import org.eclipse.cdt.ui.tests.BaseUITestCase;
-
import org.eclipse.cdt.internal.ui.editor.CDocumentSetupParticipant;
import org.eclipse.cdt.internal.ui.editor.IndentUtil;
@@ -979,4 +978,27 @@ public class CIndenterTest extends BaseUITestCase {
public void testIndentationAfterFunctionHeaderWithPointerReturnType_Bug334805() throws Exception {
assertIndenterResult();
}
+
+ //void test(int arg1, int arg2) {
+ //if (BooleanFunction1(arg1,
+ //arg2) ||
+ //BooleanFunction2(arg1, arg2)) {
+ //x++;
+ //}
+ //}
+
+ //void test(int arg1, int arg2) {
+ // if (BooleanFunction1(arg1,
+ // arg2) ||
+ // BooleanFunction2(arg1, arg2)) {
+ // x++;
+ // }
+ //}
+ public void testMultilineFunctionCall_Bug380490() throws Exception {
+ fOptions.put(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR, CCorePlugin.SPACE);
+ fOptions.put(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_METHOD_INVOCATION,
+ DefaultCodeFormatterConstants.createAlignmentValue(false, DefaultCodeFormatterConstants.WRAP_COMPACT,
+ DefaultCodeFormatterConstants.INDENT_ON_COLUMN));
+ assertIndenterResult();
+ }
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsProviderTab.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsProviderTab.java
index 1e235892470..0c7bd05d721 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsProviderTab.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsProviderTab.java
@@ -107,7 +107,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
*/
private List presentedProviders = null;
private final Map optionsPageMap = new HashMap();
- private Map> initialProvidersByCfg = new HashMap>();
+ private Map> initialProvidersByCfg = new HashMap>();
/**
* Label provider for language settings providers displayed by this tab.
@@ -169,6 +169,27 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
return findProvider(id, presentedProviders);
}
+ /**
+ * Returns the provider equal to provider at the point from which editing started.
+ * Used by option pages when there is a need.
+ * @param id - id of the provider.
+ *
+ * @return the initial provider.
+ */
+ public ILanguageSettingsProvider getInitialProvider(String id) {
+ ILanguageSettingsProvider initialProvider = null;
+ if (page.isForPrefs()) {
+ initialProvider = LanguageSettingsManager.getWorkspaceProvider(id);
+ } else {
+ ICConfigurationDescription cfgDescription = getConfigurationDescription();
+ List initialProviders = initialProvidersByCfg.get(cfgDescription.getId());
+ if (initialProviders != null) {
+ initialProvider = findProvider(id, initialProviders);
+ }
+ }
+ return initialProvider;
+ }
+
/**
* Check if the provider is a working copy and can be modified.
*/
@@ -508,6 +529,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
*/
private void createProjectStorageCheckBox(Composite parent) {
projectStorageCheckBox = new Button(parent, SWT.CHECK);
+ projectStorageCheckBox.setLayoutData(new GridData(SWT.END, SWT.NONE, false, false));
projectStorageCheckBox.setText(Messages.LanguageSettingsProviderTab_StoreEntriesInsideProject);
projectStorageCheckBox.addSelectionListener(new SelectionAdapter() {
@Override
@@ -561,7 +583,14 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
createLinkToPreferences(groupOptionsPage, 2);
}
- compositeOptionsPage = new Composite(groupOptionsPage, SWT.NONE);
+ // composite to span over 2 columns
+ Composite comp = new Composite(groupOptionsPage, SWT.NONE);
+ comp.setLayout(new GridLayout());
+ GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
+ gd.horizontalSpan = 2;
+ comp.setLayoutData(gd);
+
+ compositeOptionsPage = new Composite(comp, SWT.NONE);
compositeOptionsPage.setLayout(new TabFolderLayout());
}
@@ -940,6 +969,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
optionsPage.setContainer(page);
optionsPage.createControl(compositeOptionsPage);
optionsPage.setVisible(false);
+ compositeOptionsPage.setBounds(compositeOptionsPage.getParent().getClientArea());
compositeOptionsPage.layout(true);
}
}
@@ -985,6 +1015,8 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
boolean isEditable = isEditableForProject || isEditableForPrefs;
currentOptionsPage.getControl().setEnabled(isEditable);
compositeOptionsPage.setEnabled(isEditable);
+ compositeOptionsPage.setBounds(compositeOptionsPage.getParent().getClientArea());
+ compositeOptionsPage.layout(true);
}
}
@@ -1136,7 +1168,16 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
@Override
protected void performOK() {
- // Build Settings page
+ // give option pages a chance for provider-specific pre-apply actions
+ Collection optionPages = optionsPageMap.values();
+ for (ICOptionPage op : optionPages) {
+ try {
+ op.performApply(null);
+ } catch (CoreException e) {
+ CUIPlugin.log("Error applying options page", e); //$NON-NLS-1$
+ }
+ }
+
if (page.isForPrefs()) {
try {
LanguageSettingsManager.setWorkspaceProviders(presentedProviders);
@@ -1149,15 +1190,6 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
if (masterPropertyPage != null && enableProvidersCheckBox.getEnabled()) {
masterPropertyPage.applyLanguageSettingsProvidersEnabled();
}
-
- Collection optionPages = optionsPageMap.values();
- for (ICOptionPage op : optionPages) {
- try {
- op.performApply(null);
- } catch (CoreException e) {
- CUIPlugin.log("Error applying options page", e); //$NON-NLS-1$
- }
- }
}
@Override
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/newui/Messages.properties b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/newui/Messages.properties
index ad4c41fa34c..73eebb342a8 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/newui/Messages.properties
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/newui/Messages.properties
@@ -202,7 +202,7 @@ LanguageSettingsProviderTab_ProviderOptions=Language Settings Provider Options
LanguageSettingsProviderTab_SettingEntries=Setting Entries
LanguageSettingsProviderTab_SettingEntriesTooltip=Setting Entries
LanguageSettingsProviderTab_ShareProviders=Share setting entries between projects (global provider)
-LanguageSettingsProviderTab_StoreEntriesInsideProject=Store entries in project settings folder (easing project miration)
+LanguageSettingsProviderTab_StoreEntriesInsideProject=Store entries in project settings folder (easing project migration)
LanguageSettingsProviderTab_TitleResetProviders=Reset Language Settings Providers
LanguageSettingsProviderTab_WorkspaceSettings=Workspace Settings
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CIndenter.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CIndenter.java
index a03e5b76fa9..910dc5468cf 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CIndenter.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CIndenter.java
@@ -39,7 +39,6 @@ import org.eclipse.cdt.internal.corext.util.CodeFormatterUtil;
*
*/
public final class CIndenter {
-
/**
* The CDT Core preferences.
*/
@@ -1588,6 +1587,7 @@ public final class CIndenter {
private int skipToPreviousListItemOrListStart() {
int startLine= fLine;
int startPosition= fPosition;
+ int linesSkippedInsideScopes = 0;
boolean continuationLineCandidate =
fToken == Symbols.TokenEQUAL || fToken == Symbols.TokenSHIFTLEFT ||
fToken == Symbols.TokenRPAREN;
@@ -1596,7 +1596,7 @@ public final class CIndenter {
nextToken();
// If any line item comes with its own indentation, adapt to it
- if (fLine < startLine) {
+ if (fLine < startLine - linesSkippedInsideScopes) {
try {
int lineOffset= fDocument.getLineOffset(startLine);
int bound= Math.min(fDocument.getLength(), startPosition + 1);
@@ -1617,6 +1617,7 @@ public final class CIndenter {
return startPosition;
}
+ int line = fLine;
switch (fToken) {
// scopes: skip them
case Symbols.TokenRPAREN:
@@ -1625,6 +1626,7 @@ public final class CIndenter {
case Symbols.TokenRBRACKET:
case Symbols.TokenRBRACE:
skipScope();
+ linesSkippedInsideScopes = line - fLine;
break;
// scope introduction: special treat who special is
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/language/settings/providers/AbstractLanguageSettingProviderOptionPage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/language/settings/providers/AbstractLanguageSettingProviderOptionPage.java
index 13871ccfa8c..504b18a318a 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/language/settings/providers/AbstractLanguageSettingProviderOptionPage.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/language/settings/providers/AbstractLanguageSettingProviderOptionPage.java
@@ -22,12 +22,13 @@ import org.eclipse.cdt.internal.ui.language.settings.providers.LanguageSettingsP
/**
* Abstract class to implement language settings providers Options page.
+ * @noextend This class is not intended to be subclassed by clients, only internally by CDT.
*
* @since 5.4
*/
public abstract class AbstractLanguageSettingProviderOptionPage extends AbstractCOptionPage {
- private LanguageSettingsProviderTab providerTab;
- private String providerId;
+ protected LanguageSettingsProviderTab providerTab;
+ protected String providerId;
/**
* Initialize the options page with the owning tab and provider ID.
diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/pom.xml b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/pom.xml
new file mode 100644
index 00000000000..3c04abfcd94
--- /dev/null
+++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/pom.xml
@@ -0,0 +1,56 @@
+
+
+ 4.0.0
+
+
+ org.eclipse.cdt
+ cdt-parent
+ 8.1.0-SNAPSHOT
+ ../../pom.xml
+
+
+ 2.2.0-SNAPSHOT
+ org.eclipse.cdt.tests.dsf.gdb
+ eclipse-test-plugin
+
+
+
+
+
+
+
+ org.eclipse.tycho
+ tycho-surefire-plugin
+ ${tycho-version}
+
+ true
+ -Xms256m -Xmx512m -XX:MaxPermSize=256M
+
+ **/AutomatedSuite.*
+
+ true
+
+
+ org.eclipse.platform.feature.group
+ 3.7.0
+ p2-installable-unit
+
+
+ org.eclipse.cdt.feature.group
+ 8.1.0.${buildQualifier}
+ p2-installable-unit
+
+
+
+
+
+
+
diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/framework/BaseTestCase.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/framework/BaseTestCase.java
index fc56430565b..8ba587e339c 100644
--- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/framework/BaseTestCase.java
+++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/framework/BaseTestCase.java
@@ -11,6 +11,7 @@
package org.eclipse.cdt.tests.dsf.gdb.framework;
import java.io.BufferedReader;
+import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.HashMap;
@@ -39,6 +40,7 @@ import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.core.ILaunchManager;
import org.junit.After;
import org.junit.Assert;
+import org.junit.Assume;
import org.junit.Before;
import org.junit.Rule;
import org.junit.rules.TestName;
@@ -356,6 +358,22 @@ public class BaseTestCase {
protected void setGdbVersion() {
// Leave empty for the base class
}
+
+ /**
+ * This method will verify that the GDB binary is available, and if it is not, the test will
+ * be ignored. This method should be called by a Suite that specifies a specific GDB version.
+ */
+ public static void ignoreIfGDBMissing() {
+ try {
+ // See if we can find GDB by actually running it.
+ String gdb = (String)globalLaunchAttributes.get(IGDBLaunchConfigurationConstants.ATTR_DEBUG_NAME);
+ Process process = ProcessFactory.getFactory().exec(gdb + " --version");
+ process.destroy();
+ } catch (IOException e) {
+ // If we cannot run GDB, just ignore the test case.
+ Assume.assumeNoException(e);
+ }
+ }
/**
* In some tests we need to start a gdbserver session without starting gdbserver.
diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/AutomatedSuite.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/AutomatedSuite.java
new file mode 100644
index 00000000000..b1dd875c211
--- /dev/null
+++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/AutomatedSuite.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Ericsson 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Marc Khouzam (Ericsson) - Initial Implementation
+ *******************************************************************************/
+package org.eclipse.cdt.tests.dsf.gdb.tests;
+
+import org.eclipse.cdt.tests.dsf.gdb.tests.tests_7_4.Suite_7_4;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+/**
+ * This suite runs all suites that are part of the tests
+ * automatically run with each CDT build.
+ */
+
+@RunWith(Suite.class)
+@Suite.SuiteClasses({
+ Suite_7_4.class,
+ // Can't run the Remote test just yet because they
+ // have the same names on the local tests, which is
+ // not handled by JUnit (https://bugs.eclipse.org/172256)
+})
+
+public class AutomatedSuite {}
\ No newline at end of file
diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_6_6/Suite_6_6.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_6_6/Suite_6_6.java
index f83b1204c91..e4f7358bc39 100644
--- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_6_6/Suite_6_6.java
+++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_6_6/Suite_6_6.java
@@ -11,6 +11,9 @@
package org.eclipse.cdt.tests.dsf.gdb.tests.tests_6_6;
import org.eclipse.cdt.dsf.mi.service.command.commands.Suite_Sessionless_Tests;
+import org.eclipse.cdt.tests.dsf.gdb.framework.BaseTestCase;
+import org.eclipse.cdt.tests.dsf.gdb.tests.ITestConstants;
+import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@@ -43,5 +46,11 @@ import org.junit.runners.Suite;
/* Add your test class here */
})
-public class Suite_6_6 {}
+public class Suite_6_6 {
+ @BeforeClass
+ public static void beforeClassMethod() {
+ BaseTestCase.setGdbProgramNamesLaunchAttributes(ITestConstants.SUFFIX_GDB_6_6);
+ BaseTestCase.ignoreIfGDBMissing();
+ }
+}
diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_6_6/Suite_Remote_6_6.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_6_6/Suite_Remote_6_6.java
index 648d1c45677..ba0be9b3642 100644
--- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_6_6/Suite_Remote_6_6.java
+++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_6_6/Suite_Remote_6_6.java
@@ -12,6 +12,9 @@ package org.eclipse.cdt.tests.dsf.gdb.tests.tests_6_6;
import org.eclipse.cdt.dsf.mi.service.command.commands.Suite_Sessionless_Tests;
import org.eclipse.cdt.tests.dsf.gdb.framework.BaseRemoteSuite;
+import org.eclipse.cdt.tests.dsf.gdb.framework.BaseTestCase;
+import org.eclipse.cdt.tests.dsf.gdb.tests.ITestConstants;
+import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@@ -43,4 +46,9 @@ import org.junit.runners.Suite;
})
public class Suite_Remote_6_6 extends BaseRemoteSuite {
+ @BeforeClass
+ public static void beforeClassMethod() {
+ BaseTestCase.setGdbProgramNamesLaunchAttributes(ITestConstants.SUFFIX_GDB_6_6);
+ BaseTestCase.ignoreIfGDBMissing();
+ }
}
diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_6_7/Suite_6_7.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_6_7/Suite_6_7.java
index 5b3bde605a5..928a49eafd8 100644
--- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_6_7/Suite_6_7.java
+++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_6_7/Suite_6_7.java
@@ -11,6 +11,9 @@
package org.eclipse.cdt.tests.dsf.gdb.tests.tests_6_7;
import org.eclipse.cdt.dsf.mi.service.command.commands.Suite_Sessionless_Tests;
+import org.eclipse.cdt.tests.dsf.gdb.framework.BaseTestCase;
+import org.eclipse.cdt.tests.dsf.gdb.tests.ITestConstants;
+import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@@ -43,4 +46,10 @@ import org.junit.runners.Suite;
/* Add your test class here */
})
-public class Suite_6_7 {}
+public class Suite_6_7 {
+ @BeforeClass
+ public static void beforeClassMethod() {
+ BaseTestCase.setGdbProgramNamesLaunchAttributes(ITestConstants.SUFFIX_GDB_6_7);
+ BaseTestCase.ignoreIfGDBMissing();
+ }
+}
diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_6_7/Suite_Remote_6_7.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_6_7/Suite_Remote_6_7.java
index 9e5a278a1fe..a3e9277200b 100644
--- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_6_7/Suite_Remote_6_7.java
+++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_6_7/Suite_Remote_6_7.java
@@ -12,6 +12,9 @@ package org.eclipse.cdt.tests.dsf.gdb.tests.tests_6_7;
import org.eclipse.cdt.dsf.mi.service.command.commands.Suite_Sessionless_Tests;
import org.eclipse.cdt.tests.dsf.gdb.framework.BaseRemoteSuite;
+import org.eclipse.cdt.tests.dsf.gdb.framework.BaseTestCase;
+import org.eclipse.cdt.tests.dsf.gdb.tests.ITestConstants;
+import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@@ -43,4 +46,9 @@ import org.junit.runners.Suite;
})
public class Suite_Remote_6_7 extends BaseRemoteSuite {
+ @BeforeClass
+ public static void beforeClassMethod() {
+ BaseTestCase.setGdbProgramNamesLaunchAttributes(ITestConstants.SUFFIX_GDB_6_7);
+ BaseTestCase.ignoreIfGDBMissing();
+ }
}
diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_6_8/Suite_6_8.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_6_8/Suite_6_8.java
index 61f22592880..2b975e1e114 100644
--- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_6_8/Suite_6_8.java
+++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_6_8/Suite_6_8.java
@@ -11,6 +11,9 @@
package org.eclipse.cdt.tests.dsf.gdb.tests.tests_6_8;
import org.eclipse.cdt.dsf.mi.service.command.commands.Suite_Sessionless_Tests;
+import org.eclipse.cdt.tests.dsf.gdb.framework.BaseTestCase;
+import org.eclipse.cdt.tests.dsf.gdb.tests.ITestConstants;
+import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@@ -43,4 +46,10 @@ import org.junit.runners.Suite;
/* Add your test class here */
})
-public class Suite_6_8 {}
+public class Suite_6_8 {
+ @BeforeClass
+ public static void beforeClassMethod() {
+ BaseTestCase.setGdbProgramNamesLaunchAttributes(ITestConstants.SUFFIX_GDB_6_8);
+ BaseTestCase.ignoreIfGDBMissing();
+ }
+}
diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_6_8/Suite_Remote_6_8.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_6_8/Suite_Remote_6_8.java
index b059d858228..1cbc297d442 100644
--- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_6_8/Suite_Remote_6_8.java
+++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_6_8/Suite_Remote_6_8.java
@@ -12,6 +12,9 @@ package org.eclipse.cdt.tests.dsf.gdb.tests.tests_6_8;
import org.eclipse.cdt.dsf.mi.service.command.commands.Suite_Sessionless_Tests;
import org.eclipse.cdt.tests.dsf.gdb.framework.BaseRemoteSuite;
+import org.eclipse.cdt.tests.dsf.gdb.framework.BaseTestCase;
+import org.eclipse.cdt.tests.dsf.gdb.tests.ITestConstants;
+import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@@ -43,4 +46,9 @@ import org.junit.runners.Suite;
})
public class Suite_Remote_6_8 extends BaseRemoteSuite {
+ @BeforeClass
+ public static void beforeClassMethod() {
+ BaseTestCase.setGdbProgramNamesLaunchAttributes(ITestConstants.SUFFIX_GDB_6_8);
+ BaseTestCase.ignoreIfGDBMissing();
+ }
}
diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_0/Suite_7_0.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_0/Suite_7_0.java
index faadc9de1c0..597c13a0aff 100644
--- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_0/Suite_7_0.java
+++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_0/Suite_7_0.java
@@ -11,6 +11,9 @@
package org.eclipse.cdt.tests.dsf.gdb.tests.tests_7_0;
import org.eclipse.cdt.dsf.mi.service.command.commands.Suite_Sessionless_Tests;
+import org.eclipse.cdt.tests.dsf.gdb.framework.BaseTestCase;
+import org.eclipse.cdt.tests.dsf.gdb.tests.ITestConstants;
+import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@@ -46,4 +49,10 @@ import org.junit.runners.Suite;
/* Add your test class here */
})
-public class Suite_7_0 {}
+public class Suite_7_0 {
+ @BeforeClass
+ public static void beforeClassMethod() {
+ BaseTestCase.setGdbProgramNamesLaunchAttributes(ITestConstants.SUFFIX_GDB_7_0);
+ BaseTestCase.ignoreIfGDBMissing();
+ }
+}
diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_0/Suite_Remote_7_0.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_0/Suite_Remote_7_0.java
index b53eeecdc91..c5ed44539bb 100644
--- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_0/Suite_Remote_7_0.java
+++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_0/Suite_Remote_7_0.java
@@ -12,6 +12,9 @@ package org.eclipse.cdt.tests.dsf.gdb.tests.tests_7_0;
import org.eclipse.cdt.dsf.mi.service.command.commands.Suite_Sessionless_Tests;
import org.eclipse.cdt.tests.dsf.gdb.framework.BaseRemoteSuite;
+import org.eclipse.cdt.tests.dsf.gdb.framework.BaseTestCase;
+import org.eclipse.cdt.tests.dsf.gdb.tests.ITestConstants;
+import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@@ -47,4 +50,9 @@ import org.junit.runners.Suite;
})
public class Suite_Remote_7_0 extends BaseRemoteSuite {
+ @BeforeClass
+ public static void beforeClassMethod() {
+ BaseTestCase.setGdbProgramNamesLaunchAttributes(ITestConstants.SUFFIX_GDB_7_0);
+ BaseTestCase.ignoreIfGDBMissing();
+ }
}
diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_1/Suite_7_1.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_1/Suite_7_1.java
index b6dcace2a34..dead4063e58 100644
--- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_1/Suite_7_1.java
+++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_1/Suite_7_1.java
@@ -11,6 +11,9 @@
package org.eclipse.cdt.tests.dsf.gdb.tests.tests_7_1;
import org.eclipse.cdt.dsf.mi.service.command.commands.Suite_Sessionless_Tests;
+import org.eclipse.cdt.tests.dsf.gdb.framework.BaseTestCase;
+import org.eclipse.cdt.tests.dsf.gdb.tests.ITestConstants;
+import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@@ -46,4 +49,10 @@ import org.junit.runners.Suite;
/* Add your test class here */
})
-public class Suite_7_1 {}
+public class Suite_7_1 {
+ @BeforeClass
+ public static void beforeClassMethod() {
+ BaseTestCase.setGdbProgramNamesLaunchAttributes(ITestConstants.SUFFIX_GDB_7_1);
+ BaseTestCase.ignoreIfGDBMissing();
+ }
+}
diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_1/Suite_Remote_7_1.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_1/Suite_Remote_7_1.java
index f35a838208f..45ae7f21188 100644
--- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_1/Suite_Remote_7_1.java
+++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_1/Suite_Remote_7_1.java
@@ -12,6 +12,9 @@ package org.eclipse.cdt.tests.dsf.gdb.tests.tests_7_1;
import org.eclipse.cdt.dsf.mi.service.command.commands.Suite_Sessionless_Tests;
import org.eclipse.cdt.tests.dsf.gdb.framework.BaseRemoteSuite;
+import org.eclipse.cdt.tests.dsf.gdb.framework.BaseTestCase;
+import org.eclipse.cdt.tests.dsf.gdb.tests.ITestConstants;
+import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@@ -47,4 +50,9 @@ import org.junit.runners.Suite;
})
public class Suite_Remote_7_1 extends BaseRemoteSuite {
+ @BeforeClass
+ public static void beforeClassMethod() {
+ BaseTestCase.setGdbProgramNamesLaunchAttributes(ITestConstants.SUFFIX_GDB_7_1);
+ BaseTestCase.ignoreIfGDBMissing();
+ }
}
diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_2/Suite_7_2.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_2/Suite_7_2.java
index 890f25c7b0f..6ba8cc61448 100644
--- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_2/Suite_7_2.java
+++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_2/Suite_7_2.java
@@ -11,6 +11,9 @@
package org.eclipse.cdt.tests.dsf.gdb.tests.tests_7_2;
import org.eclipse.cdt.dsf.mi.service.command.commands.Suite_Sessionless_Tests;
+import org.eclipse.cdt.tests.dsf.gdb.framework.BaseTestCase;
+import org.eclipse.cdt.tests.dsf.gdb.tests.ITestConstants;
+import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@@ -46,4 +49,10 @@ import org.junit.runners.Suite;
/* Add your test class here */
})
-public class Suite_7_2 {}
+public class Suite_7_2 {
+ @BeforeClass
+ public static void beforeClassMethod() {
+ BaseTestCase.setGdbProgramNamesLaunchAttributes(ITestConstants.SUFFIX_GDB_7_2);
+ BaseTestCase.ignoreIfGDBMissing();
+ }
+}
diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_2/Suite_Remote_7_2.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_2/Suite_Remote_7_2.java
index f53d3f2721f..bc3a8c80258 100644
--- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_2/Suite_Remote_7_2.java
+++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_2/Suite_Remote_7_2.java
@@ -12,6 +12,9 @@ package org.eclipse.cdt.tests.dsf.gdb.tests.tests_7_2;
import org.eclipse.cdt.dsf.mi.service.command.commands.Suite_Sessionless_Tests;
import org.eclipse.cdt.tests.dsf.gdb.framework.BaseRemoteSuite;
+import org.eclipse.cdt.tests.dsf.gdb.framework.BaseTestCase;
+import org.eclipse.cdt.tests.dsf.gdb.tests.ITestConstants;
+import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@@ -47,4 +50,9 @@ import org.junit.runners.Suite;
})
public class Suite_Remote_7_2 extends BaseRemoteSuite {
+ @BeforeClass
+ public static void beforeClassMethod() {
+ BaseTestCase.setGdbProgramNamesLaunchAttributes(ITestConstants.SUFFIX_GDB_7_2);
+ BaseTestCase.ignoreIfGDBMissing();
+ }
}
diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_3/Suite_7_3.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_3/Suite_7_3.java
index c4101852bce..930010a9cf2 100644
--- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_3/Suite_7_3.java
+++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_3/Suite_7_3.java
@@ -11,6 +11,9 @@
package org.eclipse.cdt.tests.dsf.gdb.tests.tests_7_3;
import org.eclipse.cdt.dsf.mi.service.command.commands.Suite_Sessionless_Tests;
+import org.eclipse.cdt.tests.dsf.gdb.framework.BaseTestCase;
+import org.eclipse.cdt.tests.dsf.gdb.tests.ITestConstants;
+import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@@ -46,4 +49,10 @@ import org.junit.runners.Suite;
/* Add your test class here */
})
-public class Suite_7_3 {}
+public class Suite_7_3 {
+ @BeforeClass
+ public static void beforeClassMethod() {
+ BaseTestCase.setGdbProgramNamesLaunchAttributes(ITestConstants.SUFFIX_GDB_7_3);
+ BaseTestCase.ignoreIfGDBMissing();
+ }
+}
diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_3/Suite_Remote_7_3.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_3/Suite_Remote_7_3.java
index 7db9786fd57..5f47adad789 100644
--- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_3/Suite_Remote_7_3.java
+++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_3/Suite_Remote_7_3.java
@@ -12,6 +12,9 @@ package org.eclipse.cdt.tests.dsf.gdb.tests.tests_7_3;
import org.eclipse.cdt.dsf.mi.service.command.commands.Suite_Sessionless_Tests;
import org.eclipse.cdt.tests.dsf.gdb.framework.BaseRemoteSuite;
+import org.eclipse.cdt.tests.dsf.gdb.framework.BaseTestCase;
+import org.eclipse.cdt.tests.dsf.gdb.tests.ITestConstants;
+import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@@ -47,4 +50,9 @@ import org.junit.runners.Suite;
})
public class Suite_Remote_7_3 extends BaseRemoteSuite {
+ @BeforeClass
+ public static void beforeClassMethod() {
+ BaseTestCase.setGdbProgramNamesLaunchAttributes(ITestConstants.SUFFIX_GDB_7_3);
+ BaseTestCase.ignoreIfGDBMissing();
+ }
}
diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_4/Suite_7_4.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_4/Suite_7_4.java
index b00aa75337c..213aea1f852 100644
--- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_4/Suite_7_4.java
+++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_4/Suite_7_4.java
@@ -11,6 +11,9 @@
package org.eclipse.cdt.tests.dsf.gdb.tests.tests_7_4;
import org.eclipse.cdt.dsf.mi.service.command.commands.Suite_Sessionless_Tests;
+import org.eclipse.cdt.tests.dsf.gdb.framework.BaseTestCase;
+import org.eclipse.cdt.tests.dsf.gdb.tests.ITestConstants;
+import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@@ -46,4 +49,10 @@ import org.junit.runners.Suite;
/* Add your test class here */
})
-public class Suite_7_4 {}
+public class Suite_7_4 {
+ @BeforeClass
+ public static void beforeClassMethod() {
+ BaseTestCase.setGdbProgramNamesLaunchAttributes(ITestConstants.SUFFIX_GDB_7_4);
+ BaseTestCase.ignoreIfGDBMissing();
+ }
+}
diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_4/Suite_Remote_7_4.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_4/Suite_Remote_7_4.java
index 0467dd4b46f..9c7a5aca437 100644
--- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_4/Suite_Remote_7_4.java
+++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_4/Suite_Remote_7_4.java
@@ -12,6 +12,9 @@ package org.eclipse.cdt.tests.dsf.gdb.tests.tests_7_4;
import org.eclipse.cdt.dsf.mi.service.command.commands.Suite_Sessionless_Tests;
import org.eclipse.cdt.tests.dsf.gdb.framework.BaseRemoteSuite;
+import org.eclipse.cdt.tests.dsf.gdb.framework.BaseTestCase;
+import org.eclipse.cdt.tests.dsf.gdb.tests.ITestConstants;
+import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@@ -47,4 +50,9 @@ import org.junit.runners.Suite;
})
public class Suite_Remote_7_4 extends BaseRemoteSuite {
+ @BeforeClass
+ public static void beforeClassMethod() {
+ BaseTestCase.setGdbProgramNamesLaunchAttributes(ITestConstants.SUFFIX_GDB_7_4);
+ BaseTestCase.ignoreIfGDBMissing();
+ }
}
diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_5/Suite_7_5.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_5/Suite_7_5.java
index 4610355ab76..b0b9997b00f 100644
--- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_5/Suite_7_5.java
+++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_5/Suite_7_5.java
@@ -11,6 +11,9 @@
package org.eclipse.cdt.tests.dsf.gdb.tests.tests_7_5;
import org.eclipse.cdt.dsf.mi.service.command.commands.Suite_Sessionless_Tests;
+import org.eclipse.cdt.tests.dsf.gdb.framework.BaseTestCase;
+import org.eclipse.cdt.tests.dsf.gdb.tests.ITestConstants;
+import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@@ -46,4 +49,10 @@ import org.junit.runners.Suite;
/* Add your test class here */
})
-public class Suite_7_5 {}
+public class Suite_7_5 {
+ @BeforeClass
+ public static void beforeClassMethod() {
+ BaseTestCase.setGdbProgramNamesLaunchAttributes(ITestConstants.SUFFIX_GDB_7_5);
+ BaseTestCase.ignoreIfGDBMissing();
+ }
+}
diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_5/Suite_Remote_7_5.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_5/Suite_Remote_7_5.java
index f7110694658..29d3a85b660 100644
--- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_5/Suite_Remote_7_5.java
+++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_5/Suite_Remote_7_5.java
@@ -12,6 +12,9 @@ package org.eclipse.cdt.tests.dsf.gdb.tests.tests_7_5;
import org.eclipse.cdt.dsf.mi.service.command.commands.Suite_Sessionless_Tests;
import org.eclipse.cdt.tests.dsf.gdb.framework.BaseRemoteSuite;
+import org.eclipse.cdt.tests.dsf.gdb.framework.BaseTestCase;
+import org.eclipse.cdt.tests.dsf.gdb.tests.ITestConstants;
+import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@@ -47,4 +50,9 @@ import org.junit.runners.Suite;
})
public class Suite_Remote_7_5 extends BaseRemoteSuite {
+ @BeforeClass
+ public static void beforeClassMethod() {
+ BaseTestCase.setGdbProgramNamesLaunchAttributes(ITestConstants.SUFFIX_GDB_7_5);
+ BaseTestCase.ignoreIfGDBMissing();
+ }
}
diff --git a/memory/org.eclipse.cdt.debug.ui.memory.search/src/org/eclipse/cdt/debug/ui/memory/search/FindReplaceDialog.java b/memory/org.eclipse.cdt.debug.ui.memory.search/src/org/eclipse/cdt/debug/ui/memory/search/FindReplaceDialog.java
index 59f5b666fac..5fa3f6a1ccc 100644
--- a/memory/org.eclipse.cdt.debug.ui.memory.search/src/org/eclipse/cdt/debug/ui/memory/search/FindReplaceDialog.java
+++ b/memory/org.eclipse.cdt.debug.ui.memory.search/src/org/eclipse/cdt/debug/ui/memory/search/FindReplaceDialog.java
@@ -1134,7 +1134,15 @@ public class FindReplaceDialog extends SelectionDialog
{
try
{
- fMemoryBlock.setValue(currentPosition.subtract(fMemoryBlock.getBigBaseAddress()), replaceData);
+ if ((searchPhrase instanceof BigIntegerSearchPhrase) && (bytes.length > 0) && bytes[0].isEndianessKnown() && !bytes[0].isBigEndian())
+ {
+ // swap the bytes when replacing an integer on little-endian targets
+ fMemoryBlock.setValue(currentPosition.subtract(fMemoryBlock.getBigBaseAddress()), swapBytes(replaceData));
+ }
+ else
+ {
+ fMemoryBlock.setValue(currentPosition.subtract(fMemoryBlock.getBigBaseAddress()), replaceData);
+ }
}
catch(DebugException de)
{
@@ -1376,9 +1384,18 @@ public class FindReplaceDialog extends SelectionDialog
byte[] targetBytes = new byte[bytes.length + 1];
targetBytes[0] = 0;
for(int i = 0; i < bytes.length; i++)
- targetBytes[i + 1] = bytes[i].getValue();
+ {
+ if (bytes[i].isEndianessKnown() && !bytes[i].isBigEndian())
+ {
+ // swap the bytes when matching an integer on little-endian targets
+ targetBytes[i + 1] = bytes[bytes.length - i - 1].getValue();
+ }
+ else
+ {
+ targetBytes[i + 1] = bytes[i].getValue();
+ }
+ }
- // TODO endian?
BigInteger targetBigInteger = new BigInteger(targetBytes);
return fPhrase.equals(targetBigInteger);
@@ -1395,6 +1412,14 @@ public class FindReplaceDialog extends SelectionDialog
return processedBytes;
}
+ private byte[] swapBytes(byte[] bytes)
+ {
+ byte[] processedBytes = new byte[bytes.length];
+ for (int i = 0; i < bytes.length; i++)
+ processedBytes[i] = bytes[bytes.length - i - 1];
+ return processedBytes;
+ }
+
interface IMemorySearchQuery extends ISearchQuery
{
public IMemoryRenderingSite getMemoryView();
diff --git a/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/SRecordExporter.java b/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/SRecordExporter.java
index 4c080a96218..225ccfc6825 100644
--- a/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/SRecordExporter.java
+++ b/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/SRecordExporter.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2006, 2010 Wind River Systems, Inc. and others.
+ * Copyright (c) 2006, 2012 Wind River Systems, Inc. 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
@@ -66,7 +66,6 @@ public class SRecordExporter implements IMemoryExporter
Composite composite = new Composite(parent, SWT.NONE)
{
- @Override
public void dispose()
{
fProperties.put(TRANSFER_FILE, fFileText.getText());
@@ -192,27 +191,25 @@ public class SRecordExporter implements IMemoryExporter
fStartText.addKeyListener(new KeyListener() {
public void keyReleased(KeyEvent e) {
- boolean valid = true;
try
{
- getStartAddress();
+ fStartText.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));
+ BigInteger actualLength = getEndAddress().subtract(getStartAddress());
+ String lengthString = actualLength.toString();
+
+ if(!fLengthText.getText().equals(lengthString)) {
+ if ( ! actualLength.equals( BigInteger.ZERO ) ) {
+ fLengthText.setText(lengthString);
+ }
+ }
+ validate();
}
catch(Exception ex)
{
- valid = false;
+ fStartText.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_RED));
+ validate();
+ //fParentDialog.setValid(false);
}
-
- fStartText.setForeground(valid ? Display.getDefault().getSystemColor(SWT.COLOR_BLACK) :
- Display.getDefault().getSystemColor(SWT.COLOR_RED));
-
- //
-
- BigInteger endAddress = getEndAddress();
- BigInteger startAddress = getStartAddress();
-
- fLengthText.setText(endAddress.subtract(startAddress).toString());
-
- validate();
}
public void keyPressed(KeyEvent e) {}
@@ -222,23 +219,25 @@ public class SRecordExporter implements IMemoryExporter
public void keyReleased(KeyEvent e) {
try
{
- getEndAddress();
fEndText.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));
- BigInteger endAddress = getEndAddress();
- BigInteger startAddress = getStartAddress();
-
- String lengthString = endAddress.subtract(startAddress).toString();
+ BigInteger actualLength = getEndAddress().subtract(getStartAddress());
+ String lengthString = actualLength.toString();
- if(!fLengthText.getText().equals(lengthString))
- fLengthText.setText(lengthString);
+ if(!fLengthText.getText().equals(lengthString)) {
+ if ( ! actualLength.equals( BigInteger.ZERO ) ) {
+ fLengthText.setText(lengthString);
+ }
+ }
+
+ validate();
}
catch(Exception ex)
{
fEndText.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_RED));
+ validate();
+ //fParentDialog.setValid(false);
}
-
- validate();
}
public void keyPressed(KeyEvent e) {}
@@ -251,20 +250,22 @@ public class SRecordExporter implements IMemoryExporter
{
BigInteger length = getLength();
fLengthText.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));
- BigInteger startAddress = getStartAddress();
- String endString = "0x" + startAddress.add(length).toString(16); //$NON-NLS-1$
- if(!fEndText.getText().equals(endString))
+ String endString = "0x" + getStartAddress().add(length).toString(16); //$NON-NLS-1$
+ if(!fEndText.getText().equals(endString)) {
+ if ( ! length.equals( BigInteger.ZERO ) ) {
+ fLengthText.setText(endString);
+ }
fEndText.setText(endString);
+ }
+ validate();
}
catch(Exception ex)
{
fLengthText.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_RED));
+ validate();
+ //fParentDialog.setValid(false);
}
-
- validate();
}
-
-
public void keyPressed(KeyEvent e) {
@@ -309,6 +310,10 @@ public class SRecordExporter implements IMemoryExporter
BigInteger endAddress = new BigInteger(hex ? text.substring(2) : text,
hex ? 16 : 10);
+ if ( endAddress.bitLength() > 32 ) {
+ throw(new NumberFormatException("End Address is larger than 32 bits"));
+ }
+
return endAddress;
}
@@ -319,6 +324,10 @@ public class SRecordExporter implements IMemoryExporter
BigInteger startAddress = new BigInteger(hex ? text.substring(2) : text,
hex ? 16 : 10);
+ if ( startAddress.bitLength() > 32 ) {
+ throw(new NumberFormatException("Start Address is larger than 32 bits"));
+ }
+
return startAddress;
}
@@ -329,6 +338,7 @@ public class SRecordExporter implements IMemoryExporter
BigInteger lengthAddress = new BigInteger(hex ? text.substring(2) : text,
hex ? 16 : 10);
+
return lengthAddress;
}
@@ -377,7 +387,6 @@ public class SRecordExporter implements IMemoryExporter
public void exportMemory()
{
Job job = new Job("Memory Export to S-Record File"){ //$NON-NLS-1$
- @Override
public IStatus run(IProgressMonitor monitor) {
try
{
diff --git a/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/SRecordImporter.java b/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/SRecordImporter.java
index f1ddd61e29e..0dd47576b25 100644
--- a/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/SRecordImporter.java
+++ b/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/SRecordImporter.java
@@ -28,6 +28,8 @@ import org.eclipse.debug.core.model.IMemoryBlock;
import org.eclipse.debug.core.model.IMemoryBlockExtension;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionEvent;
@@ -73,7 +75,6 @@ public class SRecordImporter implements IMemoryImporter {
Composite composite = new Composite(parent, SWT.NONE)
{
- @Override
public void dispose()
{
fProperties.put(TRANSFER_FILE, fFileText.getText());
@@ -131,7 +132,17 @@ public class SRecordImporter implements IMemoryImporter {
public void widgetDefaultSelected(SelectionEvent e) {}
public void widgetSelected(SelectionEvent e) {
- validate();
+ try
+ {
+ fStartText.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));
+ getStartAddress();
+ validate();
+ }
+ catch(Exception ex)
+ {
+ fStartText.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_RED));
+ fParentDialog.setValid(false);
+ }
}
});
@@ -190,27 +201,38 @@ public class SRecordImporter implements IMemoryImporter {
});
- fStartText.addModifyListener(new ModifyListener() {
- public void modifyText(ModifyEvent e) {
- boolean valid = true;
+ fStartText.addKeyListener(new KeyListener() {
+ public void keyReleased(KeyEvent e) {
try
{
- getStartAddress();
+ boolean restoreToAddress = fComboRestoreToThisAddress.getSelection();
+ if ( restoreToAddress ) {
+ fStartText.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));
+ getStartAddress();
+ validate();
+ }
+ else {
+ try
+ {
+ getStartAddress();
+ fStartText.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));
+ }
+ catch(Exception ex)
+ {
+ fStartText.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_RED));
+ }
+ }
}
catch(Exception ex)
{
- valid = false;
+ fStartText.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_RED));
+ validate();
}
-
- fStartText.setForeground(valid ? Display.getDefault().getSystemColor(SWT.COLOR_BLACK) :
- Display.getDefault().getSystemColor(SWT.COLOR_RED));
-
- //
-
- validate();
}
+ public void keyPressed(KeyEvent e) {}
});
+
fFileText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
validate();
@@ -276,6 +298,11 @@ public class SRecordImporter implements IMemoryImporter {
BigInteger startAddress = new BigInteger(hex ? text.substring(2) : text,
hex ? 16 : 10);
+
+ if ( startAddress.bitLength() > 32 ) {
+ throw(new NumberFormatException("Start Address is larger than 32 bits"));
+ }
+
return startAddress;
}
@@ -297,7 +324,6 @@ public class SRecordImporter implements IMemoryImporter {
public void importMemory() {
Job job = new Job("Memory Import from S-Record File"){ //$NON-NLS-1$
- @Override
public IStatus run(IProgressMonitor monitor) {
try
diff --git a/pom.xml b/pom.xml
index 9c59808b016..cb543f6ba0f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -162,6 +162,7 @@
codan/org.eclipse.cdt.codan.core.test
build/org.eclipse.cdt.managedbuilder.core.tests
build/org.eclipse.cdt.managedbuilder.ui.tests
+ dsf-gdb/org.eclipse.cdt.tests.dsf.gdb
build/org.eclipse.cdt.autotools.core
build/org.eclipse.cdt.autotools.docs