Skip to content

Commit a352f80

Browse files
committed
Get rid of AutoCompletionListener infrastructure
This name AutoCompletionListener is already taken by org.fife.ui.autocomplete, and it means something else. Let's not conflate the terminology here. For now, let's keep things simple, just registering and using the JythonAutoCompletions directly, rather than trying to make it extensible via a non-SciJava-based mechanism. If we need extensibility of autocompletions later, we can introduce a new SciJava plugin type in the script-editor component, and then rework this component to use it.
1 parent f52d33d commit a352f80

2 files changed

Lines changed: 9 additions & 40 deletions

File tree

src/main/java/org/scijava/plugins/scripteditor/jython/JythonAutoCompletions.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,8 @@
4141
import org.fife.ui.autocomplete.Completion;
4242
import org.fife.ui.autocomplete.CompletionProvider;
4343
import org.python.indexer.types.NModuleType;
44-
import org.scijava.ui.swing.script.autocompletion.AutoCompletionListener;
4544

46-
public class JythonAutoCompletions implements AutoCompletionListener
47-
{
48-
static {
49-
// Register as listener for jython autocompletions
50-
JythonAutocompletionProvider.addAutoCompletionListener(new JythonAutoCompletions());
51-
}
45+
public class JythonAutoCompletions {
5246

5347
static private final Pattern assign = Pattern.compile("^([ \\t]*)(([a-zA-Z_][a-zA-Z0-9_ \\t,]*)[ \\t]+=[ \\t]+(.*))$"),
5448
nameToken = Pattern.compile("^(.*?[ \\t]+|)([a-zA-Z_][a-zA-Z0-9_]+)$"),
@@ -98,7 +92,6 @@ public List<String> apply(final Path filepath) {
9892

9993
public JythonAutoCompletions() {}
10094

101-
@Override
10295
public List<Completion> completionsFor(final CompletionProvider provider, String codeWithoutLastLine, final String lastLine, final String alreadyEnteredText) {
10396

10497
// Replacing of text will start at crop, given the already entered text that is considered for replacement

src/main/java/org/scijava/plugins/scripteditor/jython/JythonAutocompletionProvider.java

Lines changed: 8 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import java.util.ArrayList;
3232
import java.util.Collections;
3333
import java.util.List;
34-
import java.util.Vector;
3534
import java.util.regex.Matcher;
3635
import java.util.regex.Pattern;
3736
import java.util.stream.Collectors;
@@ -44,25 +43,13 @@
4443
import org.fife.ui.autocomplete.Completion;
4544
import org.fife.ui.autocomplete.DefaultCompletionProvider;
4645
import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;
47-
import org.scijava.ui.swing.script.autocompletion.AutoCompletionListener;
4846
import org.scijava.ui.swing.script.autocompletion.ClassUtil;
4947
import org.scijava.ui.swing.script.autocompletion.ImportCompletionImpl;
5048
import org.scijava.ui.swing.script.autocompletion.ImportFormat;
5149

5250
public class JythonAutocompletionProvider extends DefaultCompletionProvider {
5351

54-
static private final Vector<AutoCompletionListener> autocompletion_listeners = new Vector<>();
55-
56-
static {
57-
try {
58-
// Load the class so that it adds itself to the autocompletion_listeners
59-
@SuppressWarnings("unused")
60-
Class<?> c = JythonAutoCompletions.class;
61-
} catch (Throwable t) {
62-
System.out.println("WARNING did not load JythonAutoCompletions");
63-
}
64-
}
65-
52+
private final JythonAutoCompletions autoCompletions = new JythonAutoCompletions();
6653
private final RSyntaxTextArea text_area;
6754
private final ImportFormat formatter;
6855

@@ -101,15 +88,6 @@ private final List<Completion> asCompletionList(final Stream<String> stream, fin
10188
.collect(Collectors.toList());
10289
}
10390

104-
static public void addAutoCompletionListener(final AutoCompletionListener listener) {
105-
if (!autocompletion_listeners.contains(listener))
106-
autocompletion_listeners.add(listener);
107-
}
108-
109-
static public void removeAutoCompletionListener(final AutoCompletionListener listener) {
110-
autocompletion_listeners.remove(listener);
111-
}
112-
11391
@Override
11492
public List<Completion> getCompletionsImpl(final JTextComponent comp) {
11593
final ArrayList<Completion> completions = new ArrayList<>();
@@ -126,15 +104,13 @@ public List<Completion> getCompletionsImpl(final JTextComponent comp) {
126104
return completions;
127105
}
128106
// Completions provided by listeners (e.g. for methods and fields and variables and builtins from jython-autocompletion package)
129-
for (final AutoCompletionListener listener: new Vector<>(autocompletion_listeners)) {
130-
try {
131-
final List<Completion> cs = listener.completionsFor(this, codeWithoutLastLine, currentLine, alreadyEnteredText);
132-
if (null != cs)
133-
completions.addAll(cs);
134-
} catch (Exception e) {
135-
System.out.println("Failed to get autocompletions from " + listener);
136-
e.printStackTrace();
137-
}
107+
try {
108+
final List<Completion> cs = autoCompletions.completionsFor(this, codeWithoutLastLine, currentLine, alreadyEnteredText);
109+
if (cs != null) completions.addAll(cs);
110+
}
111+
catch (Exception e) {
112+
System.out.println("Failed to get autocompletions from " + autoCompletions);
113+
e.printStackTrace();
138114
}
139115
// Java class discovery for completions with auto-imports
140116
completions.addAll(getCompletions(alreadyEnteredText));

0 commit comments

Comments
 (0)