3636import javax .swing .text .JTextComponent ;
3737
3838import org .fife .ui .autocomplete .Completion ;
39+ import org .fife .ui .autocomplete .CompletionProvider ;
3940import org .fife .ui .autocomplete .DefaultCompletionProvider ;
4041import org .fife .ui .autocomplete .FunctionCompletion ;
42+ import org .fife .ui .autocomplete .LanguageAwareCompletionProvider ;
4143import org .fife .ui .autocomplete .ParameterizedCompletion .Parameter ;
4244import org .fife .ui .autocomplete .TemplateCompletion ;
4345
4648import processing .app .Editor ;
4749import processing .app .EditorTab ;
4850
49- public class ClangCompletionProvider extends DefaultCompletionProvider {
51+ public class ClangCompletionProvider extends LanguageAwareCompletionProvider {
5052
5153 private Editor editor ;
54+ private String completeCache ;
55+ private int completeCacheLine ;
56+ private int completeCacheColumn ;
5257
53- public ClangCompletionProvider (Editor e ) {
54- super ();
58+ public ClangCompletionProvider (Editor e , DefaultCompletionProvider cp ) {
59+ super (cp );
5560 editor = e ;
56- setParameterizedCompletionParams ('(' , ", " , ')' );
57- }
58-
59- @ Override
60- public List <Completion > getCompletionByInputText (String inputText ) {
61- System .out .println ("INPUTTEXT: " + inputText );
62- return super .getCompletionByInputText (inputText );
61+ //setParameterizedCompletionParams('(', ", ", ')');
6362 }
6463
6564 @ Override
@@ -84,14 +83,21 @@ protected List<Completion> getCompletionsImpl(JTextComponent textarea) {
8483
8584 try {
8685 // Run codecompletion engine
87- String out = editor .getSketchController ()
86+ String out = completeCache ;
87+ if (completeCacheLine != line || (completeCacheColumn != (col + 1 )) && (completeCacheColumn != (col - 1 ))) {
88+ out = editor .getSketchController ()
8889 .codeComplete (tab .getSketchFile (), line , col );
90+ completeCache = out ;
91+ completeCacheLine = line ;
92+ }
93+ completeCacheColumn = col ;
8994
9095 // Parse engine output and build code completions
9196 ObjectMapper mapper = new ObjectMapper ();
9297 ArduinoCompletionsList allCc ;
9398 allCc = mapper .readValue (out , ArduinoCompletionsList .class );
9499 for (ArduinoCompletion cc : allCc ) {
100+
95101 if (cc .type .equals ("Macro" )) {
96102 // for now skip macro
97103 continue ;
@@ -108,6 +114,10 @@ protected List<Completion> getCompletionsImpl(JTextComponent textarea) {
108114 }
109115 }
110116
117+ if (!cc .getCompletion ().getTypedText ().startsWith (getAlreadyEnteredText (textarea ))) {
118+ continue ;
119+ }
120+
111121 FunctionCompletion compl = new FunctionCompletion (this ,
112122 cc .getCompletion ().getTypedText (),
113123 cc .getCompletion ().getResultType ());
@@ -135,13 +145,15 @@ protected List<Completion> getCompletionsImpl(JTextComponent textarea) {
135145 template += "${" + spl [spl .length - 1 ] + "}" ;
136146 }
137147 if (chunk .info != null ) {
138- System .out .println ("INFO: " +chunk .info );
148+ // System.out.println("INFO: "+chunk.info);
139149 }
140150 }
141151 template += "${cursor}" ;
142- System .out .println ("TEMPLATE: " + template );
152+ //System.out.println("TEMPLATE: " + template);
153+ if (typedText .startsWith (getAlreadyEnteredText (textarea ))) {
143154 res .add (new TemplateCompletion (this , typedText , typedText + returnType ,
144155 template ));
156+ }
145157 }
146158 return res ;
147159 } catch (Exception e ) {
0 commit comments