2
* Created on Sep 23, 2004
4
* @author Fabio Zadrozny
6
package org.python.pydev.editor.correctionassist;
8
import java.util.ArrayList;
9
import java.util.Collections;
10
import java.util.HashMap;
11
import java.util.List;
14
import org.eclipse.jface.text.BadLocationException;
15
import org.eclipse.jface.text.ITextViewer;
16
import org.eclipse.jface.text.contentassist.ICompletionProposal;
17
import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
18
import org.eclipse.jface.text.contentassist.IContextInformation;
19
import org.eclipse.jface.text.contentassist.IContextInformationValidator;
20
import org.python.pydev.core.ExtensionHelper;
21
import org.python.pydev.core.bundle.ImageCache;
22
import org.python.pydev.core.docutils.PySelection;
23
import org.python.pydev.editor.PyEdit;
24
import org.python.pydev.editor.actions.PyAction;
25
import org.python.pydev.editor.codecompletion.PyCodeCompletion;
26
import org.python.pydev.editor.correctionassist.heuristics.AssistAssign;
27
import org.python.pydev.editor.correctionassist.heuristics.AssistDocString;
28
import org.python.pydev.editor.correctionassist.heuristics.AssistImport;
29
import org.python.pydev.editor.correctionassist.heuristics.AssistTry;
30
import org.python.pydev.editor.correctionassist.heuristics.IAssistProps;
31
import org.python.pydev.plugin.PydevPlugin;
34
* This class should be used to give context help
36
* Help depending on context (Ctrl+1):
42
* def __init__(self, param):
43
* self.newMethod()<- create new method on class C (with params if needed)
44
* <- assign result to new local variable
45
* <- assign result to new field
48
* a.newMethod() <- create new method on class A
49
* <- assign result to new local variable
50
* <- assign result to new field
52
* param.b() <- don't show anything.
55
* self.a1.newMethod() <- create new method on class A (difficult part is discovering class)
56
* <- assign result to new local variable
57
* <- assign result to new field
60
* self.a1.newMethod() <- create new method on class A
61
* <- assign result to new local variable
62
* <- assign result to new field
64
* import compiler <- move import to global context
65
* NewClass() <- Create class NewClass (Depends on new class wizard)
67
* a() <-- make this a new method in this class
69
* @author Fabio Zadrozny
71
public class PythonCorrectionProcessor implements IContentAssistProcessor {
74
private ImageCache imageCache;
75
private static Map<String, IAssistProps> additionalAssists = new HashMap<String, IAssistProps>();
77
public static boolean hasAdditionalAssist(String id){
78
synchronized (additionalAssists) {
79
return additionalAssists.containsKey(id);
82
public static void addAdditionalAssist(String id, IAssistProps assist){
83
synchronized (additionalAssists) {
84
additionalAssists.put(id, assist);
87
public static void removeAdditionalAssist(String id, IAssistProps assist){
88
synchronized (additionalAssists) {
89
additionalAssists.remove(id);
96
public PythonCorrectionProcessor(PyEdit edit) {
98
this.imageCache = new ImageCache(PydevPlugin.getDefault().getBundle().getEntry("/"));
104
* @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#computeCompletionProposals(org.eclipse.jface.text.ITextViewer,
107
public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int offset) {
109
PySelection ps = new PySelection(edit);
111
List<ICompletionProposal> results = new ArrayList<ICompletionProposal>();
112
String sel = PyAction.getLineWithoutComments(ps);
115
List<IAssistProps> assists = new ArrayList<IAssistProps>();
116
synchronized (this.additionalAssists) {
117
for (IAssistProps prop : additionalAssists.values()) {
122
assists.add(new AssistTry());
123
assists.add(new AssistImport());
124
assists.add(new AssistDocString());
125
assists.add(new AssistAssign());
127
assists.addAll(ExtensionHelper.getParticipants(ExtensionHelper.PYDEV_CTRL_1));
129
for (IAssistProps assist : assists) {
131
if (assist.isValid(ps, sel, edit, offset)) {
137
edit.getEditorFile(),
138
edit.getPythonNature(),
142
} catch (BadLocationException e) {
146
} catch (Exception e) {
151
Collections.sort(results, PyCodeCompletion.PROPOSAL_COMPARATOR);
153
return (ICompletionProposal[]) results.toArray(new ICompletionProposal[0]);
160
* @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#computeContextInformation(org.eclipse.jface.text.ITextViewer,
163
public IContextInformation[] computeContextInformation(ITextViewer viewer, int offset) {
170
* @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getCompletionProposalAutoActivationCharacters()
172
public char[] getCompletionProposalAutoActivationCharacters() {
179
* @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getContextInformationAutoActivationCharacters()
181
public char[] getContextInformationAutoActivationCharacters() {
188
* @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getErrorMessage()
190
public String getErrorMessage() {
197
* @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getContextInformationValidator()
199
public IContextInformationValidator getContextInformationValidator() {
b'\\ No newline at end of file'