mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-09-10 03:53:21 +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
|
* @throws CoreException
|
||||||
* @since 4.0
|
* @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
|
* 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
|
// are potentially unaffected due to project settings
|
||||||
try {
|
try {
|
||||||
ICProject[] cProjects = manager.getCModel().getCProjects();
|
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) {
|
} catch (CModelException e) {
|
||||||
CCorePlugin.log(e);
|
CCorePlugin.log(e);
|
||||||
} catch (CoreException e) {
|
|
||||||
CCorePlugin.log(e);
|
|
||||||
}
|
}
|
||||||
} else if (event.getType() == ILanguageMappingChangeEvent.TYPE_PROJECT) {
|
} else if (event.getType() == ILanguageMappingChangeEvent.TYPE_PROJECT) {
|
||||||
// For now, reindex the entire project since we don't know which
|
// For now, reindex the entire project since we don't know which
|
||||||
// files are affected.
|
// files are affected.
|
||||||
try {
|
ICProject cProject = manager.getCModel().getCProject(event.getProject());
|
||||||
ICProject cProject = manager.getCModel().getCProject(event.getProject());
|
fManager.reindex(cProject);
|
||||||
fManager.reindex(cProject);
|
|
||||||
} catch (CModelException e) {
|
|
||||||
CCorePlugin.log(e);
|
|
||||||
} catch (CoreException e) {
|
|
||||||
CCorePlugin.log(e);
|
|
||||||
}
|
|
||||||
} else if (event.getType() == ILanguageMappingChangeEvent.TYPE_FILE) {
|
} else if (event.getType() == ILanguageMappingChangeEvent.TYPE_FILE) {
|
||||||
// Just reindex the affected file.
|
// Just reindex the affected file.
|
||||||
IFile file = event.getFile();
|
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.ILanguageMappingChangeListener;
|
||||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||||
import org.eclipse.cdt.core.model.LanguageManager;
|
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.CCoreInternals;
|
||||||
import org.eclipse.cdt.internal.core.index.IIndexFragment;
|
import org.eclipse.cdt.internal.core.index.IIndexFragment;
|
||||||
import org.eclipse.cdt.internal.core.index.IWritableIndex;
|
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 CModelListener fCModelListener= new CModelListener(this);
|
||||||
private ILanguageMappingChangeListener fLanguageChangeListener = new LanguageMappingChangeListener(this);
|
private ILanguageMappingChangeListener fLanguageChangeListener = new LanguageMappingChangeListener(this);
|
||||||
|
private ICProjectDescriptionListener fProjectDescriptionListener= new CProjectDescriptionListener(this);
|
||||||
|
|
||||||
private IndexFactory fIndexFactory= new IndexFactory(this);
|
private IndexFactory fIndexFactory= new IndexFactory(this);
|
||||||
private IndexProviderManager fIndexProviderManager = new IndexProviderManager();
|
private IndexProviderManager fIndexProviderManager = new IndexProviderManager();
|
||||||
|
|
||||||
|
@ -173,6 +177,8 @@ public class PDOMManager implements IWritableIndexManager, IListener {
|
||||||
ResourcesPlugin.getWorkspace().addResourceChangeListener(fCModelListener, IResourceChangeEvent.POST_BUILD);
|
ResourcesPlugin.getWorkspace().addResourceChangeListener(fCModelListener, IResourceChangeEvent.POST_BUILD);
|
||||||
model.addElementChangedListener(fCModelListener);
|
model.addElementChangedListener(fCModelListener);
|
||||||
LanguageManager.getInstance().registerLanguageChangeListener(fLanguageChangeListener);
|
LanguageManager.getInstance().registerLanguageChangeListener(fLanguageChangeListener);
|
||||||
|
final int types= CProjectDescriptionEvent.DATA_APPLIED;
|
||||||
|
CCorePlugin.getDefault().getProjectDescriptionManager().addCProjectDescriptionListener(fProjectDescriptionListener, types);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
ICProject[] projects= model.getCModel().getCProjects();
|
ICProject[] projects= model.getCModel().getCProjects();
|
||||||
|
@ -185,6 +191,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void shutdown() {
|
public void shutdown() {
|
||||||
|
CCorePlugin.getDefault().getProjectDescriptionManager().removeCProjectDescriptionListener(fProjectDescriptionListener);
|
||||||
final CoreModel model = CoreModel.getDefault();
|
final CoreModel model = CoreModel.getDefault();
|
||||||
model.removeElementChangedListener(fCModelListener);
|
model.removeElementChangedListener(fCModelListener);
|
||||||
ResourcesPlugin.getWorkspace().removeResourceChangeListener(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);
|
assert !Thread.holdsLock(fProjectToPDOM);
|
||||||
IPDOMIndexer indexer= null;
|
IPDOMIndexer indexer= null;
|
||||||
synchronized (fUpdatePolicies) {
|
synchronized (fUpdatePolicies) {
|
||||||
|
|
|
@ -481,7 +481,10 @@ public class IndexerBlock extends AbstractCOptionPage {
|
||||||
: ICProjectDescriptionPreferences.CONFIGS_INDEPENDENT);
|
: ICProjectDescriptionPreferences.CONFIGS_INDEPENDENT);
|
||||||
}
|
}
|
||||||
if (!useActive) {
|
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);
|
prjDescMgr.setProjectDescription(getProject(), prefs);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue