blob: 26e937f77043cf2d001967ed0743ada3f4c1e57e [file] [log] [blame]
/**
* Copyright (c) 2015 - 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
*
* Contributors:
* Loetz GmbH&Co.KG - Initial implementation
*
*
* This copyright notice shows up in the generated Java code
*/
package org.eclipse.osbp.xtext.messagedsl.ui.contentassist;
import com.google.inject.Inject;
import java.util.TreeMap;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.Region;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.osbp.xtext.basic.ui.BasicDSLDocumentationTranslator;
import org.eclipse.osbp.xtext.basic.ui.contentassist.BasicDSLProposalProviderHelper;
import org.eclipse.osbp.xtext.messagedsl.MessageItem;
import org.eclipse.osbp.xtext.messagedsl.MessageParameter;
import org.eclipse.osbp.xtext.messagedsl.ParameterTypeEnum;
import org.eclipse.osbp.xtext.messagedsl.ui.MessageDslUiDocumentationTranslator;
import org.eclipse.osbp.xtext.messagedsl.ui.contentassist.AbstractMessageDslProposalProvider;
import org.eclipse.osbp.xtext.messagedsl.ui.contentassist.InsideStringConfigurableCompletionProposal;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.Assignment;
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.ConfigurableCompletionProposal;
import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext;
import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor;
import org.eclipse.xtext.ui.editor.contentassist.IContentProposalPriorities;
import org.eclipse.xtext.ui.editor.contentassist.PrefixMatcher;
import org.eclipse.xtext.xbase.jvmmodel.JvmTypesBuilder;
import org.eclipse.xtext.xbase.lib.Extension;
/**
* see https://eclipse.org/Xtext/documentation/304_ide_concepts.html#content-assist on how to customize content assistant
*/
@SuppressWarnings("all")
public class MessageDslProposalProvider extends AbstractMessageDslProposalProvider {
@Inject
private TerminalsProposalProvider provider;
@Inject
private BasicDSLProposalProviderHelper providerHelper;
/**
* @see BasicDSLProposalProviderHelper#getKeywordDisplayString(Keyword, BasicDSLUiTranslator)
* @param keyword the keyword to get the displayed string for
* @return the displayed string
*/
protected StyledString getKeywordDisplayString(final Keyword keyword) {
BasicDSLDocumentationTranslator _instance = MessageDslUiDocumentationTranslator.instance();
return BasicDSLProposalProviderHelper.getKeywordDisplayString(keyword, _instance);
}
/**
* This override will enable 1 length non letter characters as keyword.
*/
protected boolean isKeywordWorthyToPropose(final Keyword keyword) {
return true;
}
/**
* convenience API to build and initialize JVM types and their members.
*/
@Inject
@Extension
private JvmTypesBuilder _jvmTypesBuilder;
public void complete_QualifiedName(final EObject model, final RuleCall ruleCall, final ContentAssistContext context, final ICompletionProposalAcceptor acceptor) {
this.providerHelper.complete_PackageName(model, ruleCall, context, acceptor, this);
}
/**
* see also {@link org.eclipse.osbp.xtext.messagedsl.common.Message.prepareMessage()}
*/
public void completeMessageDefaultFormat_Format(final EObject model, final Assignment assignment, final ContentAssistContext context, final ICompletionProposalAcceptor acceptor) {
super.completeMessageDefaultFormat_Format(model, assignment, context, acceptor);
final TreeMap<String, String> available = new TreeMap<String, String>();
final TreeMap<String, String> used = new TreeMap<String, String>();
final Image image = ((Image) null);
ITextViewer _viewer = context.getViewer();
IDocument _document = _viewer.getDocument();
String _get = _document.get();
final String document = _get.replace("\\\"", "\'\'");
Region _replaceRegion = context.getReplaceRegion();
final int formatoffset = _replaceRegion.getOffset();
final int nextquote = document.indexOf("\"", (formatoffset + 1));
final String replaceRegion = document.substring(formatoffset, (nextquote + 1));
EList<MessageParameter> _parameters = ((MessageItem) model).getParameters();
final Consumer<MessageParameter> _function = new Consumer<MessageParameter>() {
public void accept(final MessageParameter parameter) {
ParameterTypeEnum _oftype = parameter.getOftype();
if (_oftype != null) {
switch (_oftype) {
case BOOLEAN:
StringConcatenation _builder = new StringConcatenation();
_builder.append("%%");
String _name = parameter.getName();
_builder.append(_name, "");
_builder.append("%%");
final String proposal = _builder.toString();
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append(proposal, "");
_builder_1.append(" (boolean) ");
String _documentation = MessageDslProposalProvider.this._jvmTypesBuilder.getDocumentation(parameter);
_builder_1.append(_documentation, "");
final String displayString = _builder_1.toString();
boolean _contains = replaceRegion.contains(proposal);
if (_contains) {
StringConcatenation _builder_2 = new StringConcatenation();
_builder_2.append("used: ");
_builder_2.append(displayString, "");
used.put(proposal, _builder_2.toString());
} else {
available.put(proposal, displayString);
}
break;
case INTEGER:
StringConcatenation _builder_3 = new StringConcatenation();
_builder_3.append("%%");
String _name_1 = parameter.getName();
_builder_3.append(_name_1, "");
_builder_3.append("%%");
final String proposal_1 = _builder_3.toString();
StringConcatenation _builder_4 = new StringConcatenation();
_builder_4.append(proposal_1, "");
_builder_4.append(" (int) ");
String _documentation_1 = MessageDslProposalProvider.this._jvmTypesBuilder.getDocumentation(parameter);
_builder_4.append(_documentation_1, "");
final String displayString_1 = _builder_4.toString();
boolean _contains_1 = replaceRegion.contains(proposal_1);
if (_contains_1) {
StringConcatenation _builder_5 = new StringConcatenation();
_builder_5.append("used: ");
_builder_5.append(displayString_1, "");
used.put(proposal_1, _builder_5.toString());
} else {
available.put(proposal_1, displayString_1);
}
break;
case DOUBLE:
StringConcatenation _builder_6 = new StringConcatenation();
_builder_6.append("%%");
String _name_2 = parameter.getName();
_builder_6.append(_name_2, "");
_builder_6.append("%%");
final String proposal_2 = _builder_6.toString();
StringConcatenation _builder_7 = new StringConcatenation();
_builder_7.append(proposal_2, "");
_builder_7.append(" (double) ");
String _documentation_2 = MessageDslProposalProvider.this._jvmTypesBuilder.getDocumentation(parameter);
_builder_7.append(_documentation_2, "");
final String displayString_2 = _builder_7.toString();
boolean _contains_2 = replaceRegion.contains(proposal_2);
if (_contains_2) {
StringConcatenation _builder_8 = new StringConcatenation();
_builder_8.append("used: ");
_builder_8.append(displayString_2, "");
used.put(proposal_2, _builder_8.toString());
} else {
available.put(proposal_2, displayString_2);
}
break;
case STRING:
StringConcatenation _builder_9 = new StringConcatenation();
_builder_9.append("%%");
String _name_3 = parameter.getName();
_builder_9.append(_name_3, "");
_builder_9.append("%%");
final String proposal_3 = _builder_9.toString();
StringConcatenation _builder_10 = new StringConcatenation();
_builder_10.append(proposal_3, "");
_builder_10.append(" (String) ");
String _documentation_3 = MessageDslProposalProvider.this._jvmTypesBuilder.getDocumentation(parameter);
_builder_10.append(_documentation_3, "");
final String displayString_3 = _builder_10.toString();
boolean _contains_3 = replaceRegion.contains(proposal_3);
if (_contains_3) {
StringConcatenation _builder_11 = new StringConcatenation();
_builder_11.append("used: ");
_builder_11.append(displayString_3, "");
used.put(proposal_3, _builder_11.toString());
} else {
available.put(proposal_3, displayString_3);
}
break;
case CLASS:
{
StringConcatenation _builder_12 = new StringConcatenation();
_builder_12.append("%%");
String _name_4 = parameter.getName();
_builder_12.append(_name_4, "");
_builder_12.append(".canonicalName%%");
final String proposal_4 = _builder_12.toString();
StringConcatenation _builder_13 = new StringConcatenation();
_builder_13.append(proposal_4, "");
_builder_13.append(" (canonical name for Class) ");
String _documentation_4 = MessageDslProposalProvider.this._jvmTypesBuilder.getDocumentation(parameter);
_builder_13.append(_documentation_4, "");
final String displayString_4 = _builder_13.toString();
boolean _contains_4 = replaceRegion.contains(proposal_4);
if (_contains_4) {
StringConcatenation _builder_14 = new StringConcatenation();
_builder_14.append("used: ");
_builder_14.append(displayString_4, "");
used.put(proposal_4, _builder_14.toString());
} else {
available.put(proposal_4, displayString_4);
}
}
{
StringConcatenation _builder_12 = new StringConcatenation();
_builder_12.append("%%");
String _name_4 = parameter.getName();
_builder_12.append(_name_4, "");
_builder_12.append(".simpleName%%");
final String proposal_4 = _builder_12.toString();
StringConcatenation _builder_13 = new StringConcatenation();
_builder_13.append(proposal_4, "");
_builder_13.append(" (simple name for Class) ");
String _documentation_4 = MessageDslProposalProvider.this._jvmTypesBuilder.getDocumentation(parameter);
_builder_13.append(_documentation_4, "");
final String displayString_4 = _builder_13.toString();
boolean _contains_4 = replaceRegion.contains(proposal_4);
if (_contains_4) {
StringConcatenation _builder_14 = new StringConcatenation();
_builder_14.append("used: ");
_builder_14.append(displayString_4, "");
used.put(proposal_4, _builder_14.toString());
} else {
available.put(proposal_4, displayString_4);
}
}
break;
case OBJECT:
{
StringConcatenation _builder_12 = new StringConcatenation();
_builder_12.append("%%");
String _name_4 = parameter.getName();
_builder_12.append(_name_4, "");
_builder_12.append(".canonicalName%%");
final String proposal_4 = _builder_12.toString();
StringConcatenation _builder_13 = new StringConcatenation();
_builder_13.append(proposal_4, "");
_builder_13.append(" (canonical name for Object) ");
String _documentation_4 = MessageDslProposalProvider.this._jvmTypesBuilder.getDocumentation(parameter);
_builder_13.append(_documentation_4, "");
final String displayString_4 = _builder_13.toString();
boolean _contains_4 = replaceRegion.contains(proposal_4);
if (_contains_4) {
StringConcatenation _builder_14 = new StringConcatenation();
_builder_14.append("used: ");
_builder_14.append(displayString_4, "");
used.put(proposal_4, _builder_14.toString());
} else {
available.put(proposal_4, displayString_4);
}
}
{
StringConcatenation _builder_12 = new StringConcatenation();
_builder_12.append("%%");
String _name_4 = parameter.getName();
_builder_12.append(_name_4, "");
_builder_12.append(".simpleName%%");
final String proposal_4 = _builder_12.toString();
StringConcatenation _builder_13 = new StringConcatenation();
_builder_13.append(proposal_4, "");
_builder_13.append(" (simple name for Object) ");
String _documentation_4 = MessageDslProposalProvider.this._jvmTypesBuilder.getDocumentation(parameter);
_builder_13.append(_documentation_4, "");
final String displayString_4 = _builder_13.toString();
boolean _contains_4 = replaceRegion.contains(proposal_4);
if (_contains_4) {
StringConcatenation _builder_14 = new StringConcatenation();
_builder_14.append("used: ");
_builder_14.append(displayString_4, "");
used.put(proposal_4, _builder_14.toString());
} else {
available.put(proposal_4, displayString_4);
}
}
break;
case EXCEPTION:
{
StringConcatenation _builder_12 = new StringConcatenation();
_builder_12.append("%%");
String _name_4 = parameter.getName();
_builder_12.append(_name_4, "");
_builder_12.append(".canonicalName%%");
final String proposal_4 = _builder_12.toString();
StringConcatenation _builder_13 = new StringConcatenation();
_builder_13.append(proposal_4, "");
_builder_13.append(" (canonical name for Exception) ");
String _documentation_4 = MessageDslProposalProvider.this._jvmTypesBuilder.getDocumentation(parameter);
_builder_13.append(_documentation_4, "");
final String displayString_4 = _builder_13.toString();
boolean _contains_4 = replaceRegion.contains(proposal_4);
if (_contains_4) {
StringConcatenation _builder_14 = new StringConcatenation();
_builder_14.append("used: ");
_builder_14.append(displayString_4, "");
used.put(proposal_4, _builder_14.toString());
} else {
available.put(proposal_4, displayString_4);
}
}
{
StringConcatenation _builder_12 = new StringConcatenation();
_builder_12.append("%%");
String _name_4 = parameter.getName();
_builder_12.append(_name_4, "");
_builder_12.append(".simpleName%%");
final String proposal_4 = _builder_12.toString();
StringConcatenation _builder_13 = new StringConcatenation();
_builder_13.append(proposal_4, "");
_builder_13.append(" (simple name for Exception) ");
String _documentation_4 = MessageDslProposalProvider.this._jvmTypesBuilder.getDocumentation(parameter);
_builder_13.append(_documentation_4, "");
final String displayString_4 = _builder_13.toString();
boolean _contains_4 = replaceRegion.contains(proposal_4);
if (_contains_4) {
StringConcatenation _builder_14 = new StringConcatenation();
_builder_14.append("used: ");
_builder_14.append(displayString_4, "");
used.put(proposal_4, _builder_14.toString());
} else {
available.put(proposal_4, displayString_4);
}
}
{
StringConcatenation _builder_12 = new StringConcatenation();
_builder_12.append("%%");
String _name_4 = parameter.getName();
_builder_12.append(_name_4, "");
_builder_12.append(".localizedMessage%%");
final String proposal_4 = _builder_12.toString();
StringConcatenation _builder_13 = new StringConcatenation();
_builder_13.append(proposal_4, "");
_builder_13.append(" (localized message for Exception) ");
String _documentation_4 = MessageDslProposalProvider.this._jvmTypesBuilder.getDocumentation(parameter);
_builder_13.append(_documentation_4, "");
final String displayString_4 = _builder_13.toString();
boolean _contains_4 = replaceRegion.contains(proposal_4);
if (_contains_4) {
StringConcatenation _builder_14 = new StringConcatenation();
_builder_14.append("used: ");
_builder_14.append(displayString_4, "");
used.put(proposal_4, _builder_14.toString());
} else {
available.put(proposal_4, displayString_4);
}
}
{
StringConcatenation _builder_12 = new StringConcatenation();
_builder_12.append("%%");
String _name_4 = parameter.getName();
_builder_12.append(_name_4, "");
_builder_12.append(".localizedDetailMessage%%");
final String proposal_4 = _builder_12.toString();
StringConcatenation _builder_13 = new StringConcatenation();
_builder_13.append(proposal_4, "");
_builder_13.append(" (localized detail message for Exception) ");
String _documentation_4 = MessageDslProposalProvider.this._jvmTypesBuilder.getDocumentation(parameter);
_builder_13.append(_documentation_4, "");
final String displayString_4 = _builder_13.toString();
boolean _contains_4 = replaceRegion.contains(proposal_4);
if (_contains_4) {
StringConcatenation _builder_14 = new StringConcatenation();
_builder_14.append("used: ");
_builder_14.append(displayString_4, "");
used.put(proposal_4, _builder_14.toString());
} else {
available.put(proposal_4, displayString_4);
}
}
{
StringConcatenation _builder_12 = new StringConcatenation();
_builder_12.append("%%");
String _name_4 = parameter.getName();
_builder_12.append(_name_4, "");
_builder_12.append(".localizedSimpleDetailMessage%%");
final String proposal_4 = _builder_12.toString();
StringConcatenation _builder_13 = new StringConcatenation();
_builder_13.append(proposal_4, "");
_builder_13.append(" (localized simple detail message for Exception) ");
String _documentation_4 = MessageDslProposalProvider.this._jvmTypesBuilder.getDocumentation(parameter);
_builder_13.append(_documentation_4, "");
final String displayString_4 = _builder_13.toString();
boolean _contains_4 = replaceRegion.contains(proposal_4);
if (_contains_4) {
StringConcatenation _builder_14 = new StringConcatenation();
_builder_14.append("used: ");
_builder_14.append(displayString_4, "");
used.put(proposal_4, _builder_14.toString());
} else {
available.put(proposal_4, displayString_4);
}
}
{
StringConcatenation _builder_12 = new StringConcatenation();
_builder_12.append("%%");
String _name_4 = parameter.getName();
_builder_12.append(_name_4, "");
_builder_12.append(".stackTrace%%");
final String proposal_4 = _builder_12.toString();
StringConcatenation _builder_13 = new StringConcatenation();
_builder_13.append(proposal_4, "");
_builder_13.append(" (stack trace for Exception) ");
String _documentation_4 = MessageDslProposalProvider.this._jvmTypesBuilder.getDocumentation(parameter);
_builder_13.append(_documentation_4, "");
final String displayString_4 = _builder_13.toString();
boolean _contains_4 = replaceRegion.contains(proposal_4);
if (_contains_4) {
StringConcatenation _builder_14 = new StringConcatenation();
_builder_14.append("used: ");
_builder_14.append(displayString_4, "");
used.put(proposal_4, _builder_14.toString());
} else {
available.put(proposal_4, displayString_4);
}
}
break;
default:
break;
}
}
}
};
_parameters.forEach(_function);
final BiConsumer<String, String> _function_1 = new BiConsumer<String, String>() {
public void accept(final String proposal, final String displayString) {
StyledString _styledString = new StyledString(displayString);
IContentProposalPriorities _priorityHelper = MessageDslProposalProvider.this.getPriorityHelper();
int _defaultPriority = _priorityHelper.getDefaultPriority();
ConfigurableCompletionProposal _doCreateInStringProposal = MessageDslProposalProvider.this.doCreateInStringProposal(proposal, _styledString, image, _defaultPriority, context);
acceptor.accept(_doCreateInStringProposal);
}
};
available.forEach(_function_1);
final BiConsumer<String, String> _function_2 = new BiConsumer<String, String>() {
public void accept(final String proposal, final String displayString) {
StyledString _styledString = new StyledString(displayString);
IContentProposalPriorities _priorityHelper = MessageDslProposalProvider.this.getPriorityHelper();
int _defaultPriority = _priorityHelper.getDefaultPriority();
ConfigurableCompletionProposal _doCreateInStringProposal = MessageDslProposalProvider.this.doCreateInStringProposal(proposal, _styledString, image, _defaultPriority, context);
acceptor.accept(_doCreateInStringProposal);
}
};
used.forEach(_function_2);
}
private ConfigurableCompletionProposal doCreateInStringProposal(final String proposal, final StyledString displayString, final Image image, final int priority, final ContentAssistContext context) {
ITextViewer _viewer = context.getViewer();
final Point selectedRange = _viewer.getSelectedRange();
final int replacementOffset = selectedRange.x;
final int replacementLength = selectedRange.y;
int _length = proposal.length();
final InsideStringConfigurableCompletionProposal result = new InsideStringConfigurableCompletionProposal(proposal, replacementOffset, replacementLength, _length, image, displayString, null, null);
result.setPriority(priority);
PrefixMatcher _matcher = context.getMatcher();
result.setMatcher(_matcher);
int _replaceContextLength = context.getReplaceContextLength();
result.setReplaceContextLength(_replaceContextLength);
return result;
}
public void complete_ID(final EObject model, final RuleCall ruleCall, final ContentAssistContext context, final ICompletionProposalAcceptor acceptor) {
this.provider.complete_ID(model, ruleCall, context, acceptor);
}
}