Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Gvozdev2012-05-22 20:11:45 +0000
committerAndrew Gvozdev2012-05-24 12:30:57 +0000
commitd1e2d46fad69791059303e3338e8f013afb8a3b9 (patch)
tree21354e0a6c3ea39d5b863338e58949bff6cd008e /core/org.eclipse.cdt.core/parser/org/eclipse/cdt
parent3ae34a03448b92365e000241a0987a2b4ecf29dc (diff)
downloadorg.eclipse.cdt-d1e2d46fad69791059303e3338e8f013afb8a3b9.tar.gz
org.eclipse.cdt-d1e2d46fad69791059303e3338e8f013afb8a3b9.tar.xz
org.eclipse.cdt-d1e2d46fad69791059303e3338e8f013afb8a3b9.zip
bug 379165: [sd90] Reindex using accurate list of affected resources
after LSE change event
Diffstat (limited to 'core/org.eclipse.cdt.core/parser/org/eclipse/cdt')
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/LanguageSettingsChangeListener.java39
1 files changed, 34 insertions, 5 deletions
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 bc1846adba7..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,14 +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.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.
@@ -42,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.handlePostBuildEvent();
+ 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<ICElement> tuSelection = new HashSet<ICElement>();
+
+ Set<IResource> 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);
+ }
+ }
+ }
}

Back to the top