public void accept(ICompletionProposal proposal) {
   if (proposal instanceof ConfigurableCompletionProposal) {
     Keyword keyword = XtextFactory.eINSTANCE.createKeyword();
     keyword.setValue(proposal.getDisplayString());
     ((ConfigurableCompletionProposal) proposal).setAdditionalProposalInfo(keyword);
     ((ConfigurableCompletionProposal) proposal).setHover(STextProposalProvider.this.getHover());
   }
   delegate.accept(proposal);
 }
  @Override
  public void complete_HEX(
      EObject model,
      RuleCall ruleCall,
      ContentAssistContext context,
      ICompletionProposalAcceptor acceptor) {
    ICompletionProposalAcceptor priorityOptimizer = getCustomAcceptor(model, "integer", acceptor);

    String proposalText = "0x1";
    ICompletionProposal proposal =
        createCompletionProposal(
            proposalText, proposalText + " - " + ruleCall.getRule().getName(), null, context);

    if (proposal instanceof ConfigurableCompletionProposal) {
      ConfigurableCompletionProposal configurable = (ConfigurableCompletionProposal) proposal;
      configurable.setSelectionStart(configurable.getReplacementOffset() + 2);
      configurable.setSelectionLength(proposalText.length() - 2);
      configurable.setAutoInsertable(false);
      configurable.setSimpleLinkedMode(context.getViewer(), '\t', ' ');
    }

    priorityOptimizer.accept(proposal);
  }
 private void alterPriority(ICompletionProposal proposal, int delta) {
   if (proposal == null || !(proposal instanceof ConfigurableCompletionProposal)) return;
   ConfigurableCompletionProposal castedProposal = (ConfigurableCompletionProposal) proposal;
   castedProposal.setPriority(castedProposal.getPriority() + delta);
 }