/*******************************************************************************
* Copyright (c) 2007 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
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
* Markus Schorn (Wind River Systems)
*******************************************************************************/
package org.eclipse.cdt.internal.core.pdom;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.index.IIndexManager;
import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.core.model.ILanguageMappingChangeEvent;
import org.eclipse.cdt.core.model.ILanguageMappingChangeListener;
import org.eclipse.cdt.internal.core.model.CModelManager;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
/**
* @author crecoskie
*
* This class handles changes in language mappings for the PDOM by reindexing the appropriate projects.
* This class is a a work in progress and will be changed soon to be smarter about the resources it reindexes.
*/
public class LanguageMappingChangeListener implements ILanguageMappingChangeListener {
private IIndexManager fManager;
public LanguageMappingChangeListener(IIndexManager manager) {
fManager = manager;
}
@Override
public void handleLanguageMappingChangeEvent(ILanguageMappingChangeEvent event) {
CModelManager manager = CModelManager.getDefault();
if (event.getType() == ILanguageMappingChangeEvent.TYPE_WORKSPACE) {
// For now reindex all projects.
// TODO: This should be smarter about figuring out which projects
// are potentially unaffected due to project settings
try {
ICProject[] cProjects = manager.getCModel().getCProjects();
for (int i = 0; i < cProjects.length; i++) {
ICProject project = cProjects[i];
fManager.reindex(project);
}
} catch (CModelException 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.
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();
ICProject cProject = manager.getCModel().getCProject(file);
ICElement element = manager.create(file, cProject);
try {
fManager.update(new ICElement[] {element}, IIndexManager.UPDATE_ALL);
} catch (CoreException e) {
CCorePlugin.log(e);
}
}
}
}