mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-04 18:29:37 +02:00
GP-2236 Changed DataTypeDB clone implementations to return self if the specified datatype manager is unchanged. Makes consistent with javadoc and could improve resolve performance in some cases.
This commit is contained in:
parent
f57cf98f56
commit
5eed321004
35 changed files with 498 additions and 936 deletions
|
@ -300,16 +300,19 @@ abstract class DataTypeDB extends DatabaseObject implements DataType {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void setName(String name) throws InvalidNameException, DuplicateNameException {
|
||||
public void setName(String newName) throws InvalidNameException, DuplicateNameException {
|
||||
lock.acquire();
|
||||
try {
|
||||
checkDeleted();
|
||||
if (getName().equals(newName)) {
|
||||
return;
|
||||
}
|
||||
CategoryPath categoryPath = getCategoryPath();
|
||||
if (dataMgr.getDataType(categoryPath, name) != null) {
|
||||
throw new DuplicateNameException("DataType named " + name +
|
||||
if (dataMgr.getDataType(categoryPath, newName) != null) {
|
||||
throw new DuplicateNameException("DataType named " + newName +
|
||||
" already exists in category " + categoryPath.getPath());
|
||||
}
|
||||
doSetName(name);
|
||||
doSetName(newName);
|
||||
}
|
||||
finally {
|
||||
lock.release();
|
||||
|
@ -338,9 +341,12 @@ abstract class DataTypeDB extends DatabaseObject implements DataType {
|
|||
lock.acquire();
|
||||
try {
|
||||
checkDeleted();
|
||||
DataType type = dataMgr.getDataType(path, getName());
|
||||
if (type != null) {
|
||||
throw new DuplicateNameException("DataType named " + getDisplayName() +
|
||||
if (getCategoryPath().equals(path)) {
|
||||
return;
|
||||
}
|
||||
String currentName = getName();
|
||||
if (dataMgr.getDataType(path, currentName) != null) {
|
||||
throw new DuplicateNameException("DataType named " + currentName +
|
||||
" already exists in category " + path.getPath());
|
||||
}
|
||||
doSetCategoryPath(path);
|
||||
|
@ -374,7 +380,11 @@ abstract class DataTypeDB extends DatabaseObject implements DataType {
|
|||
lock.acquire();
|
||||
try {
|
||||
checkDeleted();
|
||||
if (dataMgr.getDataType(path, name) != null) {
|
||||
DataType dt = dataMgr.getDataType(path, name);
|
||||
if (dt != null) {
|
||||
if (dt == this) {
|
||||
return; // unchanged
|
||||
}
|
||||
throw new DuplicateNameException(
|
||||
"DataType named " + name + " already exists in category " + path.getPath());
|
||||
}
|
||||
|
|
|
@ -393,6 +393,9 @@ class EnumDB extends DataTypeDB implements Enum {
|
|||
|
||||
@Override
|
||||
public DataType clone(DataTypeManager dtm) {
|
||||
if (dtm == getDataTypeManager()) {
|
||||
return this;
|
||||
}
|
||||
EnumDataType enumDataType =
|
||||
new EnumDataType(getCategoryPath(), getName(), getLength(), getUniversalID(),
|
||||
getSourceArchive(), getLastChangeTime(), getLastChangeTimeInSourceArchive(), dtm);
|
||||
|
|
|
@ -223,6 +223,9 @@ class FunctionDefinitionDB extends DataTypeDB implements FunctionDefinition {
|
|||
|
||||
@Override
|
||||
public DataType clone(DataTypeManager dtm) {
|
||||
if (dtm == getDataTypeManager()) {
|
||||
return this;
|
||||
}
|
||||
return new FunctionDefinitionDataType(getCategoryPath(), getName(), this, getUniversalID(),
|
||||
getSourceArchive(), getLastChangeTime(), getLastChangeTimeInSourceArchive(), dtm);
|
||||
}
|
||||
|
|
|
@ -806,6 +806,9 @@ class StructureDB extends CompositeDB implements StructureInternal {
|
|||
*/
|
||||
@Override
|
||||
public Structure clone(DataTypeManager dtm) {
|
||||
if (dtm == getDataTypeManager()) {
|
||||
return this;
|
||||
}
|
||||
StructureDataType struct =
|
||||
new StructureDataType(getCategoryPath(), getName(), structLength, getUniversalID(),
|
||||
getSourceArchive(), getLastChangeTime(), getLastChangeTimeInSourceArchive(), dtm);
|
||||
|
|
|
@ -440,6 +440,9 @@ class UnionDB extends CompositeDB implements UnionInternal {
|
|||
|
||||
@Override
|
||||
public Union clone(DataTypeManager dtm) {
|
||||
if (dtm == getDataTypeManager()) {
|
||||
return this;
|
||||
}
|
||||
UnionDataType union = new UnionDataType(getCategoryPath(), getName(), getUniversalID(),
|
||||
getSourceArchive(), getLastChangeTime(), getLastChangeTimeInSourceArchive(), dtm);
|
||||
union.setDescription(getDescription());
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue