Skip to content

Commit

Permalink
ImportStatement for automatic import insertion is now an interface.
Browse files Browse the repository at this point in the history
This way, it can be implemented by other kinds of completions,
not just a BasicCompletion.
  • Loading branch information
acardona committed Dec 10, 2020
1 parent a6603d3 commit 5fb06bf
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 47 deletions.
Original file line number Diff line number Diff line change
@@ -1,49 +1,16 @@
/*-
* #%L
* Script Editor and Interpreter for SciJava script languages.
* %%
* Copyright (C) 2009 - 2020 SciJava developers.
* %%
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
* #L%
*/
package org.scijava.ui.swing.script.autocompletion;

import org.fife.ui.autocomplete.BasicCompletion;
import org.fife.ui.autocomplete.CompletionProvider;

public class ImportCompletion extends BasicCompletion
public interface ImportCompletion
{
protected final String importStatement,
className;
/**
*
* @return The formatted import statement, e.g. "from this import that".
*/
public String getImportStatement();

public ImportCompletion(final CompletionProvider provider, final String replacementText, final String className, final String importStatement) {
super(provider, replacementText);
this.className = className;
this.importStatement = importStatement;
}

@Override
public String getSummary() {
return importStatement;
}
/**
*
* @return The fully qualified class name.
*/
public String getClassName();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
/*-
* #%L
* Script Editor and Interpreter for SciJava script languages.
* %%
* Copyright (C) 2009 - 2020 SciJava developers.
* %%
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
* #L%
*/
package org.scijava.ui.swing.script.autocompletion;

import org.fife.ui.autocomplete.BasicCompletion;
import org.fife.ui.autocomplete.CompletionProvider;

public class ImportCompletionImpl extends BasicCompletion implements ImportCompletion
{
protected final String importStatement,
className;

public ImportCompletionImpl(final CompletionProvider provider, final String replacementText, final String className, final String importStatement) {
super(provider, replacementText);
this.className = className;
this.importStatement = importStatement;
}

@Override
public String getSummary() {
return importStatement; // better than nothing
}

@Override
public String getImportStatement() {
return importStatement;
}

@Override
public String getClassName() {
return className;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -134,13 +134,13 @@ protected void insertCompletion(final Completion c, final boolean typedParamList
final HashMap<String, Import> importedClasses = findImportedClasses(editor.getText());
// Insert import statement after the last import, if not there already
for (final Import im : importedClasses.values()) {
if (im.className.contentEquals(cc.className))
if (im.className.contentEquals(cc.getClassName()))
return; // don't insert
}
try {
final int insertAtLine = 0 == importedClasses.size() ? 0
: importedClasses.values().stream().map(im -> im.lineNumber).reduce(Math::max).get();
editor.insert(cc.importStatement + "\n", editor.getLineStartOffset(0 == insertAtLine ? 0 : insertAtLine + 1));
editor.insert(cc.getImportStatement() + "\n", editor.getLineStartOffset(0 == insertAtLine ? 0 : insertAtLine + 1));
} catch (BadLocationException e) {
e.printStackTrace();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ public List<Completion> getCompletions(final String text) {
// Side effect: insert the import at the top of the file if necessary
//return asCompletionList(ClassUtil.findSimpleClassNamesStartingWith(m3.group(2)).stream(), m3.group(1));
return ClassUtil.findSimpleClassNamesStartingWith(m3.group(2)).stream()
.map(className -> new ImportCompletion(JythonAutocompletionProvider.this,
.map(className -> new ImportCompletionImpl(JythonAutocompletionProvider.this,
m3.group(1) + className.substring(className.lastIndexOf('.') + 1),
className,
formatter.singleToImportStatement(className)))
Expand Down

0 comments on commit 5fb06bf

Please sign in to comment.