Additional datatype resolve cleanup

This commit is contained in:
ghidra1 2020-06-04 14:07:29 -04:00
parent 7f09488133
commit 1f9bd91fcb
5 changed files with 11 additions and 19 deletions

View file

@ -276,13 +276,13 @@ abstract class CompositeDB extends DataTypeDB implements Composite {
}
}
protected DataType doCheckedResolve(DataType dt, DataTypeConflictHandler handler)
protected DataType doCheckedResolve(DataType dt)
throws DataTypeDependencyException {
if (dt instanceof Pointer) {
pointerPostResolveRequired = true;
return resolve(((Pointer) dt).newPointer(DataType.DEFAULT));
}
dt = resolve(dt, handler);
dt = resolve(dt);
checkAncestry(dt);
return dt;
}

View file

@ -268,15 +268,11 @@ abstract class DataTypeDB extends DatabaseObject implements DataType, ChangeList
}
protected DataType resolve(DataType dt) {
return resolve(dt, dataMgr.getDependencyConflictHandler());
}
protected DataType resolve(DataType dt, DataTypeConflictHandler handler) {
// complex types should keep equivalence checks to a minimum while resolving
// and when post-resolve required for pointers
resolving = true;
try {
dt = dataMgr.resolve(dt, handler);
dt = dataMgr.resolve(dt, dataMgr.getDependencyConflictHandler());
}
finally {
resolving = false;

View file

@ -260,7 +260,7 @@ class FunctionDefinitionDB extends DataTypeDB implements FunctionDefinition {
for (int i = 0; i < args.length; i++) {
DataType type =
ParameterDefinitionImpl.validateDataType(args[i].getDataType(), dataMgr, false);
DataType resolvedDt = resolve(type, dataMgr.getDependencyConflictHandler());
DataType resolvedDt = resolve(type);
paramAdapter.createRecord(dataMgr.getID(resolvedDt), key, i, args[i].getName(),
args[i].getComment(), args[i].getLength());
resolvedDt.addParent(this);
@ -287,7 +287,7 @@ class FunctionDefinitionDB extends DataTypeDB implements FunctionDefinition {
if (type == null) {
type = DataType.DEFAULT;
}
DataType resolvedDt = resolve(type, dataMgr.getDependencyConflictHandler());
DataType resolvedDt = resolve(type);
record.setLongValue(FunctionDefinitionDBAdapter.FUNCTION_DEF_RETURN_ID_COL,
dataMgr.getID(resolvedDt));
funDefAdapter.updateRecord(record, true);
@ -472,7 +472,7 @@ class FunctionDefinitionDB extends DataTypeDB implements FunctionDefinition {
param.getDataType().removeParent(this);
paramAdapter.removeRecord(param.getKey());
}
DataType rdt = resolve(dt, dataMgr.getDependencyConflictHandler());
DataType rdt = resolve(dt);
rdt.addParent(this);
paramAdapter.createRecord(dataMgr.getID(rdt), key, ordinal, name, comment,
dt.getLength());

View file

@ -115,7 +115,7 @@ class StructureDB extends CompositeDB implements Structure {
if (validateAlignAndNotify) {
validateDataType(dataType);
dataType = resolve(dataType, null);
dataType = resolve(dataType);
checkAncestry(dataType);
}
@ -172,7 +172,7 @@ class StructureDB extends CompositeDB implements Structure {
if (validateAlignAndNotify) {
validateDataType(dataType);
dataType = resolve(dataType, null);
dataType = resolve(dataType);
if (isInvalidFlexArrayDataType(dataType)) {
throw new IllegalArgumentException(
"Unsupported flexType: " + dataType.getDisplayName());
@ -1187,18 +1187,16 @@ class StructureDB extends CompositeDB implements Structure {
void doReplaceWith(Structure struct, boolean notify)
throws DataTypeDependencyException, IOException {
DataTypeConflictHandler handler = dataMgr.getDependencyConflictHandler();
// pre-resolved component types to catch dependency issues early
DataTypeComponent flexComponent = struct.getFlexibleArrayComponent();
DataTypeComponent[] otherComponents = struct.getDefinedComponents();
DataType[] resolvedDts = new DataType[otherComponents.length];
for (int i = 0; i < otherComponents.length; i++) {
resolvedDts[i] = doCheckedResolve(otherComponents[i].getDataType(), handler);
resolvedDts[i] = doCheckedResolve(otherComponents[i].getDataType());
}
DataType resolvedFlexDt = null;
if (flexComponent != null) {
resolvedFlexDt = doCheckedResolve(flexComponent.getDataType(), handler);
resolvedFlexDt = doCheckedResolve(flexComponent.getDataType());
if (isInvalidFlexArrayDataType(resolvedFlexDt)) {
throw new IllegalArgumentException(
"Unsupported flexType: " + resolvedFlexDt.getDisplayName());

View file

@ -266,13 +266,11 @@ class UnionDB extends CompositeDB implements Union {
void doReplaceWith(Union union, boolean notify)
throws DataTypeDependencyException {
DataTypeConflictHandler handler = dataMgr.getDependencyConflictHandler();
// pre-resolved component types to catch dependency issues early
DataTypeComponent[] otherComponents = union.getComponents();
DataType[] resolvedDts = new DataType[otherComponents.length];
for (int i = 0; i < otherComponents.length; i++) {
resolvedDts[i] = doCheckedResolve(otherComponents[i].getDataType(), handler);
resolvedDts[i] = doCheckedResolve(otherComponents[i].getDataType());
checkAncestry(resolvedDts[i]);
}