blob: f66ca84055dcd85fe1bfa154159016151999d787 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 itemis AG (http://www.itemis.eu) 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.xtext.example.arithmetics.ui.contentassist;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.xtext.Assignment;
import org.eclipse.xtext.example.arithmetics.arithmetics.DeclaredParameter;
import org.eclipse.xtext.example.arithmetics.ui.contentassist.AbstractArithmeticsProposalProvider;
import org.eclipse.xtext.resource.IEObjectDescription;
import org.eclipse.xtext.ui.editor.contentassist.ConfigurableCompletionProposal;
import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext;
import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor;
import com.google.common.base.Function;
/**
* @author Sven Efftinge - initial contribution and API
*
*/
public class ArithmeticsProposalProvider extends AbstractArithmeticsProposalProvider {
/**
* sets the selection on the arguments for proposed functions.
*/
@Override
public void completePrimaryExpression_Func(EObject model,
Assignment assignment, ContentAssistContext context,
final ICompletionProposalAcceptor acceptor) {
super.completePrimaryExpression_Func(model, assignment, context, new ICompletionProposalAcceptor.Delegate(acceptor) {
public void accept(ICompletionProposal proposal) {
if (proposal instanceof ConfigurableCompletionProposal) {
ConfigurableCompletionProposal ccp = (ConfigurableCompletionProposal) proposal;
String string = ccp.getReplacementString();
int indexOfOpenPar = string.indexOf('(');
if (indexOfOpenPar!=-1) {
int oldSelectionStart = ccp.getSelectionStart();
ccp.setSelectionStart(oldSelectionStart-string.length()+indexOfOpenPar+1);
ccp.setSelectionLength(oldSelectionStart-ccp.getSelectionStart()-1);
}
}
super.accept(proposal);
}
});
}
@Override
protected String getDisplayString(EObject element,
String qualifiedNameAsString, String shortName) {
if (element instanceof DeclaredParameter)
return shortName;
return super.getDisplayString(element, qualifiedNameAsString, shortName);
}
@Override
protected Function<IEObjectDescription, ICompletionProposal> getProposalFactory(
String ruleName, ContentAssistContext contentAssistContext) {
// hackish: ignore concrete syntax constraints since we export functions with parenths
return super.getProposalFactory(null, contentAssistContext);
}
}