package files;
import driver.SourceFile;
/**
* A Require that is backed by a source file present on the file system.
*/
public class BackedRequire
{
/****************************************************************************/
private final Require require;
/****************************************************************************/
private final SourceFile file;
/****************************************************************************/
public BackedRequire(Require require, SourceFile file)
{
this.require = require;
this.file = file;
}
/****************************************************************************/
public Require require()
{
return require;
}
/****************************************************************************/
public SourceFile file()
{
return file;
}
/*****************************************************************************
* If macros (usually one) are being required by this require statement,
* enable them.
*/
public void enableRequiredMacros()
{
if (require.isMacro()) {
file.enableMacro(require.macro());
}
}
/*****************************************************************************
* If macros (usually one) are being required by this require statement,
* disable them.
*/
public void disableRequiredMacros()
{
if (require.isMacro()) {
file.disableMacro(require.macro());
}
}
/****************************************************************************/
@Override public String toString()
{
return require + "(" + file + ")";
}
/*****************************************************************************
* We assume that there never exists two BackedRequire with equivalent
* Require, but different CTimeFile; as that would be an ambiguity, and should
* be caught by the CTimeFileRepository.
*/
@Override public boolean equals(Object o)
{
if (!(o instanceof BackedRequire)) { return false; }
BackedRequire other = (BackedRequire) o;
return require.equals(other.require);
}
/****************************************************************************/
@Override public int hashCode()
{
return require.hashCode();
}
}