/*******************************************************************************
* Copyright (c) 2006, 2010 Intel 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:
* Intel Corporation - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.buildmodel;
import java.net.URI;
import org.eclipse.core.runtime.IPath;
/**
*
* This interface represents the resource used in the build
*
* @noextend This class is not intended to be subclassed by clients.
* @noimplement This interface is not intended to be implemented by clients.
*/
public interface IBuildResource {
/**
* Returns the absolute path to the resource as seen on the target machine.
*
* @return IPath
*/
IPath getLocation();
/**
* In case the resource is a workspace resource,
* returns the full workspace path for the resource
* otherwise returns null
*
* @return IPath
*/
IPath getFullPath();
/**
* Returns a URI that can be used by EFS to access the build resource.
*
* @return URI
* @since 6.0
*/
URI getLocationURI();
/**
* Returns the output io type of the step
* that generates this resource.
* In case the resource is the project source,
* The returned output io type belongs to the main input step
*
* @see IBuildDescription#getInputStep()
*
* @return IBuildIOType
*/
IBuildIOType getProducerIOType();
/**
* Returns an array of io types where this resource is used as an input
*
* @return IBuildIOType[]
*/
IBuildIOType[] getDependentIOTypes();
/**
* Returns the step that generates this resource.
* In case the resource is the project source,
* The main input step is returned
*
* @see IBuildDescription#getInputStep()
*
* @return IBuildIOType
*/
IBuildStep getProducerStep();
/**
* Returns an array of steps that use this resource as an input
*
* @return IBuildIOType[]
*/
IBuildStep[] getDependentSteps();
/**
* Returns true if the resource needs rebuild
* this implies that all build steps dependent on this resource
* are to be invoked
*
* @return boolean
*/
boolean needsRebuild();
/**
* Returns true if this resource belongs to the project
*
* @return boolean
*
*/
boolean isProjectResource();
/**
* Returns true if the resource was removed from the build
* Note: the removed state represents is BUILD state rather than
* a file system state.
* If the build resouces is marked as removed that does not mean the
* resource is removed in the file system
* The removed state specifies that the resource is no longer used in the
* build process.
* E.g. the object file could be marked as removed if the source file was deleted
* in the file system
* The removed state information is used primarily for calculation
* of the project part that is to be rebuild
*
* @return boolean
*/
boolean isRemoved();
/**
* returns a build description that holds this step
*
* @return IBuildDescription
*/
IBuildDescription getBuildDescription();
}