Class ExternalProgramMerger

java.lang.Object
ghidra.app.merge.listing.ExternalProgramMerger
All Implemented Interfaces:
ListingMergeConstants, MergeResolver

public class ExternalProgramMerger extends Object implements MergeResolver, ListingMergeConstants
Manages external program name changes and conflicts between the latest versioned program and the modified program being checked into version control.
  • Constructor Details

    • ExternalProgramMerger

      public ExternalProgramMerger(ProgramMultiUserMergeManager mergeManager, Program resultPgm, Program originalPgm, Program latestPgm, Program myPgm, ProgramChangeSet latestChanges, ProgramChangeSet myChanges)
      Manages code unit changes and conflicts between the latest versioned program and the modified program being checked into version control.
      Parameters:
      mergeManager - the top level merge manager for merging a program version.
      resultPgm - the program to be updated with the result of the merge. This is the program that will actually get checked in.
      originalPgm - the program that was checked out.
      latestPgm - the latest checked-in version of the program.
      myPgm - the program requesting to be checked in.
      latestChanges - the address set of changes between original and latest versioned program.
      myChanges - the address set of changes between original and my modified program.
  • Method Details

    • init

      public void init()
    • autoMerge

      public void autoMerge(TaskMonitor monitor) throws CancelledException
      Throws:
      CancelledException
    • mergeConflicts

      public void mergeConflicts(int chosenConflictOption, TaskMonitor monitor) throws CancelledException
      Performs a manual merge of external program conflicts.
      Parameters:
      chosenConflictOption - ASK_USER means interactively resolve conflicts. JUnit testing also allows setting this to LATEST, MY, or ORIGINAL to force selection of a particular version change.
      monitor - task monitor for informing the user of progress.
      Throws:
      CancelledException - if the user cancels the merge.
    • getConflictInfo

      public String getConflictInfo(ghidra.app.merge.listing.ExternalProgramMerger.IDGroup idGroup, int conflictIndex, int totalConflicts)
      Gets the information to display at the top of the conflict window indicating which conflict this is of the total external program name conflicts.
      Parameters:
      idGroup - the symbol ID group for the external program (Library) in conflict.
      conflictIndex - the index of the current conflict.
      totalConflicts - the total number of conflicts.
    • hasConflict

      public boolean hasConflict()
    • getConflictCount

      public int getConflictCount()
    • getConflicts

      public ghidra.app.merge.listing.ExternalProgramMerger.IDGroup[] getConflicts()
      Returns an array of symbol ID groups for all the external programs that are in conflict.
    • getName

      public String getName()
      Description copied from interface: MergeResolver
      Get the name of this MergeResolver.
      Specified by:
      getName in interface MergeResolver
    • getDescription

      public String getDescription()
      Description copied from interface: MergeResolver
      Get the description of what this MergeResolver does.
      Specified by:
      getDescription in interface MergeResolver
    • apply

      public void apply()
      Description copied from interface: MergeResolver
      Notification that the apply button was hit.
      Specified by:
      apply in interface MergeResolver
    • cancel

      public void cancel()
      Description copied from interface: MergeResolver
      Notification that the merge process was canceled.
      Specified by:
      cancel in interface MergeResolver
    • merge

      public void merge(TaskMonitor monitor)
      Description copied from interface: MergeResolver
      Perform the merge process.
      Specified by:
      merge in interface MergeResolver
      Parameters:
      monitor - monitor that allows the user to cancel the merge operation
    • mergeExternalProgramName

      public void mergeExternalProgramName(Program program1, Program program2, ghidra.app.merge.listing.ExternalProgramMerger.IDGroup idGroup, TaskMonitor monitor)
      Actually merges (sets or removes) the indicated external program name in program1 based on the same external program name in program2
      Parameters:
      program1 - the program to merge into.
      program2 - the program to get the merge information from.
      idGroup - the symbol ID group for the external program (Library) to merge.
      monitor - task monitor for feedback or canceling the merge.s
    • getPhases

      public String[][] getPhases()
      Description copied from interface: MergeResolver
      Gets identifiers for the merge phases handled by this MergeResolver. If the merge has no sub-phases then return an array with a single string array. Each inner String array indicates a path for a single merge phase. Each outer array element represents a phase whose progress we wish to indicate.
      Examples:
      So for a simple phase which has no sub-phases return new String[][] {new String[] {"Phase A"}}
      So for a phase with 2 sub-phases return new String[][] { new String[] {"Phase A"}, new String[] {"Phase A", "Sub-Phase 1}, new String[] {"Phase A", "Sub-Phase 2} } .
      Specified by:
      getPhases in interface MergeResolver
      Returns:
      an array of phases.