[Pydev-cvs] org.python.pydev/src/org/python/pydev/editor/codecompletion/revisited ICodeCompletionAST
Brought to you by:
fabioz
From: Fabio Z. <fa...@us...> - 2005-10-27 16:13:44
|
Update of /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion/revisited In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32387/src/org/python/pydev/editor/codecompletion/revisited Modified Files: ICodeCompletionASTManager.java ProjectModulesManager.java IToken.java AbstractToken.java ASTManager.java ModulesManager.java Log Message: Index: ProjectModulesManager.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion/revisited/ProjectModulesManager.java,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -d -r1.28 -r1.29 *** ProjectModulesManager.java 16 Oct 2005 18:43:46 -0000 1.28 --- ProjectModulesManager.java 27 Oct 2005 16:13:35 -0000 1.29 *************** *** 204,212 **** ! public AbstractModule getModule(String name, PythonNature nature, boolean isLookingForRelative) { ! return getModule(name, nature, true, isLookingForRelative); } ! public AbstractModule getModule(String name, PythonNature nature, boolean checkSystemManager, boolean isLookingForRelative) { ModulesManager[] managersInvolved = this.getManagersInvolved(true); //only get the system manager here (to avoid recursion) --- 204,212 ---- ! public AbstractModule getModule(String name, PythonNature nature, boolean dontSearchInit) { ! return getModule(name, nature, true, dontSearchInit); } ! public AbstractModule getModule(String name, PythonNature nature, boolean checkSystemManager, boolean dontSearchInit) { ModulesManager[] managersInvolved = this.getManagersInvolved(true); //only get the system manager here (to avoid recursion) *************** *** 215,222 **** if (m instanceof ProjectModulesManager) { ProjectModulesManager pM = (ProjectModulesManager) m; ! module = pM.getModule(name, nature, false, isLookingForRelative); }else{ ! module = m.getModule(name, nature, isLookingForRelative); //we already have the system manager here... } if(module != null){ --- 215,222 ---- if (m instanceof ProjectModulesManager) { ProjectModulesManager pM = (ProjectModulesManager) m; ! module = pM.getModule(name, nature, false, dontSearchInit); }else{ ! module = m.getModule(name, nature, dontSearchInit); //we already have the system manager here... } if(module != null){ *************** *** 224,228 **** } } ! return super.getModule(name, nature, isLookingForRelative); } --- 224,228 ---- } } ! return super.getModule(name, nature, dontSearchInit); } Index: ModulesManager.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion/revisited/ModulesManager.java,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -d -r1.28 -r1.29 *** ModulesManager.java 16 Oct 2005 21:31:36 -0000 1.28 --- ModulesManager.java 27 Oct 2005 16:13:35 -0000 1.29 *************** *** 343,350 **** * * @param name ! * @param isLookingForRelative when looking for relative imports, we don't check for __init__ * @return the module represented by this name */ ! public AbstractModule getModule(String name, PythonNature nature, boolean isLookingForRelative) { AbstractModule n = null; --- 343,353 ---- * * @param name ! * @param dontSearchInit is used in a negative form because initially it was isLookingForRelative, but ! * it actually defines if we should look in __init__ modules too, so, the name matches the old signature. ! * ! * NOTE: isLookingForRelative description was: when looking for relative imports, we don't check for __init__ * @return the module represented by this name */ ! public AbstractModule getModule(String name, PythonNature nature, boolean dontSearchInit) { AbstractModule n = null; *************** *** 371,375 **** n = (AbstractModule) getModules().get(new ModulesKey(name, null)); } ! if(!isLookingForRelative){ if(n == null){ n = (AbstractModule) getModules().get(new ModulesKey(name + ".__init__", null)); --- 374,378 ---- n = (AbstractModule) getModules().get(new ModulesKey(name, null)); } ! if(!dontSearchInit){ if(n == null){ n = (AbstractModule) getModules().get(new ModulesKey(name + ".__init__", null)); Index: ASTManager.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion/revisited/ASTManager.java,v retrieving revision 1.79 retrieving revision 1.80 diff -C2 -d -r1.79 -r1.80 *** ASTManager.java 27 Oct 2005 15:24:31 -0000 1.79 --- ASTManager.java 27 Oct 2005 16:13:35 -0000 1.80 *************** *** 270,275 **** * @return the module represented by this name */ ! public AbstractModule getModule(String name, PythonNature nature, boolean isLookingForRelative) { ! return projectModulesManager.getModule(name, nature, isLookingForRelative); } --- 270,275 ---- * @return the module represented by this name */ ! public AbstractModule getModule(String name, PythonNature nature, boolean dontSearchInit) { ! return projectModulesManager.getModule(name, nature, dontSearchInit); } *************** *** 362,366 **** ! if (state.activationToken.length() == 0) { List<IToken> completions = getGlobalCompletions(globalTokens, importedModules.toArray(new IToken[0]), wildImportedModules, state, module); --- 362,380 ---- ! //now, lets check if this is actually a module that is an __init__ (if so, we have to get all ! //the other .py files as modules that are in the same level as the __init__) ! Set<IToken> initial = new HashSet<IToken>(); ! String modName = module.getName(); ! if(modName != null && modName.endsWith(".__init__")){ ! HashSet<IToken> gotten = new HashSet<IToken>(); ! getAbsoluteImportTokens(FullRepIterable.getParentModule(modName), gotten, PyCodeCompletion.TYPE_IMPORT, true); ! for (IToken token : gotten) { ! if(token.getRepresentation().equals("__init__") == false){ ! initial.add(token); ! } ! } ! } ! ! if (state.activationToken.length() == 0) { List<IToken> completions = getGlobalCompletions(globalTokens, importedModules.toArray(new IToken[0]), wildImportedModules, state, module); *************** *** 373,389 **** } } - //now, lets check if this is actually a module that is an __init__ (if so, we have to get all - //the other .py files as modules that are in the same level as the __init__) - String modName = module.getName(); - if(modName != null && modName.endsWith(".__init__")){ - HashSet<IToken> gotten = new HashSet<IToken>(); - getAbsoluteImportTokens(FullRepIterable.getParentModule(modName), gotten, PyCodeCompletion.TYPE_IMPORT, true); - for (IToken token : gotten) { - if(token.getRepresentation().equals("__init__") == false){ - completions.add(token); - } - } - } return completions.toArray(new IToken[0]); --- 387,392 ---- } } + completions.addAll(initial); //just addd all that are in the same level if it was an __init__ return completions.toArray(new IToken[0]); *************** *** 396,399 **** --- 399,415 ---- return t; } + + for (IToken token : initial) { + //ok, maybe it was from the set that is in the same level as this one (this will only happen if we are on an __init__ module) + if(token.getRepresentation().equals(state.activationToken)){ + String absoluteImport = token.getAsAbsoluteImport(); + AbstractModule sameLevelMod = getModule(absoluteImport, state.nature, true); + + CompletionState copy = state.getCopy(); + copy.activationToken = ""; + copy.builtinsGotten = true; //we don't want builtins... + return getCompletionsForModule(sameLevelMod, copy); + } + } //wild imports: recursively go and get those completions and see if any matches it. *************** *** 715,725 **** * * @param rep ! * @param currentModuleName this is the module name (used to check validity for relative imports) -- not used if isLookingForRelative is false * @return tuple with found module and the String removed from the path in * order to find the module. */ ! private Tuple<AbstractModule, String> findModuleFromPath(String rep, PythonNature nature, boolean isLookingForRelative, String currentModuleName){ String tok = ""; ! AbstractModule mod = getModule(rep, nature, isLookingForRelative); String mRep = rep; int index; --- 731,741 ---- * * @param rep ! * @param currentModuleName this is the module name (used to check validity for relative imports) -- not used if dontSearchInit is false * @return tuple with found module and the String removed from the path in * order to find the module. */ ! private Tuple<AbstractModule, String> findModuleFromPath(String rep, PythonNature nature, boolean dontSearchInit, String currentModuleName){ String tok = ""; ! AbstractModule mod = getModule(rep, nature, dontSearchInit); String mRep = rep; int index; *************** *** 727,731 **** tok = mRep.substring(index+1) + "."+tok; mRep = mRep.substring(0,index); ! mod = getModule(mRep, nature, isLookingForRelative); } if (tok.endsWith(".")){ --- 743,747 ---- tok = mRep.substring(index+1) + "."+tok; mRep = mRep.substring(0,index); ! mod = getModule(mRep, nature, dontSearchInit); } if (tok.endsWith(".")){ *************** *** 733,737 **** } ! if(isLookingForRelative && currentModuleName != null && mod != null){ String parentModule = FullRepIterable.getParentModule(currentModuleName); //if we are looking for some relative import token, it can only match if the name found is not less than the parent --- 749,753 ---- } ! if(dontSearchInit && currentModuleName != null && mod != null){ String parentModule = FullRepIterable.getParentModule(currentModuleName); //if we are looking for some relative import token, it can only match if the name found is not less than the parent Index: ICodeCompletionASTManager.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion/revisited/ICodeCompletionASTManager.java,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** ICodeCompletionASTManager.java 13 Oct 2005 02:23:45 -0000 1.12 --- ICodeCompletionASTManager.java 27 Oct 2005 16:13:35 -0000 1.13 *************** *** 107,111 **** * @return the module with the specified name. */ ! public abstract AbstractModule getModule(String name, PythonNature nature, boolean isLookingForRelative); --- 107,111 ---- * @return the module with the specified name. */ ! public abstract AbstractModule getModule(String name, PythonNature nature, boolean dontSearchInit); Index: IToken.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion/revisited/IToken.java,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** IToken.java 25 Oct 2005 18:33:06 -0000 1.12 --- IToken.java 27 Oct 2005 16:13:35 -0000 1.13 *************** *** 51,54 **** --- 51,59 ---- */ public String getAsRelativeImport(String baseModule); + + /** + * Same as relative from "." + */ + public String getAsAbsoluteImport(); /** Index: AbstractToken.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion/revisited/AbstractToken.java,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** AbstractToken.java 25 Oct 2005 18:33:06 -0000 1.14 --- AbstractToken.java 27 Oct 2005 16:13:35 -0000 1.15 *************** *** 199,202 **** --- 199,206 ---- return makeRelative(baseModule, completePath); } + + public String getAsAbsoluteImport() { + return getAsRelativeImport("."); + } /** |