diff options
author | Andrew Gvozdev | 2012-05-22 20:11:45 +0000 |
---|---|---|
committer | Andrew Gvozdev | 2012-05-24 12:30:57 +0000 |
commit | d1e2d46fad69791059303e3338e8f013afb8a3b9 (patch) | |
tree | 21354e0a6c3ea39d5b863338e58949bff6cd008e /core/org.eclipse.cdt.core/parser/org/eclipse/cdt | |
parent | 3ae34a03448b92365e000241a0987a2b4ecf29dc (diff) | |
download | org.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.java | 39 |
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); + } + } + } } |