From 6b26ac987b1ce48ec69633e6b5dda7d48d5950e0 Mon Sep 17 00:00:00 2001 From: Uwe Stieber Date: Sat, 19 Mar 2016 09:15:45 +0100 Subject: [PATCH] Fix NPE on initializing the external executables state service provider --- .../view/ui/internal/ExternalExecutablesState.java | 10 +++++----- .../ui/local/showin/ExternalExecutablesManager.java | 6 ++++++ 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/ExternalExecutablesState.java b/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/ExternalExecutablesState.java index 83e009c4282..dda1ccecb67 100644 --- a/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/ExternalExecutablesState.java +++ b/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/ExternalExecutablesState.java @@ -10,10 +10,8 @@ package org.eclipse.tm.terminal.view.ui.internal; import java.util.HashMap; -import java.util.List; import java.util.Map; -import org.eclipse.tm.terminal.view.ui.local.showin.ExternalExecutablesManager; import org.eclipse.ui.AbstractSourceProvider; import org.eclipse.ui.ISources; @@ -22,11 +20,13 @@ import org.eclipse.ui.ISources; */ public class ExternalExecutablesState extends AbstractSourceProvider { public final static String CONFIGURED_STATE = "org.eclipse.tm.terminal.external.executable.configured"; //$NON-NLS-1$ - private boolean enabled; + private boolean enabled = false; public ExternalExecutablesState() { - List> externals = ExternalExecutablesManager.load(); - this.enabled = (externals != null && !externals.isEmpty()); + // Cannot initialize the state here by calling ExternalExecutablesManager.load(), + // because it will trigger a ExternalExectuablesManger.save() which tries to call + // the enable() or disable() method here. Better initialize the state from the + // load method itself. } @Override diff --git a/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/local/showin/ExternalExecutablesManager.java b/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/local/showin/ExternalExecutablesManager.java index b2368b85846..40db4891931 100644 --- a/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/local/showin/ExternalExecutablesManager.java +++ b/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/local/showin/ExternalExecutablesManager.java @@ -46,6 +46,7 @@ public class ExternalExecutablesManager { * * @return The list of all saved external executables or null. */ + @SuppressWarnings("cast") public static List> load() { List> l = new ArrayList>(); @@ -165,6 +166,11 @@ public class ExternalExecutablesManager { gitBashSearchDone = true; } + // Make sure the source provider is initialized properly + ISourceProviderService sourceProviderService = (ISourceProviderService) PlatformUI.getWorkbench().getService(ISourceProviderService.class); + ExternalExecutablesState stateService = (ExternalExecutablesState) sourceProviderService.getSourceProvider(ExternalExecutablesState.CONFIGURED_STATE); + if (l.isEmpty()) stateService.disable(); else stateService.enable(); + return l; }