/*
* generated by Xtext
*/
package it.xsemantics.dsl.ui.contentassist;
import it.xsemantics.dsl.services.XsemanticsProposalsForDatatypeRules;
import it.xsemantics.dsl.xsemantics.XsemanticsPackage;
import it.xsemantics.runtime.XsemanticsRuntimeSystem;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.xtext.Assignment;
import org.eclipse.xtext.RuleCall;
import org.eclipse.xtext.common.types.JvmTypeReference;
import org.eclipse.xtext.common.types.access.IJvmTypeProvider;
import org.eclipse.xtext.common.types.xtext.ui.ITypesProposalProvider;
import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext;
import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor;
import org.eclipse.xtext.validation.AbstractDeclarativeValidator;
import com.google.inject.Inject;
/**
* see
* http://www.eclipse.org/Xtext/documentation/latest/xtext.html#contentAssist on
* how to customize content assistant
*/
public class XsemanticsProposalProvider extends
AbstractXsemanticsProposalProvider {
@Inject
private XsemanticsProposalsForDatatypeRules proposalsForDatatypeRules;
@Inject
private ITypesProposalProvider typeProposalProvider;
@Inject
private IJvmTypeProvider.Factory typeProviderFactory;
@Override
public void complete_JudgmentSymbol(EObject model, RuleCall ruleCall,
ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
for (String symbol : proposalsForDatatypeRules.judgmentSymbols()) {
acceptor.accept(createCompletionProposal(symbol, context));
}
}
@Override
public void complete_RelationSymbol(EObject model, RuleCall ruleCall,
ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
for (String symbol : proposalsForDatatypeRules.relationSymbols()) {
acceptor.accept(createCompletionProposal(symbol, context));
}
}
@Override
public void completeXsemanticsSystem_ValidatorExtends(EObject model,
Assignment assignment, ContentAssistContext context,
ICompletionProposalAcceptor acceptor) {
// we show only subtypes of AbstractDeclarativeValidator
showOnlySubtypesOf(model, context, acceptor,
AbstractDeclarativeValidator.class,
XsemanticsPackage.Literals.XSEMANTICS_SYSTEM__VALIDATOR_EXTENDS);
}
@Override
public void completeXsemanticsSystem_SuperSystem(EObject model,
Assignment assignment, ContentAssistContext context,
ICompletionProposalAcceptor acceptor) {
// we show only subtypes of XsemanticsRuntimeSystem
showOnlySubtypesOf(model, context, acceptor,
XsemanticsRuntimeSystem.class,
XsemanticsPackage.Literals.XSEMANTICS_SYSTEM__SUPER_SYSTEM);
}
protected void showOnlySubtypesOf(EObject model,
ContentAssistContext context, ICompletionProposalAcceptor acceptor,
Class<?> superType, EReference reference) {
JvmTypeReference superTypeRef = typesBuilder.newTypeRef(model, superType);
if (superTypeRef != null) {
typeProposalProvider.createSubTypeProposals(
superTypeRef.getType(), this,
context, reference, acceptor);
}
}
}