/*
* generated by Xtext
*/
package org.example.expressions.ui.contentassist;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.Assignment;
import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext;
import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor;
import org.example.expressions.expressions.AbstractElement;
import org.example.expressions.expressions.Variable;
import org.example.expressions.typing.ExpressionsModelUtil;
/**
* see http://www.eclipse.org/Xtext/documentation/latest/xtext.html#contentAssist on how to customize content assistant
*/
public class ExpressionsProposalProvider extends AbstractExpressionsProposalProvider {
@Override
public void completeAtomic_Variable(final EObject elem, Assignment assignment, ContentAssistContext context,
ICompletionProposalAcceptor acceptor) {
if (!(elem instanceof AbstractElement)) {
return; // no proposal
}
List<Variable> variables = ExpressionsModelUtil.
variablesDefinedBefore((AbstractElement)elem);
for (Variable variable : variables) {
acceptor.accept(createCompletionProposal
(variable.getName(),
variable.getName() + " - Variable", null,
context));
}
// Better implementation reusing scoping
// lookupCrossReference(((CrossReference) assignment.getTerminal()), context, acceptor,
// new Predicate<IEObjectDescription>() {
//
// public boolean apply(IEObjectDescription input) {
// if (model instanceof ExpressionsModel) {
// return false;
// }
// List<Variable> variables = ExpressionsModelUtil.variablesDefinedBefore(model);
// boolean found = false;
// for (Iterator<Variable> iterator = variables.iterator(); iterator.hasNext();) {
// Variable variable = iterator.next();
// if (input.getName().toString().equals(variable.getName())) {
// found = true;
// break;
// }
// }
// return found;
// }
//
// });
}
}