[Pydev-cvs] org.python.pydev/src/org/python/pydev/editor/codecompletion PyCompletionProposal.java,
Brought to you by:
fabioz
From: Fabio Z. <fa...@us...> - 2006-07-15 17:02:20
|
Update of /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15170/src/org/python/pydev/editor/codecompletion Modified Files: PyCompletionProposal.java CompletionRequest.java PythonCompletionProcessor.java PyLinkedModeCompletionProposal.java PyCodeCompletion.java Log Message: adding only params after class instantiation Index: PyCompletionProposal.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion/PyCompletionProposal.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** PyCompletionProposal.java 15 Jul 2006 15:27:38 -0000 1.4 --- PyCompletionProposal.java 15 Jul 2006 17:02:18 -0000 1.5 *************** *** 47,53 **** --- 47,59 ---- /** + * Defines that we should add only the parameters on the apply and show the context info too + */ + public final static int ON_APPLY_SHOW_CTX_INFO_AND_ADD_PARAMETETRS = 3; + + /** * Defines how should the apply be treated */ protected int onApplyAction = ON_APPLY_DEFAUL; + protected String fArgs; /** *************** *** 65,69 **** public PyCompletionProposal(String replacementString, int replacementOffset, int replacementLength, int cursorPosition, Image image, String displayString, IContextInformation contextInformation, String additionalProposalInfo,int priority) { ! this(replacementString, replacementOffset, replacementLength, cursorPosition, image, displayString, contextInformation, additionalProposalInfo,priority, ON_APPLY_DEFAUL); } /** --- 71,75 ---- public PyCompletionProposal(String replacementString, int replacementOffset, int replacementLength, int cursorPosition, Image image, String displayString, IContextInformation contextInformation, String additionalProposalInfo,int priority) { ! this(replacementString, replacementOffset, replacementLength, cursorPosition, image, displayString, contextInformation, additionalProposalInfo,priority, ON_APPLY_DEFAUL, ""); } /** *************** *** 80,84 **** * @param onApplyAction if we should not actually apply the changes when the completion is applied */ ! public PyCompletionProposal(String replacementString, int replacementOffset, int replacementLength, int cursorPosition, Image image, String displayString, IContextInformation contextInformation, String additionalProposalInfo,int priority, int onApplyAction) { Assert.isNotNull(replacementString); Assert.isTrue(replacementOffset >= 0); --- 86,90 ---- * @param onApplyAction if we should not actually apply the changes when the completion is applied */ ! public PyCompletionProposal(String replacementString, int replacementOffset, int replacementLength, int cursorPosition, Image image, String displayString, IContextInformation contextInformation, String additionalProposalInfo,int priority, int onApplyAction, String args) { Assert.isNotNull(replacementString); Assert.isTrue(replacementOffset >= 0); *************** *** 96,99 **** --- 102,106 ---- this.priority = priority; this.onApplyAction = onApplyAction; + this.fArgs = args; } *************** *** 113,116 **** --- 120,132 ---- return; } + if(onApplyAction == ON_APPLY_SHOW_CTX_INFO_AND_ADD_PARAMETETRS){ + try { + String args = fArgs.substring(0, fArgs.length()-1); //remove the parentesis + document.replace(fReplacementOffset+2, fReplacementLength-2, args); + } catch (BadLocationException x) { + // ignore + } + return; + } throw new RuntimeException("Unexpected apply mode:"+onApplyAction); } *************** *** 126,129 **** --- 142,148 ---- return new Point(fReplacementOffset + fCursorPosition, 0); } + if(onApplyAction == ON_APPLY_SHOW_CTX_INFO_AND_ADD_PARAMETETRS){ + return new Point(fReplacementOffset + fCursorPosition-1, 0); + } throw new RuntimeException("Unexpected apply mode:"+onApplyAction); } *************** *** 189,193 **** public boolean isAutoInsertable() { ! return onApplyAction == ON_APPLY_JUST_SHOW_CTX_INFO; } } --- 208,212 ---- public boolean isAutoInsertable() { ! return onApplyAction == ON_APPLY_JUST_SHOW_CTX_INFO || onApplyAction == ON_APPLY_SHOW_CTX_INFO_AND_ADD_PARAMETETRS; } } Index: PyLinkedModeCompletionProposal.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion/PyLinkedModeCompletionProposal.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** PyLinkedModeCompletionProposal.java 15 Jul 2006 15:27:38 -0000 1.6 --- PyLinkedModeCompletionProposal.java 15 Jul 2006 17:02:18 -0000 1.7 *************** *** 35,40 **** private boolean fLastIsPar; ! public PyLinkedModeCompletionProposal(String replacementString, int replacementOffset, int replacementLength, int cursorPosition, Image image, String displayString, IContextInformation contextInformation, String additionalProposalInfo, int priority, int onApplyAction) { ! super(replacementString, replacementOffset, replacementLength, cursorPosition, image, displayString, contextInformation, additionalProposalInfo, priority, onApplyAction); presentationUpdater = new PyCompletionPresentationUpdater(this); } --- 35,40 ---- private boolean fLastIsPar; ! public PyLinkedModeCompletionProposal(String replacementString, int replacementOffset, int replacementLength, int cursorPosition, Image image, String displayString, IContextInformation contextInformation, String additionalProposalInfo, int priority, int onApplyAction, String args) { ! super(replacementString, replacementOffset, replacementLength, cursorPosition, image, displayString, contextInformation, additionalProposalInfo, priority, onApplyAction, args); presentationUpdater = new PyCompletionPresentationUpdater(this); } *************** *** 47,53 **** return null; } ! if(onApplyAction == ON_APPLY_DEFAUL){ return new Point(fReplacementOffset + fCursorPosition, firstParameterLen); //the difference is the firstParameterLen here (instead of 0) } throw new RuntimeException("Unexpected apply mode:"+onApplyAction); } --- 47,56 ---- return null; } ! if(onApplyAction == ON_APPLY_DEFAUL ){ return new Point(fReplacementOffset + fCursorPosition, firstParameterLen); //the difference is the firstParameterLen here (instead of 0) } + if(onApplyAction == ON_APPLY_SHOW_CTX_INFO_AND_ADD_PARAMETETRS ){ + return new Point(fReplacementOffset + fCursorPosition-1, firstParameterLen); //the difference is the firstParameterLen here (instead of 0) + } throw new RuntimeException("Unexpected apply mode:"+onApplyAction); } *************** *** 61,152 **** return; } ! if(onApplyAction != ON_APPLY_DEFAUL){ ! throw new RuntimeException("Unexpected apply mode:"+onApplyAction); ! } ! int dif = offset - fReplacementOffset; ! try { ! String strToAdd = fReplacementString.substring(dif); ! ! if(eat){ ! String rep = fReplacementString; ! int i = rep.indexOf('('); ! if(fLastIsPar && i != -1){ ! rep = rep.substring(0, i); ! doc.replace(offset-dif, dif+this.fLen, rep); ! //if the last was a parenthesis, there's nothing to link, so, let's return ! return; ! }else{ ! doc.replace(offset-dif, dif+this.fLen, rep); } ! }else{ ! doc.replace(offset-dif, dif, fReplacementString); } ! ! ! //ok, now, on to the linking part ! int iPar = strToAdd.indexOf('('); ! if(iPar != -1 && strToAdd.charAt(strToAdd.length()-1) == ')'){ ! String newStr = strToAdd.substring(iPar+1, strToAdd.length()-1); ! ! List<Integer> offsetsAndLens = new ArrayList<Integer>(); ! StringBuffer buffer = new StringBuffer(); ! for (int i = 0; i < newStr.length(); i++) { ! char c = newStr.charAt(i); ! ! if(Character.isJavaIdentifierPart(c)){ ! if(buffer.length() == 0){ ! offsetsAndLens.add(i); ! buffer.append(c); ! }else{ ! buffer.append(c); ! } }else{ ! if(buffer.length() > 0){ ! offsetsAndLens.add(buffer.length()); ! buffer = new StringBuffer(); ! } } } if(buffer.length() > 0){ offsetsAndLens.add(buffer.length()); } ! buffer = null; ! ! if(offsetsAndLens.size() > 0){ ! LinkedModeModel model= new LinkedModeModel(); ! ! for (int i = 0; i < offsetsAndLens.size(); i++) { ! Integer offs = offsetsAndLens.get(i); ! i++; ! Integer len = offsetsAndLens.get(i); ! if(i == 1){ ! firstParameterLen = len; ! } ! int location = offset+iPar+offs+1; ! LinkedPositionGroup group= new LinkedPositionGroup(); ! ProposalPosition proposalPosition = new ProposalPosition(doc, location, len, 0 , new ICompletionProposal[0]); ! group.addPosition(proposalPosition); ! model.addGroup(group); ! } ! ! model.forceInstall(); ! ! final LinkedModeUI ui= new EditorLinkedModeUI(model, viewer); ! ui.setDoContextInfo(true); //set it to request the ctx info from the completion processor ! ui.setExitPosition(viewer, offset + strToAdd.length(), 0, Integer.MAX_VALUE); ! Runnable r = new Runnable(){ ! public void run() { ! ui.enter(); ! } ! }; ! RunInUiThread.async(r); } } ! } catch (BadLocationException e) { ! PydevPlugin.log(e); ! } } --- 64,186 ---- return; } ! if(onApplyAction == ON_APPLY_SHOW_CTX_INFO_AND_ADD_PARAMETETRS){ ! try { ! String args = fArgs.substring(0, fArgs.length()-1); //remove the parentesis ! char c = doc.getChar(offset); ! boolean addedPar = false; ! if(c != ')'){ ! addedPar = true; ! args += ')'; } ! doc.replace(fReplacementOffset+2, fReplacementLength-2, args); ! int iPar = -1; ! int exitPos = offset + args.length(); ! if(addedPar){ ! exitPos -= 1; ! } ! goToLinkedModeFromArgs(viewer, offset-1, doc, exitPos, iPar, args); ! ! }catch(BadLocationException e){ ! PydevPlugin.log(e); } ! return; ! } ! ! ! if(onApplyAction == ON_APPLY_DEFAUL){ ! int dif = offset - fReplacementOffset; ! try { ! String strToAdd = fReplacementString.substring(dif); ! if(eat){ ! String rep = fReplacementString; ! int i = rep.indexOf('('); ! if(fLastIsPar && i != -1){ ! rep = rep.substring(0, i); ! doc.replace(offset-dif, dif+this.fLen, rep); ! //if the last was a parenthesis, there's nothing to link, so, let's return ! return; }else{ ! doc.replace(offset-dif, dif+this.fLen, rep); } + }else{ + doc.replace(offset-dif, dif, fReplacementString); + } + + //ok, now, on to the linking part + int iPar = strToAdd.indexOf('('); + if(iPar != -1 && strToAdd.charAt(strToAdd.length()-1) == ')'){ + String newStr = strToAdd.substring(iPar+1, strToAdd.length()-1); + goToLinkedModeFromArgs(viewer, offset, doc, offset + strToAdd.length(), iPar, newStr); } + } catch (BadLocationException e) { + PydevPlugin.log(e); + } + } + + throw new RuntimeException("Unexpected apply mode:"+onApplyAction); + + } + + private void goToLinkedModeFromArgs(ITextViewer viewer, int offset, IDocument doc, int exitPos, int iPar, String newStr) throws BadLocationException { + List<Integer> offsetsAndLens = new ArrayList<Integer>(); + + StringBuffer buffer = new StringBuffer(); + for (int i = 0; i < newStr.length(); i++) { + char c = newStr.charAt(i); + + if(Character.isJavaIdentifierPart(c)){ + if(buffer.length() == 0){ + offsetsAndLens.add(i); + buffer.append(c); + }else{ + buffer.append(c); + } + }else{ if(buffer.length() > 0){ offsetsAndLens.add(buffer.length()); + buffer = new StringBuffer(); } ! } ! } ! if(buffer.length() > 0){ ! offsetsAndLens.add(buffer.length()); ! } ! buffer = null; ! ! goToLinkedMode(viewer, offset, doc, exitPos, iPar, offsetsAndLens); ! } + private void goToLinkedMode(ITextViewer viewer, int offset, IDocument doc, int exitPos, int iPar, List<Integer> offsetsAndLens) throws BadLocationException { + if(offsetsAndLens.size() > 0){ + LinkedModeModel model= new LinkedModeModel(); + + for (int i = 0; i < offsetsAndLens.size(); i++) { + Integer offs = offsetsAndLens.get(i); + i++; + Integer len = offsetsAndLens.get(i); + if(i == 1){ + firstParameterLen = len; } + int location = offset+iPar+offs+1; + LinkedPositionGroup group= new LinkedPositionGroup(); + ProposalPosition proposalPosition = new ProposalPosition(doc, location, len, 0 , new ICompletionProposal[0]); + group.addPosition(proposalPosition); + model.addGroup(group); } ! ! model.forceInstall(); ! ! final LinkedModeUI ui= new EditorLinkedModeUI(model, viewer); ! ui.setDoContextInfo(true); //set it to request the ctx info from the completion processor ! ui.setExitPosition(viewer, exitPos, 0, Integer.MAX_VALUE); ! Runnable r = new Runnable(){ ! public void run() { ! ui.enter(); ! } ! }; ! RunInUiThread.async(r); + } } Index: PyCodeCompletion.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion/PyCodeCompletion.java,v retrieving revision 1.73 retrieving revision 1.74 diff -C2 -d -r1.73 -r1.74 *** PyCodeCompletion.java 15 Jul 2006 15:27:38 -0000 1.73 --- PyCodeCompletion.java 15 Jul 2006 17:02:18 -0000 1.74 *************** *** 424,428 **** int onApplyAction = PyCompletionProposal.ON_APPLY_DEFAUL; if(request.isInCalltip){ ! onApplyAction = PyCompletionProposal.ON_APPLY_JUST_SHOW_CTX_INFO; } PyCalltipsContextInformation pyContextInformation = null; --- 424,433 ---- int onApplyAction = PyCompletionProposal.ON_APPLY_DEFAUL; if(request.isInCalltip){ ! if(request.alreadyHasParams){ ! onApplyAction = PyCompletionProposal.ON_APPLY_JUST_SHOW_CTX_INFO; ! ! }else{ ! onApplyAction = PyCompletionProposal.ON_APPLY_SHOW_CTX_INFO_AND_ADD_PARAMETETRS; ! } } PyCalltipsContextInformation pyContextInformation = null; *************** *** 433,437 **** PyCompletionProposal proposal = new PyLinkedModeCompletionProposal(name+args, request.documentOffset - request.qlen, request.qlen, l, getImageForType(type), null, ! pyContextInformation, docStr, priority, onApplyAction); convertedProposals.add(proposal); --- 438,442 ---- PyCompletionProposal proposal = new PyLinkedModeCompletionProposal(name+args, request.documentOffset - request.qlen, request.qlen, l, getImageForType(type), null, ! pyContextInformation, docStr, priority, onApplyAction, args); convertedProposals.add(proposal); Index: PythonCompletionProcessor.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion/PythonCompletionProcessor.java,v retrieving revision 1.42 retrieving revision 1.43 diff -C2 -d -r1.42 -r1.43 *** PythonCompletionProcessor.java 5 Jul 2006 17:01:16 -0000 1.42 --- PythonCompletionProcessor.java 15 Jul 2006 17:02:18 -0000 1.43 *************** *** 178,182 **** if (importsTipperStr.length() != 0 || request.isInCalltip){ ! showTemplates = false; //don't show templates if we are in the imports section. } --- 178,182 ---- if (importsTipperStr.length() != 0 || request.isInCalltip){ ! showTemplates = false; //don't show templates if we are in the imports section or inside a calltip. } Index: CompletionRequest.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion/CompletionRequest.java,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** CompletionRequest.java 1 Jul 2006 01:47:53 -0000 1.13 --- CompletionRequest.java 15 Jul 2006 17:02:18 -0000 1.14 *************** *** 58,61 **** --- 58,62 ---- this.qualifier = act.qualifier; this.isInCalltip = act.changedForCalltip; + this.alreadyHasParams = act.alreadyHasParams; int qlen = qualifier.length(); *************** *** 109,112 **** --- 110,118 ---- public boolean isInCalltip; + /** + * Useful only if we're in a calltip + */ + public boolean alreadyHasParams; + @Override public String toString() { *************** *** 121,124 **** --- 127,132 ---- buffer.append(" isInCalltip:"); buffer.append(isInCalltip); + buffer.append(" alreadyHasParams:"); + buffer.append(alreadyHasParams); buffer.append("]"); return buffer.toString(); |