/*******************************************************************************
* Copyright (c) 2000, 2008 QNX Software Systems 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:
* QNX Software Systems - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.internal.core.model;
import java.util.List;
import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.ICContainer;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.core.model.IParent;
import org.eclipse.cdt.core.model.ITranslationUnit;
/**
*/
public class SourceMapper {
ICProject cproject;
public SourceMapper(ICProject p) {
cproject = p;
}
public ITranslationUnit findTranslationUnit(String filename) {
return findTranslationUnit(cproject, filename);
}
public ITranslationUnit findTranslationUnit(IParent container, String filename) {
try {
List<?> list = container.getChildrenOfType(ICElement.C_UNIT);
for (int i = 0; i < list.size(); i++) {
Object o = list.get(i);
if (o instanceof ITranslationUnit) {
ITranslationUnit tu = (ITranslationUnit)o;
// TODO: What about non case sensitive filesystems.
if (filename.equals(tu.getElementName())) {
return tu;
}
}
}
// TODO: This to simple, we are not protected against
// loop in the file system symbolic links etc ..
list = container.getChildrenOfType(ICElement.C_CCONTAINER);
for (int i = 0; i < list.size(); i++) {
Object o = list.get(i);
if (o instanceof ICContainer) {
ITranslationUnit tu = findTranslationUnit((ICContainer)o, filename);
if (tu != null) {
return tu;
}
}
}
} catch (CModelException e) {
}
return null;
}
}