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:
ghidra1 2022-06-24 13:30:39 -04:00
parent f57cf98f56
commit 5eed321004
35 changed files with 498 additions and 936 deletions

View file

@ -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());
}

View file

@ -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);

View file

@ -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);
}

View file

@ -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);

View file

@ -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());