blob: 2a46043346d2fe12b879366285ea3d6f44d73847 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2017 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
*******************************************************************************/
package org.eclipse.dltk.console.ui;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.eclipse.dltk.console.IScriptConsoleShell;
import org.eclipse.dltk.console.ScriptConsoleCompletionProposal;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.contentassist.CompletionProposal;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
import org.eclipse.jface.text.contentassist.IContextInformation;
import org.eclipse.swt.graphics.Image;
public abstract class ScriptConsoleCompletionProcessor implements IContentAssistProcessor {
protected static interface IProposalDecorator {
String formatProposal(ScriptConsoleCompletionProposal c);
Image getImage(ScriptConsoleCompletionProposal c);
}
private static IProposalDecorator defaultDecorator;
protected IProposalDecorator getDefaultDecorator() {
if (defaultDecorator == null) {
defaultDecorator = new IProposalDecorator() {
@Override
public String formatProposal(ScriptConsoleCompletionProposal c) {
return c.getDisplay();
}
@Override
public Image getImage(ScriptConsoleCompletionProposal c) {
return null;
}
};
}
return defaultDecorator;
}
private IScriptConsoleShell interpreterShell;
public ScriptConsoleCompletionProcessor(IScriptConsoleShell interpreterShell) {
this.interpreterShell = interpreterShell;
}
protected IScriptConsoleShell getInterpreterShell() {
return this.interpreterShell;
}
protected List<CompletionProposal> createProposalsFromString(List<ScriptConsoleCompletionProposal> list, int offset,
IProposalDecorator decorator) {
if (decorator == null) {
decorator = getDefaultDecorator();
}
List<CompletionProposal> result = new ArrayList<>();
Iterator<ScriptConsoleCompletionProposal> it = list.iterator();
while (it.hasNext()) {
ScriptConsoleCompletionProposal c = it.next();
CompletionProposal proposal = new CompletionProposal(c.getInsert(), // replacementString
offset, // replacementOffset
0, // replacementLength
c.getInsert().length(), // cursorPosition
decorator.getImage(c), // image
decorator.formatProposal(c), // displayString
null, // contextInformation
null); // additionalContextInformation
result.add(proposal);
}
Collections.sort(result, (p1, p2) -> p1.getDisplayString().compareTo(p2.getDisplayString()));
return result;
}
protected abstract ICompletionProposal[] computeCompletionProposalsImpl(IScriptConsoleViewer viewer, int offset);
protected abstract IContextInformation[] computeContextInformationImpl(ITextViewer viewer, int offset);
@Override
public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int offset) {
return computeCompletionProposalsImpl((IScriptConsoleViewer) viewer, offset);
}
@Override
public char[] getCompletionProposalAutoActivationCharacters() {
return null;
}
@Override
public IContextInformation[] computeContextInformation(ITextViewer viewer, int offset) {
return computeContextInformationImpl(viewer, offset);
}
@Override
public char[] getContextInformationAutoActivationCharacters() {
return null;
}
@Override
public String getErrorMessage() {
return null;
}
}