Package ghidra.program.model.data
Class DataTypeConflictHandler
- java.lang.Object
-
- ghidra.program.model.data.DataTypeConflictHandler
-
public abstract class DataTypeConflictHandler extends java.lang.Object
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
DataTypeConflictHandler.ConflictResolutionPolicy
ConflictResolutionPolicy
indicates the conflict resolution policy which should be applied when any conflict is encounteredstatic class
DataTypeConflictHandler.ConflictResult
ConflictResult
indicates the resolution which should be applied to a specific conflict
-
Field Summary
Fields Modifier and Type Field Description static DataTypeConflictHandler
DEFAULT_HANDLER
static DataTypeConflictHandler
KEEP_HANDLER
static DataTypeConflictHandler
REPLACE_EMPTY_STRUCTS_OR_RENAME_AND_ADD_HANDLER
Thisconflict handler
attempts to match conflictingcomposite data types
(structure or union) when they have compatible data layouts.static DataTypeConflictHandler
REPLACE_HANDLER
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description abstract DataTypeConflictHandler
getSubsequentHandler()
Returns the appropriate handler for recursive resolve calls.abstract DataTypeConflictHandler.ConflictResult
resolveConflict(DataType addedDataType, DataType existingDataType)
Callback to handle conflicts in a datatype manager when new datatypes are added that have the same name as an existing datatype.abstract boolean
shouldUpdate(DataType sourceDataType, DataType localDataType)
Callback invoked when an associated dataType is being resolved and its local version of the dataType is different from the source archive's dataType.
-
-
-
Field Detail
-
DEFAULT_HANDLER
public static final DataTypeConflictHandler DEFAULT_HANDLER
-
REPLACE_HANDLER
public static DataTypeConflictHandler REPLACE_HANDLER
-
KEEP_HANDLER
public static final DataTypeConflictHandler KEEP_HANDLER
-
REPLACE_EMPTY_STRUCTS_OR_RENAME_AND_ADD_HANDLER
public static final DataTypeConflictHandler REPLACE_EMPTY_STRUCTS_OR_RENAME_AND_ADD_HANDLER
Thisconflict handler
attempts to match conflictingcomposite data types
(structure or union) when they have compatible data layouts. (Data types that are exactly equiv will not be subjected to conflict handling and will never reach here)A default/empty sized structure, or structures with the same size are candidates for matching.
Structures that have a subset of the other's field definition are candidates for matching.
When a candidate data type is matched with an existing data type, this conflict handler will specify that the new data type is:
- discarded and replaced by the existing data type (
DataTypeConflictHandler.ConflictResult.USE_EXISTING
) - used to overwrite the existing data type (
DataTypeConflictHandler.ConflictResult.REPLACE_EXISTING
)
- kept, but renamed with a .conflictNNNN suffix to make it unique (
DataTypeConflictHandler.ConflictResult.RENAME_AND_ADD
)
- discarded and replaced by the existing data type (
-
-
Method Detail
-
resolveConflict
public abstract DataTypeConflictHandler.ConflictResult resolveConflict(DataType addedDataType, DataType existingDataType)
Callback to handle conflicts in a datatype manager when new datatypes are added that have the same name as an existing datatype. The implementer of this interface should do one of the following: return the addedDataType - which means to replace the existingDataType with the addedDataType (may throw exception if the datatypes are not compatible) return the existingDataType the addedDataType will be ignored and the existing dataType will be used. return a new DataType with a new name/category- Parameters:
addedDataType
- the datatype being added.existingDataType
- the datatype that exists with the same name/category as the one added- Returns:
- an enum specify how to handle the conflict
-
shouldUpdate
public abstract boolean shouldUpdate(DataType sourceDataType, DataType localDataType)
Callback invoked when an associated dataType is being resolved and its local version of the dataType is different from the source archive's dataType. This method returns true if the local version should be updated to the archive's version of the dataType. Otherwise, the local dataType will be used (without updating) in the resolve operation.- Parameters:
sourceDataType
-localDataType
-- Returns:
- true if the localDataType should be updated to be equivalent to the sourceDataType.
-
getSubsequentHandler
public abstract DataTypeConflictHandler getSubsequentHandler()
Returns the appropriate handler for recursive resolve calls.
-
-