Package ghidra.app.util.opinion

# Class AbstractProgramWrapperLoader

java.lang.Object
ghidra.app.util.opinion.AbstractProgramLoader
ghidra.app.util.opinion.AbstractProgramWrapperLoader

All Implemented Interfaces:
  `Loader`, `ExtensionPoint`, `Comparable<Loader>`

Direct Known Subclasses:
  `DefLoader`, `DyldCacheLoader`, `MapLoader`, `OmfLoader`, `PefLoader`

public abstract class AbstractProgramWrapperLoader extends AbstractProgramLoader
An abstract `Loader` that provides a convenience wrapper around `AbstractProgramLoader`, minimizing the amount of work a subclass needs to do to load a `Program`

- ## Field Summary

  ### Fields inherited from class ghidra.app.util.opinion.AbstractProgramLoader

  `ANCHOR_LABELS_OPTION_NAME, APPLY_LABELS_OPTION_NAME`

  ### Fields inherited from interface ghidra.app.util.opinion.Loader

  `COMMAND_LINE_ARG_PREFIX, OPTIONS_PROJECT_SAVE_STATE_KEY`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `AbstractProgramWrapperLoader()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `LoaderTier`
  `getTier()`
  For ordering purposes; lower tier numbers are more important (and listed first).
  `int`
  `getTierPriority()`
  For ordering purposes; lower numbers are more important (and listed first, within its tier).
  `protected abstract void`
  `load(ByteProvider provider, LoadSpec loadSpec, List<Option> options, Program program, TaskMonitor monitor, MessageLog log)`
  Loads bytes in a particular format into the given `Program`.
  `protected List<Loaded<Program>>`
  `loadProgram(ByteProvider provider, String programName, Project project, String programFolderPath, LoadSpec loadSpec, List<Option> options, MessageLog log, Object consumer, TaskMonitor monitor)`
  Loads bytes in a particular format as a new `Loaded` `Program`.
  `protected void`
  `loadProgramInto(ByteProvider provider, LoadSpec loadSpec, List<Option> options, MessageLog log, Program program, TaskMonitor monitor)`
  Loads program bytes into the specified `Program`.

  ### Methods inherited from class ghidra.app.util.opinion.AbstractProgramLoader

  `concatenatePaths, createDefaultMemoryBlocks, createProgram, generateBlockName, getDefaultOptions, getLanguageService, load, loadInto, markAsFunction, postLoadCleanup, postLoadProgramFixups, release, setProgramProperties, shouldApplyProcessorLabelsByDefault, validateOptions`

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

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

  ### Methods inherited from interface ghidra.app.util.opinion.Loader

  `compareTo, findSupportedLoadSpecs, getName, getPreferredFileName, loadsIntoNewFolder, supportsLoadIntoProgram, supportsLoadIntoProgram`

- ## Constructor Details

  - ### AbstractProgramWrapperLoader

    public AbstractProgramWrapperLoader()

- ## Method Details

  - ### load

    protected abstract void load(ByteProvider provider, LoadSpec loadSpec, List<Option> options, Program program, TaskMonitor monitor, MessageLog log) throws CancelledException, IOException
    Loads bytes in a particular format into the given `Program`.
    Parameters:
      `provider` - The bytes to load.
      `loadSpec` - The `LoadSpec` to use during load.
      `options` - The load options.
      `program` - The `Program` to load into.
      `monitor` - A cancelable task monitor.
      `log` - The message log.
    Throws:
      `IOException` - if there was an IO-related problem loading.
      `CancelledException` - if the user cancelled the load.

  - ### loadProgram

    protected List<Loaded<Program>> loadProgram(ByteProvider provider, String programName, Project project, String programFolderPath, LoadSpec loadSpec, List<Option> options, MessageLog log, Object consumer, TaskMonitor monitor) throws IOException, CancelledException
    Description copied from class: `AbstractProgramLoader`
    Loads bytes in a particular format as a new `Loaded` `Program`. Multiple `Program`s may end up getting created, depending on the nature of the format.

    Note that when the load completes, the returned `Loaded` `Program`s are not saved to a project. That is the responsibility of the caller (see `Loaded.save(Project, MessageLog, TaskMonitor)`).

    It is also the responsibility of the caller to release the returned `Loaded` `Program`s with `Loaded.release(Object)` when they are no longer needed.

    Specified by:
      `loadProgram` in class `AbstractProgramLoader`
    Parameters:
      `provider` - The bytes to load.
      `programName` - A suggested name for the primary `Loaded` `Program`. This is just a suggestion, and a `Loader` implementation reserves the right to change it. The `Loaded` `Program`s should be queried for their true names using `Loaded.getName()`.
      `project` - The `Project`. Loaders can use this to take advantage of existing `DomainFolder`s and `DomainFile`s to do custom behaviors such as loading libraries. Could be null if there is no project.
      `programFolderPath` - A suggested project folder path for the `Loaded` `Program`s. This is just a suggestion, and a `Loader` implementation reserves the right to change it for each `Loaded` result. The `Loaded` `Program`s should be queried for their true project folder paths using `Loaded.getProjectFolderPath()`.
      `loadSpec` - The `LoadSpec` to use during load.
      `options` - The load options.
      `log` - The message log.
      `consumer` - A consumer object for generated `Program`s.
      `monitor` - A task monitor.
    Returns:
      A `List` of one or more `Loaded` `Program`s (created but not saved).
    Throws:
      `LoadException` - if the load failed in an expected way.
      `IOException` - if there was an IO-related problem loading.
      `CancelledException` - if the user cancelled the load.

  - ### loadProgramInto

    protected void loadProgramInto(ByteProvider provider, LoadSpec loadSpec, List<Option> options, MessageLog log, Program program, TaskMonitor monitor) throws CancelledException, LoadException, IOException
    Description copied from class: `AbstractProgramLoader`
    Loads program bytes into the specified `Program`. This method will not create any new `Program`s. It is only for adding to an existing `Program`.

    NOTE: The loading that occurs in this method will automatically be done in a transaction.

    Specified by:
      `loadProgramInto` in class `AbstractProgramLoader`
    Parameters:
      `provider` - The bytes to load into the `Program`.
      `loadSpec` - The `LoadSpec` to use during load.
      `options` - The load options.
      `log` - The message log.
      `program` - The `Program` to load into.
      `monitor` - A cancelable task monitor.
    Throws:
      `CancelledException` - if the user cancelled the load.
      `LoadException` - if the load failed in an expected way.
      `IOException` - if there was an IO-related problem loading.

  - ### getTier

    public LoaderTier getTier()
    Description copied from interface: `Loader`
    For ordering purposes; lower tier numbers are more important (and listed first).
    Returns:
      the tier of the loader

  - ### getTierPriority

    public int getTierPriority()
    Description copied from interface: `Loader`
    For ordering purposes; lower numbers are more important (and listed first, within its tier).
    Returns:
      the ordering of the loader within its tier