GT-2376: more code review fixes; changed 'release' method to 'finished'

This commit is contained in:
adamopolous 2019-05-09 17:32:55 -04:00
parent ea9e1c2dda
commit d8740850e4
5 changed files with 56 additions and 15 deletions

View file

@ -33,8 +33,7 @@ import ghidra.program.model.listing.Program;
import ghidra.util.*; import ghidra.util.*;
import ghidra.util.exception.CancelledException; import ghidra.util.exception.CancelledException;
import ghidra.util.exception.VersionException; import ghidra.util.exception.VersionException;
import ghidra.util.task.Task; import ghidra.util.task.*;
import ghidra.util.task.TaskMonitor;
public class OpenProgramTask extends Task { public class OpenProgramTask extends Task {
@ -108,7 +107,7 @@ public class OpenProgramTask extends Task {
@Override @Override
public void run(TaskMonitor taskMonitor) { public void run(TaskMonitor taskMonitor) {
this.monitor = taskMonitor; this.monitor = TaskMonitorService.getMonitor();
if (domainFileInfoList.size() > 1) { if (domainFileInfoList.size() > 1) {
monitor.initialize(domainFileInfoList.size()); monitor.initialize(domainFileInfoList.size());

View file

@ -313,11 +313,35 @@ public class TaskMonitorServiceTest extends AbstractGhidraHeadedIntegrationTest
} }
/** /**
* Verifies that once a monitor has been reset, the next call to retrieve a monitor will * Verifies that calling finish on a primary monitor will cause it to
* return it as a primary * be set back to an uninitialized state.
*/ */
@Test @Test
public void testMonitorReset() { public void testMonitorFinishPrimary() {
TaskLauncher.launch(new Task("task") {
@Override
public void run(TaskMonitor monitor) throws CancelledException {
TaskMonitor monitor1 = TaskMonitorService.getMonitor();
assertTrue(monitor1 instanceof TaskDialog);
monitor1.finished();
monitor1 = TaskMonitorService.getMonitor();
assertTrue(monitor1 instanceof TaskDialog);
}
});
waitForTasks();
}
/**
* Verifies that calling finish on a secondary monitor will NOT cause
* it to be uninitialized (only primary monitors can reset this state)
*/
@Test
public void testMonitorFinishSecondary() {
TaskLauncher.launch(new Task("task") { TaskLauncher.launch(new Task("task") {
@Override @Override
@ -329,10 +353,10 @@ public class TaskMonitorServiceTest extends AbstractGhidraHeadedIntegrationTest
monitor1 = TaskMonitorService.getMonitor(); monitor1 = TaskMonitorService.getMonitor();
assertTrue(monitor1 instanceof SecondaryTaskMonitor); assertTrue(monitor1 instanceof SecondaryTaskMonitor);
monitor1.release(); monitor1.finished();
monitor1 = TaskMonitorService.getMonitor(); monitor1 = TaskMonitorService.getMonitor();
assertTrue(monitor1 instanceof TaskDialog); assertTrue(monitor1 instanceof SecondaryTaskMonitor);
} }
}); });

View file

@ -65,6 +65,17 @@ public class SecondaryTaskMonitor implements TaskMonitor {
parentMonitor.setInitialized(init); parentMonitor.setInitialized(init);
} }
/**
* Secondary monitors should not be able to reset progress or revert back
* to an uninitialized state; hence the override.
*/
@Override
public void finished() {
synchronized (this) {
setMessage("");
}
}
@Override @Override
public boolean isCancelEnabled() { public boolean isCancelEnabled() {
return parentMonitor.isCancelEnabled(); return parentMonitor.isCancelEnabled();

View file

@ -86,10 +86,18 @@ public class DefaultLanguageService implements LanguageService, ChangeListener {
} }
private void searchForProviders() { private void searchForProviders() {
Set<LanguageProvider> languageProviders = TaskMonitor monitor = TaskMonitorService.getMonitor();
ClassSearcher.getInstances(LanguageProvider.class); monitor.setMessage("Searching for language providers");
searchCompleted = true; try {
processProviders(languageProviders); Set<LanguageProvider> languageProviders =
ClassSearcher.getInstances(LanguageProvider.class);
searchCompleted = true;
processProviders(languageProviders);
}
finally {
monitor.finished();
}
} }
/** /**
@ -100,7 +108,6 @@ public class DefaultLanguageService implements LanguageService, ChangeListener {
TaskMonitor monitor = TaskMonitorService.getMonitor(); TaskMonitor monitor = TaskMonitorService.getMonitor();
monitor.setMessage("Retrieving language: " + languageID); monitor.setMessage("Retrieving language: " + languageID);
try { try {
LanguageInfo info = languageMap.get(languageID); LanguageInfo info = languageMap.get(languageID);
@ -112,7 +119,7 @@ public class DefaultLanguageService implements LanguageService, ChangeListener {
return lang; return lang;
} }
finally { finally {
monitor.release(); monitor.finished();
} }
} }

View file

@ -66,7 +66,7 @@ public interface TaskMonitor {
* monitor being returned from the {@link TaskMonitorService} on the next * monitor being returned from the {@link TaskMonitorService} on the next
* invocation. * invocation.
*/ */
public default void release() { public default void finished() {
synchronized (this) { synchronized (this) {
setMessage(""); setMessage("");
setProgress(0); setProgress(0);