/**
* 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.
*/
/*
* Author: atotic
* Created on Apr 23, 2004
*/
package org.python.pydev.debug.model;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IPath;
import org.eclipse.debug.core.model.IDebugTarget;
import org.eclipse.debug.core.model.ISourceLocator;
import org.eclipse.debug.core.model.IStackFrame;
import org.eclipse.debug.ui.ISourcePresentation;
import org.eclipse.ui.IEditorInput;
import org.python.pydev.editor.PyEdit;
import org.python.pydev.editor.codecompletion.revisited.PythonPathHelper;
import org.python.pydev.editorinput.PySourceLocatorBase;
import org.python.pydev.shared_ui.EditorUtils;
/**
* Locates source files from stack elements
*
*/
public class PySourceLocator implements ISourceLocator, ISourcePresentation {
private PySourceLocatorBase locatorBase = new PySourceLocatorBase();
@Override
public Object getSourceElement(IStackFrame stackFrame) {
return stackFrame;
}
private IProject lastProject = null;
// Returns the file
@Override
public IEditorInput getEditorInput(Object element) {
IEditorInput edInput = null;
if (element instanceof PyStackFrame) {
PyStackFrame pyStackFrame = (PyStackFrame) element;
IPath path = pyStackFrame.getPath();
// get the project of the file that is being debugged
Object target = pyStackFrame.getAdapter(IDebugTarget.class);
if (target instanceof PyDebugTarget) {
lastProject = ((PyDebugTarget) target).project;
}
if (path != null && !path.toString().startsWith("<")) {
edInput = locatorBase.createEditorInput(path, true, pyStackFrame, lastProject);
}
}
return edInput;
}
@Override
public String getEditorId(IEditorInput input, Object element) {
String name = input.getName();
if (PythonPathHelper.isValidSourceFile(name)) {
return PyEdit.EDITOR_ID;
}
String ret = EditorUtils.getEditorId(input, element);
if (ret == null) {
//If not found, use the pydev editor by default.
ret = PyEdit.EDITOR_ID;
}
return ret;
}
}