1
0
mirror of https://github.com/arduino/Arduino.git synced 2025-02-26 20:54:22 +01:00

Refactoring autocomplete structure

This commit is contained in:
ricardo.jl.rufino@gmail.com 2017-05-03 21:53:29 -03:00 committed by Martino Facchin
parent c84fd1a398
commit 2015c98908
8 changed files with 44 additions and 124 deletions

View File

@ -0,0 +1,17 @@
package cc.arduino.autocomplete;
import org.fife.ui.autocomplete.DefaultCompletionProvider;
/**
* Base completion provider for C/C++.
* @author Ricardo JL Rufino (ricardo@criativasoft.com.br)
* @date 28/04/2017
*/
public class BaseCCompletionProvider extends DefaultCompletionProvider{
@Override
protected boolean isValidChar(char ch) {
return super.isValidChar(ch) || '.' == ch || '>' == ch || '-' == ch || '<' == ch || '#' == ch || ':' == ch /**|| getParameterListStart() == ch */;
}
}

View File

@ -1,44 +0,0 @@
package cc.arduino.autocomplete;
import org.fife.ui.autocomplete.CompletionProvider;
import processing.app.Sketch;
import processing.app.syntax.SketchTextArea;
public class CompletionContext {
private Sketch sketch;
private SketchTextArea textArea;
private CompletionProvider delegate; // of: AutoComplete/RSyntaxTextArea
public CompletionContext(Sketch sketch, SketchTextArea textArea,CompletionProvider delegate) {
this.sketch = sketch;
this.textArea = textArea;
this.delegate = delegate;
}
public String getAlreadyEnteredText() {
return delegate.getAlreadyEnteredText(textArea);
}
public int getLineNumber() {
return textArea.getCaretLineNumber();
}
public Sketch getSketch() {
return sketch;
}
public SketchTextArea getTextArea() {
return textArea;
}
public CompletionProvider getDelegate() {
return delegate;
}
}

View File

@ -1,11 +0,0 @@
package cc.arduino.autocomplete;
import java.util.List;
import org.fife.ui.autocomplete.Completion;
public interface CompletionProvider {
List<Completion> getSuggestions(CompletionContext context);
}

View File

@ -3,20 +3,26 @@ package cc.arduino.autocomplete;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import javax.swing.text.JTextComponent;
import org.fife.ui.autocomplete.BasicCompletion; import org.fife.ui.autocomplete.BasicCompletion;
import org.fife.ui.autocomplete.Completion; import org.fife.ui.autocomplete.Completion;
public class FakeCompletionProvider implements CompletionProvider { import processing.app.syntax.SketchTextArea;
public class FakeCompletionProvider extends BaseCCompletionProvider {
@Override @Override
public List<Completion> getSuggestions(CompletionContext context) { protected List<Completion> getCompletionsImpl(JTextComponent comp) {
List<Completion> list = new LinkedList<>(); List<Completion> list = new LinkedList<>();
list.add(new BasicCompletion(context.getDelegate(), "Text: " + context.getAlreadyEnteredText()));
list.add(new BasicCompletion(context.getDelegate(), "Line: " + context.getLineNumber())); SketchTextArea area = (SketchTextArea) comp;
list.add(new BasicCompletion(this, "Text: " + getAlreadyEnteredText(comp)));
list.add(new BasicCompletion(this, "Line: " + area.getCaretLineNumber()));
return list; return list;
} }
} }

View File

