Class AbstractOptimizer<T extends IOptimizerTarget>

java.lang.Object
com.pnfsoftware.jeb.core.AbstractPlugin
com.pnfsoftware.jeb.core.units.code.asm.decompiler.opt.AbstractOptimizer<T>
Type Parameters:
T -
All Implemented Interfaces:
IPlugin, IOptimizer<T>
Direct Known Subclasses:
AbstractCOptimizer, AbstractEOptimizer

public abstract class AbstractOptimizer<T extends IOptimizerTarget> extends AbstractPlugin implements IOptimizer<T>
Skeleton for a generic artifact optimizer.
  • Field Details

    • logger

      public static final ILogger logger
      Public logger accessible by the implementing optimizer. Writing to the logger should be favored over writing directly to stdout.
  • Constructor Details

    • AbstractOptimizer

      public AbstractOptimizer()
    • AbstractOptimizer

      public AbstractOptimizer(T target)
  • Method Details

    • setName

      protected void setName(String name)
    • getName

      public String getName()
    • getPluginInformation

      public EditablePluginInformation getPluginInformation()
      Description copied from interface: IPlugin
      Retrieve basic information about the plugin, such as name, version, author, and organization.
      Specified by:
      getPluginInformation in interface IPlugin
      Returns:
      the plugin information
    • setMasterOptimizer

      public void setMasterOptimizer(IMasterOptimizer<T> mo)
      Description copied from interface: IOptimizer
      Set an optional master optimizer that manages this optimizer.
      Specified by:
      setMasterOptimizer in interface IOptimizer<T extends IOptimizerTarget>
      Parameters:
      mo - optional
    • getMasterOptimizer

      public IMasterOptimizer<T> getMasterOptimizer()
      Description copied from interface: IOptimizer
      Retrieve the optional master optimizer that manages this optimizer.
      Specified by:
      getMasterOptimizer in interface IOptimizer<T extends IOptimizerTarget>
      Returns:
      optional reference
    • setType

      protected void setType(OptimizerType type)
      Set the type of optimizer. The default is OptimizerType.NORMAL. Optimizers with a type OptimizerType.ON_DEMAND must also set their preferred execution stage (else they will never run).
      Parameters:
      type -
    • getRequiredModeThreshold

      public OptimizerMode getRequiredModeThreshold()
      Description copied from interface: IOptimizer
      Specify the minimum bar requested from the orchestrator in order to run. If that bar is not met, the orchestrator should not run the optimizer. Refer to AbstractMasterOptimizer for existing thresholds.
      Specified by:
      getRequiredModeThreshold in interface IOptimizer<T extends IOptimizerTarget>
      Returns:
    • setRequiredModeThreshold

      protected void setRequiredModeThreshold(OptimizerMode threshold)
      Set the threshold. The default value AbstractMasterOptimizer#MODE_NORMAL.
      Parameters:
      threshold -
    • getType

      public OptimizerType getType()
      Description copied from interface: IOptimizer
      Retrieve the type of this optimizer.
      Specified by:
      getType in interface IOptimizer<T extends IOptimizerTarget>
      Returns:
    • addTag

      protected void addTag(String tag)
    • removeTag

      protected void removeTag(String tag)
    • getTags

      public Set<String> getTags()
      Description copied from interface: IOptimizer
      Get the optimizer tags. An optimizer may have 0, 1, or more tags. A tag is a non-null, non-empty string.
      Specified by:
      getTags in interface IOptimizer<T extends IOptimizerTarget>
      Returns:
      a collection of tags; may be empty (tags are optional), but never null
    • setPreferredExecutionStage

      protected void setPreferredExecutionStage(int preferredExecStage)
      Use only for type OptimizerType.ON_DEMAND. Disregarded for other types. Leave to 0 for pure on-demand.
      Parameters:
      preferredExecStage - id such that abs(id) is in [1, 99] ; use positive value for post-stage execution, negative value for pre-stage execution
    • getPreferredExecutionStage

      public int getPreferredExecutionStage()
      Description copied from interface: IOptimizer
      This method is used for on-demand optimizers only.
      Specified by:
      getPreferredExecutionStage in interface IOptimizer<T extends IOptimizerTarget>
      Returns:
    • setPriority

      protected void setPriority(double priority)
      Set the optimizer priority. To be used by the constructor.
      Parameters:
      priority - the new priority (high means higher priority). When optimizers are managed and run by an orchestrator, the optimizers with a higher priority are run before those having a lower priority. The default priority is 0.
    • getPriority

      public final double getPriority()
      The standard implementation provides a standard priority of 0.
      Specified by:
      getPriority in interface IOptimizer<T extends IOptimizerTarget>
      Returns:
      the optimizer priority