pydev-cvs Mailing List for PyDev for Eclipse (Page 8)
Brought to you by:
fabioz
You can subscribe to this list here.
2004 |
Jan
|
Feb
(4) |
Mar
(48) |
Apr
(56) |
May
(64) |
Jun
(27) |
Jul
(66) |
Aug
(81) |
Sep
(148) |
Oct
(194) |
Nov
(78) |
Dec
(46) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2005 |
Jan
(125) |
Feb
(126) |
Mar
(163) |
Apr
(133) |
May
(115) |
Jun
(307) |
Jul
(387) |
Aug
(417) |
Sep
(283) |
Oct
(148) |
Nov
(45) |
Dec
(53) |
2006 |
Jan
(240) |
Feb
(200) |
Mar
(267) |
Apr
(231) |
May
(245) |
Jun
(361) |
Jul
(142) |
Aug
(12) |
Sep
(210) |
Oct
(99) |
Nov
(7) |
Dec
(30) |
2007 |
Jan
(161) |
Feb
(511) |
Mar
(265) |
Apr
(74) |
May
(147) |
Jun
(151) |
Jul
(94) |
Aug
(68) |
Sep
(98) |
Oct
(144) |
Nov
(26) |
Dec
(36) |
2008 |
Jan
(98) |
Feb
(107) |
Mar
(199) |
Apr
(113) |
May
(119) |
Jun
(112) |
Jul
(92) |
Aug
(71) |
Sep
(101) |
Oct
(16) |
Nov
|
Dec
|
From: Fabio Z. <fa...@us...> - 2008-08-06 16:23:11
|
Update of /cvsroot/pydev/org.python.pydev/tests/org/python/pydev/plugin/nature In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26629/tests/org/python/pydev/plugin/nature Modified Files: SaveFileWithoutNatureTestWorkbench.java Log Message: - Refactoring the source locator - Linxing working with compare editor both ways Index: SaveFileWithoutNatureTestWorkbench.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/tests/org/python/pydev/plugin/nature/SaveFileWithoutNatureTestWorkbench.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** SaveFileWithoutNatureTestWorkbench.java 31 Jul 2008 01:47:36 -0000 1.1 --- SaveFileWithoutNatureTestWorkbench.java 6 Aug 2008 16:23:19 -0000 1.2 *************** *** 10,14 **** import org.python.pydev.editor.PyEdit; import org.python.pydev.editor.codecompletion.revisited.javaintegration.AbstractJavaIntegrationTestWorkbench; ! import org.python.pydev.plugin.PydevPlugin; public class SaveFileWithoutNatureTestWorkbench extends AbstractJavaIntegrationTestWorkbench{ --- 10,14 ---- import org.python.pydev.editor.PyEdit; import org.python.pydev.editor.codecompletion.revisited.javaintegration.AbstractJavaIntegrationTestWorkbench; ! import org.python.pydev.editorinput.PyOpenEditor; public class SaveFileWithoutNatureTestWorkbench extends AbstractJavaIntegrationTestWorkbench{ *************** *** 32,36 **** project.refreshLocal(IResource.DEPTH_INFINITE, monitor); try { ! editor = (PyEdit) PydevPlugin.doOpenEditor(myFile, true); editor.getDocument().set(newContents); editor.doSave(monitor); --- 32,36 ---- project.refreshLocal(IResource.DEPTH_INFINITE, monitor); try { ! editor = (PyEdit) PyOpenEditor.doOpenEditor(myFile); editor.getDocument().set(newContents); editor.doSave(monitor); |
From: Fabio Z. <fa...@us...> - 2008-08-06 16:23:11
|
Update of /cvsroot/pydev/org.python.pydev/src_navigator/org/python/pydev/navigator/actions In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26629/src_navigator/org/python/pydev/navigator/actions Modified Files: PythonLinkHelper.java Log Message: - Refactoring the source locator - Linxing working with compare editor both ways Index: PythonLinkHelper.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src_navigator/org/python/pydev/navigator/actions/PythonLinkHelper.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** PythonLinkHelper.java 30 Jun 2008 00:29:06 -0000 1.3 --- PythonLinkHelper.java 6 Aug 2008 16:23:19 -0000 1.4 *************** *** 59,64 **** //and now, if it is really a file... if (firstElement instanceof IFile) { ! IEditorInput fileInput = new FileEditorInput((IFile) firstElement); IEditorPart editor = null; if ((editor = aPage.findEditor(fileInput)) != null){ aPage.bringToTop(editor); --- 59,79 ---- //and now, if it is really a file... if (firstElement instanceof IFile) { ! ! //ok, let's check if the active editor is already the selection, because although the findEditor(editorInput) method ! //may return an editor for the correct file, we may have multiple editors for the same file, and if the current ! //editor is already correct, we don't want to change it ! //@see bug: https://sourceforge.net/tracker/?func=detail&atid=577329&aid=2037682&group_id=85796 ! IEditorPart activeEditor = aPage.getActiveEditor(); ! if(activeEditor != null){ ! IEditorInput editorInput = activeEditor.getEditorInput(); ! IFile currFile = (IFile) editorInput.getAdapter(IFile.class); ! if(currFile != null && currFile.equals(firstElement)){ ! return; //the current editor is already the active editor. ! } ! } ! ! //if we got here, the active editor is not a match, so, let's find one and show it. IEditorPart editor = null; + IEditorInput fileInput = new FileEditorInput((IFile) firstElement); if ((editor = aPage.findEditor(fileInput)) != null){ aPage.bringToTop(editor); |
From: Fabio Z. <fa...@us...> - 2008-08-06 16:23:10
|
Update of /cvsroot/pydev/org.python.pydev/src/org/python/pydev/builder/pycremover In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26629/src/org/python/pydev/builder/pycremover Modified Files: PycRemoverBuilderVisitor.java Log Message: - Refactoring the source locator - Linxing working with compare editor both ways Index: PycRemoverBuilderVisitor.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/builder/pycremover/PycRemoverBuilderVisitor.java,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** PycRemoverBuilderVisitor.java 8 Mar 2007 10:47:17 -0000 1.9 --- PycRemoverBuilderVisitor.java 6 Aug 2008 16:23:19 -0000 1.10 *************** *** 16,19 **** --- 16,20 ---- import org.python.pydev.builder.PyDevBuilderVisitor; import org.python.pydev.core.IPythonNature; + import org.python.pydev.editorinput.PySourceLocatorBase; import org.python.pydev.plugin.PydevPlugin; import org.python.pydev.plugin.nature.PythonNature; *************** *** 67,71 **** try { File file = new File(loc); ! IFile[] files = PydevPlugin.getWorkspaceFiles(file); if(files == null){ --- 68,72 ---- try { File file = new File(loc); ! IFile[] files = PySourceLocatorBase.getWorkspaceFiles(file); if(files == null){ |
From: Fabio Z. <fa...@us...> - 2008-08-06 16:23:10
|
Update of /cvsroot/pydev/org.python.pydev/tests_completions/org/python/pydev/editor/codecompletion/revisited/javaintegration In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26629/tests_completions/org/python/pydev/editor/codecompletion/revisited/javaintegration Modified Files: AbstractJavaIntegrationTestWorkbench.java Log Message: - Refactoring the source locator - Linxing working with compare editor both ways Index: AbstractJavaIntegrationTestWorkbench.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/tests_completions/org/python/pydev/editor/codecompletion/revisited/javaintegration/AbstractJavaIntegrationTestWorkbench.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** AbstractJavaIntegrationTestWorkbench.java 31 Jul 2008 01:47:36 -0000 1.4 --- AbstractJavaIntegrationTestWorkbench.java 6 Aug 2008 16:23:18 -0000 1.5 *************** *** 40,43 **** --- 40,44 ---- import org.python.pydev.editor.codecompletion.revisited.ProjectModulesManager; import org.python.pydev.editor.simpleassist.SimpleAssistProcessor; + import org.python.pydev.editorinput.PyOpenEditor; import org.python.pydev.plugin.PydevPlugin; import org.python.pydev.plugin.nature.PythonNature; *************** *** 150,154 **** ! editor = (PyEdit) PydevPlugin.doOpenEditor(mod1, true); } } --- 151,155 ---- ! editor = (PyEdit) PyOpenEditor.doOpenEditor(mod1); } } |
From: Fabio Z. <fa...@us...> - 2008-08-06 16:23:10
|
Update of /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editorinput In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26629/src/org/python/pydev/editorinput Added Files: PyOpenEditor.java PySourceLocatorBase.java Log Message: - Refactoring the source locator - Linxing working with compare editor both ways --- NEW FILE: PyOpenEditor.java --- package org.python.pydev.editorinput; import java.io.File; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; import org.eclipse.ui.ide.IDE; import org.eclipse.ui.part.FileEditorInput; import org.python.pydev.editor.PyEdit; import org.python.pydev.plugin.PydevPlugin; /** * Class that provides different ways to open an editor. * * @author fabioz */ public class PyOpenEditor { /** * Opens some editor from an editor input (See PySourceLocatorBase for obtaining it) * * @param file the editor input * @return the part correspondent to the editor * @throws PartInitException */ public static IEditorPart openEditorInput(IEditorInput file) throws PartInitException { final IWorkbench workbench = PydevPlugin.getDefault().getWorkbench(); if(workbench == null){ throw new RuntimeException("workbench cannot be null"); } IWorkbenchWindow activeWorkbenchWindow = workbench.getActiveWorkbenchWindow(); if(activeWorkbenchWindow == null){ throw new RuntimeException("activeWorkbenchWindow cannot be null (we have to be in a ui thread for this to work)"); } IWorkbenchPage wp = activeWorkbenchWindow.getActivePage(); // File is inside the workspace return IDE.openEditor(wp, file, PyEdit.EDITOR_ID); } /** * Opens some editor from an IFile * * @see #openEditorInput(IEditorInput) */ public static IEditorPart doOpenEditor(IFile f) { if (f == null) return null; try { FileEditorInput file = new FileEditorInput(f); return openEditorInput(file); } catch (Exception e) { PydevPlugin.log(IStatus.ERROR, "Unexpected error opening path " + f.toString(), e); return null; } } /** * Utility function that opens an editor on a given path. * * @return part that is the editor * @see #openEditorInput(IEditorInput) */ public static IEditorPart doOpenEditor(IPath path) { if (path == null){ return null; } try { IEditorInput file = PySourceLocatorBase.createEditorInput(path); return openEditorInput(file); } catch (Exception e) { PydevPlugin.log(IStatus.ERROR, "Unexpected error opening path " + path.toString(), e); return null; } } /** * Utility function that opens an editor on a given path within a zip file. * * @return part that is the editor * @see #openEditorInput(IEditorInput) */ public static IEditorPart doOpenEditor(File zipFile, String zipFilePath) { if (zipFile == null || zipFilePath == null){ return null; } try { IEditorInput file = new PydevZipFileEditorInput(new PydevZipFileStorage(zipFile, zipFilePath)); return openEditorInput(file); } catch (Exception e) { PydevPlugin.log(IStatus.ERROR, "Unexpected error opening zip file " + zipFile.getAbsolutePath()+ " - "+zipFilePath, e); return null; } } } --- NEW FILE: PySourceLocatorBase.java --- package org.python.pydev.editorinput; import java.io.File; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.jface.window.Window; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorReference; import org.eclipse.ui.IPathEditorInput; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.ElementListSelectionDialog; import org.eclipse.ui.part.FileEditorInput; import org.python.pydev.core.REF; import org.python.pydev.core.Tuple; import org.python.pydev.core.log.Log; import org.python.pydev.editor.PyEdit; import org.python.pydev.editor.codecompletion.revisited.PythonPathHelper; import org.python.pydev.plugin.PyFileLabelProvider; import org.python.pydev.ui.filetypes.FileTypesPreferencesPage; /** * Refactored from the PydevPlugin: helpers to find some IFile / IEditorInput * from a Path (or java.io.File) * * @author fabioz */ public class PySourceLocatorBase { /** * This method will try to find the most likely file that matches the given path, * considering: * - The workspace files * - The open editors * * and if all fails, it'll still ask the user which path should be used. * * * @param path * @return */ public static IEditorInput createEditorInput(IPath path) { return createEditorInput(path, true); } /** * @param file the file we want to get in the workspace * @return a workspace file that matches the given file. */ public static IFile getWorkspaceFile(File file) { IFile[] files = getWorkspaceFiles(file); return selectWorkspaceFile(files); } /** * @param file the file we want to get in the workspace * @return a workspace file that matches the given file. */ public static IFile[] getWorkspaceFiles(File file) { IWorkspace workspace= ResourcesPlugin.getWorkspace(); IPath location= Path.fromOSString(file.getAbsolutePath()); IFile[] files= workspace.getRoot().findFilesForLocation(location); files= filterNonExistentFiles(files); if (files == null || files.length == 0){ return null; } return files; } //---------------------------------- PRIVATE API BELOW -------------------------------------------- /** * Creates the editor input from a given path. * * @param path the path for the editor input we're looking * @param askIfDoesNotExist if true, it'll try to ask the user/check existing editors and look * in the workspace for matches given the name * * @return the editor input found or none if None was available for the given path */ private static IEditorInput createEditorInput(IPath path, boolean askIfDoesNotExist) { IEditorInput edInput = null; IWorkspace w = ResourcesPlugin.getWorkspace(); //let's start with the 'easy' way IFile fileForLocation = w.getRoot().getFileForLocation(path); if(fileForLocation != null && fileForLocation.exists()){ return new FileEditorInput(fileForLocation); } IFile files[] = w.getRoot().findFilesForLocation(path); if (files == null || files.length == 0 || !files[0].exists()){ //it is probably an external file File systemFile = path.toFile(); if(systemFile.exists()){ edInput = createEditorInput(systemFile); }else if(askIfDoesNotExist){ //here we can do one more thing: if the file matches some opened editor, let's use it... //(this is done because when debugging, we don't want to be asked over and over //for the same file) IEditorInput input = getEditorInputFromExistingEditors(systemFile.getName()); if(input != null){ return input; } //this is the last resort... First we'll try to check for a 'good' match, //and if there's more than one we'll ask it to the user List<IFile> likelyFiles = getLikelyFiles(path, w); IFile iFile = selectWorkspaceFile(likelyFiles.toArray(new IFile[0])); if(iFile != null){ return new FileEditorInput(iFile); } //ok, ask the user for any file in the computer input = selectFilesystemFileForPath(path); if(input != null){ return input; } } }else{ //file exists IFile workspaceFile = selectWorkspaceFile(files); if(workspaceFile != null){ edInput = new FileEditorInput(workspaceFile); } } return edInput; } /** * @param matchName the name to match in the editor * @return an editor input from an existing editor available */ private static IEditorInput getEditorInputFromExistingEditors(final String matchName) { final Tuple<IWorkbenchWindow, IEditorInput> workbenchAndReturn = new Tuple<IWorkbenchWindow, IEditorInput>(PlatformUI.getWorkbench().getActiveWorkbenchWindow(), null); Runnable r = new Runnable(){ public void run() { IWorkbenchWindow workbenchWindow = workbenchAndReturn.o1; if(workbenchWindow == null){ workbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); } if(workbenchWindow == null){ return; } IWorkbenchPage activePage = workbenchWindow.getActivePage(); if(activePage == null){ return; } IEditorReference[] editorReferences = activePage.getEditorReferences(); for (IEditorReference editorReference : editorReferences) { IEditorPart editor = editorReference.getEditor(false); if(editor != null){ if(editor instanceof PyEdit){ PyEdit pyEdit = (PyEdit) editor; IEditorInput editorInput = pyEdit.getEditorInput(); if(editorInput instanceof IPathEditorInput){ IPathEditorInput pathEditorInput = (IPathEditorInput) editorInput; IPath localPath = pathEditorInput.getPath(); if(localPath != null){ String considerName = localPath.segment(localPath.segmentCount()-1); if(matchName.equals(considerName)){ workbenchAndReturn.o2 = editorInput; return; } } }else{ File editorFile = pyEdit.getEditorFile(); if(editorFile != null){ if(editorFile.getName().equals(matchName)){ workbenchAndReturn.o2 = editorInput; return; } } } } } } } }; if(workbenchAndReturn.o1 == null){ //not ui-thread Display.getDefault().syncExec(r); }else{ r.run(); } return workbenchAndReturn.o2; } /** * This is the last resort... pointing to some filesystem file to get the editor for some path. */ private static IEditorInput selectFilesystemFileForPath(final IPath path) { final List<String> l = new ArrayList<String>(); Runnable r = new Runnable(){ public void run() { Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); FileDialog dialog = new FileDialog(shell); dialog.setText(path+" - select correspondent filesystem file."); dialog.setFilterExtensions(FileTypesPreferencesPage.getWildcardValidSourceFiles()); String string = dialog.open(); if(string != null){ l.add(string); } } }; if(Display.getCurrent() == null){ //not ui-thread Display.getDefault().syncExec(r); }else{ r.run(); } if(l.size() > 0){ String fileAbsolutePath = REF.getFileAbsolutePath(l.get(0)); return new PydevFileEditorInput(new File(fileAbsolutePath)); } return null; } /** * This method will pass all the files in the workspace and check if there's a file that might * be a match to some path (use only as an almost 'last-resort'). */ private static List<IFile> getLikelyFiles(IPath path, IWorkspace w) { List<IFile> ret = new ArrayList<IFile>(); try { IResource[] resources = w.getRoot().members(); getLikelyFiles(path, ret, resources); } catch (CoreException e) { Log.log(e); } return ret; } /** * Used to recursively get the likely files given the first set of containers */ private static void getLikelyFiles(IPath path, List<IFile> ret, IResource[] resources) throws CoreException { String strPath = path.removeFileExtension().lastSegment().toLowerCase(); //this will return something as 'foo' for (IResource resource : resources) { if(resource instanceof IFile){ IFile f = (IFile) resource; if(PythonPathHelper.isValidSourceFile(f)){ if(resource.getFullPath().removeFileExtension().lastSegment().toLowerCase().equals(strPath)){ ret.add((IFile) resource); } } }else if(resource instanceof IContainer){ getLikelyFiles(path, ret, ((IContainer)resource).members()); } } } /** * Creates some editor input for the passed file * @param file the file for which an editor input should be created * @return the editor input that'll open the passed file. */ private static IEditorInput createEditorInput(File file) { IFile[] workspaceFile= getWorkspaceFiles(file); if (workspaceFile != null && workspaceFile.length > 0){ IFile file2 = selectWorkspaceFile(workspaceFile); if(file2 != null){ return new FileEditorInput(file2); }else{ return new FileEditorInput(workspaceFile[0]); } } return new PydevFileEditorInput(file); } /** * @param files the files that should be filtered * @return a new array of IFile with only the files that actually exist. */ private static IFile[] filterNonExistentFiles(IFile[] files){ if (files == null) return null; int length= files.length; ArrayList<IFile> existentFiles= new ArrayList<IFile>(length); for (int i= 0; i < length; i++) { if (files[i].exists()) existentFiles.add(files[i]); } return (IFile[])existentFiles.toArray(new IFile[existentFiles.size()]); } /** * Ask the user to select one file of the given list of files (if some is available) * * @param files the files available for selection. * @return the selected file (from the files passed) or null if there was no file available for * selection or if the user cancelled it. */ private static IFile selectWorkspaceFile(final IFile[] files) { if(files == null || files.length == 0){ return null; } if(files.length == 1){ return files[0]; } final List<IFile> selected = new ArrayList<IFile>(); Runnable r = new Runnable(){ public void run() { Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); ElementListSelectionDialog dialog= new ElementListSelectionDialog(shell, new PyFileLabelProvider()); dialog.setElements(files); dialog.setTitle("Select Workspace File"); dialog.setMessage("File may be matched to multiple files in the workspace."); if (dialog.open() == Window.OK){ selected.add((IFile) dialog.getFirstResult()); } } }; if(Display.getCurrent() == null){ //not ui-thread Display.getDefault().syncExec(r); }else{ r.run(); } if(selected.size() > 0){ return selected.get(0); } return null; } } |
From: Fabio Z. <fa...@us...> - 2008-08-06 16:23:10
|
Update of /cvsroot/pydev/org.python.pydev/src/org/python/pydev/outline In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26629/src/org/python/pydev/outline Modified Files: OutlineHideImportsAction.java Log Message: - Refactoring the source locator - Linxing working with compare editor both ways Index: OutlineHideImportsAction.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/outline/OutlineHideImportsAction.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** OutlineHideImportsAction.java 5 Feb 2008 23:11:12 -0000 1.3 --- OutlineHideImportsAction.java 6 Aug 2008 16:23:18 -0000 1.4 *************** *** 7,10 **** --- 7,11 ---- import org.python.pydev.parser.jython.ast.Import; import org.python.pydev.parser.jython.ast.ImportFrom; + import org.python.pydev.parser.visitors.scope.ASTEntryWithChildren; import org.python.pydev.ui.UIConstants; *************** *** 34,42 **** if (element instanceof ParsedItem) { ParsedItem item = (ParsedItem) element; ! SimpleNode n = item.getAstThis().node; ! if (n instanceof ImportFrom || n instanceof Import) { ! return false; } - } return true; --- 35,45 ---- if (element instanceof ParsedItem) { ParsedItem item = (ParsedItem) element; ! ASTEntryWithChildren astThis = item.getAstThis(); ! if(astThis != null){ ! SimpleNode n = astThis.node; ! if (n instanceof ImportFrom || n instanceof Import) { ! return false; ! } } } return true; |
From: Fabio Z. <fa...@us...> - 2008-08-06 16:23:03
|
Update of /cvsroot/pydev/org.python.pydev.debug/src/org/python/pydev/debug/model In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26619/src/org/python/pydev/debug/model Modified Files: PySourceLocator.java PyDebugModelPresentation.java Log Message: - Refactoring the source locator - Linxing working with compare editor both ways Index: PyDebugModelPresentation.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev.debug/src/org/python/pydev/debug/model/PyDebugModelPresentation.java,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** PyDebugModelPresentation.java 10 Apr 2008 16:15:59 -0000 1.9 --- PyDebugModelPresentation.java 6 Aug 2008 16:23:11 -0000 1.10 *************** *** 26,30 **** import org.python.pydev.core.bundle.ImageCache; import org.python.pydev.debug.core.PydevDebugPlugin; ! import org.python.pydev.plugin.PydevPlugin; /** --- 26,30 ---- import org.python.pydev.core.bundle.ImageCache; import org.python.pydev.debug.core.PydevDebugPlugin; ! import org.python.pydev.editorinput.PyOpenEditor; /** *************** *** 173,177 **** if(file != null){ IPath path = new Path(file); ! IEditorPart part = PydevPlugin.doOpenEditor(path, false); return part.getEditorInput(); } --- 173,177 ---- if(file != null){ IPath path = new Path(file); ! IEditorPart part = PyOpenEditor.doOpenEditor(path); return part.getEditorInput(); } Index: PySourceLocator.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev.debug/src/org/python/pydev/debug/model/PySourceLocator.java,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** PySourceLocator.java 20 May 2006 00:21:22 -0000 1.8 --- PySourceLocator.java 6 Aug 2008 16:23:11 -0000 1.9 *************** *** 12,15 **** --- 12,16 ---- import org.eclipse.ui.IEditorInput; import org.python.pydev.editor.PyEdit; + import org.python.pydev.editorinput.PySourceLocatorBase; import org.python.pydev.plugin.PydevPlugin; *************** *** 32,36 **** if (path != null && !path.toString().startsWith("<")){ ! edInput = PydevPlugin.createEditorInput(path); } --- 33,37 ---- if (path != null && !path.toString().startsWith("<")){ ! edInput = PySourceLocatorBase.createEditorInput(path); } |
From: Fabio Z. <fa...@us...> - 2008-08-06 16:21:33
|
Update of /cvsroot/pydev/org.python.pydev.debug/pysrc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25849/pysrc Modified Files: pydevd_file_utils.py pydevd_additional_thread_info.py pydevd_vars.py Log Message: - threadframe can be used (when sys._current_frames is not available) - set/frozenset can be correctly seen - minor refactorings Index: pydevd_file_utils.py =================================================================== RCS file: /cvsroot/pydev/org.python.pydev.debug/pysrc/pydevd_file_utils.py,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** pydevd_file_utils.py 10 May 2008 17:55:33 -0000 1.5 --- pydevd_file_utils.py 6 Aug 2008 16:21:41 -0000 1.6 *************** *** 42,46 **** --- 42,54 ---- import sys normcase = os.path.normcase + basename = os.path.basename + try: + rPath = os.path.realpath #@UndefinedVariable + except: + # jython does not support os.path.realpath + # realpath is a no-op on systems without islink support + rPath = os.path.abspath + #defined as a list of tuples where the 1st element of the tuple is the path in the client machine #and the 2nd element is the path in the server machine. *************** *** 66,76 **** return NORM_FILENAME_CONTAINER[filename] except KeyError: ! try: ! rPath = os.path.realpath #@UndefinedVariable ! except: ! # jython does not support os.path.realpath ! # realpath is a no-op on systems without islink support ! rPath = os.path.abspath ! r = os.path.normcase(rPath(filename)) #cache it for fast access later NORM_FILENAME_CONTAINER[filename] = r --- 74,78 ---- return NORM_FILENAME_CONTAINER[filename] except KeyError: ! r = normcase(rPath(filename)) #cache it for fast access later NORM_FILENAME_CONTAINER[filename] = r *************** *** 140,144 **** except KeyError: filename = _NormFile(f) ! base = os.path.basename(filename) NORM_FILENAME_AND_BASE_CONTAINER[f] = filename, base return filename, base --- 142,146 ---- except KeyError: filename = _NormFile(f) ! base = basename(filename) NORM_FILENAME_AND_BASE_CONTAINER[f] = filename, base return filename, base Index: pydevd_vars.py =================================================================== RCS file: /cvsroot/pydev/org.python.pydev.debug/pysrc/pydevd_vars.py,v retrieving revision 1.46 retrieving revision 1.47 diff -C2 -d -r1.46 -r1.47 *** pydevd_vars.py 5 Jul 2008 19:42:13 -0000 1.46 --- pydevd_vars.py 6 Aug 2008 16:21:41 -0000 1.47 *************** *** 45,50 **** try: ! typeMap.append(set, pydevd_resolver.setResolver) ! typeMap.append(frozenset, pydevd_resolver.setResolver) except: pass #not available on all python versions --- 45,50 ---- try: ! typeMap.append((set, pydevd_resolver.setResolver)) ! typeMap.append((frozenset, pydevd_resolver.setResolver)) except: pass #not available on all python versions Index: pydevd_additional_thread_info.py =================================================================== RCS file: /cvsroot/pydev/org.python.pydev.debug/pysrc/pydevd_additional_thread_info.py,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** pydevd_additional_thread_info.py 16 Feb 2008 12:15:59 -0000 1.6 --- pydevd_additional_thread_info.py 6 Aug 2008 16:21:41 -0000 1.7 *************** *** 51,60 **** #A better way would be if we could get the topmost frame for each thread, but that's #not possible (until python 2.5 -- which is the PyDBAdditionalThreadInfoWithCurrentFramesSupport version) #NOT RLock!! (could deadlock if it was) self.lock = threading.Lock() #collection with the refs ! self.pydev_existing_frames = {} def _OnDbFrameCollected(self, ref): --- 51,69 ---- #A better way would be if we could get the topmost frame for each thread, but that's #not possible (until python 2.5 -- which is the PyDBAdditionalThreadInfoWithCurrentFramesSupport version) + #Or if the user compiled threadframe (from http://www.majid.info/mylos/stories/2004/06/10/threadframe.html) #NOT RLock!! (could deadlock if it was) self.lock = threading.Lock() + self._acquire_lock = self.lock.acquire + self._release_lock = self.lock.release #collection with the refs ! d = {} ! self.pydev_existing_frames = d ! try: ! self._iter_frames = d.iterkeys ! except AttributeError: ! self._iter_frames = d.keys ! def _OnDbFrameCollected(self, ref): *************** *** 62,74 **** Callback to be called when a given reference is garbage-collected. ''' ! self.lock.acquire() try: del self.pydev_existing_frames[ref] finally: ! self.lock.release() def _AddDbFrame(self, db_frame): ! self.lock.acquire() try: #create the db frame with a callback to remove it from the dict when it's garbage-collected --- 71,83 ---- Callback to be called when a given reference is garbage-collected. ''' ! self._acquire_lock() try: del self.pydev_existing_frames[ref] finally: ! self._release_lock() def _AddDbFrame(self, db_frame): ! self._acquire_lock() try: #create the db frame with a callback to remove it from the dict when it's garbage-collected *************** *** 77,81 **** self.pydev_existing_frames[r] = r finally: ! self.lock.release() --- 86,90 ---- self.pydev_existing_frames[r] = r finally: ! self._release_lock() *************** *** 91,103 **** return db_frame def IterFrames(self): ! #we may not have yield, so, lets create a list for the iteration ! self.lock.acquire() try: ret = [] ! weak_db_frames = self.pydev_existing_frames.keys() ! ! for weak_db_frame in weak_db_frames: try: ret.append(weak_db_frame().frame) --- 100,111 ---- return db_frame + def IterFrames(self): ! #We cannot use yield (because of the lock) ! self._acquire_lock() try: ret = [] ! for weak_db_frame in self._iter_frames(): try: ret.append(weak_db_frame().frame) *************** *** 106,110 **** return ret finally: ! self.lock.release() def __str__(self): --- 114,118 ---- return ret finally: ! self._release_lock() def __str__(self): *************** *** 117,124 **** # and frames, but to support other versions, we can't rely on that. #======================================================================================================================= ! try: ! sys._current_frames #@UndefinedVariable PyDBAdditionalThreadInfo = PyDBAdditionalThreadInfoWithCurrentFramesSupport ! except AttributeError: ! PyDBAdditionalThreadInfo = PyDBAdditionalThreadInfoWithoutCurrentFramesSupport --- 125,138 ---- # and frames, but to support other versions, we can't rely on that. #======================================================================================================================= ! if hasattr(sys, '_current_frames'): PyDBAdditionalThreadInfo = PyDBAdditionalThreadInfoWithCurrentFramesSupport ! else: ! try: ! import threadframe ! sys._current_frames = threadframe.dict ! assert sys._current_frames is threadframe.dict #Just check if it was correctly set ! PyDBAdditionalThreadInfo = PyDBAdditionalThreadInfoWithCurrentFramesSupport ! except: ! #If all fails, let's use the support without frames ! PyDBAdditionalThreadInfo = PyDBAdditionalThreadInfoWithoutCurrentFramesSupport |
From: Fabio Z. <fa...@us...> - 2008-08-01 18:01:31
|
Update of /cvsroot/pydev/org.python.pydev.debug/pysrc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9962/pysrc Modified Files: coverage.py Log Message: - Removing $id$ (mercurial doesn't seem to handle it well) - Making release 1.3.19 Index: coverage.py =================================================================== RCS file: /cvsroot/pydev/org.python.pydev.debug/pysrc/coverage.py,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** coverage.py 28 Jul 2008 15:53:43 -0000 1.15 --- coverage.py 1 Aug 2008 18:01:39 -0000 1.16 *************** *** 1166,1168 **** # DAMAGE. # - # $Id$ --- 1166,1167 ---- |
From: Fabio Z. <fa...@us...> - 2008-08-01 18:01:25
|
Update of /cvsroot/pydev/org.python.pydev.core/src/org/python/pydev/core/docutils In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9949/src/org/python/pydev/core/docutils Modified Files: WordUtils.java Log Message: - Removing $id$ (mercurial doesn't seem to handle it well) - Making release 1.3.19 |
From: Fabio Z. <fa...@us...> - 2008-08-01 18:01:22
|
Update of /cvsroot/pydev/org.python.pydev/PySrc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9940/PySrc Modified Files: _pydev_xmlrpclib.py Log Message: - Removing $id$ (mercurial doesn't seem to handle it well) - Making release 1.3.19 Index: _pydev_xmlrpclib.py =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/PySrc/_pydev_xmlrpclib.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** _pydev_xmlrpclib.py 28 Jul 2008 15:53:32 -0000 1.4 --- _pydev_xmlrpclib.py 1 Aug 2008 18:01:30 -0000 1.5 *************** *** 3,7 **** # # XML-RPC CLIENT LIBRARY - # $Id$ # # an XML-RPC client interface for Python. --- 3,6 ---- |
From: Fabio Z. <fa...@us...> - 2008-08-01 01:42:18
|
Update of /cvsroot/pydev/org.python.pydev.site In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27281 Modified Files: site.xml Log Message: Making release 1.3.19 Index: site.xml =================================================================== RCS file: /cvsroot/pydev/org.python.pydev.site/site.xml,v retrieving revision 1.74 retrieving revision 1.75 diff -C2 -d -r1.74 -r1.75 *** site.xml 19 Jun 2008 16:00:37 -0000 1.74 --- site.xml 1 Aug 2008 01:42:27 -0000 1.75 *************** *** 21,24 **** --- 21,31 ---- + <feature url="features/org.python.pydev.feature_1.3.19.jar" id="org.python.pydev.feature" version="1.3.19"> + <category name="Pydev"/> + </feature> + + + + <feature url="features/org.python.pydev.feature_1.3.18.jar" id="org.python.pydev.feature" version="1.3.18"> <category name="Pydev"/> |
From: Fabio Z. <fa...@us...> - 2008-08-01 01:42:14
|
Update of /cvsroot/pydev/org.python.pydev In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27267 Modified Files: Changes.txt Log Message: Making release 1.3.19 Index: Changes.txt =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/Changes.txt,v retrieving revision 1.411 retrieving revision 1.412 diff -C2 -d -r1.411 -r1.412 *** Changes.txt 31 Jul 2008 01:47:37 -0000 1.411 --- Changes.txt 1 Aug 2008 01:42:22 -0000 1.412 *************** *** 10,33 **** Pydev <ul> - <li><strong>Ctr+/</strong>: Changed to toggle comment (instead of only comment) -- patch from Christoph Pickl</li> <li><strong>Eclipse 3.2</strong>: Interactive console working / fixed some incompatibilities</li> <li><strong>Eclipse 3.4</strong>: Hyperlinks working</li> <li><strong>Eclipse 3.4</strong>: Move / rename working</li> <li><strong>raw_input() and input()</strong>: functions are now changed when a program is launched from eclipse to consider a trailing '\r'</li> <li><strong>Pydev package explorer</strong>: Link working with compare editor</li> <li><strong>Auto-indent</strong>: Fixed problem when smart indent was turned off</li> <li><strong>Debugger</strong>: Better inspection of internal variables for dict, list, tuple, set and frozenset</li> <li><strong>Console</strong>: When a parenthesis was being entered, the text to the end of the line was being deleted</li> ! <li>Improved code formatter to deal with operators (+, -, *, etc)</li> ! <li>Improved code formatter to handle '=' differently inside function calls / keyword args</li> <li>Applied patch that fixes race condition in PythonNatureStore (thanks to Radim Kubacki)</li> <li>Applied patch that fixes race condition in PythonNature (thanks to Radim Kubacki)</li> <li>Fixed bug related to having multiple editors with the same file (while having the spell service on)</li> <li>Applying a template could have the wrong end line delimiter applied</li> <li>Fixed NPE when creating editor with no interpreter configured</li> <li>Hyperlink works in the same way that F3 (saves file before search)</li> - <li>Fixed problem while navigating pydev package explorer ( https://sourceforge.net/tracker/index.php?func=detail&aid=2008015&group_id=85796&atid=577329 )</li> </ul> after 1.3.17 --- 10,35 ---- Pydev <ul> <li><strong>Eclipse 3.2</strong>: Interactive console working / fixed some incompatibilities</li> <li><strong>Eclipse 3.4</strong>: Hyperlinks working</li> <li><strong>Eclipse 3.4</strong>: Move / rename working</li> <li><strong>raw_input() and input()</strong>: functions are now changed when a program is launched from eclipse to consider a trailing '\r'</li> + <li><strong>Ctr+/</strong>: Changed to toggle comment (instead of only comment) -- patch from Christoph Pickl</li> <li><strong>Pydev package explorer</strong>: Link working with compare editor</li> <li><strong>Auto-indent</strong>: Fixed problem when smart indent was turned off</li> <li><strong>Debugger</strong>: Better inspection of internal variables for dict, list, tuple, set and frozenset</li> <li><strong>Console</strong>: When a parenthesis was being entered, the text to the end of the line was being deleted</li> ! <li><strong>Code Formatter</strong>: can deal with operators (+, -, *, etc)</li> ! <li><strong>Code Formatter</strong>: can handle '=' differently inside function calls / keyword args</li> ! <li>Fixed problem while navigating pydev package explorer</li> <li>Applied patch that fixes race condition in PythonNatureStore (thanks to Radim Kubacki)</li> <li>Applied patch that fixes race condition in PythonNature (thanks to Radim Kubacki)</li> <li>Fixed bug related to having multiple editors with the same file (while having the spell service on)</li> + <li>Fixed bug related to having the pythonpath lost on closed/imported projects</li> <li>Applying a template could have the wrong end line delimiter applied</li> <li>Fixed NPE when creating editor with no interpreter configured</li> <li>Hyperlink works in the same way that F3 (saves file before search)</li> </ul> + after 1.3.17 |
From: Fabio Z. <fa...@us...> - 2008-07-31 23:48:13
|
Update of /cvsroot/pydev/org.python.pydev.debug/src_console/org/python/pydev/debug/newconsole/env In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14099/src_console/org/python/pydev/debug/newconsole/env Modified Files: IProcessFactory.java Log Message: - Fixed problems when calling Runtime.exec([]) with empty/null args - Fixed synch problem getting code analysis severities Index: IProcessFactory.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev.debug/src_console/org/python/pydev/debug/newconsole/env/IProcessFactory.java,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** IProcessFactory.java 14 Jun 2008 23:36:00 -0000 1.7 --- IProcessFactory.java 31 Jul 2008 23:48:22 -0000 1.8 *************** *** 108,112 **** throw new RuntimeException("Expected interpreter manager to be python or jython related."); } ! process = Runtime.getRuntime().exec(commandLine, env, null); PydevSpawnedInterpreterProcess spawnedInterpreterProcess = new PydevSpawnedInterpreterProcess(process, launch); --- 108,112 ---- throw new RuntimeException("Expected interpreter manager to be python or jython related."); } ! process = SimpleRunner.createProcess(commandLine, env, null); PydevSpawnedInterpreterProcess spawnedInterpreterProcess = new PydevSpawnedInterpreterProcess(process, launch); |
From: Fabio Z. <fa...@us...> - 2008-07-31 23:48:13
|
Update of /cvsroot/pydev/org.python.pydev.debug/src/org/python/pydev/debug/codecoverage In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14099/src/org/python/pydev/debug/codecoverage Modified Files: PyCoverage.java Log Message: - Fixed problems when calling Runtime.exec([]) with empty/null args - Fixed synch problem getting code analysis severities Index: PyCoverage.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev.debug/src/org/python/pydev/debug/codecoverage/PyCoverage.java,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** PyCoverage.java 15 Sep 2007 18:48:58 -0000 1.21 --- PyCoverage.java 31 Jul 2008 23:48:22 -0000 1.22 *************** *** 19,22 **** --- 19,23 ---- import org.python.pydev.debug.ui.launching.PythonRunnerConfig; import org.python.pydev.plugin.PydevPlugin; + import org.python.pydev.runners.SimpleRunner; import org.python.pydev.utils.PyFileListing; import org.python.pydev.utils.PyFileListing.PyFileListingInfo; *************** *** 256,263 **** */ private Process execute(String[] cmdLine) throws IOException { ! Process p; ! ! p = Runtime.getRuntime().exec(cmdLine, null); ! return p; } --- 257,261 ---- */ private Process execute(String[] cmdLine) throws IOException { ! return SimpleRunner.createProcess(cmdLine, null); } |
From: Fabio Z. <fa...@us...> - 2008-07-31 23:48:09
|
Update of /cvsroot/pydev/org.python.pydev/src_completions/org/python/pydev/editor/codecompletion/revisited In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14076/src_completions/org/python/pydev/editor/codecompletion/revisited Modified Files: AbstractASTManager.java Log Message: - Fixed problems when calling Runtime.exec([]) with empty/null args - Fixed synch problem getting code analysis severities Index: AbstractASTManager.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src_completions/org/python/pydev/editor/codecompletion/revisited/AbstractASTManager.java,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** AbstractASTManager.java 31 Jul 2008 01:47:36 -0000 1.17 --- AbstractASTManager.java 31 Jul 2008 23:48:18 -0000 1.18 *************** *** 47,50 **** --- 47,55 ---- public abstract class AbstractASTManager implements ICodeCompletionASTManager, Serializable { + /** + * changed to 10L on release 1.3.19 + */ + protected static final long serialVersionUID = 10L; + private static final IToken[] EMPTY_ITOKEN_ARRAY = new IToken[0]; |
From: Fabio Z. <fa...@us...> - 2008-07-31 23:48:09
|
Update of /cvsroot/pydev/org.python.pydev/src/org/python/pydev/runners In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14076/src/org/python/pydev/runners Modified Files: SimpleRunner.java Log Message: - Fixed problems when calling Runtime.exec([]) with empty/null args - Fixed synch problem getting code analysis severities Index: SimpleRunner.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/runners/SimpleRunner.java,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -d -r1.26 -r1.27 *** SimpleRunner.java 14 Jun 2008 22:14:55 -0000 1.26 --- SimpleRunner.java 31 Jul 2008 23:48:17 -0000 1.27 *************** *** 38,45 **** */ public static Process createProcess(String[] cmdarray, File workingDir) throws IOException { ! return Runtime.getRuntime().exec(cmdarray, null, workingDir); } /** * THIS CODE IS COPIED FROM org.eclipse.debug.internal.core.LaunchManager * --- 38,68 ---- */ public static Process createProcess(String[] cmdarray, File workingDir) throws IOException { ! return Runtime.getRuntime().exec(getWithoutEmptyParams(cmdarray), null, workingDir); ! } ! ! /** ! * Passes the commands directly to Runtime.exec (with a null envp) ! */ ! public static Process createProcess(String[] cmdarray, String[] envp, File workingDir) throws IOException { ! return Runtime.getRuntime().exec(getWithoutEmptyParams(cmdarray), getWithoutEmptyParams(envp), workingDir); } /** + * @return a new array without any null/empty elements originally contained in the array. + */ + private static String[] getWithoutEmptyParams(String[] cmdarray) { + if(cmdarray == null){ + return null; + } + ArrayList<String> list = new ArrayList<String>(); + for (String string : cmdarray) { + if(string != null && string.length() > 0){ + list.add(string); + } + } + return list.toArray(new String[list.size()]); + } + + /** * THIS CODE IS COPIED FROM org.eclipse.debug.internal.core.LaunchManager * *************** *** 306,310 **** } } ! process = Runtime.getRuntime().exec(cmdarray, envp, workingDir); } catch (Exception e) { throw new RuntimeException(e); --- 329,333 ---- } } ! process = createProcess(cmdarray, envp, workingDir); } catch (Exception e) { throw new RuntimeException(e); |
From: Fabio Z. <fa...@us...> - 2008-07-31 01:48:04
|
Update of /cvsroot/pydev/org.python.pydev.refactoring/tests/org/python/pydev/refactoring/tests/adapter In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32048/tests/org/python/pydev/refactoring/tests/adapter Modified Files: CodeCompletionASTManagerStub.java Log Message: <li>Fixed NPE when creating editor with no interpreter configured</li> <li>Hyperlink works in the same way that F3 (saves file before search)</li> <li>Fixed problem while navigating pydev package explorer ( https://sourceforge.net/tracker/index.php?func=detail&aid=2008015&group_id=85796&atid=577329 )</li> <li>Applied patch that fixes race condition in PythonNature (thanks to Radim Kubacki)</li> <li><strong>Eclipse 3.4</strong>: Move / rename working</li> Index: CodeCompletionASTManagerStub.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev.refactoring/tests/org/python/pydev/refactoring/tests/adapter/CodeCompletionASTManagerStub.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** CodeCompletionASTManagerStub.java 20 Oct 2007 19:31:00 -0000 1.3 --- CodeCompletionASTManagerStub.java 31 Jul 2008 01:48:12 -0000 1.4 *************** *** 140,144 **** } ! public void setProject(IProject project, boolean restoreDeltas) { throw new RuntimeException("Not implemented"); } --- 140,144 ---- } ! public void setProject(IProject project, IPythonNature nature, boolean restoreDeltas) { throw new RuntimeException("Not implemented"); } |
From: Fabio Z. <fa...@us...> - 2008-07-31 01:47:46
|
Update of /cvsroot/pydev/org.python.pydev.core/src/org/python/pydev/core In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31648/src/org/python/pydev/core Modified Files: IProjectModulesManager.java IPythonPathNature.java ICodeCompletionASTManager.java Log Message: <li>Fixed NPE when creating editor with no interpreter configured</li> <li>Hyperlink works in the same way that F3 (saves file before search)</li> <li>Fixed problem while navigating pydev package explorer ( https://sourceforge.net/tracker/index.php?func=detail&aid=2008015&group_id=85796&atid=577329 )</li> <li>Applied patch that fixes race condition in PythonNature (thanks to Radim Kubacki)</li> <li><strong>Eclipse 3.4</strong>: Move / rename working</li> Index: IPythonPathNature.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev.core/src/org/python/pydev/core/IPythonPathNature.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** IPythonPathNature.java 13 Aug 2007 01:16:18 -0000 1.4 --- IPythonPathNature.java 31 Jul 2008 01:47:54 -0000 1.5 *************** *** 22,26 **** * @param project */ ! public void setProject(IProject project); /** --- 22,26 ---- * @param project */ ! public void setProject(IProject project, IPythonNature nature); /** Index: ICodeCompletionASTManager.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev.core/src/org/python/pydev/core/ICodeCompletionASTManager.java,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** ICodeCompletionASTManager.java 18 May 2008 20:02:26 -0000 1.17 --- ICodeCompletionASTManager.java 31 Jul 2008 01:47:54 -0000 1.18 *************** *** 37,41 **** * @param restoreDeltas says whether deltas should be restored (if they are not, they should be discarded) */ ! public abstract void setProject(IProject project, boolean restoreDeltas); --- 37,41 ---- * @param restoreDeltas says whether deltas should be restored (if they are not, they should be discarded) */ ! public abstract void setProject(IProject project, IPythonNature nature, boolean restoreDeltas); Index: IProjectModulesManager.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev.core/src/org/python/pydev/core/IProjectModulesManager.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** IProjectModulesManager.java 2 Nov 2007 13:26:16 -0000 1.4 --- IProjectModulesManager.java 31 Jul 2008 01:47:54 -0000 1.5 *************** *** 20,24 **** * @param restoreDeltas says whether deltas should be restored (if they are not, they should be discarded) */ ! public abstract void setProject(IProject project, boolean restoreDeltas); public abstract void processUpdate(ModulesKey data); --- 20,24 ---- * @param restoreDeltas says whether deltas should be restored (if they are not, they should be discarded) */ ! public abstract void setProject(IProject project, IPythonNature nature, boolean restoreDeltas); public abstract void processUpdate(ModulesKey data); |
From: Fabio Z. <fa...@us...> - 2008-07-31 01:47:46
|
Update of /cvsroot/pydev/org.python.pydev.core/src/org/python/pydev/core/structure In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31648/src/org/python/pydev/core/structure Modified Files: FastStack.java Log Message: <li>Fixed NPE when creating editor with no interpreter configured</li> <li>Hyperlink works in the same way that F3 (saves file before search)</li> <li>Fixed problem while navigating pydev package explorer ( https://sourceforge.net/tracker/index.php?func=detail&aid=2008015&group_id=85796&atid=577329 )</li> <li>Applied patch that fixes race condition in PythonNature (thanks to Radim Kubacki)</li> <li><strong>Eclipse 3.4</strong>: Move / rename working</li> Index: FastStack.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev.core/src/org/python/pydev/core/structure/FastStack.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** FastStack.java 10 Jun 2007 18:49:37 -0000 1.3 --- FastStack.java 31 Jul 2008 01:47:54 -0000 1.4 *************** *** 236,239 **** --- 236,251 ---- } + @Override + public String toString() { + FastStringBuffer buf = new FastStringBuffer("FastStack [\n", 25*this.size); + for (E element: this) { + buf.append(" "); + buf.append(element.toString()); + buf.append("\n"); + } + buf.append("]"); + return buf.toString(); + } + public int hashCode() { throw new RuntimeException("Not hashable"); |
From: Fabio Z. <fa...@us...> - 2008-07-31 01:47:32
|
Update of /cvsroot/pydev/org.python.pydev/tests/pysrc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31519/tests/pysrc Modified Files: .cvsignore Log Message: <li>Fixed NPE when creating editor with no interpreter configured</li> <li>Hyperlink works in the same way that F3 (saves file before search)</li> <li>Fixed problem while navigating pydev package explorer ( https://sourceforge.net/tracker/index.php?func=detail&aid=2008015&group_id=85796&atid=577329 )</li> <li>Applied patch that fixes race condition in PythonNature (thanks to Radim Kubacki)</li> <li><strong>Eclipse 3.4</strong>: Move / rename working</li> Index: .cvsignore =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/tests/pysrc/.cvsignore,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** .cvsignore 17 May 2006 01:05:20 -0000 1.1 --- .cvsignore 31 Jul 2008 01:47:37 -0000 1.2 *************** *** 1 **** --- 1,4 ---- *.astdelta + indexcache + AdditionalProjectInterpreterInfo.pydevinfo + asthelper.completions |
From: Fabio Z. <fa...@us...> - 2008-07-31 01:47:32
|
Update of /cvsroot/pydev/org.python.pydev/tests/pysrc2 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31519/tests/pysrc2 Modified Files: .cvsignore Log Message: <li>Fixed NPE when creating editor with no interpreter configured</li> <li>Hyperlink works in the same way that F3 (saves file before search)</li> <li>Fixed problem while navigating pydev package explorer ( https://sourceforge.net/tracker/index.php?func=detail&aid=2008015&group_id=85796&atid=577329 )</li> <li>Applied patch that fixes race condition in PythonNature (thanks to Radim Kubacki)</li> <li><strong>Eclipse 3.4</strong>: Move / rename working</li> Index: .cvsignore =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/tests/pysrc2/.cvsignore,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** .cvsignore 29 Jun 2006 12:15:34 -0000 1.1 --- .cvsignore 31 Jul 2008 01:47:37 -0000 1.2 *************** *** 1 **** --- 1,4 ---- *.astdelta + indexcache + asthelper.completions + AdditionalProjectInterpreterInfo.pydevinfo |
From: Fabio Z. <fa...@us...> - 2008-07-31 01:47:32
|
Update of /cvsroot/pydev/org.python.pydev/src_completions/org/python/pydev/editor/codecompletion/revisited/javaintegration In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31519/src_completions/org/python/pydev/editor/codecompletion/revisited/javaintegration Modified Files: JavaProjectModulesManager.java Log Message: <li>Fixed NPE when creating editor with no interpreter configured</li> <li>Hyperlink works in the same way that F3 (saves file before search)</li> <li>Fixed problem while navigating pydev package explorer ( https://sourceforge.net/tracker/index.php?func=detail&aid=2008015&group_id=85796&atid=577329 )</li> <li>Applied patch that fixes race condition in PythonNature (thanks to Radim Kubacki)</li> <li><strong>Eclipse 3.4</strong>: Move / rename working</li> Index: JavaProjectModulesManager.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src_completions/org/python/pydev/editor/codecompletion/revisited/javaintegration/JavaProjectModulesManager.java,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** JavaProjectModulesManager.java 15 Jun 2008 13:15:10 -0000 1.13 --- JavaProjectModulesManager.java 31 Jul 2008 01:47:37 -0000 1.14 *************** *** 270,273 **** --- 270,276 ---- System.out.println("Trying to get module in java project modules manager: "+name); } + if(name.startsWith(".")){ //this happens when looking for a relative import + return null; + } try { IJavaElement javaElement = this.javaProject.findType(name); *************** *** 382,386 **** } ! public void setProject(IProject project, boolean restoreDeltas) { throw new RuntimeException("Not implemented"); } --- 385,389 ---- } ! public void setProject(IProject project, IPythonNature nature, boolean restoreDeltas) { throw new RuntimeException("Not implemented"); } |
From: Fabio Z. <fa...@us...> - 2008-07-31 01:47:31
|
Update of /cvsroot/pydev/org.python.pydev/tests_navigator/org/python/pydev/navigator In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31519/tests_navigator/org/python/pydev/navigator Modified Files: PythonPathNatureStub.java FolderStub.java PythonModelProviderTest.java Log Message: <li>Fixed NPE when creating editor with no interpreter configured</li> <li>Hyperlink works in the same way that F3 (saves file before search)</li> <li>Fixed problem while navigating pydev package explorer ( https://sourceforge.net/tracker/index.php?func=detail&aid=2008015&group_id=85796&atid=577329 )</li> <li>Applied patch that fixes race condition in PythonNature (thanks to Radim Kubacki)</li> <li><strong>Eclipse 3.4</strong>: Move / rename working</li> Index: FolderStub.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/tests_navigator/org/python/pydev/navigator/FolderStub.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** FolderStub.java 28 Jun 2008 13:29:19 -0000 1.5 --- FolderStub.java 31 Jul 2008 01:47:36 -0000 1.6 *************** *** 30,41 **** private File folder; private ProjectStub project; public FolderStub(ProjectStub stub, File parentFile) { ! Assert.isTrue(parentFile.exists() && parentFile.isDirectory()); ! this.project = stub; ! this.folder = parentFile; } public IContainer getParent() { return project.getFolder(this.folder.getParentFile()); } --- 30,50 ---- private File folder; private ProjectStub project; + private IContainer parent; public FolderStub(ProjectStub stub, File parentFile) { ! this(stub, null, parentFile); ! } ! ! public FolderStub(ProjectStub stub, IContainer parent, File parentFile) { ! Assert.isTrue(parentFile.exists() && parentFile.isDirectory()); ! this.project = stub; ! this.folder = parentFile; ! this.parent = parent; } public IContainer getParent() { + if(parent != null){ + return parent; + } return project.getFolder(this.folder.getParentFile()); } Index: PythonModelProviderTest.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/tests_navigator/org/python/pydev/navigator/PythonModelProviderTest.java,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** PythonModelProviderTest.java 10 May 2008 16:29:24 -0000 1.10 --- PythonModelProviderTest.java 31 Jul 2008 01:47:36 -0000 1.11 *************** *** 15,20 **** --- 15,22 ---- import org.eclipse.ui.navigator.PipelinedViewerUpdate; import org.python.pydev.core.IPythonPathNature; + import org.python.pydev.core.REF; import org.python.pydev.core.TestDependent; import org.python.pydev.navigator.elements.IWrappedResource; + import org.python.pydev.navigator.elements.PythonFolder; import org.python.pydev.navigator.elements.PythonProjectSourceFolder; import org.python.pydev.navigator.elements.PythonSourceFolder; *************** *** 28,35 **** PythonModelProviderTest test = new PythonModelProviderTest(); test.setUp(); ! test.testProjectIsRoot2(); test.tearDown(); ! junit.textui.TestRunner.run(PythonModelProviderTest.class); } catch (Throwable e) { e.printStackTrace(); --- 30,38 ---- PythonModelProviderTest test = new PythonModelProviderTest(); test.setUp(); ! test.testFolderToSourceFolder2(); test.tearDown(); + System.out.println("OK"); ! // junit.textui.TestRunner.run(PythonModelProviderTest.class); } catch (Throwable e) { e.printStackTrace(); *************** *** 350,352 **** --- 353,523 ---- } + + public void testAddSourceFolderToSourceFolder() throws Exception { + final HashSet<String> pythonPathSet = new HashSet<String>(); + pythonPathSet.add(TestDependent.TEST_PYSRC_NAVIGATOR_LOC+"projroot/source"); + String source2Folder = TestDependent.TEST_PYSRC_NAVIGATOR_LOC+"projroot/source2"; + + File f = new File(source2Folder); + if(f.exists()){ + f.delete(); + } + + pythonPathSet.add(source2Folder); //still not created! + PythonNature nature = createNature(pythonPathSet); + + project = new ProjectStub(new File(TestDependent.TEST_PYSRC_NAVIGATOR_LOC+"projroot"), nature, false); + provider = new PythonModelProvider(); + Object[] children1 = provider.getChildren(project); + assertEquals(1, children1.length); + assertTrue(children1[0] instanceof PythonSourceFolder); + + Set set = new HashSet(); + + f.mkdir(); + try { + FolderStub source2FolderFile = new FolderStub(project, f); + set.add(source2FolderFile); + provider.interceptAdd(new PipelinedShapeModification(project, set)); + + assertEquals(1, set.size()); + assertTrue(set.iterator().next() instanceof PythonSourceFolder); + } finally { + f.delete(); + } + } + + public void testFolderToSourceFolder() throws Exception { + final HashSet<String> pythonPathSet = new HashSet<String>(); + pythonPathSet.add(TestDependent.TEST_PYSRC_NAVIGATOR_LOC+"projroot/source"); + String source2Folder = TestDependent.TEST_PYSRC_NAVIGATOR_LOC+"projroot/source2"; + + File f = new File(source2Folder); + File f1 = new File(f, "childFolder"); + + if(f1.exists()){ + f1.delete(); + } + if(f.exists()){ + f.delete(); + } + + pythonPathSet.add(source2Folder); //still not created! + PythonNature nature = createNature(pythonPathSet); + + project = new ProjectStub(new File(TestDependent.TEST_PYSRC_NAVIGATOR_LOC+"projroot"), nature, false); + provider = new PythonModelProvider(); + Object[] children1 = provider.getChildren(project); + assertEquals(1, children1.length); + assertTrue(children1[0] instanceof PythonSourceFolder); + + + f.mkdir(); + f1.mkdir(); + try { + FolderStub source2FolderFile = new FolderStub(project, f); + FolderStub source2FolderChild = new FolderStub(project, source2FolderFile, f1); + + Set set = new HashSet(); + set.add(source2FolderChild); + provider.interceptAdd(new PipelinedShapeModification(source2FolderFile, set)); + + assertEquals(1, set.size()); + PythonFolder c = (PythonFolder) set.iterator().next(); + PythonSourceFolder sourceFolder = c.getSourceFolder(); + assertTrue(sourceFolder instanceof PythonSourceFolder); + + set.clear(); + set.add(source2FolderChild); + provider.interceptAdd(new PipelinedShapeModification(source2FolderFile, set)); + } finally { + f1.delete(); + f.delete(); + } + } + + public void testFolderToSourceFolder2() throws Exception { + final HashSet<String> pythonPathSet = new HashSet<String>(); + pythonPathSet.add(TestDependent.TEST_PYSRC_NAVIGATOR_LOC+"projroot/source"); + String source2Folder = TestDependent.TEST_PYSRC_NAVIGATOR_LOC+"projroot/source2"; + + File f = new File(source2Folder); + File f1 = new File(f, "childFolder"); + File f2 = new File(f1, "rechildFolder"); + + if(f2.exists()){ + f2.delete(); + } + + if(f1.exists()){ + f1.delete(); + } + if(f.exists()){ + f.delete(); + } + + pythonPathSet.add(source2Folder); //still not created! + PythonNature nature = createNature(pythonPathSet); + + project = new ProjectStub(new File(TestDependent.TEST_PYSRC_NAVIGATOR_LOC+"projroot"), nature, false); + provider = new PythonModelProvider(); + Object[] children1 = provider.getChildren(project); + assertEquals(1, children1.length); + assertTrue(children1[0] instanceof PythonSourceFolder); + + + f.mkdir(); + f1.mkdir(); + f2.mkdir(); + try { + FolderStub source2FolderFile = new FolderStub(project, f); + FolderStub source2FolderChild = new FolderStub(project, source2FolderFile, f1); + FolderStub source2FolderReChild = new FolderStub(project, source2FolderChild, f2); + + Set set = new HashSet(); + set.add(source2FolderReChild); + provider.interceptAdd(new PipelinedShapeModification(source2FolderChild, set)); + + assertEquals(1, set.size()); + PythonFolder c = (PythonFolder) set.iterator().next(); + PythonSourceFolder sourceFolder = c.getSourceFolder(); + assertTrue(sourceFolder instanceof PythonSourceFolder); + + set.clear(); + set.add(source2FolderChild); + provider.interceptRemove(new PipelinedShapeModification(source2FolderFile, set)); + assertTrue(set.iterator().next() instanceof PythonFolder); + // System.out.println(set); + + set.clear(); + set.add(source2FolderReChild); + provider.interceptAdd(new PipelinedShapeModification(source2FolderChild, set)); + assertTrue(set.iterator().next() instanceof PythonFolder); + // System.out.println(set); + + + set.clear(); + set.add(source2FolderChild); + provider.interceptRemove(new PipelinedShapeModification(source2FolderFile, set)); + assertTrue(set.iterator().next() instanceof PythonFolder); + // System.out.println(set); + + + set.clear(); + set.add(source2FolderReChild); + provider.interceptAdd(new PipelinedShapeModification(source2FolderChild, set)); + assertTrue(set.iterator().next() instanceof PythonFolder); + // System.out.println(set); + + + + + + } finally { + f2.delete(); + f1.delete(); + f.delete(); + } + } + } Index: PythonPathNatureStub.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/tests_navigator/org/python/pydev/navigator/PythonPathNatureStub.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** PythonPathNatureStub.java 10 Mar 2007 14:32:45 -0000 1.1 --- PythonPathNatureStub.java 31 Jul 2008 01:47:36 -0000 1.2 *************** *** 7,10 **** --- 7,11 ---- import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; + import org.python.pydev.core.IPythonNature; import org.python.pydev.core.IPythonPathNature; *************** *** 41,45 **** } ! public void setProject(IProject project) { throw new RuntimeException("Not impl"); --- 42,46 ---- } ! public void setProject(IProject project, IPythonNature nature) { throw new RuntimeException("Not impl"); |
From: Fabio Z. <fa...@us...> - 2008-07-31 01:47:31
|
Update of /cvsroot/pydev/org.python.pydev/tests_completions/org/python/pydev/editor/codecompletion/revisited/javaintegration In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31519/tests_completions/org/python/pydev/editor/codecompletion/revisited/javaintegration Modified Files: AbstractJavaIntegrationTestWorkbench.java Log Message: <li>Fixed NPE when creating editor with no interpreter configured</li> <li>Hyperlink works in the same way that F3 (saves file before search)</li> <li>Fixed problem while navigating pydev package explorer ( https://sourceforge.net/tracker/index.php?func=detail&aid=2008015&group_id=85796&atid=577329 )</li> <li>Applied patch that fixes race condition in PythonNature (thanks to Radim Kubacki)</li> <li><strong>Eclipse 3.4</strong>: Move / rename working</li> Index: AbstractJavaIntegrationTestWorkbench.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/tests_completions/org/python/pydev/editor/codecompletion/revisited/javaintegration/AbstractJavaIntegrationTestWorkbench.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** AbstractJavaIntegrationTestWorkbench.java 18 May 2008 20:02:16 -0000 1.3 --- AbstractJavaIntegrationTestWorkbench.java 31 Jul 2008 01:47:36 -0000 1.4 *************** *** 118,121 **** --- 118,153 ---- String mod1Contents = "import java.lang.Class\njava.lang.Class"; mod1.create(new ByteArrayInputStream(mod1Contents.getBytes()), true, monitor); + + + + PythonNature nature = PythonNature.getPythonNature(project); + + //Let's give it some time to run the jobs that restore the nature + long finishAt = System.currentTimeMillis()+5000; //5 secs is the max tie + + Display display = Display.getCurrent(); + if(display == null){ + display = Display.getDefault(); + } + Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); + while (!shell.isDisposed()) { + if (!display.readAndDispatch()){ + display.sleep(); + } + if(finishAt<System.currentTimeMillis()){ + break; + } + if(nature != null){ + if(nature.getAstManager() != null){ + break; + } + } + } + + + assertTrue(nature != null); + assertTrue(nature.getAstManager() != null); + + editor = (PyEdit) PydevPlugin.doOpenEditor(mod1, true); } *************** *** 137,144 **** /** * Goes to 'manual' mode to allow the interaction with the opened eclipse instance. */ ! protected void goToManual() { System.out.println("going to manual..."); Display display = Display.getCurrent(); --- 169,182 ---- + protected void goToManual() { + goToManual(-1); + } + /** * Goes to 'manual' mode to allow the interaction with the opened eclipse instance. */ ! protected void goToManual(long millis) { ! long finishAt = System.currentTimeMillis()+millis; ! System.out.println("going to manual..."); Display display = Display.getCurrent(); *************** *** 151,154 **** --- 189,195 ---- display.sleep(); } + if(millis > 0 && finishAt<System.currentTimeMillis()){ + break; + } } System.out.println("finishing..."); *************** *** 299,310 **** } ! /** * Creates a source folder and configures the project to use it and the junit.jar */ protected IFolder createSourceFolder(IProgressMonitor monitor, IProject project) throws CoreException { IFolder sourceFolder = project.getFolder(new Path("src")); sourceFolder.create(true, true, monitor); ! PythonNature.addNature(project, monitor, PythonNature.JYTHON_VERSION_2_1, "/pydev_unit_test_project/src|/pydev_unit_test_project/junit.jar"); return sourceFolder; } --- 340,362 ---- } ! /** * Creates a source folder and configures the project to use it and the junit.jar */ protected IFolder createSourceFolder(IProgressMonitor monitor, IProject project) throws CoreException { + return createSourceFolder(monitor, project, true); + } + + /** + * Creates a source folder and configures the project to use it and the junit.jar + * + * @param addNature if false, no nature will be initially added to the project (if true, the nature will be added) + */ + protected IFolder createSourceFolder(IProgressMonitor monitor, IProject project, boolean addNature) throws CoreException { IFolder sourceFolder = project.getFolder(new Path("src")); sourceFolder.create(true, true, monitor); ! if(addNature){ ! PythonNature.addNature(project, monitor, PythonNature.JYTHON_VERSION_2_1, "/pydev_unit_test_project/src|/pydev_unit_test_project/junit.jar"); ! } return sourceFolder; } |