/******************************************************************************* * Copyright (c) 2009, 2010 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 * Sergey Prigogin (Google) *******************************************************************************/ package org.eclipse.cdt.core.parser; import org.eclipse.cdt.core.dom.ast.IASTFileLocation; import org.eclipse.cdt.core.index.IIndexFileLocation; import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.internal.core.parser.InternalParserUtil; import org.eclipse.cdt.internal.core.parser.scanner.CharArray; import org.eclipse.cdt.internal.core.parser.scanner.InternalFileContent; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IPath; /** * Abstract class for representing the content of a file. * It serves as the input to the preprocessor. * * @noextend This class is not intended to be subclassed by clients. * @since 5.2 */ public abstract class FileContent { /** * Returns the location of this file content as it will appear in {@link IASTFileLocation#getFileName()} */ public abstract String getFileLocation(); /** * Returns a 64-bit hash value of the file contents. */ public abstract long getContentsHash(); /** * Creates a file content object for a fixed buffer. * @param filePath the path of the file as it will appear in {@link IASTFileLocation#getFileName()} * @param contents the actual content. */ public static FileContent create(String filePath, char[] contents) { return new InternalFileContent(filePath, new CharArray(contents)); } /** * Creates a file content object for a translation-unit, which may be a working copy. */ public static FileContent create(ITranslationUnit tu) { IPath location= tu.getLocation(); if (location == null) return create(tu.getElementName(), tu.getContents()); if (tu.isWorkingCopy()) { return create(location.toOSString(), tu.getContents()); } IResource res= tu.getResource(); if (res instanceof IFile) { return create((IFile) res); } return createForExternalFileLocation(location.toOSString()); } /** * Creates a file content object for an index file location. */ public static FileContent create(IIndexFileLocation ifl) { return InternalParserUtil.createFileContent(ifl); } /** * Creates a file content for a workspace file */ public static FileContent create(IFile file) { return InternalParserUtil.createWorkspaceFileContent(file); } public static FileContent createForExternalFileLocation(String fileLocation) { return createForExternalFileLocation(fileLocation, InternalParserUtil.SYSTEM_DEFAULT_ENCODING); } /** * Creates a file content object for a file location that is not part of the workspace * @since 5.3 */ public static FileContent createForExternalFileLocation(String fileLocation, String encoding) { return InternalParserUtil.createExternalFileContent(fileLocation, encoding); } /** * Provided to achieve backwards compatibility. */ @Deprecated public static FileContent adapt(CodeReader reader) { if (reader == null) return null; return create(reader.getPath(), reader.buffer); } }