mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-05-31 14:20:11 +08:00
Fixed bad comparator; updated the table update job to not fail for
sorting exceptions
This commit is contained in:
+14
-7
@@ -68,8 +68,8 @@ public class TableUpdateJob<T> {
|
|||||||
|
|
||||||
private TableData<T> sourceData;
|
private TableData<T> sourceData;
|
||||||
private TableData<T> updatedData;
|
private TableData<T> updatedData;
|
||||||
private boolean disableSubFiltering = SystemUtilities.getBooleanProperty(
|
private boolean disableSubFiltering = SystemUtilities
|
||||||
RowObjectFilterModel.SUB_FILTERING_DISABLED_PROPERTY, false);
|
.getBooleanProperty(RowObjectFilterModel.SUB_FILTERING_DISABLED_PROPERTY, false);
|
||||||
|
|
||||||
private volatile boolean reloadData;
|
private volatile boolean reloadData;
|
||||||
private volatile boolean doForceSort;
|
private volatile boolean doForceSort;
|
||||||
@@ -100,7 +100,7 @@ public class TableUpdateJob<T> {
|
|||||||
/**
|
/**
|
||||||
* Meant to be called by subclasses, not clients. This method will trigger this job not to
|
* Meant to be called by subclasses, not clients. This method will trigger this job not to
|
||||||
* load data, but rather to use the given data.
|
* load data, but rather to use the given data.
|
||||||
*
|
*
|
||||||
* @param data The data to process.
|
* @param data The data to process.
|
||||||
*/
|
*/
|
||||||
protected void setData(TableData<T> data) {
|
protected void setData(TableData<T> data) {
|
||||||
@@ -111,7 +111,7 @@ public class TableUpdateJob<T> {
|
|||||||
* Allows the precise disabling of the filter operation. For example, when the user sorts, no
|
* Allows the precise disabling of the filter operation. For example, when the user sorts, no
|
||||||
* filtering is needed. If the filter has changed, then a filter will take place, regardless
|
* filtering is needed. If the filter has changed, then a filter will take place, regardless
|
||||||
* of the state of this variable.
|
* of the state of this variable.
|
||||||
*
|
*
|
||||||
* @param force false to reuse the current filter, if possible.
|
* @param force false to reuse the current filter, if possible.
|
||||||
*/
|
*/
|
||||||
protected void setForceFilter(boolean force) {
|
protected void setForceFilter(boolean force) {
|
||||||
@@ -163,7 +163,7 @@ public class TableUpdateJob<T> {
|
|||||||
/**
|
/**
|
||||||
* Adds the Add/Remove item to the list of items to be processed in the add/remove phase. This
|
* Adds the Add/Remove item to the list of items to be processed in the add/remove phase. This
|
||||||
* call is not allowed on running jobs, only pending jobs.
|
* call is not allowed on running jobs, only pending jobs.
|
||||||
*
|
*
|
||||||
* @param item the add/remove item to add to the list of items to be processed in the
|
* @param item the add/remove item to add to the list of items to be processed in the
|
||||||
* add/remove phase of this job.
|
* add/remove phase of this job.
|
||||||
* @param maxAddRemoveCount the maximum number of add/remove jobs to queue before performing a
|
* @param maxAddRemoveCount the maximum number of add/remove jobs to queue before performing a
|
||||||
@@ -388,7 +388,7 @@ public class TableUpdateJob<T> {
|
|||||||
* Since much memory could be consumed, we provide an option in the tool to disable this reuse
|
* Since much memory could be consumed, we provide an option in the tool to disable this reuse
|
||||||
* of filtered data. When not in use, each filter change will perform a full refilter. This
|
* of filtered data. When not in use, each filter change will perform a full refilter. This
|
||||||
* is not an issue for tables with moderate to small-sized datasets.
|
* is not an issue for tables with moderate to small-sized datasets.
|
||||||
*
|
*
|
||||||
* @return the initial data to use for future filter and sort operations.
|
* @return the initial data to use for future filter and sort operations.
|
||||||
*/
|
*/
|
||||||
private TableData<T> pickExistingTableData() {
|
private TableData<T> pickExistingTableData() {
|
||||||
@@ -528,6 +528,13 @@ public class TableUpdateJob<T> {
|
|||||||
catch (SortCancelledException e) {
|
catch (SortCancelledException e) {
|
||||||
// do nothing, the old data will remain
|
// do nothing, the old data will remain
|
||||||
}
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
// We added this to catch an issue if the sort comparators violate the contract of
|
||||||
|
// Comparator. TimSort will throw an exception in this case. We have decided to not
|
||||||
|
// throw the exception. This will allow the currently loaded data to be used, albeit
|
||||||
|
// unsorted.
|
||||||
|
Msg.error(this, "Unable to finish table sorting", e);
|
||||||
|
}
|
||||||
|
|
||||||
monitor.setMessage("Done sorting");
|
monitor.setMessage("Done sorting");
|
||||||
}
|
}
|
||||||
@@ -716,7 +723,7 @@ public class TableUpdateJob<T> {
|
|||||||
MonitoredComparator(Comparator<T> delegate, TaskMonitor monitor, int size) {
|
MonitoredComparator(Comparator<T> delegate, TaskMonitor monitor, int size) {
|
||||||
this.delegate = delegate;
|
this.delegate = delegate;
|
||||||
this.monitor = monitor;
|
this.monitor = monitor;
|
||||||
// After testing the number of comparisons needed to sort random data for the
|
// After testing the number of comparisons needed to sort random data for the
|
||||||
// sort used by Collections, the max seems to be less then O(N (log(n)-1).
|
// sort used by Collections, the max seems to be less then O(N (log(n)-1).
|
||||||
// This seems to be a reasonable approximation for random data. For sorted data
|
// This seems to be a reasonable approximation for random data. For sorted data
|
||||||
// the number drops to exactly N-1 comparisons, but that just means the progress
|
// the number drops to exactly N-1 comparisons, but that just means the progress
|
||||||
|
|||||||
Reference in New Issue
Block a user