| package org.eclipse.dltk.internal.debug.ui; |
| |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.debug.core.DebugException; |
| import org.eclipse.dltk.debug.core.IHotCodeReplaceListener; |
| import org.eclipse.dltk.debug.core.model.IScriptDebugTarget; |
| import org.eclipse.dltk.debug.ui.DLTKDebugUIPlugin; |
| import org.eclipse.dltk.debug.ui.IDLTKDebugUIPreferenceConstants; |
| import org.eclipse.osgi.util.NLS; |
| import org.eclipse.swt.widgets.Display; |
| import org.eclipse.swt.widgets.Shell; |
| |
| public class ScriptHotCodeReplaceListener implements IHotCodeReplaceListener { |
| |
| @Override |
| public void hotCodeReplaceSucceeded(IScriptDebugTarget target) { |
| } |
| |
| @Override |
| public void hotCodeReplaceFailed(final IScriptDebugTarget target, |
| final DebugException exception) { |
| if ((exception != null && !DLTKDebugUIPlugin.getDefault() |
| .getPreferenceStore().getBoolean( |
| IDLTKDebugUIPreferenceConstants.PREF_ALERT_HCR_FAILED)) |
| || ((exception == null) && !DLTKDebugUIPlugin.getDefault() |
| .getPreferenceStore().getBoolean( |
| IDLTKDebugUIPreferenceConstants.PREF_ALERT_HCR_NOT_SUPPORTED))) { |
| return; |
| } |
| |
| final Display display = DLTKDebugUIPlugin.getStandardDisplay(); |
| if (display.isDisposed()) { |
| return; |
| } |
| |
| final IStatus status; |
| final String preference; |
| final String alertMessage; |
| final String launchName = target.getLaunch().getLaunchConfiguration() |
| .getName(); |
| if (exception == null) { |
| status = new Status(IStatus.WARNING, |
| DLTKDebugUIPlugin.getUniqueIdentifier(), IStatus.WARNING, |
| Messages.ScriptHotCodeReplaceListener_theTargetDoesntSupportHotCodeReplace, |
| null); |
| preference = IDLTKDebugUIPreferenceConstants.PREF_ALERT_HCR_NOT_SUPPORTED; |
| alertMessage = Messages.ScriptHotCodeReplaceListener_doNotShowErrorWhenHotCodeReplaceIsNotSupported; |
| } else { |
| status = new Status(IStatus.WARNING, |
| DLTKDebugUIPlugin.getUniqueIdentifier(), IStatus.WARNING, |
| exception.getMessage(), exception.getCause()); |
| preference = IDLTKDebugUIPreferenceConstants.PREF_ALERT_HCR_FAILED; |
| alertMessage = Messages.ScriptHotCodeReplaceListener_doNotShowErrorWhenHotCodeReplaceFails; |
| } |
| final String title = Messages.ScriptHotCodeReplaceListener_hotCodeReplaceFailed; |
| final String message = NLS.bind( |
| Messages.ScriptHotCodeReplaceListener_someCodeChangesCannotBeHotSwappedIntoARunningInterpreter, |
| launchName); |
| display.asyncExec(() -> { |
| if (display.isDisposed()) { |
| return; |
| } |
| Shell shell = DLTKDebugUIPlugin.getActiveWorkbenchShell(); |
| HotCodeReplaceErrorDialog dialog = new HotCodeReplaceErrorDialog( |
| shell, title, message, status, preference, alertMessage, |
| DLTKDebugUIPlugin.getDefault().getPreferenceStore(), |
| target); |
| dialog.setBlockOnOpen(false); |
| dialog.open(); |
| }); |
| } |
| } |