| /****************************************************************************** |
| * * |
| * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) * |
| * * |
| * 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 * |
| * * |
| * ============================================================================* |
| * Initial contribution: * |
| * Loetz GmbH & Co. KG * |
| * * |
| * generated by xtext * |
| ******************************************************************************/ |
| package org.eclipse.osbp.xtext.dialogdsl.ui.contentassist |
| |
| import com.google.inject.Inject |
| import org.eclipse.emf.ecore.EObject |
| import org.eclipse.jface.viewers.StyledString |
| import org.eclipse.osbp.xtext.basic.ui.contentassist.BasicDSLProposalProviderHelper |
| import org.eclipse.osbp.xtext.dialogdsl.ui.DialogDSLDocumentationTranslator |
| import org.eclipse.xtext.Keyword |
| import org.eclipse.xtext.RuleCall |
| import org.eclipse.xtext.common.ui.contentassist.TerminalsProposalProvider |
| import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext |
| import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor |
| import org.eclipse.xtext.nodemodel.INode |
| import org.eclipse.xtext.nodemodel.impl.AbstractNode |
| |
| /** |
| * see http://www.eclipse.org/Xtext/documentation.html#contentAssist on how to customize content assistant |
| */ |
| class DialogDslProposalProvider extends AbstractDialogDslProposalProvider { |
| |
| @Inject TerminalsProposalProvider provider |
| @Inject BasicDSLProposalProviderHelper providerHelper |
| |
| override protected StyledString getKeywordDisplayString(Keyword keyword) { |
| return BasicDSLProposalProviderHelper.getKeywordDisplayString(keyword, |
| DialogDSLDocumentationTranslator.instance()) |
| } |
| |
| /** |
| * This override will enable 1 length non letter characters as keyword. |
| */ |
| override protected boolean isKeywordWorthyToPropose(Keyword keyword) { |
| return true; |
| } |
| |
| override protected boolean isValidProposal(String proposal, String prefix, ContentAssistContext context) { |
| var result = super.isValidProposal(proposal, prefix, context); |
| result = !result.existsConflict(proposal, context) |
| return result |
| } |
| |
| // ------------------------ delegates to BasicDSLProposalProviderHelper ----------------- |
| override public void complete_QualifiedName(EObject model, RuleCall ruleCall, ContentAssistContext context, |
| ICompletionProposalAcceptor acceptor) { |
| providerHelper.complete_PackageName(model, ruleCall, context, acceptor, this) |
| } |
| |
| // ------------------------ delegates to TerminalsProposalProvider ----------------- |
| override public void complete_TRANSLATABLESTRING(EObject model, RuleCall ruleCall, ContentAssistContext context, |
| ICompletionProposalAcceptor acceptor) { |
| provider.complete_STRING(model, ruleCall, context, acceptor) |
| } |
| |
| override public void complete_ID(EObject model, RuleCall ruleCall, ContentAssistContext context, |
| ICompletionProposalAcceptor acceptor) { |
| provider.complete_ID(model, ruleCall, context, acceptor) |
| } |
| |
| def private boolean existsConflict(boolean isValidProposal, String proposal, ContentAssistContext context) { |
| if ("toolbar".equals(proposal)) { |
| var lastCompleteNode = context.getLastCompleteNode(); |
| if (lastCompleteNode instanceof AbstractNode) { |
| lastCompleteNode = (lastCompleteNode as AbstractNode) |
| var grammarElement = lastCompleteNode.grammarElement |
| if (grammarElement instanceof Keyword) { |
| var lastCompleteNodeValue = (grammarElement as Keyword).value |
| if ('embedded'.equals(lastCompleteNodeValue)) { |
| return true |
| } |
| } |
| } |
| } |
| !isValidProposal |
| } |
| } |