mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-25 01:45:33 +02:00
Fix for bug 172919, automatic reindex when defaultSettingsConfiguration changes.
This commit is contained in:
parent
d1713fd418
commit
68ee7c7944
5 changed files with 73 additions and 14 deletions
|
@ -167,7 +167,7 @@ public interface IIndexManager extends IPDOMManager {
|
|||
* @throws CoreException
|
||||
* @since 4.0
|
||||
*/
|
||||
public void reindex(ICProject project) throws CoreException;
|
||||
public void reindex(ICProject project);
|
||||
|
||||
/**
|
||||
* Updates the index for the given selection of translation units considering
|
||||
|
|
|
@ -0,0 +1,54 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2007 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
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* Markus Schorn - initial API and implementation
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.internal.core.pdom;
|
||||
|
||||
import org.eclipse.cdt.core.index.IIndexManager;
|
||||
import org.eclipse.cdt.core.model.CoreModel;
|
||||
import org.eclipse.cdt.core.model.ICProject;
|
||||
import org.eclipse.cdt.core.settings.model.CProjectDescriptionEvent;
|
||||
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
|
||||
import org.eclipse.cdt.core.settings.model.ICProjectDescription;
|
||||
import org.eclipse.cdt.core.settings.model.ICProjectDescriptionListener;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
|
||||
public class CProjectDescriptionListener implements ICProjectDescriptionListener {
|
||||
|
||||
private IIndexManager fIndexManager;
|
||||
|
||||
public CProjectDescriptionListener(IIndexManager manager) {
|
||||
fIndexManager= manager;
|
||||
}
|
||||
|
||||
public void handleEvent(CProjectDescriptionEvent event) {
|
||||
ICProjectDescription old= event.getOldCProjectDescription();
|
||||
ICProjectDescription act= event.getNewCProjectDescription();
|
||||
if (old != null && act != null) {
|
||||
ICConfigurationDescription oldConfig= old.getDefaultSettingConfiguration();
|
||||
ICConfigurationDescription newConfig= act.getDefaultSettingConfiguration();
|
||||
if (oldConfig != null && newConfig != null) {
|
||||
String oldID= oldConfig.getId();
|
||||
String newID= newConfig.getId();
|
||||
if (oldID != null && newID != null) {
|
||||
if (!oldID.equals(newID)) {
|
||||
IProject project= event.getProject();
|
||||
if (project != null && project.isOpen()) {
|
||||
ICProject cproject= CoreModel.getDefault().getCModel().getCProject(project.getName());
|
||||
if (cproject != null) {
|
||||
fIndexManager.reindex(cproject);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -49,23 +49,18 @@ public class LanguageMappingChangeListener implements
|
|||
// are potentially unaffected due to project settings
|
||||
try {
|
||||
ICProject[] cProjects = manager.getCModel().getCProjects();
|
||||
fManager.update(cProjects, IIndexManager.UPDATE_ALL);
|
||||
for (int i = 0; i < cProjects.length; i++) {
|
||||
ICProject project = cProjects[i];
|
||||
fManager.reindex(project);
|
||||
}
|
||||
} catch (CModelException e) {
|
||||
CCorePlugin.log(e);
|
||||
} catch (CoreException e) {
|
||||
CCorePlugin.log(e);
|
||||
}
|
||||
} else if (event.getType() == ILanguageMappingChangeEvent.TYPE_PROJECT) {
|
||||
// For now, reindex the entire project since we don't know which
|
||||
// files are affected.
|
||||
try {
|
||||
ICProject cProject = manager.getCModel().getCProject(event.getProject());
|
||||
fManager.reindex(cProject);
|
||||
} catch (CModelException e) {
|
||||
CCorePlugin.log(e);
|
||||
} catch (CoreException e) {
|
||||
CCorePlugin.log(e);
|
||||
}
|
||||
ICProject cProject = manager.getCModel().getCProject(event.getProject());
|
||||
fManager.reindex(cProject);
|
||||
} else if (event.getType() == ILanguageMappingChangeEvent.TYPE_FILE) {
|
||||
// Just reindex the affected file.
|
||||
IFile file = event.getFile();
|
||||
|
|
|
@ -47,6 +47,8 @@ import org.eclipse.cdt.core.model.ICProject;
|
|||
import org.eclipse.cdt.core.model.ILanguageMappingChangeListener;
|
||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||
import org.eclipse.cdt.core.model.LanguageManager;
|
||||
import org.eclipse.cdt.core.settings.model.CProjectDescriptionEvent;
|
||||
import org.eclipse.cdt.core.settings.model.ICProjectDescriptionListener;
|
||||
import org.eclipse.cdt.internal.core.CCoreInternals;
|
||||
import org.eclipse.cdt.internal.core.index.IIndexFragment;
|
||||
import org.eclipse.cdt.internal.core.index.IWritableIndex;
|
||||
|
@ -148,6 +150,8 @@ public class PDOMManager implements IWritableIndexManager, IListener {
|
|||
|
||||
private CModelListener fCModelListener= new CModelListener(this);
|
||||
private ILanguageMappingChangeListener fLanguageChangeListener = new LanguageMappingChangeListener(this);
|
||||
private ICProjectDescriptionListener fProjectDescriptionListener= new CProjectDescriptionListener(this);
|
||||
|
||||
private IndexFactory fIndexFactory= new IndexFactory(this);
|
||||
private IndexProviderManager fIndexProviderManager = new IndexProviderManager();
|
||||
|
||||
|
@ -173,6 +177,8 @@ public class PDOMManager implements IWritableIndexManager, IListener {
|
|||
ResourcesPlugin.getWorkspace().addResourceChangeListener(fCModelListener, IResourceChangeEvent.POST_BUILD);
|
||||
model.addElementChangedListener(fCModelListener);
|
||||
LanguageManager.getInstance().registerLanguageChangeListener(fLanguageChangeListener);
|
||||
final int types= CProjectDescriptionEvent.DATA_APPLIED;
|
||||
CCorePlugin.getDefault().getProjectDescriptionManager().addCProjectDescriptionListener(fProjectDescriptionListener, types);
|
||||
|
||||
try {
|
||||
ICProject[] projects= model.getCModel().getCProjects();
|
||||
|
@ -185,6 +191,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
|
|||
}
|
||||
|
||||
public void shutdown() {
|
||||
CCorePlugin.getDefault().getProjectDescriptionManager().removeCProjectDescriptionListener(fProjectDescriptionListener);
|
||||
final CoreModel model = CoreModel.getDefault();
|
||||
model.removeElementChangedListener(fCModelListener);
|
||||
ResourcesPlugin.getWorkspace().removeResourceChangeListener(fCModelListener);
|
||||
|
@ -755,7 +762,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
|
|||
}
|
||||
}
|
||||
|
||||
public void reindex(ICProject project) throws CoreException {
|
||||
public void reindex(ICProject project) {
|
||||
assert !Thread.holdsLock(fProjectToPDOM);
|
||||
IPDOMIndexer indexer= null;
|
||||
synchronized (fUpdatePolicies) {
|
||||
|
|
|
@ -481,7 +481,10 @@ public class IndexerBlock extends AbstractCOptionPage {
|
|||
: ICProjectDescriptionPreferences.CONFIGS_INDEPENDENT);
|
||||
}
|
||||
if (!useActive) {
|
||||
prefs.setDefaultSettingConfiguration(prefs.getConfigurationByName(fBuildConfigComboBox.getText()));
|
||||
final ICConfigurationDescription config= prefs.getConfigurationByName(fBuildConfigComboBox.getText());
|
||||
if (config != null) {
|
||||
prefs.setDefaultSettingConfiguration(config);
|
||||
}
|
||||
}
|
||||
prjDescMgr.setProjectDescription(getProject(), prefs);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue