Package org.apache.tools.ant.types

# Class AbstractFileSet

java.lang.Object
org.apache.tools.ant.ProjectComponent
org.apache.tools.ant.types.DataType
org.apache.tools.ant.types.AbstractFileSet

All Implemented Interfaces:
  `java.lang.Cloneable`, `SelectorContainer`

Direct Known Subclasses:
  `DirSet`, `FileSet`, `MultiRootFileSet`, `Sync.SyncTarget`

    public abstract class AbstractFileSet
    extends DataType
    implements java.lang.Cloneable, SelectorContainer

Class that holds an implicit patternset and supports nested patternsets and creates a DirectoryScanner using these patterns.

Common base class for DirSet and FileSet.

- ## Field Summary

  ### Fields inherited from class org.apache.tools.ant.types.DataType

  `checked, ref`

  ### Fields inherited from class org.apache.tools.ant.ProjectComponent

  `description, location, project`

- ## Constructor Summary

  Constructors
  Modifier | Constructor | Description
  --- | --- | ---
  `` | `AbstractFileSet()` | Construct a new `AbstractFileSet`.
  `protected` | `AbstractFileSet​(AbstractFileSet fileset)` | Construct a new `AbstractFileSet`, shallowly cloned from the specified `AbstractFileSet`.

- ## Method Summary

  Modifier and Type | Method | Description
  --- | --- | ---
  `void` | `add​(FileSelector selector)` | Add an arbitrary selector.
  `void` | `addAnd​(AndSelector selector)` | Add an "And" selector entry on the selector list.
  `void` | `addContains​(ContainsSelector selector)` | Add a contains selector entry on the selector list.
  `void` | `addContainsRegexp​(ContainsRegexpSelector selector)` | Add a regular expression selector entry on the selector list.
  `void` | `addCustom​(ExtendSelector selector)` | Add an extended selector entry on the selector list.
  `void` | `addDate​(DateSelector selector)` | Add a selector date entry on the selector list.
  `void` | `addDepend​(DependSelector selector)` | Add a depends selector entry on the selector list.
  `void` | `addDepth​(DepthSelector selector)` | Add a depth selector entry on the selector list.
  `void` | `addDifferent​(DifferentSelector selector)` | Add a DifferentSelector entry on the selector list.
  `void` | `addExecutable​(ExecutableSelector e)` |
  `void` | `addFilename​(FilenameSelector selector)` | Add a selector filename entry on the selector list.
  `void` | `addMajority​(MajoritySelector selector)` | Add a majority selector entry on the selector list.
  `void` | `addModified​(ModifiedSelector selector)` | Add the modified selector.
  `void` | `addNone​(NoneSelector selector)` | Add a "None" selector entry on the selector list.
  `void` | `addNot​(NotSelector selector)` | Add a "Not" selector entry on the selector list.
  `void` | `addOr​(OrSelector selector)` | Add an "Or" selector entry on the selector list.
  `void` | `addOwnedBy​(OwnedBySelector o)` |
  `void` | `addPosixGroup​(PosixGroupSelector o)` |
  `void` | `addPosixPermissions​(PosixPermissionsSelector o)` |
  `void` | `addPresent​(PresentSelector selector)` | Add a present selector entry on the selector list.
  `void` | `addReadable​(ReadableSelector r)` |
  `void` | `addSelector​(SelectSelector selector)` | Add a "Select" selector entry on the selector list.
  `void` | `addSize​(SizeSelector selector)` | Add a selector size entry on the selector list.
  `void` | `addSymlink​(SymlinkSelector e)` |
  `void` | `addType​(TypeSelector selector)` | Add a selector type entry on the selector list.
  `void` | `addWritable​(WritableSelector w)` |
  `void` | `appendExcludes​(java.lang.String[] excludes)` | Appends `excludes` to the current list of exclude patterns.
  `void` | `appendIncludes​(java.lang.String[] includes)` | Appends `includes` to the current list of include patterns.
  `void` | `appendSelector​(FileSelector selector)` | Add a new selector into this container.
  `java.lang.Object` | `clone()` | Creates a deep clone of this instance, except for the nested selectors (the list of selectors is a shallow clone of this instance's list).
  `PatternSet.NameEntry` | `createExclude()` | Add a name entry to the exclude list.
  `PatternSet.NameEntry` | `createExcludesFile()` | Add a name entry to the excludes files list.
  `PatternSet.NameEntry` | `createInclude()` | Add a name entry to the include list.
  `PatternSet.NameEntry` | `createIncludesFile()` | Add a name entry to the include files list.
  `PatternSet` | `createPatternSet()` | Creates a nested patternset.
  `protected void` | `dieOnCircularReference​(java.util.Stack<java.lang.Object> stk, Project p)` | Check to see whether any DataType we hold references to is included in the Stack (which holds all DataType instances that directly or indirectly reference this instance, including this instance itself).
  `boolean` | `getDefaultexcludes()` | Whether default exclusions should be used or not.
  `java.io.File` | `getDir()` | Retrieves the base-directory for this instance.
  `java.io.File` | `getDir​(Project p)` | Retrieves the base-directory for this instance.
  `DirectoryScanner` | `getDirectoryScanner()` | Returns the directory scanner needed to access the files to process.
  `DirectoryScanner` | `getDirectoryScanner​(Project p)` | Returns the directory scanner needed to access the files to process.
  `boolean` | `getErrorOnMissingDir()` | Gets whether an error is/should be thrown if the base directory does not exist.
  `int` | `getMaxLevelsOfSymlinks()` | The maximum number of times a symbolic link may be followed during a scan.
  `protected AbstractFileSet` | `getRef​(Project p)` | Performs the check for circular references and returns the referenced FileSet.
  `FileSelector[]` | `getSelectors​(Project p)` | Returns the set of selectors as an array.
  `boolean` | `hasPatterns()` | Indicates whether there are any patterns here.
  `boolean` | `hasSelectors()` | Indicates whether there are any selectors here.
  `boolean` | `isCaseSensitive()` | Find out if the fileset is case sensitive.
  `boolean` | `isFollowSymlinks()` | Find out if the fileset wants to follow symbolic links.
  `java.lang.String[]` | `mergeExcludes​(Project p)` | Get the merged exclude patterns for this AbstractFileSet.
  `java.lang.String[]` | `mergeIncludes​(Project p)` | Get the merged include patterns for this AbstractFileSet.
  `PatternSet` | `mergePatterns​(Project p)` | Get the merged patterns for this AbstractFileSet.
  `int` | `selectorCount()` | Gives the count of the number of selectors in this container.
  `java.util.Enumeration<FileSelector>` | `selectorElements()` | Returns an enumerator for accessing the set of selectors.
  `void` | `setCaseSensitive​(boolean caseSensitive)` | Sets case sensitivity of the file system.
  `void` | `setDefaultexcludes​(boolean useDefaultExcludes)` | Sets whether default exclusions should be used or not.
  `void` | `setDir​(java.io.File dir)` | Sets the base-directory for this instance.
  `void` | `setErrorOnMissingDir​(boolean errorOnMissingDir)` | Sets whether an error is thrown if a directory does not exist.
  `void` | `setExcludes​(java.lang.String excludes)` | Appends `excludes` to the current list of exclude patterns.
  `void` | `setExcludesfile​(java.io.File excl)` | Sets the `File` containing the excludes patterns.
  `void` | `setFile​(java.io.File file)` | Creates a single file fileset.
  `void` | `setFollowSymlinks​(boolean followSymlinks)` | Sets whether or not symbolic links should be followed.
  `void` | `setIncludes​(java.lang.String includes)` | Appends `includes` to the current list of include patterns.
  `void` | `setIncludesfile​(java.io.File incl)` | Sets the `File` containing the includes patterns.
  `void` | `setMaxLevelsOfSymlinks​(int max)` | The maximum number of times a symbolic link may be followed during a scan.
  `void` | `setRefid​(Reference r)` | Makes this instance in effect a reference to another instance.
  `void` | `setupDirectoryScanner​(FileScanner ds)` | Set up the specified directory scanner against this AbstractFileSet's Project.
  `void` | `setupDirectoryScanner​(FileScanner ds, Project p)` | Set up the specified directory scanner against the specified project.
  `java.lang.String` | `toString()` | Returns included files as a list of semicolon-separated filenames.

  ### Methods inherited from class org.apache.tools.ant.types.DataType

  `checkAttributesAllowed, checkChildrenAllowed, circularReference, dieOnCircularReference, dieOnCircularReference, getCheckedRef, getCheckedRef, getCheckedRef, getCheckedRef, getCheckedRef, getDataTypeName, getRefid, invokeCircularReferenceCheck, isChecked, isReference, noChildrenAllowed, pushAndInvokeCircularReferenceCheck, setChecked, tooManyAttributes`

  ### Methods inherited from class org.apache.tools.ant.ProjectComponent

  `getDescription, getLocation, getProject, log, log, setDescription, setLocation, setProject`

  ### Methods inherited from class java.lang.Object

  `equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- ## Constructor Details

  - ### AbstractFileSet

    public AbstractFileSet()
    Construct a new `AbstractFileSet`.

  - ### AbstractFileSet

    protected AbstractFileSet​(AbstractFileSet fileset)
    Construct a new `AbstractFileSet`, shallowly cloned from the specified `AbstractFileSet`.
    Parameters:
      `fileset` - the `AbstractFileSet` to use as a template.

- ## Method Details

  - ### setRefid

    public void setRefid​(Reference r) throws BuildException
    Makes this instance in effect a reference to another instance.

    You must not set another attribute or nest elements inside this element if you make it a reference.

    Overrides:
      `setRefid` in class `DataType`
    Parameters:
      `r` - the `Reference` to use.
    Throws:
      `BuildException` - on error

  - ### setDir

    public void setDir​(java.io.File dir) throws BuildException
    Sets the base-directory for this instance.
    Parameters:
      `dir` - the directory's `File` instance.
    Throws:
      `BuildException` - on error

  - ### getDir

    public java.io.File getDir()
    Retrieves the base-directory for this instance.
    Returns:
      `File`.

  - ### getDir

    public java.io.File getDir​(Project p)
    Retrieves the base-directory for this instance.
    Parameters:
      `p` - the `Project` against which the reference is resolved, if set.
    Returns:
      `File`.

  - ### createPatternSet

    public PatternSet createPatternSet()
    Creates a nested patternset.
    Returns:
      `PatternSet`.

  - ### createInclude

    public PatternSet.NameEntry createInclude()
    Add a name entry to the include list.
    Returns:
      `PatternSet.NameEntry`.

  - ### createIncludesFile

    public PatternSet.NameEntry createIncludesFile()
    Add a name entry to the include files list.
    Returns:
      `PatternSet.PatternFileNameEntry`.

  - ### createExclude

    public PatternSet.NameEntry createExclude()
    Add a name entry to the exclude list.
    Returns:
      `PatternSet.NameEntry`.

  - ### createExcludesFile

    public PatternSet.NameEntry createExcludesFile()
    Add a name entry to the excludes files list.
    Returns:
      `PatternSet.PatternFileNameEntry`.

  - ### setFile

    public void setFile​(java.io.File file)
    Creates a single file fileset.
    Parameters:
      `file` - the single `File` included in this `AbstractFileSet`.

  - ### setIncludes

    public void setIncludes​(java.lang.String includes)
    Appends `includes` to the current list of include patterns.

    Patterns may be separated by a comma or a space.

    Parameters:
      `includes` - the `String` containing the include patterns.

  - ### appendIncludes

    public void appendIncludes​(java.lang.String[] includes)
    Appends `includes` to the current list of include patterns.
    Parameters:
      `includes` - array containing the include patterns.
    Since:
      Ant 1.7

  - ### setExcludes

    public void setExcludes​(java.lang.String excludes)
    Appends `excludes` to the current list of exclude patterns.

    Patterns may be separated by a comma or a space.

    Parameters:
      `excludes` - the `String` containing the exclude patterns.

  - ### appendExcludes

    public void appendExcludes​(java.lang.String[] excludes)
    Appends `excludes` to the current list of exclude patterns.
    Parameters:
      `excludes` - array containing the exclude patterns.
    Since:
      Ant 1.7

  - ### setIncludesfile

    public void setIncludesfile​(java.io.File incl) throws BuildException
    Sets the `File` containing the includes patterns.
    Parameters:
      `incl` - `File` instance.
    Throws:
      `BuildException` - on error

  - ### setExcludesfile

    public void setExcludesfile​(java.io.File excl) throws BuildException
    Sets the `File` containing the excludes patterns.
    Parameters:
      `excl` - `File` instance.
    Throws:
      `BuildException` - on error

  - ### setDefaultexcludes

    public void setDefaultexcludes​(boolean useDefaultExcludes)
    Sets whether default exclusions should be used or not.
    Parameters:
      `useDefaultExcludes` - `boolean`.

  - ### getDefaultexcludes

    public boolean getDefaultexcludes()
    Whether default exclusions should be used or not.
    Returns:
      the default exclusions value.
    Since:
      Ant 1.6.3

  - ### setCaseSensitive

    public void setCaseSensitive​(boolean caseSensitive)
    Sets case sensitivity of the file system.
    Parameters:
      `caseSensitive` - `boolean`.

  - ### isCaseSensitive

    public boolean isCaseSensitive()
    Find out if the fileset is case sensitive.
    Returns:
      `boolean` indicating whether the fileset is case sensitive.
    Since:
      Ant 1.7

  - ### setFollowSymlinks

    public void setFollowSymlinks​(boolean followSymlinks)
    Sets whether or not symbolic links should be followed.
    Parameters:
      `followSymlinks` - whether or not symbolic links should be followed.

  - ### isFollowSymlinks

    public boolean isFollowSymlinks()
    Find out if the fileset wants to follow symbolic links.
    Returns:
      `boolean` indicating whether symbolic links should be followed.
    Since:
      Ant 1.6

  - ### setMaxLevelsOfSymlinks

    public void setMaxLevelsOfSymlinks​(int max)
    The maximum number of times a symbolic link may be followed during a scan.
    Parameters:
      `max` - int
    Since:
      Ant 1.8.0

  - ### getMaxLevelsOfSymlinks

    public int getMaxLevelsOfSymlinks()
    The maximum number of times a symbolic link may be followed during a scan.
    Returns:
      int
    Since:
      Ant 1.8.0

  - ### setErrorOnMissingDir

    public void setErrorOnMissingDir​(boolean errorOnMissingDir)
    Sets whether an error is thrown if a directory does not exist.
    Parameters:
      `errorOnMissingDir` - true if missing directories cause errors, false if not.

  - ### getErrorOnMissingDir

    public boolean getErrorOnMissingDir()
    Gets whether an error is/should be thrown if the base directory does not exist.
    Returns:
      boolean
    Since:
      Ant 1.8.2

  - ### getDirectoryScanner

    public DirectoryScanner getDirectoryScanner()
    Returns the directory scanner needed to access the files to process.
    Returns:
      a `DirectoryScanner` instance.

  - ### getDirectoryScanner

    public DirectoryScanner getDirectoryScanner​(Project p)
    Returns the directory scanner needed to access the files to process.
    Parameters:
      `p` - the Project against which the DirectoryScanner should be configured.
    Returns:
      a `DirectoryScanner` instance.

  - ### setupDirectoryScanner

    public void setupDirectoryScanner​(FileScanner ds)
    Set up the specified directory scanner against this AbstractFileSet's Project.
    Parameters:
      `ds` - a `FileScanner` instance.

  - ### setupDirectoryScanner

    public void setupDirectoryScanner​(FileScanner ds, Project p)
    Set up the specified directory scanner against the specified project.
    Parameters:
      `ds` - a `FileScanner` instance.
      `p` - an Ant `Project` instance.

  - ### getRef

    protected AbstractFileSet getRef​(Project p)
    Performs the check for circular references and returns the referenced FileSet. This method can be overridden together with `getRef()` providing implementations containing the special support for FileSet references, which can be handled by all ArchiveFileSets. NB! This method must be overridden in subclasses such as FileSet and DirSet to distinguish between the data types.
    Parameters:
      `p` - the current project
    Returns:
      the dereferenced object.

  - ### hasSelectors

    public boolean hasSelectors()
    Indicates whether there are any selectors here.
    Specified by:
      `hasSelectors` in interface `SelectorContainer`
    Returns:
      whether any selectors are in this container.

  - ### hasPatterns

    public boolean hasPatterns()
    Indicates whether there are any patterns here.
    Returns:
      whether any patterns are in this container.

  - ### selectorCount

    public int selectorCount()
    Gives the count of the number of selectors in this container.
    Specified by:
      `selectorCount` in interface `SelectorContainer`
    Returns:
      the number of selectors in this container as an `int`.

  - ### getSelectors

    public FileSelector[] getSelectors​(Project p)
    Returns the set of selectors as an array.
    Specified by:
      `getSelectors` in interface `SelectorContainer`
    Parameters:
      `p` - the current project
    Returns:
      a `FileSelector[]` of the selectors in this container.

  - ### selectorElements

    public java.util.Enumeration<FileSelector> selectorElements()
    Returns an enumerator for accessing the set of selectors.
    Specified by:
      `selectorElements` in interface `SelectorContainer`
    Returns:
      an `Enumeration` of selectors.

  - ### appendSelector

    public void appendSelector​(FileSelector selector)
    Add a new selector into this container.
    Specified by:
      `appendSelector` in interface `SelectorContainer`
    Parameters:
      `selector` - the new `FileSelector` to add.

  - ### addSelector

    public void addSelector​(SelectSelector selector)
    Add a "Select" selector entry on the selector list.
    Specified by:
      `addSelector` in interface `SelectorContainer`
    Parameters:
      `selector` - the `SelectSelector` to add.

  - ### addAnd

    public void addAnd​(AndSelector selector)
    Add an "And" selector entry on the selector list.
    Specified by:
      `addAnd` in interface `SelectorContainer`
    Parameters:
      `selector` - the `AndSelector` to add.

  - ### addOr

    public void addOr​(OrSelector selector)
    Add an "Or" selector entry on the selector list.
    Specified by:
      `addOr` in interface `SelectorContainer`
    Parameters:
      `selector` - the `OrSelector` to add.

  - ### addNot

    public void addNot​(NotSelector selector)
    Add a "Not" selector entry on the selector list.
    Specified by:
      `addNot` in interface `SelectorContainer`
    Parameters:
      `selector` - the `NotSelector` to add.

  - ### addNone

    public void addNone​(NoneSelector selector)
    Add a "None" selector entry on the selector list.
    Specified by:
      `addNone` in interface `SelectorContainer`
    Parameters:
      `selector` - the `NoneSelector` to add.

  - ### addMajority

    public void addMajority​(MajoritySelector selector)
    Add a majority selector entry on the selector list.
    Specified by:
      `addMajority` in interface `SelectorContainer`
    Parameters:
      `selector` - the `MajoritySelector` to add.

  - ### addDate

    public void addDate​(DateSelector selector)
    Add a selector date entry on the selector list.
    Specified by:
      `addDate` in interface `SelectorContainer`
    Parameters:
      `selector` - the `DateSelector` to add.

  - ### addSize

    public void addSize​(SizeSelector selector)
    Add a selector size entry on the selector list.
    Specified by:
      `addSize` in interface `SelectorContainer`
    Parameters:
      `selector` - the `SizeSelector` to add.

  - ### addDifferent

    public void addDifferent​(DifferentSelector selector)
    Add a DifferentSelector entry on the selector list.
    Specified by:
      `addDifferent` in interface `SelectorContainer`
    Parameters:
      `selector` - the `DifferentSelector` to add.

  - ### addFilename

    public void addFilename​(FilenameSelector selector)
    Add a selector filename entry on the selector list.
    Specified by:
      `addFilename` in interface `SelectorContainer`
    Parameters:
      `selector` - the `FilenameSelector` to add.

  - ### addType

    public void addType​(TypeSelector selector)
    Add a selector type entry on the selector list.
    Specified by:
      `addType` in interface `SelectorContainer`
    Parameters:
      `selector` - the `TypeSelector` to add.

  - ### addCustom

    public void addCustom​(ExtendSelector selector)
    Add an extended selector entry on the selector list.
    Specified by:
      `addCustom` in interface `SelectorContainer`
    Parameters:
      `selector` - the `ExtendSelector` to add.

  - ### addContains

    public void addContains​(ContainsSelector selector)
    Add a contains selector entry on the selector list.
    Specified by:
      `addContains` in interface `SelectorContainer`
    Parameters:
      `selector` - the `ContainsSelector` to add.

  - ### addPresent

    public void addPresent​(PresentSelector selector)
    Add a present selector entry on the selector list.
    Specified by:
      `addPresent` in interface `SelectorContainer`
    Parameters:
      `selector` - the `PresentSelector` to add.

  - ### addDepth

    public void addDepth​(DepthSelector selector)
    Add a depth selector entry on the selector list.
    Specified by:
      `addDepth` in interface `SelectorContainer`
    Parameters:
      `selector` - the `DepthSelector` to add.

  - ### addDepend

    public void addDepend​(DependSelector selector)
    Add a depends selector entry on the selector list.
    Specified by:
      `addDepend` in interface `SelectorContainer`
    Parameters:
      `selector` - the `DependSelector` to add.

  - ### addContainsRegexp

    public void addContainsRegexp​(ContainsRegexpSelector selector)
    Add a regular expression selector entry on the selector list.
    Specified by:
      `addContainsRegexp` in interface `SelectorContainer`
    Parameters:
      `selector` - the `ContainsRegexpSelector` to add.

  - ### addModified

    public void addModified​(ModifiedSelector selector)
    Add the modified selector.
    Specified by:
      `addModified` in interface `SelectorContainer`
    Parameters:
      `selector` - the `ModifiedSelector` to add.
    Since:
      Ant 1.6

  - ### addReadable

    public void addReadable​(ReadableSelector r)

  - ### addWritable

    public void addWritable​(WritableSelector w)

  - ### addExecutable

    public void addExecutable​(ExecutableSelector e)
    Parameters:
      `e` - ExecutableSelector
    Since:
      1.10.0

  - ### addSymlink

    public void addSymlink​(SymlinkSelector e)
    Parameters:
      `e` - SymlinkSelector
    Since:
      1.10.0

  - ### addOwnedBy

    public void addOwnedBy​(OwnedBySelector o)
    Parameters:
      `o` - OwnedBySelector
    Since:
      1.10.0

  - ### addPosixGroup

    public void addPosixGroup​(PosixGroupSelector o)
    Parameters:
      `o` - PosixGroupSelector
    Since:
      1.10.4

  - ### addPosixPermissions

    public void addPosixPermissions​(PosixPermissionsSelector o)
    Parameters:
      `o` - PosixPermissionsSelector
    Since:
      1.10.4

  - ### add

    public void add​(FileSelector selector)
    Add an arbitrary selector.
    Specified by:
      `add` in interface `SelectorContainer`
    Parameters:
      `selector` - the `FileSelector` to add.
    Since:
      Ant 1.6

  - ### toString

    public java.lang.String toString()
    Returns included files as a list of semicolon-separated filenames.
    Overrides:
      `toString` in class `DataType`
    Returns:
      a `String` of included filenames.

  - ### clone

    public java.lang.Object clone()
    Creates a deep clone of this instance, except for the nested selectors (the list of selectors is a shallow clone of this instance's list).
    Overrides:
      `clone` in class `DataType`
    Returns:
      the cloned object
    Since:
      Ant 1.6

  - ### mergeIncludes

    public java.lang.String[] mergeIncludes​(Project p)
    Get the merged include patterns for this AbstractFileSet.
    Parameters:
      `p` - the project to use.
    Returns:
      the include patterns of the default pattern set and all nested patternsets.
    Since:
      Ant 1.7

  - ### mergeExcludes

    public java.lang.String[] mergeExcludes​(Project p)
    Get the merged exclude patterns for this AbstractFileSet.
    Parameters:
      `p` - the project to use.
    Returns:
      the exclude patterns of the default pattern set and all nested patternsets.
    Since:
      Ant 1.7

  - ### mergePatterns

    public PatternSet mergePatterns​(Project p)
    Get the merged patterns for this AbstractFileSet.
    Parameters:
      `p` - the project to use.
    Returns:
      the default patternset merged with the additional sets in a new PatternSet instance.
    Since:
      Ant 1.7

  - ### dieOnCircularReference

    protected void dieOnCircularReference​(java.util.Stack<java.lang.Object> stk, Project p) throws BuildException
    Description copied from class: `DataType`
    Check to see whether any DataType we hold references to is included in the Stack (which holds all DataType instances that directly or indirectly reference this instance, including this instance itself).

    If one is included, throw a BuildException created by `circularReference`.

    This implementation is appropriate only for a DataType that cannot hold other DataTypes as children.

    The general contract of this method is that it shouldn't do anything if `DataType.checked` is true and set it to true on exit.

    Overrides:
      `dieOnCircularReference` in class `DataType`
    Parameters:
      `stk` - the stack of references to check.
      `p` - the project to use to dereference the references.
    Throws:
      `BuildException` - on error.