[Pydev-cvs] org.python.pydev/src/org/python/pydev/editor/codecompletion PythonCompletionProcessor.ja
Brought to you by:
fabioz
From: Fabio Z. <fa...@us...> - 2004-09-22 12:04:45
|
Update of /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14761/src/org/python/pydev/editor/codecompletion Modified Files: PythonCompletionProcessor.java PyCodeCompletion.java CompletionCache.java Log Message: Cache changes. Index: PyCodeCompletion.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion/PyCodeCompletion.java,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** PyCodeCompletion.java 20 Sep 2004 13:18:05 -0000 1.8 --- PyCodeCompletion.java 22 Sep 2004 12:04:31 -0000 1.9 *************** *** 68,81 **** public List autoComplete(PyEdit edit, IDocument doc, int documentOffset, java.lang.String theActivationToken) { - return serverCompletion(theActivationToken, edit, doc, documentOffset); - } - - /** - * @param edit - * @param doc - * @param documentOffset - */ - private List serverCompletion(String theActivationToken, PyEdit edit, - IDocument doc, int documentOffset) { List theList = new ArrayList(); PythonShell serverShell = null; --- 68,71 ---- *************** *** 85,96 **** throw new RuntimeException(e); } ! String docToParse = getDocToParse(doc, documentOffset); ! String trimmed = theActivationToken.replace('.', ' ').trim(); ! ! String importsTipper = useImportsTipper(theActivationToken, edit, doc, documentOffset); if (importsTipper.length()!=0) { //may be space. ! List completions = serverShell.getImportCompletions(importsTipper); theList.addAll(completions); --- 75,86 ---- throw new RuntimeException(e); } ! String docToParse = getDocToParse(doc, documentOffset); ! String trimmed = theActivationToken.replace('.', ' ').trim(); ! ! String importsTipper = getImportsTipperStr(theActivationToken, edit, doc, documentOffset); if (importsTipper.length()!=0) { //may be space. ! List completions = serverShell.getImportCompletions(importsTipper); theList.addAll(completions); *************** *** 98,102 **** } else if (trimmed.equals("") == false && theActivationToken.indexOf('.') != -1) { ! List completions; if (trimmed.equals("self")) { --- 88,92 ---- } else if (trimmed.equals("") == false && theActivationToken.indexOf('.') != -1) { ! List completions; if (trimmed.equals("self")) { *************** *** 104,116 **** AbstractNode closest = ModelUtils.getLessOrEqualNode(edit .getPythonModel(), loc); ! if(closest == null){ completions = serverShell.getTokenCompletions(trimmed, docToParse); }else{ ! Scope scope = closest.getScope().findContainingClass(); ! String token = scope.getStartNode().getName(); ! completions = serverShell ! .getClassCompletions(token, docToParse); } } else { --- 94,106 ---- AbstractNode closest = ModelUtils.getLessOrEqualNode(edit .getPythonModel(), loc); ! if(closest == null){ completions = serverShell.getTokenCompletions(trimmed, docToParse); }else{ ! Scope scope = closest.getScope().findContainingClass(); ! String token = scope.getStartNode().getName(); ! completions = serverShell ! .getClassCompletions(token, docToParse); } } else { *************** *** 119,132 **** } theList.addAll(completions); ! } else { //go to globals List completions = serverShell.getGlobalCompletions(docToParse); theList.addAll(completions); ! } return theList; - } /** * @param theActivationToken --- 109,122 ---- } theList.addAll(completions); ! } else { //go to globals List completions = serverShell.getGlobalCompletions(docToParse); theList.addAll(completions); ! } return theList; } + /** * @param theActivationToken *************** *** 136,140 **** * @return */ ! private String useImportsTipper(String theActivationToken, PyEdit edit, IDocument doc, int documentOffset) { String importMsg = ""; --- 126,130 ---- * @return */ ! public String getImportsTipperStr(String theActivationToken, PyEdit edit, IDocument doc, int documentOffset) { String importMsg = ""; *************** *** 145,148 **** --- 135,139 ---- int fromIndex = string.indexOf("from"); int importIndex = string.indexOf("import"); + if(fromIndex != -1 || importIndex != -1){ string = string.replaceAll("#.*", ""); //remove comments *************** *** 184,188 **** * @return */ ! private String getDocToParse(IDocument doc, int documentOffset) { String wholeDoc = doc.get(); String newDoc = ""; --- 175,179 ---- * @return */ ! public String getDocToParse(IDocument doc, int documentOffset) { String wholeDoc = doc.get(); String newDoc = ""; Index: PythonCompletionProcessor.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion/PythonCompletionProcessor.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** PythonCompletionProcessor.java 15 Sep 2004 17:36:09 -0000 1.6 --- PythonCompletionProcessor.java 22 Sep 2004 12:04:31 -0000 1.7 *************** *** 54,108 **** } ! public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, ! int documentOffset) { ! IDocument doc = viewer.getDocument(); - Point selectedRange = viewer.getSelectedRange(); // there may not be a selected range ! java.lang.String theDoc = doc.get(); ! codeCompletion.calcDocBoundary(theDoc, documentOffset); ! String activationToken = codeCompletion.getActivationToken(theDoc, ! documentOffset); java.lang.String qualifier = ""; ! ! //we complete on '.' and '('. //' ' gets globals //and any other char gets globals on token and templates. //we have to get the qualifier. e.g. bla.foo = foo is the qualifier. ! if(activationToken.indexOf('.')!= -1){ ! while (endsWithSomeChar(new char[]{'.'}, activationToken) == false ! && activationToken.length() > 0) { ! ! qualifier = activationToken.charAt(activationToken.length() - 1) ! + qualifier; ! activationToken = activationToken.substring(0, activationToken ! .length() - 1); ! } ! }else{ //everything is a part of the qualifier. qualifier = activationToken.trim(); activationToken = ""; } - theDoc = codeCompletion.partialDocument(theDoc, documentOffset); - int qlen = qualifier.length(); - theDoc += "\n" + activationToken; - try { PythonShell.getServerShell().sendGoToDirMsg(edit.getEditorFile()); } catch (Exception e) { ! //if we don't suceed, we don't have to fail... just go on and try to complete... e.printStackTrace(); ! } ! ! List pythonProposals = getPythonProposals(documentOffset, doc, theDoc, activationToken, qlen); ! List templateProposals = getTemplateProposals(viewer, documentOffset, activationToken, qualifier, pythonProposals); ArrayList pythonAndTemplateProposals = new ArrayList(); --- 54,100 ---- } ! public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int documentOffset) { ! IDocument doc = viewer.getDocument(); Point selectedRange = viewer.getSelectedRange(); // there may not be a selected range ! java.lang.String completeDoc = doc.get(); ! codeCompletion.calcDocBoundary(completeDoc, documentOffset); ! String activationToken = codeCompletion.getActivationToken(completeDoc, documentOffset); java.lang.String qualifier = ""; ! ! //we complete on '.' and '('. //' ' gets globals //and any other char gets globals on token and templates. //we have to get the qualifier. e.g. bla.foo = foo is the qualifier. ! if (activationToken.indexOf('.') != -1) { ! while (endsWithSomeChar(new char[] { '.' }, activationToken) == false ! && activationToken.length() > 0) { ! ! qualifier = activationToken.charAt(activationToken.length() - 1) + qualifier; ! activationToken = activationToken.substring(0, activationToken.length() - 1); ! } ! } else { //everything is a part of the qualifier. qualifier = activationToken.trim(); activationToken = ""; } int qlen = qualifier.length(); try { PythonShell.getServerShell().sendGoToDirMsg(edit.getEditorFile()); } catch (Exception e) { ! //if we don't suceed, we don't have to fail... just go on and try ! // to complete... e.printStackTrace(); ! } ! List pythonProposals = getPythonProposals(documentOffset, doc, activationToken, qlen); ! List templateProposals = getTemplateProposals(viewer, documentOffset, activationToken, qualifier, ! pythonProposals); ArrayList pythonAndTemplateProposals = new ArrayList(); *************** *** 111,115 **** ArrayList returnProposals = new ArrayList(); ! for (Iterator iter = pythonAndTemplateProposals.iterator(); iter.hasNext();) { ICompletionProposal proposal = (ICompletionProposal) iter.next(); --- 103,107 ---- ArrayList returnProposals = new ArrayList(); ! for (Iterator iter = pythonAndTemplateProposals.iterator(); iter.hasNext();) { ICompletionProposal proposal = (ICompletionProposal) iter.next(); *************** *** 123,127 **** // and fill with list elements returnProposals.toArray(proposals); ! Arrays.sort(proposals, proposalsComparator); // Return the proposals --- 115,119 ---- // and fill with list elements returnProposals.toArray(proposals); ! Arrays.sort(proposals, proposalsComparator); // Return the proposals *************** *** 138,144 **** * @return */ ! private List getPythonProposals(int documentOffset, IDocument doc, java.lang.String theDoc, String activationToken, int qlen) { ! List allProposals = this.completionCache.getAllProposals(edit, doc, theDoc, ! activationToken, documentOffset, qlen, codeCompletion); return allProposals; } --- 130,136 ---- * @return */ ! private List getPythonProposals(int documentOffset, IDocument doc, String activationToken, int qlen) { ! List allProposals = this.completionCache.getAllProposals(edit, doc, activationToken, documentOffset, ! qlen, codeCompletion); return allProposals; } *************** *** 151,161 **** * @param allProposals */ ! private List getTemplateProposals(ITextViewer viewer, int documentOffset, String activationToken, java.lang.String qualifier, List allProposals) { List propList = new ArrayList(); ! if(activationToken.trim().equals("") == false || qualifier.trim().equals("") == false){ //templates proposals are added here. ! this.templatesCompletion.addTemplateProposals(viewer, documentOffset, ! propList); ! } return propList; --- 143,153 ---- * @param allProposals */ ! private List getTemplateProposals(ITextViewer viewer, int documentOffset, String activationToken, ! java.lang.String qualifier, List allProposals) { List propList = new ArrayList(); ! if (activationToken.trim().equals("") == false || qualifier.trim().equals("") == false) { //templates proposals are added here. ! this.templatesCompletion.addTemplateProposals(viewer, documentOffset, propList); ! } return propList; *************** *** 168,173 **** * int) */ ! public IContextInformation[] computeContextInformation(ITextViewer viewer, ! int documentOffset) { return null; } --- 160,164 ---- * int) */ ! public IContextInformation[] computeContextInformation(ITextViewer viewer, int documentOffset) { return null; } Index: CompletionCache.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion/CompletionCache.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** CompletionCache.java 14 Sep 2004 17:42:14 -0000 1.3 --- CompletionCache.java 22 Sep 2004 12:04:31 -0000 1.4 *************** *** 37,44 **** * @return */ ! public List getAllProposals(PyEdit edit, IDocument doc, String partialDoc, String activationToken, int documentOffset, int qlen, PyCodeCompletion codeCompletion) { List allProposals = getCacheProposals(partialDoc, documentOffset, qlen); --- 37,54 ---- * @return */ ! public List getAllProposals(PyEdit edit, IDocument doc, String activationToken, int documentOffset, int qlen, PyCodeCompletion codeCompletion) { + String importsTipperStr = codeCompletion.getImportsTipperStr(activationToken, edit, doc, documentOffset); + + String partialDoc = ""; + if (importsTipperStr.length() != 0){ + partialDoc = importsTipperStr; + }else{ + partialDoc = codeCompletion.getDocToParse(doc, documentOffset); + partialDoc += activationToken; + } + List allProposals = getCacheProposals(partialDoc, documentOffset, qlen); *************** *** 66,69 **** --- 76,89 ---- */ private void addProposalsToCache(String partialDoc, List allProposals) { + for (Iterator iter = allProposals.iterator(); iter.hasNext();) { + CompletionProposal element = (CompletionProposal) iter.next(); + + String displayString = element.getDisplayString(); + //we don't add to cache if there is an error here... + if(displayString.startsWith("ERROR") || displayString.startsWith("SERVER_ERROR")){ + return; + } + } + cacheEntries.add(partialDoc); cache.put(partialDoc, allProposals); |