blob: d5c98c84eeec0a0b0d28be6e4c4ea006c46d49d0 [file] [log] [blame]
/**
* 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
*
* Contributors:
* Christophe Loetz (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.ecore.EObject;
import org.eclipse.jface.viewers.StyledString;
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.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
*/
@Override
protected StyledString getKeywordDisplayString(final Keyword keyword) {
return BasicDSLProposalProviderHelper.getKeywordDisplayString(keyword, MessageDslUiDocumentationTranslator.instance());
}
/**
* This override will enable 1 length non letter characters as keyword.
*/
@Override
protected boolean isKeywordWorthyToPropose(final Keyword keyword) {
return true;
}
/**
* convenience API to build and initialize JVM types and their members.
*/
@Inject
@Extension
private JvmTypesBuilder _jvmTypesBuilder;
@Override
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()}
*/
@Override
public void completeMessageText_Text(final EObject model, final Assignment assignment, final ContentAssistContext context, final ICompletionProposalAcceptor acceptor) {
super.completeMessageText_Text(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);
final String document = context.getViewer().getDocument().get().replace("\\\"", "\'\'");
final int formatoffset = context.getReplaceRegion().getOffset();
final int nextquote = document.indexOf("\"", (formatoffset + 1));
final String replaceRegion = document.substring(formatoffset, (nextquote + 1));
final Consumer<MessageParameter> _function = new Consumer<MessageParameter>() {
@Override
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;
}
}
}
};
((MessageItem) model).getParameters().forEach(_function);
final BiConsumer<String, String> _function_1 = new BiConsumer<String, String>() {
@Override
public void accept(final String proposal, final String displayString) {
StyledString _styledString = new StyledString(displayString);
acceptor.accept(MessageDslProposalProvider.this.doCreateInStringProposal(proposal, _styledString, image,
MessageDslProposalProvider.this.getPriorityHelper().getDefaultPriority(), context));
}
};
available.forEach(_function_1);
final BiConsumer<String, String> _function_2 = new BiConsumer<String, String>() {
@Override
public void accept(final String proposal, final String displayString) {
StyledString _styledString = new StyledString(displayString);
acceptor.accept(MessageDslProposalProvider.this.doCreateInStringProposal(proposal, _styledString, image,
MessageDslProposalProvider.this.getPriorityHelper().getDefaultPriority(), context));
}
};
used.forEach(_function_2);
}
private ConfigurableCompletionProposal doCreateInStringProposal(final String proposal, final StyledString displayString, final Image image, final int priority, final ContentAssistContext context) {
final Point selectedRange = context.getViewer().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);
result.setMatcher(context.getMatcher());
result.setReplaceContextLength(context.getReplaceContextLength());
return result;
}
@Override
public void complete_ID(final EObject model, final RuleCall ruleCall, final ContentAssistContext context, final ICompletionProposalAcceptor acceptor) {
this.provider.complete_ID(model, ruleCall, context, acceptor);
}
}