Class DBTraceDataTypeManager
- All Implemented Interfaces:
ErrorHandler,DataTypeManager,DomainFileBasedDataTypeManager,FileBasedDataTypeManager,ProgramBasedDataTypeManager,DBTraceManager,TraceBasedDataTypeManager
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final ReadWriteLockNOTE: This "read-write" lock is actually just a compatibility wrapper around theLockfor the entire trace database.protected final InternalTracePlatformprotected final DBTraceFields inherited from class ghidra.program.database.data.DataTypeManagerDB
addrMap, dbHandle, DEFAULT_CALLING_CONVENTION_ID, defaultListener, errHandler, 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
ConstructorsConstructorDescriptionDBTraceDataTypeManager(DBHandle dbh, OpenMode openMode, ReadWriteLock lock, TaskMonitor monitor, DBTrace trace, InternalTracePlatform platform) -
Method Summary
Modifier and TypeMethodDescriptionbooleanDetermine if settings are supported for BuiltIn datatypes within this datatype manager.protected voidcategoryCreated(Category createdCategory) protected voidcategoryMoved(CategoryPath oldPath, Category category) protected voidcategoryRemoved(Category parent, String name, long deletedID) protected voidcategoryRenamed(CategoryPath oldPath, Category category) voidclose()Closes this dataType managerprotected voiddataSettingChanged(Address address) Provides notification when a data instance setting has changed at a specific address.protected voiddataTypeAdded(DataType addedType, DataType sourceType) voiddataTypeChanged(DataType dataType, boolean isAutoChange) Notification when data type is changed.protected voiddataTypeDeleted(long deletedID, DataTypePath deletedPath) protected voiddataTypeMoved(DataType type, DataTypePath oldPath, DataTypePath newPath) protected voiddataTypeNameChanged(DataType type, String oldName) protected voiddataTypeReplaced(long replacedID, DataTypePath replacedPath, DataType replacementType) protected voiddeleteDataTypesUsed(Set<Long> deletedIds) Allow extensions to perform any necessary fixups for all datatype removals listed.booleanendTransaction(int transactionID, boolean commit) Ends the current transaction.voidForce all pending notification events to be flushedprotected StringgetName()Returns this data type manager's namegetPath()Get the platform for which this data type manager is providedgetTrace()Get the trace of which this data type manager is a partgetType()Returns this manager's archive typevoidinvalidateCache(boolean all) Invalidate this manager's cachesbooleanReturns true if this DataTypeManager can be modified.openTransaction(String description) Open new transaction.protected voidreplaceDataTypesUsed(Map<Long, Long> dataTypeReplacementMap) Allow extensions to perform any neccessary fixups to address all datatype replacements.voidSets this data type manager's nameprotected 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, getDataSettingsAddress, getInstanceSettingsNames, getLongSettingsValue, getSettings, getStringSettingsValue, initializeOtherAdapters, invalidateCache, isChangeAllowed, isEmptySetting, moveAddressRange, setLongSettingsValue, setSettings, setStringSettingsValueMethods inherited from class ghidra.program.database.data.DataTypeManagerDB
addDataType, addDataTypeManagerListener, addDataTypes, addDataTypeToDelete, addDataTypeToReplace, addInvalidatedListener, allowsDefaultComponentSettings, associateDataTypeWithArchive, compilerSpecChanged, contains, containsCategory, createCategory, dataTypeSettingsChanged, dbError, dedupeAllConflicts, dedupeConflicts, disassociate, dispose, doSourceArchiveUpdates, favoritesChanged, findDataType, findDataTypeForID, findDataTypes, findDataTypes, findEnumValueNames, fixupComposites, getAddressMap, getAllComposites, getAllDataTypes, getAllDataTypes, getAllFunctionDefinitions, getAllStructures, getCallingConvention, getCallingConventionID, getCallingConventionName, getCategory, getCategory, getCategoryCount, getChildIds, 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, hasParent, isChanged, isCreatingDataType, isFavorite, isTransactionActive, migrateOldFlexArrayComponentsIfRequired, notifyRestored, readDataOrganization, remove, remove, removeDataTypeManagerListener, removeInvalidatedListener, removeParentChildRecord, removeSourceArchive, replaceDataType, replaceSourceArchive, resolve, resolveSourceArchive, saveDataOrganization, 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, remove, remove, removeDataTypeManagerListener, removeInvalidatedListener, removeSourceArchive, replaceDataType, resolve, resolveSourceArchive, setFavorite, updateSourceArchiveName, updateSourceArchiveName, withTransaction, withTransactionMethods inherited from interface db.util.ErrorHandler
dbErrorMethods inherited from interface ghidra.program.model.data.ProgramBasedDataTypeManager
clearAllSettings, clearSetting, deleteAddressRange, getInstanceSettingsNames, getLongSettingsValue, getSettings, getStringSettingsValue, isChangeAllowed, isEmptySetting, moveAddressRange, setLongSettingsValue, setSettings, setStringSettingsValueMethods inherited from interface ghidra.trace.model.data.TraceBasedDataTypeManager
addType, getProgram, replaceType, resolveType
-
Field Details
-
lock
NOTE: This "read-write" lock is actually just a compatibility wrapper around theLockfor the entire trace database. There was a time when I dreamed of using an actual read-write lock (though it's not known if that'd actually achieve any appreciable speed up); however, inheriting the existing DataTypeManager implementation required its lock to be used throughout the database. Rather than convert all my code (and lose the distinction of where I need write vs. read locks), I just wrapped the API. So no, this code does not refer to the wrapper, but it does still use the lock. I keep a reference to it here in case I ever need it. -
trace
-
platform
-
-
Constructor Details
-
DBTraceDataTypeManager
public DBTraceDataTypeManager(DBHandle dbh, OpenMode openMode, ReadWriteLock lock, TaskMonitor monitor, DBTrace trace, InternalTracePlatform platform) throws CancelledException, VersionException, IOException
-
-
Method Details
-
dataSettingChanged
Description copied from class:ProgramBasedDataTypeManagerDBProvides notification when a data instance setting has changed at a specific address.- Specified by:
dataSettingChangedin classProgramBasedDataTypeManagerDB- Parameters:
address- 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
-
invalidateCache
public void invalidateCache(boolean all) Description copied from interface:DBTraceManagerInvalidate this manager's caches- Specified by:
invalidateCachein interfaceDBTraceManager- Parameters:
all- probably nothing. Check out implementations ofManagerDB.invalidateCache(boolean).
-
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)
-
getPlatform
Description copied from interface:TraceBasedDataTypeManagerGet the platform for which this data type manager is provided- Specified by:
getPlatformin interfaceTraceBasedDataTypeManager- Returns:
- the platform
-
sourceArchiveChanged
- Overrides:
sourceArchiveChangedin classDataTypeManagerDB
-
sourceArchiveAdded
- Overrides:
sourceArchiveAddedin classDataTypeManagerDB
-
dataTypeChanged
Description copied from class:DataTypeManagerDBNotification when data type is changed.- Overrides:
dataTypeChangedin classDataTypeManagerDB- Parameters:
dataType- 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 replacedID, DataTypePath replacedPath, DataType replacementType) - Overrides:
dataTypeReplacedin classDataTypeManagerDB
-
dataTypeMoved
- Overrides:
dataTypeMovedin classDataTypeManagerDB
-
dataTypeNameChanged
- Overrides:
dataTypeNameChangedin classDataTypeManagerDB
-
dataTypeDeleted
- Overrides:
dataTypeDeletedin classDataTypeManagerDB
-
categoryCreated
- Overrides:
categoryCreatedin classDataTypeManagerDB
-
categoryMoved
- Overrides:
categoryMovedin classDataTypeManagerDB
-
categoryRenamed
- Overrides:
categoryRenamedin classDataTypeManagerDB
-
categoryRemoved
- Overrides:
categoryRemovedin classDataTypeManagerDB
-
replaceDataTypesUsed
Description copied from class:DataTypeManagerDBAllow extensions to perform any neccessary fixups to address all datatype replacements.- Specified by:
replaceDataTypesUsedin classDataTypeManagerDB- Parameters:
dataTypeReplacementMap- map of datatype replacements (oldID maps to replacementID).
-
deleteDataTypesUsed
Description copied from class:DataTypeManagerDBAllow extensions to perform any necessary fixups for all datatype removals listed.- Specified by:
deleteDataTypesUsedin classDataTypeManagerDB- Parameters:
deletedIds- list of IDs for all datatypes which are getting removed.
-
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 boolean endTransaction(int transactionID, boolean commit) Description copied from interface:DataTypeManagerEnds the current transaction.NOTE: If multiple transactions are outstanding the full transaction will not be ended until all transactions have been ended. If any of the transactions indicate a false for
committhe transaction will ultimately be rolled-back when the final transaction is ended.NOTE: Use of rollback (
commit=falseshould be avoided unless absolutely necessary since it will incur overhead to revert changes and may rollback multiple concurrent transactions if they exist.NOTE: If this manager is part of a larger
DomainObjectits transactions may become entangled with other transactions at a higher level. In such cases, use of theDomainObjecttransaction interface is preferred. The return value from this method cannot be relied on in such cases.- Specified by:
endTransactionin interfaceDataTypeManager- Parameters:
transactionID- id of the transaction to endcommit- true if changes are committed, false if changes in transaction should be rolled back.- Returns:
- true if this invocation was the final transaction and all changes were comitted.
-
close
public void close()Description copied from interface:DataTypeManagerCloses this dataType manager- Specified by:
closein interfaceDataTypeManager- Overrides:
closein classDataTypeManagerDB
-
getTrace
Description copied from interface:TraceBasedDataTypeManagerGet the trace of which this data type manager is a part- Specified by:
getTracein interfaceTraceBasedDataTypeManager- Returns:
- the trace
-
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
-