@ -1,33 +1,27 @@
package cc.arduino.autocomplete.rsyntax; package cc.arduino.autocomplete;
import org.fife.ui.autocomplete.CompletionProvider;
import org.fife.ui.autocomplete.LanguageAwareCompletionProvider; import org.fife.ui.autocomplete.LanguageAwareCompletionProvider;
import cc.arduino.autocomplete.CompletionContext;
import cc.arduino.autocomplete.CompletionProvider;
import processing.app.Sketch; import processing.app.Sketch;
import processing.app.syntax.SketchTextArea; import processing.app.syntax.SketchTextArea;
/** /**
* CompletionProvider for Arduino/CPP Language. <br/> * CompletionProvider for Arduino/CPP Language. <br/>
* Setup basic logic for completions using {@link LanguageAwareCompletionProvider} * Setup basic logic for completions using {@link LanguageAwareCompletionProvider}. <br/>
* Filtering and decision will appear in the autocomplete dialog by implementations of: {@link CompletionProvider}. <br/> * Filtering and decision will appear in the autocomplete dialog by implementations of: {@link CompletionProvider}.<br/>
* *
* @author Ricardo JL Rufino (ricardo@criativasoft.com.br) * @author Ricardo JL Rufino (ricardo@criativasoft.com.br)
* @date 28/04/2017 * @date 28/04/2017
*/ */
public class SketchCompletionProvider extends LanguageAwareCompletionProvider{ public class SketchCompletionProvider extends LanguageAwareCompletionProvider {
public SketchCompletionProvider(Sketch sketch, SketchTextArea textArea, CompletionProvider provider) { public SketchCompletionProvider(Sketch sketch, SketchTextArea textArea, CompletionProvider provider) {
CompletionContext context = new CompletionContext(sketch, textArea, this); setDefaultCompletionProvider(provider);
// provider.setParameterChoicesProvider(new ParameterChoicesProvider(this));
setDefaultCompletionProvider(new CompletionProviderBridge(context, provider)); // provider.setParameterizedCompletionParams('(', ", ", ')');
// provider.setParameterChoicesProvider(new ParameterChoicesProvider(this));
// provider.setParameterizedCompletionParams('(', ", ", ')'); }
}
} }

View File

@ -1,36 +0,0 @@
package cc.arduino.autocomplete.rsyntax;
import java.util.List;
import javax.swing.text.JTextComponent;
import org.fife.ui.autocomplete.Completion;
import org.fife.ui.autocomplete.DefaultCompletionProvider;
import cc.arduino.autocomplete.CompletionContext;
import cc.arduino.autocomplete.CompletionProvider;
public class CompletionProviderBridge extends DefaultCompletionProvider{
private CompletionProvider provider;
private CompletionContext context;
public CompletionProviderBridge(CompletionContext context, CompletionProvider provider) {
this.provider = provider;
this.context = context;
}
@Override
public List<Completion> getCompletionsImpl(JTextComponent comp) {
return provider.getSuggestions(context);
}
@Override
protected boolean isValidChar(char ch) {
return super.isValidChar(ch) || '.' == ch || '>' == ch || '-' == ch || '<' == ch || '#' == ch || ':' == ch /**|| getParameterListStart() == ch */;
}
}

View File

@ -91,6 +91,7 @@ import javax.swing.text.Segment;
import org.apache.commons.compress.utils.IOUtils; import org.apache.commons.compress.utils.IOUtils;
import org.fife.ui.autocomplete.AutoCompletion; import org.fife.ui.autocomplete.AutoCompletion;
import org.fife.ui.autocomplete.CompletionProvider;
import org.fife.ui.rsyntaxtextarea.LinkGenerator; import org.fife.ui.rsyntaxtextarea.LinkGenerator;
import org.fife.ui.rsyntaxtextarea.LinkGeneratorResult; import org.fife.ui.rsyntaxtextarea.LinkGeneratorResult;
import org.fife.ui.rsyntaxtextarea.RSyntaxDocument; import org.fife.ui.rsyntaxtextarea.RSyntaxDocument;
@ -103,8 +104,7 @@ import org.fife.ui.rsyntaxtextarea.TokenTypes;
import org.fife.ui.rtextarea.RTextArea; import org.fife.ui.rtextarea.RTextArea;
import org.fife.ui.rtextarea.RTextAreaUI; import org.fife.ui.rtextarea.RTextAreaUI;
import cc.arduino.autocomplete.CompletionProvider; import cc.arduino.autocomplete.SketchCompletionProvider;
import cc.arduino.autocomplete.rsyntax.SketchCompletionProvider;
import processing.app.Base; import processing.app.Base;
import processing.app.BaseNoGui; import processing.app.BaseNoGui;
import processing.app.PreferencesData; import processing.app.PreferencesData;
@ -123,8 +123,6 @@ public class SketchTextArea extends RSyntaxTextArea {
private PdeKeywords pdeKeywords; private PdeKeywords pdeKeywords;
private SketchCompletionProvider completionProvider;
public SketchTextArea(RSyntaxDocument document, PdeKeywords pdeKeywords) throws IOException { public SketchTextArea(RSyntaxDocument document, PdeKeywords pdeKeywords) throws IOException {
super(document); super(document);
this.pdeKeywords = pdeKeywords; this.pdeKeywords = pdeKeywords;
@ -139,9 +137,9 @@ public class SketchTextArea extends RSyntaxTextArea {
public void setupAutoComplete(Sketch sketch, CompletionProvider provider) { public void setupAutoComplete(Sketch sketch, CompletionProvider provider) {
this.completionProvider = new SketchCompletionProvider(sketch, this, provider); SketchCompletionProvider completionProvider = new SketchCompletionProvider(sketch, this, provider);
AutoCompletion ac = new AutoCompletion( this.completionProvider); AutoCompletion ac = new AutoCompletion( completionProvider );
ac.setAutoActivationEnabled(true); ac.setAutoActivationEnabled(true);
ac.setShowDescWindow(false); ac.setShowDescWindow(false);

View File

@ -247,10 +247,6 @@ public class SketchFile {
return (o instanceof SketchFile) && file.equals(((SketchFile) o).file); return (o instanceof SketchFile) && file.equals(((SketchFile) o).file);
} }
public Sketch getSketch() {
return sketch;
}
/** /**
* Load this piece of code from a file and return the contents. This * Load this piece of code from a file and return the contents. This
* completely ignores any changes in the linked storage, if any, and * completely ignores any changes in the linked storage, if any, and