diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/task/ProgramOpener.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/task/ProgramOpener.java index b885f7cd19..32322c0b61 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/task/ProgramOpener.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/task/ProgramOpener.java @@ -22,8 +22,7 @@ import java.util.concurrent.atomic.AtomicReference; import docking.widgets.OptionDialog; import ghidra.app.plugin.core.progmgr.ProgramLocator; import ghidra.app.util.dialog.CheckoutDialog; -import ghidra.framework.client.ClientUtil; -import ghidra.framework.client.RepositoryAdapter; +import ghidra.framework.client.*; import ghidra.framework.main.AppInfo; import ghidra.framework.model.DomainFile; import ghidra.framework.protocol.ghidra.GhidraURLQuery; @@ -93,33 +92,28 @@ public class ProgramOpener { */ public Program openProgram(ProgramLocator locator, TaskMonitor monitor) { if (locator.isURL()) { - try { - return openURL(locator, monitor); - } - catch (CancelledException e) { - return null; - } - catch (IOException e) { - Msg.showError(this, null, "Program Open Failed", - "Failed to open Ghidra URL: " + locator.getURL(), e); - } + return openURL(locator, monitor); } return openProgram(locator, locator.getDomainFile(), monitor); } - private Program openURL(ProgramLocator locator, TaskMonitor monitor) - throws CancelledException, IOException { + private Program openURL(ProgramLocator locator, TaskMonitor monitor) { URL ghidraUrl = locator.getURL(); AtomicReference openedProgram = new AtomicReference<>(); - GhidraURLQuery.queryUrl(ghidraUrl, new GhidraURLResultHandlerAdapter() { - @Override - public void processResult(DomainFile domainFile, URL url, TaskMonitor m) { - Program p = openProgram(locator, domainFile, m); // may return null - openedProgram.set(p); - } - }, monitor); - + try { + GhidraURLQuery.queryUrl(ghidraUrl, new GhidraURLResultHandlerAdapter() { + @Override + public void processResult(DomainFile domainFile, URL url, TaskMonitor m) { + Program p = openProgram(locator, domainFile, m); // may return null + openedProgram.set(p); + } + }, monitor); + } + catch (IOException | CancelledException e) { + // IOException reported to user by GhidraURLResultHandlerAdapter + return null; + } return openedProgram.get(); } diff --git a/Ghidra/Features/Base/src/test/java/ghidra/base/project/FakeSharedProject.java b/Ghidra/Features/Base/src/test/java/ghidra/base/project/FakeSharedProject.java index 9197c68465..48814c23d2 100644 --- a/Ghidra/Features/Base/src/test/java/ghidra/base/project/FakeSharedProject.java +++ b/Ghidra/Features/Base/src/test/java/ghidra/base/project/FakeSharedProject.java @@ -465,12 +465,6 @@ public class FakeSharedProject { void refresh() { DefaultProjectData projectData = getProjectData(); - try { - projectData.refresh(true); - } - catch (IOException e) { - // shouldn't happen - throw new AssertionFailedError("Unable to refresh project " + this); - } + projectData.refresh(true); } } diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/data/DefaultProjectData.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/data/DefaultProjectData.java index f002c58108..0ea19f5143 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/data/DefaultProjectData.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/data/DefaultProjectData.java @@ -734,7 +734,7 @@ public class DefaultProjectData implements ProjectData { } @Override - public void refresh(boolean force) throws IOException { + public void refresh(boolean force) { try { rootFolderData.refresh(true, true, projectDisposalMonitor); } diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/projectdata/actions/ProjectDataRefreshAction.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/projectdata/actions/ProjectDataRefreshAction.java index 24f831e3be..9c5a0ecc53 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/projectdata/actions/ProjectDataRefreshAction.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/projectdata/actions/ProjectDataRefreshAction.java @@ -17,14 +17,12 @@ package ghidra.framework.main.projectdata.actions; import java.awt.Component; import java.awt.event.KeyEvent; -import java.io.IOException; import javax.swing.Icon; import docking.action.*; -import ghidra.framework.client.ClientUtil; -import ghidra.framework.main.datatable.ProjectDataContext; import ghidra.framework.main.datatable.FrontendProjectTreeAction; +import ghidra.framework.main.datatable.ProjectDataContext; import ghidra.framework.model.ProjectData; import ghidra.util.HelpLocation; import ghidra.util.task.*; @@ -53,13 +51,7 @@ public class ProjectDataRefreshAction extends FrontendProjectTreeAction { TaskLauncher.launch(new Task("Refresh folders and files", false, false, true) { @Override public void run(TaskMonitor monitor) { - try { - projectData.refresh(false); - } - catch (IOException e) { - ClientUtil.handleException(projectData.getRepository(), e, - "Refresh Project Data", false, comp); - } + projectData.refresh(false); } }); } diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/model/ProjectData.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/model/ProjectData.java index e88f20f7dc..3cea690067 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/model/ProjectData.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/model/ProjectData.java @@ -143,9 +143,8 @@ public interface ProjectData { * Sync the Domain folder/file structure with the underlying file structure. * @param force if true all folders will be be visited and refreshed, if false * only those folders previously visited will be refreshed. - * @throws IOException if an IO error occurs */ - public void refresh(boolean force) throws IOException; + public void refresh(boolean force); /** * Returns User object associated with remote repository or null if a remote repository diff --git a/Ghidra/Framework/Project/src/test/java/ghidra/framework/model/TestDummyProjectData.java b/Ghidra/Framework/Project/src/test/java/ghidra/framework/model/TestDummyProjectData.java index 648dcb920b..32921a18bd 100644 --- a/Ghidra/Framework/Project/src/test/java/ghidra/framework/model/TestDummyProjectData.java +++ b/Ghidra/Framework/Project/src/test/java/ghidra/framework/model/TestDummyProjectData.java @@ -119,7 +119,7 @@ public class TestDummyProjectData implements ProjectData { } @Override - public void refresh(boolean force) throws IOException { + public void refresh(boolean force) { // stub }