[Pydev-cvs] org.python.pydev/src/org/python/pydev/editor/codecompletion/revisited PythonPathHelper
Brought to you by:
fabioz
From: Fabio Z. <fa...@us...> - 2007-02-21 10:14:06
|
Update of /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion/revisited In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9295/src/org/python/pydev/editor/codecompletion/revisited Modified Files: PythonPathHelper.java ProjectModulesManager.java ModulesManager.java Log Message: pythonpath handling Index: PythonPathHelper.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion/revisited/PythonPathHelper.java,v retrieving revision 1.43 retrieving revision 1.44 diff -C2 -d -r1.43 -r1.44 *** PythonPathHelper.java 9 Dec 2006 19:53:43 -0000 1.43 --- PythonPathHelper.java 21 Feb 2007 10:14:04 -0000 1.44 *************** *** 41,45 **** * This is a list of Files containg the pythonpath. */ ! public List<String> pythonpath = new ArrayList<String>(); /** --- 41,45 ---- * This is a list of Files containg the pythonpath. */ ! private volatile List<String> pythonpath = new ArrayList<String>(); /** *************** *** 245,350 **** } ! //go through our pythonpath and check the beggining ! for (Iterator iter = pythonpath.iterator(); iter.hasNext();) { ! ! String element = getDefaultPathStr((String) iter.next()); ! if(fullPath.startsWith(element)){ ! String s = fullPath.substring(element.length()); ! if(s.startsWith("/")){ ! s = s.substring(1); ! } ! s = s.replaceAll("/","."); ! ! ! //if it is a valid module, let's find out if it exists... ! if(isValidModule(s)){ ! if(s.indexOf(".") != -1){ ! File root = new File(element); ! if(root.exists() == false){ ! continue; ! } ! ! //this means that more than 1 module is specified, so, in order to get it, ! //we have to go and see if all the folders to that module have __init__.py in it... ! String[] modulesParts = FullRepIterable.dotSplit(s); ! ! if(modulesParts.length > 1 && isFile){ ! String[] t = new String[modulesParts.length -1]; ! ! for (int i = 0; i < modulesParts.length-1; i++) { ! t[i] = modulesParts[i]; ! } ! t[t.length -1] = t[t.length -1]+"."+modulesParts[modulesParts.length-1]; ! modulesParts = t; ! } ! ! //here, in modulesParts, we have something like ! //["compiler", "ast.py"] - if file ! //["pywin","debugger"] - if folder ! // ! //root starts with the pythonpath folder that starts with the same ! //chars as the full path passed in. ! boolean isValid = true; ! for (int i = 0; i < modulesParts.length && root != null; i++) { ! root = new File(REF.getFileAbsolutePath(root) + "/" + modulesParts[i]); ! ! //check if file is in root... ! if(isValidFileMod(modulesParts[i])){ ! if(root.exists() && root.isFile()){ ! break; ! } ! ! }else{ ! //this part is a folder part... check if it is a valid module (has init). ! if(isFileOrFolderWithInit(root) == false){ ! isValid = false; ! break; ! } ! //go on and check the next part. ! } ! } ! if(isValid){ ! if(isFile){ ! s = stripExtension(s); ! }else if(moduleFile.exists() == false){ ! //ok, it does not exist, so isFile will not work, let's just check if it is ! //a valid module (ends with .py or .pyw) and if it is, strip the extension ! if(isValidFileMod(s)){ ! s = stripExtension(s); ! } ! } ! return s; ! } ! }else{ ! //simple part, we don't have to go into subfolders to check validity... ! if(isFile){ ! throw new RuntimeException("This should never happen... if it is a file, it always has a dot, so, this should not happen..."); ! }else if (moduleFile.isDirectory() && isFileOrFolderWithInit(moduleFile) == false){ ! return null; ! } ! return s; ! } ! } ! } ! ! } ! //ok, it was not found in any existing way, so, if we don't require the file to exist, let's just do some simpler search and get the ! //first match (if any)... this is useful if the file we are looking for has just been deleted ! if(requireFileToExist == false){ ! //we have to remove the last part (.py, .pyc, .pyw) ! fullPath = FullRepIterable.headAndTail(fullPath)[0]; ! for (String element : pythonpath) { ! element = getDefaultPathStr(element); ! if(fullPath.startsWith(element)){ ! String s = fullPath.substring(element.length()); ! if(s.startsWith("/")){ ! s = s.substring(1); ! } ! s = s.replaceAll("/","."); ! return s; ! } ! } ! } ! return null; } --- 245,353 ---- } ! synchronized (pythonpath) { ! //go through our pythonpath and check the beggining ! for (Iterator iter = pythonpath.iterator(); iter.hasNext();) { ! ! String element = getDefaultPathStr((String) iter.next()); ! if(fullPath.startsWith(element)){ ! String s = fullPath.substring(element.length()); ! if(s.startsWith("/")){ ! s = s.substring(1); ! } ! s = s.replaceAll("/","."); ! ! ! //if it is a valid module, let's find out if it exists... ! if(isValidModule(s)){ ! if(s.indexOf(".") != -1){ ! File root = new File(element); ! if(root.exists() == false){ ! continue; ! } ! ! //this means that more than 1 module is specified, so, in order to get it, ! //we have to go and see if all the folders to that module have __init__.py in it... ! String[] modulesParts = FullRepIterable.dotSplit(s); ! ! if(modulesParts.length > 1 && isFile){ ! String[] t = new String[modulesParts.length -1]; ! ! for (int i = 0; i < modulesParts.length-1; i++) { ! t[i] = modulesParts[i]; ! } ! t[t.length -1] = t[t.length -1]+"."+modulesParts[modulesParts.length-1]; ! modulesParts = t; ! } ! ! //here, in modulesParts, we have something like ! //["compiler", "ast.py"] - if file ! //["pywin","debugger"] - if folder ! // ! //root starts with the pythonpath folder that starts with the same ! //chars as the full path passed in. ! boolean isValid = true; ! for (int i = 0; i < modulesParts.length && root != null; i++) { ! root = new File(REF.getFileAbsolutePath(root) + "/" + modulesParts[i]); ! ! //check if file is in root... ! if(isValidFileMod(modulesParts[i])){ ! if(root.exists() && root.isFile()){ ! break; ! } ! ! }else{ ! //this part is a folder part... check if it is a valid module (has init). ! if(isFileOrFolderWithInit(root) == false){ ! isValid = false; ! break; ! } ! //go on and check the next part. ! } ! } ! if(isValid){ ! if(isFile){ ! s = stripExtension(s); ! }else if(moduleFile.exists() == false){ ! //ok, it does not exist, so isFile will not work, let's just check if it is ! //a valid module (ends with .py or .pyw) and if it is, strip the extension ! if(isValidFileMod(s)){ ! s = stripExtension(s); ! } ! } ! return s; ! } ! }else{ ! //simple part, we don't have to go into subfolders to check validity... ! if(isFile){ ! throw new RuntimeException("This should never happen... if it is a file, it always has a dot, so, this should not happen..."); ! }else if (moduleFile.isDirectory() && isFileOrFolderWithInit(moduleFile) == false){ ! return null; ! } ! return s; ! } ! } ! } ! ! } ! //ok, it was not found in any existing way, so, if we don't require the file to exist, let's just do some simpler search and get the ! //first match (if any)... this is useful if the file we are looking for has just been deleted ! if(requireFileToExist == false){ ! //we have to remove the last part (.py, .pyc, .pyw) ! fullPath = FullRepIterable.headAndTail(fullPath)[0]; ! for (String element : pythonpath) { ! element = getDefaultPathStr(element); ! if(fullPath.startsWith(element)){ ! String s = fullPath.substring(element.length()); ! if(s.startsWith("/")){ ! s = s.substring(1); ! } ! s = s.replaceAll("/","."); ! return s; ! } ! } ! } ! return null; ! ! } } *************** *** 406,412 **** */ public List<String> setPythonPath(String string) { ! pythonpath.clear(); ! getPythonPathFromStr(string, pythonpath); ! return new ArrayList<String>(pythonpath); } --- 409,417 ---- */ public List<String> setPythonPath(String string) { ! synchronized (pythonpath) { ! pythonpath.clear(); ! getPythonPathFromStr(string, pythonpath); ! return new ArrayList<String>(pythonpath); ! } } *************** *** 430,432 **** --- 435,443 ---- } + + + public List<String> getPythonpath() { + return new ArrayList<String>(this.pythonpath); + } + } Index: ProjectModulesManager.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion/revisited/ProjectModulesManager.java,v retrieving revision 1.47 retrieving revision 1.48 diff -C2 -d -r1.47 -r1.48 *** ProjectModulesManager.java 6 Feb 2007 18:33:43 -0000 1.47 --- ProjectModulesManager.java 21 Feb 2007 10:14:04 -0000 1.48 *************** *** 424,429 **** */ public List<String> getCompletePythonPath(String interpreter){ ! List<String> l = new ArrayList<String>(); ! l.addAll(this.pythonPathHelper.pythonpath); ModulesManager[] managersInvolved = getManagersInvolved(true); for (ModulesManager m:managersInvolved) { --- 424,428 ---- */ public List<String> getCompletePythonPath(String interpreter){ ! List<String> l = this.pythonPathHelper.getPythonpath(); ModulesManager[] managersInvolved = getManagersInvolved(true); for (ModulesManager m:managersInvolved) { *************** *** 433,437 **** }else{ ! l.addAll(m.pythonPathHelper.pythonpath); } } --- 432,436 ---- }else{ ! l.addAll(m.pythonPathHelper.getPythonpath()); } } Index: ModulesManager.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion/revisited/ModulesManager.java,v retrieving revision 1.50 retrieving revision 1.51 diff -C2 -d -r1.50 -r1.51 *** ModulesManager.java 5 Feb 2007 15:14:15 -0000 1.50 --- ModulesManager.java 21 Feb 2007 10:14:04 -0000 1.51 *************** *** 632,636 **** public List<String> getPythonPath(){ ! return new ArrayList<String>(pythonPathHelper.pythonpath); } --- 632,636 ---- public List<String> getPythonPath(){ ! return pythonPathHelper.getPythonpath(); } |