Class DataTypeImpl
- java.lang.Object
-
- ghidra.program.model.data.AbstractDataType
-
- ghidra.program.model.data.DataTypeImpl
-
- All Implemented Interfaces:
DataType
- Direct Known Subclasses:
ArrayDataType
,BuiltIn
,DefaultDataType
,GenericDataType
,MissingBuiltInDataType
public abstract class DataTypeImpl extends AbstractDataType
Base implementation for dataTypes.
-
-
Field Summary
Fields Modifier and Type Field Description protected Settings
defaultSettings
-
Fields inherited from class ghidra.program.model.data.AbstractDataType
categoryPath, dataMgr, name
-
Fields inherited from interface ghidra.program.model.data.DataType
CONFLICT_SUFFIX, DEFAULT, NO_LAST_CHANGE_TIME, NO_SOURCE_SYNC_TIME, VOID
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
DataTypeImpl(CategoryPath path, java.lang.String name, DataTypeManager dataMgr)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addParent(DataType dt)
Inform this datatype that it has the given parentboolean
equals(java.lang.Object obj)
int
getAlignment()
Gets the alignment to be used when aligning this datatype within another datatype.Settings
getDefaultSettings()
Gets the default settings for this datatype.long
getLastChangeTime()
Get the timestamp corresponding to the last time this type was changed within its datatype managerlong
getLastChangeTimeInSourceArchive()
Get the timestamp corresponding to the last time this type was sync'd within its source archiveDataType[]
getParents()
Get the parents of this datatypejava.lang.String
getPathName()
Get the full category path name that includes this datatype's name.SettingsDefinition[]
getSettingsDefinitions()
Gets a list of all the settingsDefinitions used by this datatype.SourceArchive
getSourceArchive()
Get the source archive where this type originatedUniversalID
getUniversalID()
Get the universal ID for this datatype.java.lang.Class<?>
getValueClass(Settings settings)
Get the Class of the value to be returned by this datatype.int
hashCode()
protected void
notifyAlignmentChanged()
Notify all parents that this datatype's alignment has changedprotected void
notifyDeleted()
Notify all parents that this datatype has been deletedprotected void
notifyNameChanged(java.lang.String oldName)
Notify all parents that this datatype's name has changedprotected void
notifyParents(java.util.function.Consumer<DataType> consumer)
protected void
notifyReplaced(DataType replacement)
Notify any parents that I have been replaced.protected void
notifySizeChanged()
Notify all parents that the size of this datatype has changed or other significant change that may affect a parent containing this datatype.void
removeParent(DataType dt)
Remove a parent datatypevoid
replaceWith(DataType dataType)
For datatypes that support change, this method replaces the internals of this datatype with the internals of the given datatype.void
setDefaultSettings(Settings settings)
Set the default settings for this datatype.void
setDescription(java.lang.String description)
Sets a String briefly describing this DataType.void
setLastChangeTime(long lastChangeTime)
Sets the lastChangeTime for this datatype.void
setLastChangeTimeInSourceArchive(long lastChangeTimeInSourceArchive)
Sets the lastChangeTimeInSourceArchive for this datatype.void
setSourceArchive(SourceArchive archive)
Set the source archive where this type originated-
Methods inherited from class ghidra.program.model.data.AbstractDataType
dataTypeAlignmentChanged, dataTypeDeleted, dataTypeNameChanged, dataTypeReplaced, dataTypeSizeChanged, dependsOn, encodeRepresentation, encodeValue, getCategoryPath, getDataOrganization, getDataTypeManager, getDataTypePath, getDefaultAbbreviatedLabelPrefix, getDefaultLabelPrefix, getDefaultLabelPrefix, getDefaultOffcutLabelPrefix, getDisplayName, getDocs, getMnemonic, getName, hasLanguageDependantLength, isDeleted, isEncodable, isNotYetDefined, isZeroLength, setCategoryPath, setName, setNameAndCategory, toString
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface ghidra.program.model.data.DataType
clone, copy, getDescription, getLength, getRepresentation, getValue, isEquivalent
-
-
-
-
Field Detail
-
defaultSettings
protected Settings defaultSettings
-
-
Constructor Detail
-
DataTypeImpl
protected DataTypeImpl(CategoryPath path, java.lang.String name, DataTypeManager dataMgr)
-
-
Method Detail
-
getValueClass
public java.lang.Class<?> getValueClass(Settings settings)
Description copied from interface:DataType
Get the Class of the value to be returned by this datatype.- Parameters:
settings
- the relevant settings to use or null for default.- Returns:
- Class of the value to be returned by this datatype or null if it can vary or is unspecified. Types which correspond to a string or char array will return the String class.
-
getDefaultSettings
public Settings getDefaultSettings()
Description copied from interface:DataType
Gets the default settings for this datatype.- Returns:
- the default settings for this datatype.
-
getSettingsDefinitions
public SettingsDefinition[] getSettingsDefinitions()
Description copied from interface:DataType
Gets a list of all the settingsDefinitions used by this datatype.- Returns:
- a list of the settingsDefinitions used by this datatype.
-
setDefaultSettings
public void setDefaultSettings(Settings settings)
Description copied from interface:DataType
Set the default settings for this datatype.TODO: This method is reserved for internal DB use.
- Parameters:
settings
- the settings to be used as this dataTypes default settings.
-
getPathName
public java.lang.String getPathName()
Description copied from interface:DataType
Get the full category path name that includes this datatype's name.If the category is null, then this just the datatype's name is returned.
- Specified by:
getPathName
in interfaceDataType
- Overrides:
getPathName
in classAbstractDataType
- Returns:
- the path, or just this type's name
-
getAlignment
public int getAlignment()
Description copied from interface:DataType
Gets the alignment to be used when aligning this datatype within another datatype.- Returns:
- this datatype's alignment.
-
addParent
public void addParent(DataType dt)
Description copied from interface:DataType
Inform this datatype that it has the given parentTODO: This method is reserved for internal DB use.
- Specified by:
addParent
in interfaceDataType
- Overrides:
addParent
in classAbstractDataType
- Parameters:
dt
- parent datatype
-
removeParent
public void removeParent(DataType dt)
Description copied from interface:DataType
Remove a parent datatypeTODO: This method is reserved for internal DB use.
- Specified by:
removeParent
in interfaceDataType
- Overrides:
removeParent
in classAbstractDataType
- Parameters:
dt
- parent datatype
-
getParents
public DataType[] getParents()
Description copied from interface:DataType
Get the parents of this datatype- Specified by:
getParents
in interfaceDataType
- Overrides:
getParents
in classAbstractDataType
- Returns:
- an array of parents of this datatype
-
notifySizeChanged
protected void notifySizeChanged()
Notify all parents that the size of this datatype has changed or other significant change that may affect a parent containing this datatype.
-
notifyAlignmentChanged
protected void notifyAlignmentChanged()
Notify all parents that this datatype's alignment has changed
-
notifyNameChanged
protected void notifyNameChanged(java.lang.String oldName)
Notify all parents that this datatype's name has changed- Parameters:
oldName
-
-
notifyDeleted
protected void notifyDeleted()
Notify all parents that this datatype has been deleted
-
notifyReplaced
protected void notifyReplaced(DataType replacement)
Notify any parents that I have been replaced.- Parameters:
replacement
- replacement data type
-
notifyParents
protected final void notifyParents(java.util.function.Consumer<DataType> consumer)
-
getLastChangeTime
public long getLastChangeTime()
Description copied from interface:DataType
Get the timestamp corresponding to the last time this type was changed within its datatype manager- Specified by:
getLastChangeTime
in interfaceDataType
- Overrides:
getLastChangeTime
in classAbstractDataType
- Returns:
- timestamp of last change within datatype manager
-
getLastChangeTimeInSourceArchive
public long getLastChangeTimeInSourceArchive()
Description copied from interface:DataType
Get the timestamp corresponding to the last time this type was sync'd within its source archive- Specified by:
getLastChangeTimeInSourceArchive
in interfaceDataType
- Overrides:
getLastChangeTimeInSourceArchive
in classAbstractDataType
- Returns:
- timestamp of last sync with source archive
-
getSourceArchive
public SourceArchive getSourceArchive()
Description copied from interface:DataType
Get the source archive where this type originated- Specified by:
getSourceArchive
in interfaceDataType
- Overrides:
getSourceArchive
in classAbstractDataType
- Returns:
- source archive object
-
setSourceArchive
public void setSourceArchive(SourceArchive archive)
Description copied from interface:DataType
Set the source archive where this type originated- Specified by:
setSourceArchive
in interfaceDataType
- Overrides:
setSourceArchive
in classAbstractDataType
- Parameters:
archive
- source archive object
-
getUniversalID
public UniversalID getUniversalID()
Description copied from interface:DataType
Get the universal ID for this datatype.This value is intended to be a unique identifier across all programs and archives. The same ID indicates that two datatypes were originally the same one. Keep in mind names, categories, and component makeup may differ and have changed since there origin.
- Specified by:
getUniversalID
in interfaceDataType
- Overrides:
getUniversalID
in classAbstractDataType
- Returns:
- datatype UniversalID
-
replaceWith
public void replaceWith(DataType dataType)
Description copied from interface:DataType
For datatypes that support change, this method replaces the internals of this datatype with the internals of the given datatype.The datatypes must be of the same "type" (i.e. structure can only be replacedWith another structure.
- Specified by:
replaceWith
in interfaceDataType
- Overrides:
replaceWith
in classAbstractDataType
-
setLastChangeTime
public void setLastChangeTime(long lastChangeTime)
Description copied from interface:DataType
Sets the lastChangeTime for this datatype.Normally, this is updated automatically when a datatype is changed, but when committing or updating while synchronizing an archive, the lastChangeTime may need to be updated externally.
- Specified by:
setLastChangeTime
in interfaceDataType
- Overrides:
setLastChangeTime
in classAbstractDataType
- Parameters:
lastChangeTime
- the time to use as the lastChangeTime for this datatype
-
setLastChangeTimeInSourceArchive
public void setLastChangeTimeInSourceArchive(long lastChangeTimeInSourceArchive)
Description copied from interface:DataType
Sets the lastChangeTimeInSourceArchive for this datatype.This is used by when a datatype change is committed back to its source archive.
- Specified by:
setLastChangeTimeInSourceArchive
in interfaceDataType
- Overrides:
setLastChangeTimeInSourceArchive
in classAbstractDataType
- Parameters:
lastChangeTimeInSourceArchive
- the time to use as the lastChangeTimeInSourceArchive for this datatype
-
setDescription
public void setDescription(java.lang.String description) throws java.lang.UnsupportedOperationException
Sets a String briefly describing this DataType.
If a data type that extends this class wants to allow the description to be changed, then it must override this method.- Specified by:
setDescription
in interfaceDataType
- Overrides:
setDescription
in classAbstractDataType
- Parameters:
description
- a one-liner describing this DataType.- Throws:
java.lang.UnsupportedOperationException
- if the description is not allowed to be set for this data type.
-
hashCode
public int hashCode()
- Overrides:
hashCode
in classjava.lang.Object
-
equals
public final boolean equals(java.lang.Object obj)
- Overrides:
equals
in classjava.lang.Object
-
-