/** * Copyright (c) 2005-2013 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Eclipse Public License (EPL). * Please see the license.txt included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ package org.python.pydev.debug.model; import java.io.File; import java.util.List; import java.util.ListResourceBundle; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.model.IDebugTarget; import org.eclipse.jface.text.IDocument; import org.python.pydev.core.IPythonNature; import org.python.pydev.core.MisconfigurationException; import org.python.pydev.debug.model.remote.ReloadCodeCommand; import org.python.pydev.debug.ui.DebugPrefsPage; import org.python.pydev.editor.PyEdit; import org.python.pydev.shared_core.callbacks.ICallback; import org.python.pydev.shared_core.log.Log; import org.python.pydev.shared_core.utils.ArrayUtils; import org.python.pydev.shared_ui.editor.BaseEditor; import org.python.pydev.shared_ui.editor.IPyEditListener; public class PyReloadCode implements IPyEditListener { @Override public void onCreateActions(ListResourceBundle resources, BaseEditor baseEditor, IProgressMonitor monitor) { } @Override public void onDispose(BaseEditor baseEditor, IProgressMonitor monitor) { } @Override public void onSave(BaseEditor baseEditor, IProgressMonitor monitor) { if (!DebugPrefsPage.getReloadModuleOnChange()) { return; } PyEdit edit = (PyEdit) baseEditor; File file = edit.getEditorFile(); if (file != null) { IDebugTarget[] debugTargets = DebugPlugin.getDefault().getLaunchManager().getDebugTargets(); if (debugTargets.length > 0) { ICallback<Boolean, IDebugTarget> callbackThatFilters = new ICallback<Boolean, IDebugTarget>() { @Override public Boolean call(IDebugTarget arg) { return arg instanceof AbstractDebugTarget; } }; List<IDebugTarget> filter = ArrayUtils.filter(debugTargets, callbackThatFilters); if (filter.size() > 0) { try { IPythonNature pythonNature = edit.getPythonNature(); if (pythonNature != null) { String moduleName = pythonNature.resolveModule(file); if (moduleName != null) { for (IDebugTarget iDebugTarget : filter) { AbstractDebugTarget target = (AbstractDebugTarget) iDebugTarget; target.postCommand(new ReloadCodeCommand(target, moduleName)); } } } } catch (MisconfigurationException e) { Log.log(e); } } } } } @Override public void onSetDocument(IDocument document, BaseEditor baseEditor, IProgressMonitor monitor) { } }