mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-09-28 17:11:11 -09:00
Merge remote-tracking branch 'origin/GP-7315-dragonmacher-dt-table-delete-bug'
This commit is contained in:
@@ -145,8 +145,10 @@ public class DBTraceDataTypeManager extends ProgramBasedDataTypeManagerDB
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void dataTypeDeleted(long deletedID, DataTypePath deletedPath) {
|
||||
super.dataTypeDeleted(deletedID, deletedPath);
|
||||
protected void dataTypeDeleted(long deletedID, DataType dataType) {
|
||||
super.dataTypeDeleted(deletedID, dataType);
|
||||
|
||||
DataTypePath deletedPath = dataType.getDataTypePath();
|
||||
trace.dataTypeDeleted(deletedID, deletedPath);
|
||||
}
|
||||
|
||||
|
||||
@@ -500,6 +500,14 @@ class ActiveDataTypeStores {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dataTypeRemoved(DataTypeManager dtm, DataType dt) {
|
||||
modCount++;
|
||||
for (DataTypeManagerChangeListener listener : dataTypeManagerListeners) {
|
||||
listener.dataTypeRemoved(dtm, dt);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dataTypeRemoved(DataTypeManager dtm, DataTypePath path) {
|
||||
modCount++;
|
||||
|
||||
@@ -126,6 +126,7 @@ public class DataTypesTableProvider extends ComponentProvider {
|
||||
if (!isConnected) {
|
||||
plugin.addDisconnectedTableProvider(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static DtFilterState getDtFilterState(DataTypeManagerPlugin plugin) {
|
||||
@@ -582,11 +583,15 @@ public class DataTypesTableProvider extends ComponentProvider {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dataTypeRemoved(DataTypeManager dtm, DataTypePath path) {
|
||||
DataType dt = dtm.getDataType(path);
|
||||
public void dataTypeRemoved(DataTypeManager dtm, DataType dt) {
|
||||
model.removeObject(dt);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dataTypeRemoved(DataTypeManager dtm, DataTypePath path) {
|
||||
// stub; use other version of dataTypeRemoved()
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dataTypeMoved(DataTypeManager dtm, DataTypePath oldPath,
|
||||
DataTypePath newPath) {
|
||||
@@ -670,6 +675,7 @@ public class DataTypesTableProvider extends ComponentProvider {
|
||||
ArchiveManager archiveManager = plugin.getArchiveManager();
|
||||
List<PersistentDataTypeArchive> archives = archiveManager.getOpenArchives();
|
||||
for (PersistentDataTypeArchive archive : archives) {
|
||||
|
||||
DataTypeManager dtm = archive.getDataTypeManager();
|
||||
if (dtm instanceof ProgramBasedDataTypeManager) {
|
||||
continue;
|
||||
|
||||
@@ -24,8 +24,8 @@ import db.util.ErrorHandler;
|
||||
import ghidra.framework.data.OpenMode;
|
||||
import ghidra.framework.model.RuntimeIOException;
|
||||
import ghidra.program.database.DBStringMapAdapter;
|
||||
import ghidra.program.database.dtarchive.DataTypeStoreDBModule;
|
||||
import ghidra.program.database.dtarchive.DataTypeArchiveDB;
|
||||
import ghidra.program.database.dtarchive.DataTypeStoreDBModule;
|
||||
import ghidra.program.model.data.*;
|
||||
import ghidra.program.model.dtarchive.DataTypeArchive;
|
||||
import ghidra.program.model.lang.LanguageVersionException;
|
||||
@@ -325,8 +325,9 @@ public abstract class ArchiveDataTypeManagerDB extends DataTypeManagerDB
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void dataTypeDeleted(long deletedID, DataTypePath deletedDataTypePath) {
|
||||
super.dataTypeDeleted(deletedID, deletedDataTypePath);
|
||||
protected void dataTypeDeleted(long deletedID, DataType dataType) {
|
||||
super.dataTypeDeleted(deletedID, dataType);
|
||||
DataTypePath deletedDataTypePath = dataType.getDataTypePath();
|
||||
archive.dataTypeChanged(deletedID, ProgramEvent.DATA_TYPE_REMOVED, false,
|
||||
deletedDataTypePath, null);
|
||||
}
|
||||
|
||||
@@ -2425,7 +2425,7 @@ abstract public class DataTypeManagerDB implements DataTypeManager {
|
||||
// possible updates to other datatypes that would need to trigger such a modification time.
|
||||
|
||||
if (notify) {
|
||||
dataTypeDeleted(dataTypeID, dataType.getDataTypePath());
|
||||
dataTypeDeleted(dataTypeID, dataType);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3592,13 +3592,15 @@ abstract public class DataTypeManagerDB implements DataTypeManager {
|
||||
replacementDt.getDataTypePath(), replacementDt);
|
||||
}
|
||||
|
||||
protected void dataTypeDeleted(long deletedID, DataTypePath deletedDataTypePath) {
|
||||
CategoryDB category = (CategoryDB) getCategory(deletedDataTypePath.getCategoryPath());
|
||||
category.dataTypeRemoved(deletedDataTypePath.getDataTypeName());
|
||||
removeDataTypeFromSortedList(deletedDataTypePath);
|
||||
protected void dataTypeDeleted(long deletedID, DataType dataType) {
|
||||
|
||||
DataTypePath deletedDtPath = dataType.getDataTypePath();
|
||||
CategoryDB category = (CategoryDB) getCategory(deletedDtPath.getCategoryPath());
|
||||
category.dataTypeRemoved(deletedDtPath.getDataTypeName());
|
||||
removeDataTypeFromSortedList(deletedDtPath);
|
||||
enumValueMap = null;
|
||||
updateLastChangeTime();
|
||||
defaultListener.dataTypeRemoved(this, deletedDataTypePath);
|
||||
defaultListener.dataTypeRemoved(this, dataType);
|
||||
}
|
||||
|
||||
protected void dataTypeMoved(DataType dt, DataTypePath oldDataTypePath,
|
||||
|
||||
@@ -198,8 +198,10 @@ public class ProgramDataTypeManager extends ProgramBasedDataTypeManagerDB
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void dataTypeDeleted(long deletedID, DataTypePath deletedDataTypePath) {
|
||||
super.dataTypeDeleted(deletedID, deletedDataTypePath);
|
||||
protected void dataTypeDeleted(long deletedID, DataType dataType) {
|
||||
super.dataTypeDeleted(deletedID, dataType);
|
||||
|
||||
DataTypePath deletedDataTypePath = dataType.getDataTypePath();
|
||||
program.dataTypeChanged(deletedID, ProgramEvent.DATA_TYPE_REMOVED, false,
|
||||
deletedDataTypePath, null);
|
||||
}
|
||||
|
||||
@@ -76,6 +76,23 @@ public interface DataTypeManagerChangeListener {
|
||||
*/
|
||||
public void dataTypeRemoved(DataTypeManager dtm, DataTypePath path);
|
||||
|
||||
/**
|
||||
* Notification when data type is removed.
|
||||
* <P>
|
||||
* This method has been added to allow clients access the actual data type that was deleted. By
|
||||
* default this method simply calls the original
|
||||
* {@link #dataTypeRemoved(DataTypeManager, DataTypePath)} so existing clients don't need to
|
||||
* implement the new method.
|
||||
*
|
||||
* @param dtm data type manager for the given category paths.
|
||||
* @param dataType the removed datatype.
|
||||
* @since 12.3
|
||||
*/
|
||||
public default void dataTypeRemoved(DataTypeManager dtm, DataType dataType) {
|
||||
DataTypePath dtPath = dataType.getDataTypePath();
|
||||
dataTypeRemoved(dtm, dtPath);
|
||||
}
|
||||
|
||||
/**
|
||||
* Notification when data type is renamed.
|
||||
*
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
@@ -140,6 +140,19 @@ public class DataTypeManagerChangeListenerHandler implements DataTypeManagerChan
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dataTypeRemoved(DataTypeManager dtm, DataType dataType) {
|
||||
|
||||
if (listenerList.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
invokeLater(() -> {
|
||||
for (DataTypeManagerChangeListener listener : listenerList) {
|
||||
listener.dataTypeRemoved(dtm, dataType);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dataTypeRemoved(DataTypeManager dtm, DataTypePath path) {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user