Package ghidra.program.database.data
Class ProgramDataTypeManager
java.lang.Object
ghidra.program.database.data.DataTypeManagerDB
ghidra.program.database.data.ProgramBasedDataTypeManagerDB
ghidra.program.database.data.ProgramDataTypeManager
- All Implemented Interfaces:
ManagerDB,DataTypeManager,DomainFileBasedDataTypeManager,FileBasedDataTypeManager,ProgramBasedDataTypeManager
Class for managing data types in a program
-
Field Summary
Fields inherited from class ghidra.program.database.data.DataTypeManagerDB
addrMap, dbHandle, DEFAULT_CALLING_CONVENTION_ID, defaultListener, errHandler, lock, readOnlyMode, sourceArchiveAdapter, tablePrefix, universalID, UNKNOWN_CALLING_CONVENTION_IDFields inherited from interface ghidra.program.model.data.DataTypeManager
BAD_DATATYPE_ID, BUILT_IN_ARCHIVE_KEY, BUILT_IN_ARCHIVE_UNIVERSAL_ID, BUILT_IN_DATA_TYPES_NAME, DEFAULT_DATATYPE_ID, LOCAL_ARCHIVE_KEY, LOCAL_ARCHIVE_UNIVERSAL_ID, NULL_DATATYPE_ID -
Constructor Summary
ConstructorsConstructorDescriptionProgramDataTypeManager(DBHandle handle, AddressMap addrMap, int openMode, ErrorHandler errHandler, Lock lock, TaskMonitor monitor) Constructor -
Method Summary
Modifier and TypeMethodDescriptionbooleanDetermine if settings are supported for BuiltIn datatypes within this datatype manager.protected voidcategoryCreated(Category newCategory) protected voidcategoryMoved(CategoryPath oldPath, Category category) protected voidcategoryRemoved(Category parent, String name, long categoryID) protected voidcategoryRenamed(CategoryPath oldPath, Category category) voidclose()Closes this dataType managerprotected voiddataSettingChanged(Address dataAddr) Provides notification when a data instance setting has changed at a specific address.protected voiddataTypeAdded(DataType newDt, DataType originalDataType) voiddataTypeChanged(DataType dt, boolean isAutoChange) Notification when data type is changed.protected voiddataTypeDeleted(long deletedID, DataTypePath deletedDataTypePath) protected voiddataTypeMoved(DataType dt, DataTypePath oldPath, DataTypePath newPath) protected voiddataTypeNameChanged(DataType dt, String oldName) protected voiddataTypeReplaced(long existingDtID, DataTypePath existingPath, DataType replacementDt) protected voiddeleteDataTypeIDs(LinkedList<Long> deletedIds, TaskMonitor monitor) Delete all datatype uses external to the datatype manager if applicable.voidendTransaction(int transactionID, boolean commit) Ends the current transactionprotected voidfavoritesChanged(DataType dataType, boolean isFavorite) voidForce all pending notification events to be flushedgetName()Returns this data type manager's namegetPath()Get the program instance associated with this datatype managergetType()Returns this manager's archive typevoidinvalidateCache(boolean all) Clears all data caches.booleanReturns true if this DataTypeManager can be modified.voidlanguageChanged(TaskMonitor monitor) Update program-architecture information following a language upgrade/changeopenTransaction(String description) Open new transaction.voidprogramReady(int openMode, int currentRevision, TaskMonitor monitor) Callback from program made to each manager after the program has completed initialization.protected voidreplaceDataTypeIDs(long oldDataTypeID, long newDataTypeID) Replace all datatype uses external to the datatype manager if applicable.voidSave the current data organization to facilitate future change detection and upgrades.voidSets this data type manager's namevoidCallback from program used to indicate all manager have been created.protected voidsourceArchiveAdded(UniversalID sourceArchiveID) voidsourceArchiveChanged(UniversalID sourceArchiveID) intstartTransaction(String description) Starts a transaction for making changes in this data type manager.Methods inherited from class ghidra.program.database.data.ProgramBasedDataTypeManagerDB
clearAllSettings, clearSetting, deleteAddressRange, getInstanceSettingsNames, getLongSettingsValue, getSettings, getStringSettingsValue, initializeOtherAdapters, invalidateCache, isChangeAllowed, isEmptySetting, moveAddressRange, setLongSettingsValue, setSettings, setStringSettingsValueMethods inherited from class ghidra.program.database.data.DataTypeManagerDB
addDataType, addDataTypeManagerListener, addDataTypes, addDataTypeToDelete, addInvalidatedListener, allowsDefaultComponentSettings, associateDataTypeWithArchive, compilerSpecChanged, contains, containsCategory, createCategory, dataTypeSettingsChanged, dbError, disassociate, dispose, doSourceArchiveUpdates, findDataType, findDataTypeForID, findDataTypes, findDataTypes, findEnumValueNames, fixupComposites, getAddressMap, getAllComposites, getAllDataTypes, getAllDataTypes, getAllFunctionDefinitions, getAllStructures, getCallingConvention, getCallingConventionID, getCallingConventionName, getCategory, getCategory, getCategoryCount, getDataMap, getDataOrganization, getDataType, getDataType, getDataType, getDataType, getDataType, getDataTypeCount, getDataTypes, getDataTypes, getDataTypesContaining, getDefaultCallingConvention, getDefinedCallingConventionNames, getFavorites, getID, getKnownCallingConventionNames, getLastChangeTimeForMyManager, getLocalSourceArchive, getPointer, getPointer, getProgramArchitecture, getProgramArchitectureSummary, getProgramArchitectureSummary, getResolvedID, getRootCategory, getSourceArchive, getSourceArchive, getSourceArchives, getUniqueName, getUniversalID, getUnusedConflictName, getUnusedConflictName, getVariableStorageManager, handleDataOrganizationChange, hasDataOrganizationChange, isChanged, isCreatingDataType, isFavorite, isTransactionActive, migrateOldFlexArrayComponentsIfRequired, readDataOrganization, remove, removeDataTypeManagerListener, removeInvalidatedListener, removeSourceArchive, replaceDataType, replaceSourceArchive, resolve, resolveSourceArchive, setFavorite, setProgramArchitecture, updateID, updateLastChangeTime, updateSourceArchiveName, updateSourceArchiveNameMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface ghidra.program.model.data.DataTypeManager
addDataType, addDataTypeManagerListener, addDataTypes, addInvalidatedListener, allowsDefaultComponentSettings, associateDataTypeWithArchive, contains, containsCategory, createCategory, disassociate, findDataType, findDataTypeForID, findDataTypes, findDataTypes, findEnumValueNames, getAddressMap, getAllComposites, getAllDataTypes, getAllDataTypes, getAllFunctionDefinitions, getAllStructures, getCallingConvention, getCategory, getCategory, getCategoryCount, getDataOrganization, getDataType, getDataType, getDataType, getDataType, getDataType, getDataTypeCount, getDataTypes, getDataTypesContaining, getDefaultCallingConvention, getDefinedCallingConventionNames, getFavorites, getID, getKnownCallingConventionNames, getLastChangeTimeForMyManager, getLocalSourceArchive, getPointer, getPointer, getProgramArchitecture, getProgramArchitectureSummary, getResolvedID, getRootCategory, getSourceArchive, getSourceArchives, getUniqueName, getUniversalID, isFavorite, remove, removeDataTypeManagerListener, removeInvalidatedListener, removeSourceArchive, replaceDataType, resolve, resolveSourceArchive, setFavorite, updateSourceArchiveName, updateSourceArchiveNameMethods inherited from interface ghidra.program.database.ManagerDB
deleteAddressRange, dispose, moveAddressRange
-
Constructor Details
-
ProgramDataTypeManager
public ProgramDataTypeManager(DBHandle handle, AddressMap addrMap, int openMode, ErrorHandler errHandler, Lock lock, TaskMonitor monitor) throws CancelledException, VersionException, IOException Constructor- Parameters:
handle- open database handleaddrMap- the address mapopenMode- the program open mode (seeDBConstants)errHandler- the database io error handlerlock- the program synchronization lockmonitor- the progress monitor- Throws:
CancelledException- if the user cancels an upgradeVersionException- if the database does not match the expected version.IOException- if a database IO error occurs.
-
-
Method Details
-
saveDataOrganization
Save the current data organization to facilitate future change detection and upgrades. This method must be invoked byProgramDBduring the final stage of program creation (i.e., openMode == CREATE).- Overrides:
saveDataOrganizationin classDataTypeManagerDB- Throws:
IOException- if failure occured while saving data organization.
-
dataSettingChanged
Description copied from class:ProgramBasedDataTypeManagerDBProvides notification when a data instance setting has changed at a specific address.- Specified by:
dataSettingChangedin classProgramBasedDataTypeManagerDB- Parameters:
dataAddr- data address
-
allowsDefaultBuiltInSettings
public boolean allowsDefaultBuiltInSettings()Description copied from interface:DataTypeManagerDetermine if settings are supported for BuiltIn datatypes within this datatype manager.- Specified by:
allowsDefaultBuiltInSettingsin interfaceDataTypeManager- Overrides:
allowsDefaultBuiltInSettingsin classDataTypeManagerDB- Returns:
- true if BuiltIn Settings are permitted
-
setProgram
Description copied from interface:ManagerDBCallback from program used to indicate all manager have been created. When this method is invoked, all managers have been instantiated but may not be fully initialized.- Specified by:
setProgramin interfaceManagerDB- Parameters:
p- the program is set when all the initializations have been completed.
-
invalidateCache
Description copied from interface:ManagerDBClears all data caches.- Specified by:
invalidateCachein interfaceManagerDB- Parameters:
all- if false, some managers may not need to update their cache if they can tell that its not necessary. If this flag is true, then all managers should clear their cache no matter what.- Throws:
IOException- if a database io error occurs.
-
programReady
public void programReady(int openMode, int currentRevision, TaskMonitor monitor) throws IOException, CancelledException Description copied from interface:ManagerDBCallback from program made to each manager after the program has completed initialization. This method may be used by managers to perform additional upgrading which may have been deferred.- Specified by:
programReadyin interfaceManagerDB- Parameters:
openMode- the mode that the program is being opened.currentRevision- current program revision. If openMode is UPGRADE, this value reflects the pre-upgrade value.monitor- the task monitor to use in any upgrade operations.- Throws:
IOException- if a database io error occurs.CancelledException- if the user cancelled the operation via the task monitor.
-
languageChanged
Update program-architecture information following a language upgrade/change- Parameters:
monitor- task monitor- Throws:
IOException- if IO error occursCancelledException- if task monitor cancelled
-
getName
Description copied from interface:DataTypeManagerReturns this data type manager's name- Specified by:
getNamein interfaceDataTypeManager- Returns:
- the name
-
setName
Description copied from interface:DataTypeManagerSets this data type manager's name- Specified by:
setNamein interfaceDataTypeManager- Parameters:
name- the new name- Throws:
InvalidNameException- if the given name is invalid (such as when null or empty)
-
sourceArchiveChanged
- Overrides:
sourceArchiveChangedin classDataTypeManagerDB
-
sourceArchiveAdded
- Overrides:
sourceArchiveAddedin classDataTypeManagerDB
-
dataTypeChanged
Description copied from class:DataTypeManagerDBNotification when data type is changed.- Overrides:
dataTypeChangedin classDataTypeManagerDB- Parameters:
dt- data type that is changedisAutoChange- true if change was an automatic change in response to another datatype's change (e.g., size, alignment).
-
dataTypeAdded
- Overrides:
dataTypeAddedin classDataTypeManagerDB
-
dataTypeReplaced
protected void dataTypeReplaced(long existingDtID, DataTypePath existingPath, DataType replacementDt) - Overrides:
dataTypeReplacedin classDataTypeManagerDB
-
dataTypeDeleted
- Overrides:
dataTypeDeletedin classDataTypeManagerDB
-
dataTypeMoved
- Overrides:
dataTypeMovedin classDataTypeManagerDB
-
dataTypeNameChanged
- Overrides:
dataTypeNameChangedin classDataTypeManagerDB
-
categoryCreated
- Overrides:
categoryCreatedin classDataTypeManagerDB
-
categoryRenamed
- Overrides:
categoryRenamedin classDataTypeManagerDB
-
categoryRemoved
- Overrides:
categoryRemovedin classDataTypeManagerDB
-
categoryMoved
- Overrides:
categoryMovedin classDataTypeManagerDB
-
favoritesChanged
- Overrides:
favoritesChangedin classDataTypeManagerDB
-
replaceDataTypeIDs
protected void replaceDataTypeIDs(long oldDataTypeID, long newDataTypeID) Description copied from class:DataTypeManagerDBReplace all datatype uses external to the datatype manager if applicable.- Specified by:
replaceDataTypeIDsin classDataTypeManagerDB- Parameters:
oldDataTypeID- old datatype IDnewDataTypeID- new datatype ID
-
deleteDataTypeIDs
protected void deleteDataTypeIDs(LinkedList<Long> deletedIds, TaskMonitor monitor) throws CancelledException Description copied from class:DataTypeManagerDBDelete all datatype uses external to the datatype manager if applicable.- Specified by:
deleteDataTypeIDsin classDataTypeManagerDB- Parameters:
deletedIds- old datatype IDs which were deletedmonitor- task monitor- Throws:
CancelledException- if operation cancelled
-
isUpdatable
public boolean isUpdatable()Description copied from interface:DataTypeManagerReturns true if this DataTypeManager can be modified.- Specified by:
isUpdatablein interfaceDataTypeManager- Overrides:
isUpdatablein classDataTypeManagerDB- Returns:
- true if this DataTypeMangaer can be modified.
-
openTransaction
Description copied from interface:DataTypeManagerOpen new transaction. This should generally be done with a try-with-resources block:try (Transaction tx = dtm.openTransaction(description)) { // ... Do something }- Specified by:
openTransactionin interfaceDataTypeManager- Parameters:
description- a short description of the changes to be made.- Returns:
- transaction object
- Throws:
IllegalStateException- if thisDataTypeManagerhas already been closed.
-
startTransaction
Description copied from interface:DataTypeManagerStarts a transaction for making changes in this data type manager.- Specified by:
startTransactionin interfaceDataTypeManager- Parameters:
description- a short description of the changes to be made.- Returns:
- the transaction ID
-
flushEvents
public void flushEvents()Description copied from interface:DataTypeManagerForce all pending notification events to be flushed- Specified by:
flushEventsin interfaceDataTypeManager
-
endTransaction
public void endTransaction(int transactionID, boolean commit) Description copied from interface:DataTypeManagerEnds the current transaction- Specified by:
endTransactionin interfaceDataTypeManager- Parameters:
transactionID- id of the transaction to endcommit- true if changes are committed, false if changes in transaction are revoked
-
close
public void close()Description copied from interface:DataTypeManagerCloses this dataType manager- Specified by:
closein interfaceDataTypeManager- Overrides:
closein classDataTypeManagerDB
-
getProgram
Description copied from interface:ProgramBasedDataTypeManagerGet the program instance associated with this datatype manager- Specified by:
getProgramin interfaceProgramBasedDataTypeManager- Returns:
- program instance associated with this datatype manager
-
getDomainFile
- Specified by:
getDomainFilein interfaceDomainFileBasedDataTypeManager
-
getDomainFileID
- Specified by:
getDomainFileIDin classDataTypeManagerDB
-
getPath
- Specified by:
getPathin interfaceFileBasedDataTypeManager- Specified by:
getPathin classDataTypeManagerDB
-
getType
Description copied from interface:DataTypeManagerReturns this manager's archive type- Specified by:
getTypein interfaceDataTypeManager- Returns:
- the type
-