/*******************************************************************************
* Copyright (c) 2006, 2015 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
* IBM Corporation
*******************************************************************************/
package org.eclipse.cdt.internal.ui.includebrowser;
import java.util.Objects;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.cdt.core.index.IIndexFileLocation;
import org.eclipse.cdt.core.index.IndexLocationFactory;
import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.CoreModelUtil;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.core.model.ITranslationUnit;
public class IBFile {
final public ITranslationUnit fTU;
final public IIndexFileLocation fLocation;
final public String fName;
public IBFile(ITranslationUnit tu) {
fTU= tu;
fLocation= IndexLocationFactory.getIFL(tu);
fName= tu.getElementName();
}
public IBFile(ICProject preferredProject, IIndexFileLocation location) throws CModelException {
fLocation= location;
ITranslationUnit TU = CoreModelUtil.findTranslationUnitForLocation(location, preferredProject);
if (TU == null) //for EFS file that might not be on this filesystem
TU = CoreModelUtil.findTranslationUnitForLocation(location.getURI(), preferredProject);
fTU = TU;
String name= fLocation.getURI().getPath();
fName= name.substring(name.lastIndexOf('/')+1);
}
public IBFile(String name) {
fName= name;
fLocation= null;
fTU= null;
}
public IIndexFileLocation getLocation() {
return fLocation;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof IBFile) {
IBFile file = (IBFile) obj;
return (Objects.equals(fLocation, file.fLocation) &&
Objects.equals(fTU, file.fTU));
}
return super.equals(obj);
}
@Override
public int hashCode() {
return Objects.hashCode(fLocation)
+ 31* (Objects.hashCode(fTU)
+ 31* Objects.hashCode(fName));
}
public ITranslationUnit getTranslationUnit() {
return fTU;
}
public IFile getResource() {
if (fLocation != null) {
String fullPath= fLocation.getFullPath();
if (fullPath != null) {
IResource file= ResourcesPlugin.getWorkspace().getRoot().findMember(fullPath);
if (file instanceof IFile) {
return (IFile) file;
}
}
}
return null;
}
public String getName() {
return fName;
}
}