Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJuergen Haug2017-07-24 14:52:24 +0000
committerJuergen Haug2017-07-26 09:06:02 +0000
commite80049619335b2863c0535cf8f8d0f3bd784fb0f (patch)
tree0f1e2c606d9911fc138136e34467092798643cb7
parent5e3d77e69e5c353ad11395813505959bb2df12aa (diff)
downloadorg.eclipse.etrice-e80049619335b2863c0535cf8f8d0f3bd784fb0f.tar.gz
org.eclipse.etrice-e80049619335b2863c0535cf8f8d0f3bd784fb0f.tar.xz
org.eclipse.etrice-e80049619335b2863c0535cf8f8d0f3bd784fb0f.zip
[targetLang] added content assist
-rw-r--r--plugins/org.eclipse.etrice.core.common.ui/META-INF/MANIFEST.MF1
-rw-r--r--plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/converter/CC_StringConveter.java22
-rw-r--r--plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/util/CCStringIndentation.java27
-rw-r--r--plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/validation/FSMJavaValidator.java25
-rw-r--r--plugins/org.eclipse.etrice.core.room.ui/META-INF/MANIFEST.MF3
-rw-r--r--plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/RoomUiModule.java8
-rw-r--r--plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/contentassist/RoomProposalProvider.java43
-rw-r--r--plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/highlight/RoomHighlightingConfiguration.java8
-rw-r--r--plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/highlight/RoomSemanticHighlightingCalculator.java49
-rw-r--r--plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/hover/RoomHoverProvider.xtend65
-rw-r--r--plugins/org.eclipse.etrice.core.room.ui/xtend-gen/org/eclipse/etrice/core/ui/hover/RoomHoverProvider.java45
-rw-r--r--plugins/org.eclipse.etrice.expressions.ui/.classpath8
-rw-r--r--plugins/org.eclipse.etrice.expressions.ui/.gitignore4
-rw-r--r--plugins/org.eclipse.etrice.expressions.ui/.project34
-rw-r--r--plugins/org.eclipse.etrice.expressions.ui/.settings/org.eclipse.jdt.core.prefs7
-rw-r--r--plugins/org.eclipse.etrice.expressions.ui/META-INF/MANIFEST.MF18
-rw-r--r--plugins/org.eclipse.etrice.expressions.ui/build.properties2
-rw-r--r--plugins/org.eclipse.etrice.expressions.ui/icons/rt_method.pngbin0 -> 484 bytes
-rw-r--r--plugins/org.eclipse.etrice.expressions.ui/icons/rt_method.svg132
-rw-r--r--plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/detailcode/DefaultDetailExpressionProvider.xtend (renamed from plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/detailcode/DefaultDetailExpressionProvider.xtend)5
-rw-r--r--plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/detailcode/DetailExpressionAssistParser.xtend161
-rw-r--r--plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/detailcode/GuardDetailExpressionProvider.xtend (renamed from plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/detailcode/GuardDetailExpressionProvider.xtend)30
-rw-r--r--plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/detailcode/IDetailExpressionProvider.xtend (renamed from plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/detailcode/IDetailExpressionProvider.xtend)16
-rw-r--r--plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/detailcode/RuntimeDetailExpressionProvider.xtend (renamed from plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/detailcode/RuntimeDetailExpressionProvider.xtend)2
-rw-r--r--plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/ui/DetailExpressionUIProvider.xtend180
-rw-r--r--plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/ui/HighlightConstants.xtend29
-rw-r--r--plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/ui/contentassist/RoomExpressionProposals.xtend88
-rw-r--r--plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/ui/highlight/RoomExpressionHighlighter.xtend41
-rw-r--r--plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/detailcode/DefaultDetailExpressionProvider.java (renamed from plugins/org.eclipse.etrice.ui.behavior/xtend-gen/org/eclipse/etrice/ui/behavior/detailcode/DefaultDetailExpressionProvider.java)6
-rw-r--r--plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/detailcode/DetailExpressionAssistParser.java221
-rw-r--r--plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/detailcode/GuardDetailExpressionProvider.java (renamed from plugins/org.eclipse.etrice.ui.behavior/xtend-gen/org/eclipse/etrice/ui/behavior/detailcode/GuardDetailExpressionProvider.java)10
-rw-r--r--plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/detailcode/IDetailExpressionProvider.java (renamed from plugins/org.eclipse.etrice.ui.behavior.fsm/xtend-gen/org/eclipse/etrice/ui/behavior/fsm/detailcode/IDetailExpressionProvider.java)17
-rw-r--r--plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/detailcode/RuntimeDetailExpressionProvider.java (renamed from plugins/org.eclipse.etrice.ui.behavior/xtend-gen/org/eclipse/etrice/ui/behavior/detailcode/RuntimeDetailExpressionProvider.java)6
-rw-r--r--plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/ui/DetailExpressionUIProvider.java324
-rw-r--r--plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/ui/HighlightConstants.java32
-rw-r--r--plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/ui/contentassist/RoomExpressionProposals.java153
-rw-r--r--plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/ui/highlight/RoomExpressionHighlighter.java65
-rw-r--r--plugins/org.eclipse.etrice.ui.behavior.actioneditor/META-INF/MANIFEST.MF3
-rw-r--r--plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/modelaware/ModelAwareActionCodeEditor.java2
-rw-r--r--plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/modelaware/ModelAwareActionCodeEditorConfiguration.java2
-rw-r--r--plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/modelaware/ModelAwareActionCodeEditorFactory.java2
-rw-r--r--plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/AbstractActionCodeEditor.java1
-rw-r--r--plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/ActionCodeAssistProcessor.java72
-rw-r--r--plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/ActionCodeEditorConfiguration.java3
-rw-r--r--plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/DetailExpressionAssistParser.xtend6
-rw-r--r--plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/DetailExpressionNamesScanner.java2
-rw-r--r--plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/DetailExpressionUIProvider.xtend10
-rw-r--r--plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/SourceViewerActionCodeEditor.java1
-rw-r--r--plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/text/TextActionCodeEditor.java1
-rw-r--r--plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/text/TextActionCodeEditorFactory.java2
-rw-r--r--plugins/org.eclipse.etrice.ui.behavior.actioneditor/xtend-gen/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/DetailExpressionAssistParser.java2
-rw-r--r--plugins/org.eclipse.etrice.ui.behavior.actioneditor/xtend-gen/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/DetailExpressionUIProvider.java4
-rw-r--r--plugins/org.eclipse.etrice.ui.behavior.fsm/META-INF/MANIFEST.MF4
-rw-r--r--plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/actioneditor/ActionCodeEditorRegistry.java2
-rw-r--r--plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/actioneditor/IActionCodeEditorFactory.java2
-rw-r--r--plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/dialogs/AbstractMemberAwarePropertyDialog.java2
-rw-r--r--plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/editor/AbstractFSMDiagramBehavior.java1
-rw-r--r--plugins/org.eclipse.etrice.ui.behavior/META-INF/MANIFEST.MF4
-rw-r--r--plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/DiagramTypeProvider.java2
-rw-r--r--plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/dialogs/StatePropertyDialog.java2
-rw-r--r--plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/dialogs/TransitionPropertyDialog.java6
61 files changed, 1861 insertions, 164 deletions
diff --git a/plugins/org.eclipse.etrice.core.common.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.core.common.ui/META-INF/MANIFEST.MF
index 3663ffd1b..8a6ba1b45 100644
--- a/plugins/org.eclipse.etrice.core.common.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.core.common.ui/META-INF/MANIFEST.MF
@@ -27,6 +27,7 @@ Export-Package: org.eclipse.etrice.core.common.ui.autoedit,
org.eclipse.etrice.core.common.ui.contentassist.antlr,
org.eclipse.etrice.core.common.ui.contentassist.antlr.internal,
org.eclipse.etrice.core.common.ui.editor,
+ org.eclipse.etrice.core.common.ui.highlight,
org.eclipse.etrice.core.common.ui.hover,
org.eclipse.etrice.core.common.ui.internal,
org.eclipse.etrice.core.common.ui.labeling,
diff --git a/plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/converter/CC_StringConveter.java b/plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/converter/CC_StringConveter.java
index b1c3a14ee..a5ec9d311 100644
--- a/plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/converter/CC_StringConveter.java
+++ b/plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/converter/CC_StringConveter.java
@@ -5,25 +5,39 @@ import org.eclipse.etrice.core.common.util.CCStringIndentation;
import org.eclipse.xtext.conversion.ValueConverterException;
import org.eclipse.xtext.conversion.impl.AbstractLexerBasedConverter;
import org.eclipse.xtext.nodemodel.INode;
-import org.eclipse.xtext.util.Strings;
public class CC_StringConveter extends AbstractLexerBasedConverter<String> {
public final static String DELIM = "'''";
- public final static String NEW_LINE = Strings.newLine();
+ final static String CRLF = "\r\n";
+ final static String LF = "\n";
@Override
protected String toEscapedString(String value) {
- return DELIM + NEW_LINE + value + NEW_LINE + DELIM;
+ String lineEnding = getLineEnding(value);
+ return DELIM + lineEnding + value + lineEnding + DELIM;
}
public String toValue(String string, INode node) {
if (string == null)
return null;
try {
- return new CCStringIndentation(string.substring(DELIM.length(), string.length() - DELIM.length())).removeIndentation();
+ return new CCStringIndentation(stripDelim(string)).removeIndentation();
} catch (IllegalArgumentException e) {
throw new ValueConverterException(e.getMessage(), node, e);
}
}
+
+ static public String stripDelim(String ccstring) {
+ if(ccstring.startsWith(DELIM) && ccstring.endsWith(DELIM))
+ return ccstring.substring(DELIM.length(), ccstring.length() - DELIM.length());
+
+ return ccstring;
+ }
+
+ static public String getLineEnding(String ccstring) {
+ if (ccstring.indexOf(CRLF) >= 0)
+ return CRLF;
+ return LF;
+ }
}
diff --git a/plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/util/CCStringIndentation.java b/plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/util/CCStringIndentation.java
index 1c86eea98..c2111347e 100644
--- a/plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/util/CCStringIndentation.java
+++ b/plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/util/CCStringIndentation.java
@@ -7,17 +7,17 @@ import org.eclipse.etrice.core.common.converter.CC_StringConveter;
import org.eclipse.xtext.util.Strings;
public class CCStringIndentation {
-
- protected final static String NEW_LINE = CC_StringConveter.NEW_LINE;
private String ccString;
private List<String> splittedLines;
private boolean ignoreFirst;
private boolean ignoreLast;
+ private String lineEnding;
public CCStringIndentation(String ccString){
this.ccString = ccString;
- this.splittedLines = Strings.split(ccString, NEW_LINE);
+ this.lineEnding = CC_StringConveter.getLineEnding(ccString);
+ this.splittedLines = Strings.split(ccString, lineEnding);
this.ignoreFirst = splittedLines.size() > 1 && splittedLines.get(0).isEmpty();
this.ignoreLast = splittedLines.size() > 1 && splittedLines.get(splittedLines.size() - 1).trim().isEmpty();
}
@@ -56,7 +56,7 @@ public class CCStringIndentation {
String line = lines.get(i);
if (i == 0 && ignoreFirst) {
- offset += line.length() + NEW_LINE.length();
+ offset += line.length() + lineEnding.length();
continue;
}
@@ -69,9 +69,9 @@ public class CCStringIndentation {
else
pos = new int[] { offset, line.length() };
if (i < lines.size() - 1)
- pos[1] += NEW_LINE.length();
+ pos[1] += lineEnding.length();
- offset += line.length() + NEW_LINE.length();
+ offset += line.length() + lineEnding.length();
offsetLengthLines.add(pos);
}
@@ -110,13 +110,8 @@ public class CCStringIndentation {
for (String line : lines)
wsLines.add(Strings.getLeadingWhiteSpace(line));
- String minIndent = wsLines.get(0);
- for (int i = 0; i < lines.size(); i++) {
- if (!lines.get(i).isEmpty() && wsLines.get(i).length() < minIndent.length())
- minIndent = wsLines.get(i);
- }
-
- String commonIndent = minIndent;
+ final String baseIndent = wsLines.get(0);
+ String commonIndent = baseIndent;
for(String wsLine : wsLines){
if(!wsLine.isEmpty())
commonIndent = com.google.common.base.Strings.commonPrefix(commonIndent, wsLine);
@@ -125,10 +120,10 @@ public class CCStringIndentation {
if (!consistent)
return commonIndent;
- int afterMinIndentIndex = minIndent.length();
+ int afterMinIndentIndex = baseIndent.length();
// 1. check if every line contains the minIndent
- if(!minIndent.equals(commonIndent))
+ if(!baseIndent.equals(commonIndent))
return null;
// 2. check if there is still space between minIndent and first terminal
@@ -146,7 +141,7 @@ public class CCStringIndentation {
return null;
}
- return minIndent;
+ return baseIndent;
}
}
diff --git a/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/validation/FSMJavaValidator.java b/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/validation/FSMJavaValidator.java
index 9300930cd..68b23015d 100644
--- a/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/validation/FSMJavaValidator.java
+++ b/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/validation/FSMJavaValidator.java
@@ -5,10 +5,12 @@ package org.eclipse.etrice.core.fsm.validation;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.List;
import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.etrice.core.common.converter.CC_StringConveter;
import org.eclipse.etrice.core.common.util.CCStringIndentation;
import org.eclipse.etrice.core.fsm.fSM.ChoicePoint;
import org.eclipse.etrice.core.fsm.fSM.DetailCode;
@@ -23,8 +25,13 @@ import org.eclipse.etrice.core.fsm.fSM.StateGraph;
import org.eclipse.etrice.core.fsm.fSM.StateGraphItem;
import org.eclipse.etrice.core.fsm.fSM.TrPoint;
import org.eclipse.etrice.core.fsm.fSM.Transition;
+import org.eclipse.etrice.core.fsm.services.FSMGrammarAccess;
import org.eclipse.etrice.core.fsm.validation.FSMValidationUtilXtend.Result;
-import org.eclipse.xtext.util.Strings;
+import org.eclipse.xtext.RuleCall;
+import org.eclipse.xtext.nodemodel.ICompositeNode;
+import org.eclipse.xtext.nodemodel.ILeafNode;
+import org.eclipse.xtext.nodemodel.INode;
+import org.eclipse.xtext.nodemodel.util.NodeModelUtils;
import org.eclipse.xtext.validation.Check;
import com.google.common.collect.ArrayListMultimap;
@@ -118,6 +125,9 @@ public class FSMJavaValidator extends org.eclipse.etrice.core.fsm.validation.Abs
}
}
+ @Inject
+ FSMGrammarAccess grammar;
+
@Check
public void checkDetailCode(DetailCode dc) {
if (dc.getLines().isEmpty())
@@ -130,10 +140,15 @@ public class FSMJavaValidator extends org.eclipse.etrice.core.fsm.validation.Abs
// warning("multi line string", dc, FSMPackage.Literals.DETAIL_CODE__LINES, dc.getLines().indexOf(line), MULTI_LINE_DETAILCODE);
// }
- for(String line : dc.getLines()){
- CCStringIndentation ccStringIndent = new CCStringIndentation(line);
- if(!ccStringIndent.validateIndentation())
- warning("Inconsistent indentation", dc, FSMPackage.Literals.DETAIL_CODE__LINES, dc.getLines().indexOf(line));
+ List<INode> lineNodes = NodeModelUtils.findNodesForFeature(dc, FSMPackage.Literals.DETAIL_CODE__LINES);
+ for(INode lineNode : lineNodes){
+ if(lineNode.getGrammarElement() instanceof RuleCall){
+ if(((RuleCall)lineNode.getGrammarElement()).getRule() == grammar.getCC_STRINGRule()) {
+ CCStringIndentation ccStringIndent = new CCStringIndentation(CC_StringConveter.stripDelim(lineNode.getText()));
+ if(!ccStringIndent.validateIndentation())
+ warning("Inconsistent indentation", dc, FSMPackage.Literals.DETAIL_CODE__LINES, lineNodes.indexOf(lineNode));
+ }
+ }
}
}
diff --git a/plugins/org.eclipse.etrice.core.room.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.core.room.ui/META-INF/MANIFEST.MF
index e7fcb83aa..5ed19a39e 100644
--- a/plugins/org.eclipse.etrice.core.room.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.core.room.ui/META-INF/MANIFEST.MF
@@ -22,7 +22,8 @@ Require-Bundle: org.eclipse.etrice.core.fsm.ui;bundle-version="1.1.1",
org.eclipse.compare,
org.eclipse.core.filesystem;bundle-version="1.3.0",
org.eclipse.help,
- com.google.inject
+ com.google.inject,
+ org.eclipse.etrice.expressions.ui
Import-Package: org.apache.log4j
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Export-Package: org.eclipse.etrice.core.ui,
diff --git a/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/RoomUiModule.java b/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/RoomUiModule.java
index 69f910e00..df2230a4d 100644
--- a/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/RoomUiModule.java
+++ b/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/RoomUiModule.java
@@ -12,25 +12,26 @@
package org.eclipse.etrice.core.ui;
+import org.eclipse.etrice.core.common.ui.autoedit.BaseAutoEditStrategyProvider;
import org.eclipse.etrice.core.common.ui.hover.IKeywordHoverContentProvider;
import org.eclipse.etrice.core.common.ui.hover.KeywordEObjectTextHover;
import org.eclipse.etrice.core.common.ui.hover.KeywordHoverProvider;
import org.eclipse.etrice.core.common.ui.linking.GlobalNonPlatformURIEditorOpener;
import org.eclipse.etrice.core.ui.highlight.RoomHighlightingConfiguration;
import org.eclipse.etrice.core.ui.highlight.RoomSemanticHighlightingCalculator;
+import org.eclipse.etrice.core.ui.hover.RoomHoverProvider;
import org.eclipse.etrice.core.ui.internal.RoomActivator;
import org.eclipse.etrice.core.ui.linking.RoomHyperlinkHelper;
import org.eclipse.etrice.core.ui.outline.RoomOutlinePage;
import org.eclipse.etrice.doc.KeywordHoverContentProvider;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+import org.eclipse.xtext.ui.editor.autoedit.AbstractEditStrategyProvider;
import org.eclipse.xtext.ui.editor.hover.IEObjectHover;
import org.eclipse.xtext.ui.editor.hover.IEObjectHoverProvider;
import org.eclipse.xtext.ui.editor.hyperlinking.IHyperlinkHelper;
import org.eclipse.xtext.ui.editor.syntaxcoloring.IHighlightingConfiguration;
import org.eclipse.xtext.ui.editor.syntaxcoloring.ISemanticHighlightingCalculator;
-import org.eclipse.etrice.core.common.ui.autoedit.BaseAutoEditStrategyProvider;
-import org.eclipse.xtext.ui.editor.autoedit.AbstractEditStrategyProvider;
import com.google.inject.Binder;
import com.google.inject.Injector;
@@ -84,11 +85,10 @@ public class RoomUiModule extends org.eclipse.etrice.core.ui.AbstractRoomUiModul
@Override
public Class<? extends IEObjectHover> bindIEObjectHover() {
- return KeywordEObjectTextHover.class;
+ return RoomHoverProvider.class;
}
public Class<? extends AbstractEditStrategyProvider> bindAbstractEditStrategyProvider() {
return BaseAutoEditStrategyProvider.class;
}
-
}
diff --git a/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/contentassist/RoomProposalProvider.java b/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/contentassist/RoomProposalProvider.java
index 2c3ad47a3..255341b24 100644
--- a/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/contentassist/RoomProposalProvider.java
+++ b/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/contentassist/RoomProposalProvider.java
@@ -19,6 +19,7 @@ import org.eclipse.emf.common.util.BasicEList;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.etrice.core.common.base.AnnotationType;
+import org.eclipse.etrice.core.fsm.fSM.DetailCode;
import org.eclipse.etrice.core.naming.RoomNameProvider;
import org.eclipse.etrice.core.room.ActorClass;
import org.eclipse.etrice.core.room.ActorContainerClass;
@@ -32,6 +33,9 @@ import org.eclipse.etrice.core.room.RoomAnnotationTargetEnum;
import org.eclipse.etrice.core.room.RoomPackage;
import org.eclipse.etrice.core.room.StandardOperation;
import org.eclipse.etrice.core.room.util.RoomHelpers;
+import org.eclipse.etrice.expressions.detailcode.DefaultDetailExpressionProvider;
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider;
+import org.eclipse.etrice.expressions.ui.contentassist.RoomExpressionProposals;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.swt.graphics.Image;
@@ -219,18 +223,39 @@ public class RoomProposalProvider extends AbstractRoomProposalProvider {
return refs;
}
- @Override
- public void complete_DetailCode(EObject model, RuleCall ruleCall, ContentAssistContext context,
- ICompletionProposalAcceptor acceptor) {
- // TODO Auto-generated method stub
- super.complete_DetailCode(model, ruleCall, context, acceptor);
- }
+ @Inject
+ RoomExpressionProposals expressionProposals;
@Override
- public void complete_CC_STRING(EObject model, RuleCall ruleCall, ContentAssistContext context,
- ICompletionProposalAcceptor acceptor) {
- // TODO Auto-generated method stub
+ public void complete_CC_STRING(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+ ActorClass ac = findActorClass(model);
+ if (ac == null) {
+ super.complete_CC_STRING(model, ruleCall, context, acceptor);
+ return;
+ }
+
+ String text = context.getCurrentNode().getText();
+ int localOffset = context.getOffset() - context.getCurrentNode().getOffset();
+ int globalOffset = context.getOffset();
+ if (context.getCurrentNode().getSemanticElement() instanceof DetailCode) {
+ IDetailExpressionProvider exprPovider = new DefaultDetailExpressionProvider(ac);
+ for(ICompletionProposal proposal : expressionProposals.createProposals(exprPovider, text, localOffset, globalOffset))
+ acceptor.accept(proposal);
+ }
+
super.complete_CC_STRING(model, ruleCall, context, acceptor);
}
+
+ private ActorClass findActorClass(EObject model) {
+ EObject parent = model;
+ while(parent != null) {
+ if(parent instanceof ActorClass){
+ return (ActorClass) parent;
+ }
+ parent = parent.eContainer();
+ }
+
+ return null;
+ }
}
diff --git a/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/highlight/RoomHighlightingConfiguration.java b/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/highlight/RoomHighlightingConfiguration.java
index 72185a2e5..a9b74e6b2 100644
--- a/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/highlight/RoomHighlightingConfiguration.java
+++ b/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/highlight/RoomHighlightingConfiguration.java
@@ -26,6 +26,7 @@ public class RoomHighlightingConfiguration extends BaseHighlightingConfig {
// provide an id string for the highlighting calculator
public static final String HL_ANNOTATION_ID = "hl_annotation";
+ public static final String HL_TARGET_LANG_KEYWORD_ID = "hl_targetlang_keyword";
// default fonts used by this specific highlighting (defaults)
// private static FontData defaultAnnotationBlockFont = new
@@ -36,6 +37,7 @@ public class RoomHighlightingConfiguration extends BaseHighlightingConfig {
public void configure(IHighlightingConfigurationAcceptor acceptor) {
super.configure(acceptor);
acceptor.acceptDefaultHighlighting(HL_ANNOTATION_ID, "Annotation", typeAnnotationBlock());
+ acceptor.acceptDefaultHighlighting(HL_TARGET_LANG_KEYWORD_ID, "Target Language Keyword", targetLangKeyword());
}
// method for calculating an actual text styles
@@ -47,5 +49,11 @@ public class RoomHighlightingConfiguration extends BaseHighlightingConfig {
// textStyle.setFontData(defaultCommentFont);
return textStyle;
}
+
+ public TextStyle targetLangKeyword() {
+ TextStyle textStyle = new TextStyle();
+ textStyle.setStyle(SWT.BOLD);
+ return textStyle;
+ }
}
diff --git a/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/highlight/RoomSemanticHighlightingCalculator.java b/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/highlight/RoomSemanticHighlightingCalculator.java
index 0617dcd4f..1f059031a 100644
--- a/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/highlight/RoomSemanticHighlightingCalculator.java
+++ b/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/highlight/RoomSemanticHighlightingCalculator.java
@@ -12,19 +12,52 @@
package org.eclipse.etrice.core.ui.highlight;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
import org.eclipse.emf.ecore.EObject;
import org.eclipse.etrice.core.common.ui.highlight.BaseSemanticHighlighter;
+import org.eclipse.etrice.core.fsm.fSM.DetailCode;
+import org.eclipse.etrice.core.services.RoomGrammarAccess;
import org.eclipse.xtext.RuleCall;
import org.eclipse.xtext.nodemodel.INode;
import org.eclipse.xtext.resource.XtextResource;
import org.eclipse.xtext.ui.editor.syntaxcoloring.IHighlightedPositionAcceptor;
+import com.google.common.base.CharMatcher;
+import com.google.inject.Inject;
+
/**
* @author Henrik Rentz-Reichert
*
*/
public class RoomSemanticHighlightingCalculator extends BaseSemanticHighlighter {
+ @Inject
+ RoomGrammarAccess grammar;
+
+ private static String[] fgKeywords = { "while", "do", "for", "if", "else",
+ "break", "continue", "switch", "case", "default", "static", "return",
+ "struct", "union", "sizeof", "explicit", "export", "extern", "goto",
+ "this", "throw", "try", "catch", "new", "delete",
+ "public", "private", "protected", "sizeof",
+ "typedef", "virtual", "class", "using", "template", "volatile", "mutable", "friend", "inline",
+ "typeid", "typename", "namespace",
+ "const", "int", "float", "double", "short", "long", "unsigned", "signed", "void", "true", "false"};
+
+ private List<Pattern> keywordPattern = new ArrayList<Pattern>();
+
+ protected List<Pattern> getKeywordPatterns() {
+ if(keywordPattern.isEmpty()) {
+ for(String keyword : fgKeywords)
+ keywordPattern.add(Pattern.compile(keyword));
+ }
+
+ return keywordPattern;
+ }
+
// @Override
public void provideHighlightingFor(XtextResource resource, IHighlightedPositionAcceptor acceptor) {
super.provideHighlightingFor(resource, acceptor);
@@ -37,13 +70,25 @@ public class RoomSemanticHighlightingCalculator extends BaseSemanticHighlighter
EObject obj = node.getGrammarElement();
if (obj instanceof RuleCall) {
RuleCall ruleCall = (RuleCall) obj;
- String name = ruleCall.getRule().getName();
- if (name.equals("Annotation")) {
+ if(ruleCall.getRule() == grammar.getAnnotationRule()){
acceptor.addPosition(
node.getOffset(),
node.getLength(),
RoomHighlightingConfiguration.HL_ANNOTATION_ID);
}
+ else if(node.getParent().getSemanticElement() instanceof DetailCode && ruleCall.getRule() == grammar.getCC_STRINGRule()) {
+ final String text = node.getText();
+ for(Pattern keywordPattern : getKeywordPatterns()){
+ Matcher matcher = keywordPattern.matcher(text);
+ while(matcher.find()){
+ boolean leftNotId = !Character.isJavaIdentifierPart(text.charAt(matcher.start()-1));
+ boolean rightNotId = !Character.isJavaIdentifierPart(text.charAt(matcher.end()+1));
+ if(leftNotId && rightNotId){
+ acceptor.addPosition(node.getOffset() + matcher.start(), matcher.end() - matcher.start(), RoomHighlightingConfiguration.HL_TARGET_LANG_KEYWORD_ID);
+ }
+ }
+ }
+ }
}
}
}
diff --git a/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/hover/RoomHoverProvider.xtend b/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/hover/RoomHoverProvider.xtend
new file mode 100644
index 000000000..fcdad63a9
--- /dev/null
+++ b/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/hover/RoomHoverProvider.xtend
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2011 protos software gmbh (http://www.protos.de).
+ * 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:
+ * Juergen Haug (initial contribution)
+ *
+ *******************************************************************************/
+
+package org.eclipse.etrice.core.ui.hover
+
+import com.google.inject.Inject
+import org.eclipse.emf.ecore.EObject
+import org.eclipse.etrice.core.common.ui.hover.KeywordEObjectTextHover
+import org.eclipse.etrice.core.fsm.fSM.DetailCode
+import org.eclipse.etrice.core.room.ActorClass
+import org.eclipse.etrice.core.services.RoomGrammarAccess
+import org.eclipse.etrice.expressions.detailcode.DefaultDetailExpressionProvider
+import org.eclipse.etrice.expressions.detailcode.DetailExpressionAssistParser
+import org.eclipse.jface.text.Document
+import org.eclipse.jface.text.Region
+import org.eclipse.xtext.RuleCall
+import org.eclipse.xtext.nodemodel.util.NodeModelUtils
+import org.eclipse.xtext.resource.XtextResource
+import org.eclipse.xtext.util.Tuples
+
+class RoomHoverProvider extends KeywordEObjectTextHover {
+
+ @Inject
+ RoomGrammarAccess grammar
+
+ override protected getXtextElementAt(XtextResource resource, int offset) {
+ // work in progress - show eObject for detail code
+// val parseResult = resource.parseResult
+// if(parseResult !== null) {
+// val leafNode = NodeModelUtils.findLeafNodeAtOffset(parseResult.rootNode, offset)
+// if(leafNode?.grammarElement instanceof RuleCall) {
+// if((leafNode.grammarElement as RuleCall).rule == grammar.CC_STRINGRule && leafNode.semanticElement instanceof DetailCode){
+// val exprProvider = new DefaultDetailExpressionProvider(findActorClass(leafNode.semanticElement))
+// val parser = new DetailExpressionAssistParser(new Document(leafNode.text), offset - leafNode.offset, exprProvider)
+// val resolved = parser?.resolveLatestCompleted
+// println(resolved)
+// if(resolved?.data instanceof EObject)
+// return Tuples.create(resolved.data as EObject, new Region(offset, resolved.id.length))
+// }
+// }
+// }
+//
+ super.getXtextElementAt(resource, offset)
+ }
+
+ def private ActorClass findActorClass(EObject model) {
+ var parent = model;
+ while(parent !== null) {
+ if(parent instanceof ActorClass){
+ return parent as ActorClass;
+ }
+ parent = parent.eContainer
+ }
+ }
+
+} \ No newline at end of file
diff --git a/plugins/org.eclipse.etrice.core.room.ui/xtend-gen/org/eclipse/etrice/core/ui/hover/RoomHoverProvider.java b/plugins/org.eclipse.etrice.core.room.ui/xtend-gen/org/eclipse/etrice/core/ui/hover/RoomHoverProvider.java
new file mode 100644
index 000000000..04fbae275
--- /dev/null
+++ b/plugins/org.eclipse.etrice.core.room.ui/xtend-gen/org/eclipse/etrice/core/ui/hover/RoomHoverProvider.java
@@ -0,0 +1,45 @@
+/**
+ * Copyright (c) 2011 protos software gmbh (http://www.protos.de).
+ * 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:
+ * Juergen Haug (initial contribution)
+ */
+package org.eclipse.etrice.core.ui.hover;
+
+import com.google.inject.Inject;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.etrice.core.common.ui.hover.KeywordEObjectTextHover;
+import org.eclipse.etrice.core.room.ActorClass;
+import org.eclipse.etrice.core.services.RoomGrammarAccess;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.xtext.resource.XtextResource;
+import org.eclipse.xtext.util.Pair;
+
+@SuppressWarnings("all")
+public class RoomHoverProvider extends KeywordEObjectTextHover {
+ @Inject
+ private RoomGrammarAccess grammar;
+
+ @Override
+ protected Pair<EObject, IRegion> getXtextElementAt(final XtextResource resource, final int offset) {
+ return super.getXtextElementAt(resource, offset);
+ }
+
+ private ActorClass findActorClass(final EObject model) {
+ EObject parent = model;
+ while ((parent != null)) {
+ {
+ if ((parent instanceof ActorClass)) {
+ return ((ActorClass) parent);
+ }
+ EObject _eContainer = parent.eContainer();
+ parent = _eContainer;
+ }
+ }
+ return null;
+ }
+}
diff --git a/plugins/org.eclipse.etrice.expressions.ui/.classpath b/plugins/org.eclipse.etrice.expressions.ui/.classpath
new file mode 100644
index 000000000..13a6c6528
--- /dev/null
+++ b/plugins/org.eclipse.etrice.expressions.ui/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="src" path="xtend-gen"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.etrice.expressions.ui/.gitignore b/plugins/org.eclipse.etrice.expressions.ui/.gitignore
new file mode 100644
index 000000000..1a7726dc2
--- /dev/null
+++ b/plugins/org.eclipse.etrice.expressions.ui/.gitignore
@@ -0,0 +1,4 @@
+bin
+*._trace
+*.smap
+*.xtendbin
diff --git a/plugins/org.eclipse.etrice.expressions.ui/.project b/plugins/org.eclipse.etrice.expressions.ui/.project
new file mode 100644
index 000000000..391dbeab0
--- /dev/null
+++ b/plugins/org.eclipse.etrice.expressions.ui/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.etrice.expressions.ui</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.etrice.expressions.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.etrice.expressions.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 000000000..0c68a61dc
--- /dev/null
+++ b/plugins/org.eclipse.etrice.expressions.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/plugins/org.eclipse.etrice.expressions.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.expressions.ui/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..272f1f3c2
--- /dev/null
+++ b/plugins/org.eclipse.etrice.expressions.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: eTrice Expressions UI
+Bundle-SymbolicName: org.eclipse.etrice.expressions.ui;singleton:=true
+Bundle-Version: 1.1.1.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle: org.eclipse.jface.text,
+ org.eclipse.xtext.xbase.lib,
+ org.eclipse.xtend.lib,
+ org.eclipse.xtend.lib.macro,
+ org.eclipse.xtext.ui,
+ org.eclipse.etrice.core.room,
+ org.eclipse.etrice.core.fsm
+Export-Package: org.eclipse.etrice.expressions.detailcode,
+ org.eclipse.etrice.expressions.ui,
+ org.eclipse.etrice.expressions.ui.contentassist,
+ org.eclipse.etrice.expressions.ui.highlight
+
diff --git a/plugins/org.eclipse.etrice.expressions.ui/build.properties b/plugins/org.eclipse.etrice.expressions.ui/build.properties
new file mode 100644
index 000000000..b2b1eadba
--- /dev/null
+++ b/plugins/org.eclipse.etrice.expressions.ui/build.properties
@@ -0,0 +1,2 @@
+output.. = bin/
+bin.includes = META-INF/
diff --git a/plugins/org.eclipse.etrice.expressions.ui/icons/rt_method.png b/plugins/org.eclipse.etrice.expressions.ui/icons/rt_method.png
new file mode 100644
index 000000000..6de31cfd2
--- /dev/null
+++ b/plugins/org.eclipse.etrice.expressions.ui/icons/rt_method.png
Binary files differ
diff --git a/plugins/org.eclipse.etrice.expressions.ui/icons/rt_method.svg b/plugins/org.eclipse.etrice.expressions.ui/icons/rt_method.svg
new file mode 100644
index 000000000..34aaf41bc
--- /dev/null
+++ b/plugins/org.eclipse.etrice.expressions.ui/icons/rt_method.svg
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="rt_method.svg"
+ inkscape:export-filename="C:\Users\Juergen\Desktop\rt_method5.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient10798-1-9-3-7-6-8-9-0-9-1">
+ <stop
+ style="stop-color:#75ba7a;stop-opacity:1;"
+ offset="0"
+ id="stop10800-5-2-1-8-20-6-4-9-8-2" />
+ <stop
+ id="stop10806-6-8-5-3-9-24-8-4-3-2"
+ offset="0.5"
+ style="stop-color:#418a4d;stop-opacity:1" />
+ <stop
+ style="stop-color:#a4c589;stop-opacity:1"
+ offset="1"
+ id="stop10802-1-5-3-0-4-8-4-2-9-2" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16"
+ inkscape:cx="10.700152"
+ inkscape:cy="19.117127"
+ inkscape:document-units="px"
+ inkscape:current-layer="g6438"
+ showgrid="true"
+ inkscape:window-width="1839"
+ inkscape:window-height="862"
+ inkscape:window-x="33"
+ inkscape:window-y="74"
+ inkscape:window-maximized="0"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:snap-global="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3949" />
+ <sodipodi:guide
+ position="13.183594,14.550781"
+ orientation="0,1"
+ id="guide4724" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline"
+ transform="translate(0,-1036.3622)">
+ <g
+ transform="matrix(0.27903303,0,0,0.27903303,-100.53208,912.07901)"
+ style="display:inline"
+ id="g11331-3-1-1">
+ <g
+ id="g13408-8"
+ style="fill:#737986;fill-opacity:1;stroke:#595e68;stroke-opacity:1" />
+ </g>
+ <g
+ transform="matrix(-1,0,0,1,16.12959,8.0140628)"
+ style="display:inline"
+ id="g6124-3">
+ <g
+ transform="scale(-1,1)"
+ style="font-size:13.58917427px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans"
+ id="text6430" />
+ <g
+ transform="scale(-1,1)"
+ style="font-size:13.58917427px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Sans"
+ id="g6438">
+ <ellipse
+ style="display:inline;fill:#989e99;fill-opacity:1;stroke:#5c5c5c;stroke-width:0.97602451;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path10796-2-6-2"
+ cx="-9.1460485"
+ cy="1037.255"
+ rx="3.5332656"
+ ry="3.5995569" />
+ <g
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.75px;line-height:125%;font-family:Verdana;-inkscape-font-specification:'Verdana, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="text4695">
+ <path
+ d="m -3.1425433,1030.6666 -2.174683,8e-4 0,3.8959 -0.8032227,0 0,-4.7723 2.3925781,0 0.5853272,0.01 z"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.75px;line-height:125%;font-family:Verdana;-inkscape-font-specification:'Verdana, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1"
+ id="path4720"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccc" />
+ <path
+ d="m -0.10287046,1034.5829 -0.96984864,0 -1.4780273,-0.01 -0.013062,-3.9037 -0.5426025,0 0,-0.8663 0.5426025,0 0,-1.4575 0.8032227,0 0,1.4575 1.65771484,0 0,0.8663 -1.65771484,0 0.01709,3.1511 1.64062503,0.013 z"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.75px;line-height:125%;font-family:Verdana;-inkscape-font-specification:'Verdana, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1"
+ id="path4722"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccccccc" />
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/detailcode/DefaultDetailExpressionProvider.xtend b/plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/detailcode/DefaultDetailExpressionProvider.xtend
index 8a72ed9ff..3a0437b73 100644
--- a/plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/detailcode/DefaultDetailExpressionProvider.xtend
+++ b/plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/detailcode/DefaultDetailExpressionProvider.xtend
@@ -9,7 +9,7 @@
* Juergen Haug (initial contribution)
*
*******************************************************************************/
-package org.eclipse.etrice.ui.behavior.detailcode
+package org.eclipse.etrice.expressions.detailcode
import java.util.List
import org.eclipse.etrice.core.room.Attribute
@@ -18,6 +18,9 @@ import org.eclipse.etrice.core.room.InterfaceItem
import org.eclipse.etrice.core.room.Port
import org.eclipse.etrice.core.room.SAP
import org.eclipse.etrice.core.room.SPP
+import org.eclipse.etrice.expressions.detailcode.GuardDetailExpressionProvider
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider.ExpressionFeature
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider.ExpressionPostfix
import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor
/**
diff --git a/plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/detailcode/DetailExpressionAssistParser.xtend b/plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/detailcode/DetailExpressionAssistParser.xtend
new file mode 100644
index 000000000..b5cd66ead
--- /dev/null
+++ b/plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/detailcode/DetailExpressionAssistParser.xtend
@@ -0,0 +1,161 @@
+/*******************************************************************************
+ * Copyright (c) 2015 protos software gmbh (http://www.protos.de).
+ * 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:
+ * Juergen Haug (initial contribution)
+ *
+ *******************************************************************************/
+
+package org.eclipse.etrice.expressions.detailcode
+
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider.ExpressionFeature
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider.ExpressionPostfix
+import org.eclipse.jface.text.BadLocationException
+import org.eclipse.jface.text.IDocument
+import org.eclipse.jface.text.rules.IWordDetector
+import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor
+import org.eclipse.xtext.util.Strings
+
+@FinalFieldsConstructor
+class DetailExpressionAssistParser {
+
+ val IDocument document
+ val int invocationOffset
+ val IDetailExpressionProvider provider
+
+ val IWordDetector anyIdScanner = new IWordDetector() {
+
+ override isWordPart(char c) {
+ Character.isJavaIdentifierPart(c)
+ }
+
+ override isWordStart(char c) {
+ Character.isJavaIdentifierStart(c)
+ }
+
+ }
+
+ def String computeIdentifierPrefix(int offset) throws BadLocationException {
+ var start = offset - 1
+ while (start >= 0 && anyIdScanner.isWordPart(document.getChar(start)))
+ start--
+
+ start++
+ return document.get(start, offset - start)
+ }
+
+ def ExpressionFeature computeExpressionFeature(int offset) throws BadLocationException{
+ var ExpressionPostfix postfixResult
+ var char openingChar
+ var char closingChar
+ switch document.getChar(offset-1).toString {
+ case ')': {
+ postfixResult = ExpressionPostfix.PARENTHESES
+ openingChar = '('
+ closingChar = ')'
+ }
+ case ']': {
+ postfixResult = ExpressionPostfix.BRACKETS
+ openingChar = '['
+ closingChar = ']'
+ }
+ default:
+ postfixResult = ExpressionPostfix.NONE
+ }
+
+ var start = offset
+ if (postfixResult != ExpressionPostfix.NONE) {
+ start--
+ var counter = 1
+ while (start > 0 && counter > 0) {
+ start--
+ switch document.getChar(start) {
+ case openingChar: counter--
+ case closingChar: counter++
+ }
+ }
+ if (counter > 0)
+ postfixResult = null
+ }
+
+ var String idResult
+ try {
+ idResult = computeIdentifierPrefix(start)
+ } catch (BadLocationException e) {
+ }
+
+ return new ExpressionFeature(idResult, postfixResult)
+ }
+
+ /**
+ * Try to resolve latest complete ExpressionFeature, e.g.:
+ * <ul>
+ * <li>port0.m_ => port0</li>
+ * <li> port0. => port0 </li>
+ * <li>port0 => null</li>
+ * </ul>
+ */
+ def ExpressionFeature resolveLatestCompleted() {
+ var lastSeparatorPos = invocationOffset - 1
+
+ // skip invocationPrefix
+ try {
+ val invocationPrefix = computeIdentifierPrefix(invocationOffset)
+ lastSeparatorPos -= invocationPrefix.length
+ } catch (BadLocationException e) {
+ }
+
+ // backward parsing
+ val parsedFeatures = newLinkedList
+ try {
+ while (document.getChar(lastSeparatorPos) == IDetailExpressionProvider.SEPARATOR) {
+ val parseResult = computeExpressionFeature(lastSeparatorPos)
+ if (!parseResult.isValid)
+ return null
+ parsedFeatures.push(parseResult)
+ lastSeparatorPos -= (parseResult.id.length() + 1)
+
+ }
+ } catch (BadLocationException e) {
+ }
+
+ if (parsedFeatures.empty)
+ return null
+
+ // forward matching
+ val firstParseResult = parsedFeatures.pop
+ var lastMatch = provider.initialFeatures.findFirst[matches(firstParseResult)]
+ while (lastMatch != null && !parsedFeatures.isEmpty()) {
+ val nextParseResult = parsedFeatures.pop
+ lastMatch = provider.getContextFeatures(lastMatch).findFirst[matches(nextParseResult)]
+ }
+
+ return lastMatch
+ }
+
+ def boolean isContextExpression() {
+ try {
+ document.getChar(invocationOffset - 1) == IDetailExpressionProvider.SEPARATOR || anyIdScanner.isWordPart(document.getChar(invocationOffset - 1))
+ }
+ catch (BadLocationException e) {
+ false
+ }
+ }
+
+ /**
+ * non-empty id + not-null suffix
+ */
+ private def boolean isValid(ExpressionFeature feature) {
+ !Strings.isEmpty(feature.id) && feature.postfix != null
+ }
+
+ private def boolean matches(ExpressionFeature f1, ExpressionFeature f2) {
+ f1.id == f2.id && f1.postfix == f2.postfix
+ }
+
+}
diff --git a/plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/detailcode/GuardDetailExpressionProvider.xtend b/plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/detailcode/GuardDetailExpressionProvider.xtend
index f37993328..b8654aae4 100644
--- a/plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/detailcode/GuardDetailExpressionProvider.xtend
+++ b/plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/detailcode/GuardDetailExpressionProvider.xtend
@@ -9,7 +9,7 @@
* Juergen Haug (initial contribution)
*
*******************************************************************************/
-package org.eclipse.etrice.ui.behavior.detailcode
+package org.eclipse.etrice.expressions.detailcode
import com.google.common.base.Function
import com.google.common.base.Strings
@@ -20,20 +20,18 @@ import org.eclipse.etrice.core.room.ActorClass
import org.eclipse.etrice.core.room.Attribute
import org.eclipse.etrice.core.room.DataClass
import org.eclipse.etrice.core.room.InterfaceItem
+import org.eclipse.etrice.core.room.Message
+import org.eclipse.etrice.core.room.Operation
import org.eclipse.etrice.core.room.Port
+import org.eclipse.etrice.core.room.SAP
import org.eclipse.etrice.core.room.VarDecl
import org.eclipse.etrice.core.room.util.RoomHelpers
-import org.eclipse.etrice.ui.behavior.fsm.detailcode.IDetailExpressionProvider
-import org.eclipse.etrice.ui.behavior.support.SupportUtil
import org.eclipse.xtend.lib.annotations.AccessorType
import org.eclipse.xtend.lib.annotations.Accessors
+import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor
import org.eclipse.xtext.util.SimpleAttributeResolver
import static extension org.eclipse.xtend.lib.annotations.AccessorType.*
-import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor
-import org.eclipse.etrice.core.room.SAP
-import org.eclipse.etrice.core.room.Operation
-import org.eclipse.etrice.core.room.Message
/**
* Defines expression for fsm guards of an ActorClass
@@ -47,8 +45,8 @@ class GuardDetailExpressionProvider implements IDetailExpressionProvider {
// ctor
protected val ActorClass actorClass
- protected val extension RoomHelpers roomHelpers = SupportUtil.getInstance.roomHelpers
- protected val Function<EObject, String> nameProvider = SimpleAttributeResolver.NAME_RESOLVER
+ protected val extension RoomHelpers roomHelpers = new RoomHelpers
+ protected val nameProvider = SimpleAttributeResolver.NAME_RESOLVER
// optional
@Accessors(AccessorType.PUBLIC_SETTER) protected VarDecl transitionEventData
@@ -57,12 +55,12 @@ class GuardDetailExpressionProvider implements IDetailExpressionProvider {
val List<ExpressionFeature> scope = newArrayList
if(transitionEventData != null) {
- scope += transitionEventData.createExprFeature(ExpressionPostfix.NONE)
+ scope += transitionEventData.createExprFeature(IDetailExpressionProvider.ExpressionPostfix.NONE)
}
scope += actorClass.allInterfaceItems.filter[isEventDriven || !isConjugated].map[
switch it {
- Port case isReplicated: createExprFeature(ExpressionPostfix.BRACKETS)
- default: createExprFeature(ExpressionPostfix.NONE)
+ Port case isReplicated: createExprFeature(IDetailExpressionProvider.ExpressionPostfix.BRACKETS)
+ default: createExprFeature(IDetailExpressionProvider.ExpressionPostfix.NONE)
}]
scope += actorClass.latestOperations.map[createExprFeature]
scope += actorClass.allAttributes.map[createExprFeature]
@@ -101,19 +99,19 @@ class GuardDetailExpressionProvider implements IDetailExpressionProvider {
def ExpressionFeature createExprFeature(Operation it){
// assuming all operations have parenthesis
- createExprFeature(ExpressionPostfix.PARENTHESES)
+ createExprFeature(IDetailExpressionProvider.ExpressionPostfix.PARENTHESES)
}
def ExpressionFeature createExprFeature(Message it){
// assuming all message have parenthesis
- createExprFeature(ExpressionPostfix.PARENTHESES)
+ createExprFeature(IDetailExpressionProvider.ExpressionPostfix.PARENTHESES)
}
def ExpressionFeature createExprFeature(Attribute it){
// assuming all attributes have brackets or not depending on size
switch (size) {
- case size > 1: createExprFeature(ExpressionPostfix.BRACKETS)
- default: createExprFeature(ExpressionPostfix.NONE)
+ case size > 1: createExprFeature(IDetailExpressionProvider.ExpressionPostfix.BRACKETS)
+ default: createExprFeature(IDetailExpressionProvider.ExpressionPostfix.NONE)
}
}
diff --git a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/detailcode/IDetailExpressionProvider.xtend b/plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/detailcode/IDetailExpressionProvider.xtend
index 9db27e1db..edefd48b2 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/detailcode/IDetailExpressionProvider.xtend
+++ b/plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/detailcode/IDetailExpressionProvider.xtend
@@ -10,8 +10,9 @@
*
*******************************************************************************/
-package org.eclipse.etrice.ui.behavior.fsm.detailcode
+package org.eclipse.etrice.expressions.detailcode
+import com.google.common.collect.ImmutableList
import java.util.List
import org.eclipse.xtend.lib.annotations.Accessors
@@ -50,4 +51,17 @@ interface IDetailExpressionProvider {
PARENTHESES,
BRACKETS
}
+
+ static class EmptyDetailExpressionProvider implements IDetailExpressionProvider {
+
+ val List<ExpressionFeature> EMPTY_LIST = ImmutableList.of
+
+ override List<ExpressionFeature> getInitialFeatures() {
+ return EMPTY_LIST;
+ }
+
+ override List<ExpressionFeature> getContextFeatures(ExpressionFeature ctx) {
+ return EMPTY_LIST;
+ }
+ }
}
diff --git a/plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/detailcode/RuntimeDetailExpressionProvider.xtend b/plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/detailcode/RuntimeDetailExpressionProvider.xtend
index 3101c2281..e4818c74d 100644
--- a/plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/detailcode/RuntimeDetailExpressionProvider.xtend
+++ b/plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/detailcode/RuntimeDetailExpressionProvider.xtend
@@ -1,4 +1,4 @@
-package org.eclipse.etrice.ui.behavior.detailcode
+package org.eclipse.etrice.expressions.detailcode
import org.eclipse.emf.ecore.EObject
import org.eclipse.etrice.core.room.InterfaceItem
diff --git a/plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/ui/DetailExpressionUIProvider.xtend b/plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/ui/DetailExpressionUIProvider.xtend
new file mode 100644
index 000000000..315001206
--- /dev/null
+++ b/plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/ui/DetailExpressionUIProvider.xtend
@@ -0,0 +1,180 @@
+/*******************************************************************************
+ * Copyright (c) 2015 protos software gmbh (http://www.protos.de).
+ * 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:
+ * Juergen Haug (initial contribution)
+ *
+ *******************************************************************************/
+package org.eclipse.etrice.expressions.ui
+
+import com.google.common.base.Strings
+import com.google.inject.Inject
+import org.eclipse.core.runtime.Assert
+import org.eclipse.emf.ecore.EObject
+import org.eclipse.etrice.core.room.Attribute
+import org.eclipse.etrice.core.room.InterfaceItem
+import org.eclipse.etrice.core.room.Message
+import org.eclipse.etrice.core.room.Operation
+import org.eclipse.etrice.core.room.Port
+import org.eclipse.etrice.core.room.SPP
+import org.eclipse.etrice.core.room.VarDecl
+import org.eclipse.etrice.core.room.util.RoomHelpers
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider.ExpressionFeature
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider.ExpressionPostfix
+import org.eclipse.etrice.expressions.detailcode.RuntimeDetailExpressionProvider
+import org.eclipse.etrice.expressions.detailcode.RuntimeDetailExpressionProvider.RuntimeMethodExpressionData
+import org.eclipse.jface.viewers.ILabelProvider
+import org.eclipse.swt.graphics.Image
+import org.eclipse.swt.graphics.Point
+import com.google.inject.Singleton
+import org.eclipse.swt.graphics.RGB
+
+@Singleton
+class DetailExpressionUIProvider{
+
+ static val String IMAGE_RT_METHOD = "icons/rt_method.png"
+
+ @Inject
+ protected ILabelProvider labelProvider
+
+ @Inject
+ protected RoomHelpers roomHelpers
+
+ /**
+ * Return postfix string and its selection (relative start, length)
+ */
+ def Pair<String, Point> getPostfixReplacement(ExpressionFeature feature) {
+ feature.assertNotNull
+
+ var String[] brackets = switch feature.postfix {
+ case PARENTHESES: #['(', ')']
+ case BRACKETS: #['[', ']']
+ default: return "" -> null
+ }
+ var String replacement = switch data : feature.data {
+ Operation:
+ data.arguments.map[name].join(', ')
+ Message case data.data != null:
+ data.data.name
+ Attribute, // fall through
+ InterfaceItem:
+ '0'
+ default:
+ ''
+ }
+
+ val selection = if(!replacement.empty) new Point(1, replacement.length)
+ brackets.head + replacement + brackets.last -> selection
+ }
+
+ /**
+ * Return completion string and its selection (relative start, length)
+ */
+ def Pair<String, Point> getCompletion(ExpressionFeature feature) {
+ feature.assertNotNull
+
+ var postfix = getPostfixReplacement(feature)
+ var point = postfix.value
+ if (point != null)
+ point.x += feature.id.length
+
+ return feature.id + postfix.key -> point
+ }
+
+ def String getID(ExpressionFeature feature) {
+ feature.assertNotNull
+
+ return switch feature.data {
+ InterfaceItem:
+ HighlightConstants.INTERFACE_ITEM
+ Attribute:
+ HighlightConstants.ATTRIBUTE
+ Operation:
+ HighlightConstants.OPERATION
+ EObject:
+ HighlightConstants.SPECIAL_FEATURE // unknown model object == special
+ RuntimeMethodExpressionData:
+ HighlightConstants.OPERATION
+ }
+ }
+
+ /**
+ * Text format:
+ * {@code completionInfo : typedInfo - classInfo}
+ */
+ def String getDisplayString(ExpressionFeature feature) {
+ feature.assertNotNull
+
+ val data = feature.data
+
+ var completionInfo = feature.id + feature.getPostfixReplacement.key
+ var typedInfo = ""
+ var classInfo = if(data instanceof EObject) data.eClass.name else ""
+ switch data {
+ Attribute:
+ typedInfo = data.type.type.name
+ InterfaceItem:
+ typedInfo = roomHelpers.getProtocol(data).name
+ RuntimeMethodExpressionData case feature.id == RuntimeDetailExpressionProvider.RT_METHOD_GET_REPLICATION:
+ typedInfo = 'int'
+ VarDecl: {
+ typedInfo = data.refType.type.name
+ classInfo = ""
+ }
+ default: {
+ val label = labelProvider.getText(data)
+
+ // if label starts with completion then label might be better
+ if(!Strings.commonPrefix(label, completionInfo).empty) completionInfo = label
+ }
+ }
+
+ // mark port as broadcast
+ if (feature.postfix == ExpressionPostfix.NONE) {
+ switch data {
+ SPP case data.isEventDriven/* fall through */,
+ Port case data.isReplicated && data.isEventDriven:
+ completionInfo = completionInfo + " (broadcast)"
+ }
+ }
+
+ if(!typedInfo.empty) typedInfo = " : " + typedInfo
+ if(!classInfo.empty) classInfo = " - " + classInfo
+
+ return completionInfo + typedInfo + classInfo
+ }
+
+ def Image getImage(ExpressionFeature feature) {
+ feature.assertNotNull
+
+ switch feature.data {
+ EObject: labelProvider.getImage(feature.data)
+// RuntimeMethodExpressionData: Activator.getImage(IMAGE_RT_METHOD)
+ }
+ }
+
+// /**
+// * Filter by prefix
+// */
+// def getContextFeaturesWithPrefix(ExpressionFeature ctx, String prefix) {
+// delegate.getContextFeatures(ctx).filter[id.startsWith(prefix)]
+// }
+//
+// /**
+// * Filter by prefix
+// */
+// def getInitialFeaturesWithPrefix(String prefix) {
+// delegate.initialFeatures.filter[id.startsWith(prefix)]
+// }
+
+ def protected assertNotNull(ExpressionFeature feature) {
+ Assert.isTrue(!Strings.isNullOrEmpty(feature.id))
+ Assert.isNotNull(feature.postfix)
+ Assert.isNotNull(feature.data)
+ }
+
+}
diff --git a/plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/ui/HighlightConstants.xtend b/plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/ui/HighlightConstants.xtend
new file mode 100644
index 000000000..8c34d4393
--- /dev/null
+++ b/plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/ui/HighlightConstants.xtend
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2011 protos software gmbh (http://www.protos.de).
+ * 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:
+ * juergen.haug@protos.de (initial contribution)
+ *
+ *******************************************************************************/
+
+package org.eclipse.etrice.expressions.ui
+
+import org.eclipse.swt.graphics.RGB
+
+class HighlightConstants {
+
+ public static val String INTERFACE_ITEM = 'room_InterfaceItem'
+ public static val String ATTRIBUTE = 'room_Attribute'
+ public static val String OPERATION = 'room_Operation'
+ public static val String SPECIAL_FEATURE = 'room_EObject'
+
+ // Standard coloring eclipse
+ public static final RGB COLOR_TARGET_KEYWORD = new RGB(127, 0, 85);
+ public static final RGB COLLOR_COMMENT = new RGB(63, 127, 95);
+ public static final RGB COLOR_STRING = new RGB(42, 0, 255);
+ public static final RGB COLOR_NUMBER = new RGB(125, 125, 125); // new RGB(0, 0, 0);
+}
diff --git a/plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/ui/contentassist/RoomExpressionProposals.xtend b/plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/ui/contentassist/RoomExpressionProposals.xtend
new file mode 100644
index 000000000..06aa448a2
--- /dev/null
+++ b/plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/ui/contentassist/RoomExpressionProposals.xtend
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2011 protos software gmbh (http://www.protos.de).
+ * 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:
+ * Juergen Haug (initial contribution)
+ *
+ *******************************************************************************/
+
+package org.eclipse.etrice.expressions.ui.contentassist
+
+import com.google.inject.Inject
+import java.util.List
+import org.eclipse.emf.ecore.EObject
+import org.eclipse.etrice.core.room.ActorClass
+import org.eclipse.etrice.expressions.detailcode.DefaultDetailExpressionProvider
+import org.eclipse.etrice.expressions.detailcode.DetailExpressionAssistParser
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider.ExpressionFeature
+import org.eclipse.etrice.expressions.ui.DetailExpressionUIProvider
+import org.eclipse.jface.text.Document
+import org.eclipse.jface.text.contentassist.ICompletionProposal
+import org.eclipse.jface.viewers.StyledString
+import org.eclipse.swt.graphics.Image
+import org.eclipse.xtext.ui.editor.contentassist.ConfigurableCompletionProposal
+import org.eclipse.xtext.ui.editor.contentassist.PrefixMatcher
+import org.eclipse.xtext.util.Strings
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider
+
+class RoomExpressionProposals {
+
+ @Inject
+ DetailExpressionUIProvider uiExpressionProvider
+
+ @Inject
+ PrefixMatcher prefixMatcher
+
+ def List<ICompletionProposal> createProposals(IDetailExpressionProvider exprProvider, String text, int offset, int globalOffset) {
+ val parser = new DetailExpressionAssistParser(new Document(text), offset, exprProvider)
+ val availableFeatures = newArrayList => [
+ if(parser.isContextExpression) {
+ val contextFeature = parser?.resolveLatestCompleted
+ it += if(contextFeature !== null) exprProvider.getContextFeatures(contextFeature) else exprProvider.initialFeatures
+ } else {
+ it += exprProvider.initialFeatures
+ }
+ ]
+
+ val prefix = parser.computeIdentifierPrefix(offset)
+ availableFeatures.filter[id.startsWith(prefix)].map[ feature |
+ val displayString = new StyledString(uiExpressionProvider.getDisplayString(feature))
+ val image = uiExpressionProvider.getImage(feature)
+ val prop = doCreateProposal(feature.id, displayString, image, prefix, globalOffset) => [
+ processPostfix(feature)
+ ]
+
+ return prop as ICompletionProposal
+ ].toList
+ }
+
+ def protected ConfigurableCompletionProposal doCreateProposal(String proposal, StyledString displayString, Image image, String prefix, int globalOffset) {
+ new ConfigurableCompletionProposal(proposal, globalOffset - prefix.length, prefix.length, proposal.length, image, displayString, null, null) => [
+ matcher = prefixMatcher
+ autoInsertable = false
+ // TODO adjust length to existing text
+ replaceContextLength = proposal.length
+ ]
+ }
+
+ def protected processPostfix(ConfigurableCompletionProposal proposal, ExpressionFeature feature){
+ proposal => [
+ val postfix = uiExpressionProvider.getPostfixReplacement(feature)
+ if(!Strings.isEmpty(postfix.key)) {
+ if(postfix.value != null) {
+ selectionStart = replacementOffset + replacementString.length + postfix.value.x
+ cursorPosition = cursorPosition + postfix.value.x
+ selectionLength = postfix.value.y
+ } else {
+ cursorPosition = cursorPosition + postfix.key.length
+ }
+ replacementString = replacementString + postfix.key
+ }
+ ]
+ }
+
+} \ No newline at end of file
diff --git a/plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/ui/highlight/RoomExpressionHighlighter.xtend b/plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/ui/highlight/RoomExpressionHighlighter.xtend
new file mode 100644
index 000000000..354e5b533
--- /dev/null
+++ b/plugins/org.eclipse.etrice.expressions.ui/src/org/eclipse/etrice/expressions/ui/highlight/RoomExpressionHighlighter.xtend
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2011 protos software gmbh (http://www.protos.de).
+ * 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:
+ * Juergen Haug (initial contribution)
+ *
+ *******************************************************************************/
+
+package org.eclipse.etrice.expressions.ui.highlight
+
+import com.google.inject.Inject
+import java.util.List
+import org.eclipse.etrice.expressions.ui.DetailExpressionUIProvider
+import org.eclipse.xtend.lib.annotations.Accessors
+
+class RoomExpressionHighlighter {
+
+ @Accessors
+ static class HighlightResult {
+ val int offset
+ val int length
+ val String id
+ }
+
+ @Inject
+ DetailExpressionUIProvider expressionProvider
+
+ def List<HighlightResult> getHighlighting(String text, int offset) {
+ val result = newArrayList
+
+
+
+
+
+ result
+ }
+}
diff --git a/plugins/org.eclipse.etrice.ui.behavior/xtend-gen/org/eclipse/etrice/ui/behavior/detailcode/DefaultDetailExpressionProvider.java b/plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/detailcode/DefaultDetailExpressionProvider.java
index eed350739..9d4ce8916 100644
--- a/plugins/org.eclipse.etrice.ui.behavior/xtend-gen/org/eclipse/etrice/ui/behavior/detailcode/DefaultDetailExpressionProvider.java
+++ b/plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/detailcode/DefaultDetailExpressionProvider.java
@@ -8,7 +8,7 @@
* CONTRIBUTORS:
* Juergen Haug (initial contribution)
*/
-package org.eclipse.etrice.ui.behavior.detailcode;
+package org.eclipse.etrice.expressions.detailcode;
import com.google.common.base.Objects;
import com.google.common.collect.Iterables;
@@ -28,8 +28,8 @@ import org.eclipse.etrice.core.room.RefableType;
import org.eclipse.etrice.core.room.SAP;
import org.eclipse.etrice.core.room.SPP;
import org.eclipse.etrice.core.room.StandardOperation;
-import org.eclipse.etrice.ui.behavior.detailcode.GuardDetailExpressionProvider;
-import org.eclipse.etrice.ui.behavior.fsm.detailcode.IDetailExpressionProvider;
+import org.eclipse.etrice.expressions.detailcode.GuardDetailExpressionProvider;
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider;
import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor;
import org.eclipse.xtext.xbase.lib.CollectionLiterals;
import org.eclipse.xtext.xbase.lib.Functions.Function1;
diff --git a/plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/detailcode/DetailExpressionAssistParser.java b/plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/detailcode/DetailExpressionAssistParser.java
new file mode 100644
index 000000000..7212a636d
--- /dev/null
+++ b/plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/detailcode/DetailExpressionAssistParser.java
@@ -0,0 +1,221 @@
+/**
+ * Copyright (c) 2015 protos software gmbh (http://www.protos.de).
+ * 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:
+ * Juergen Haug (initial contribution)
+ */
+package org.eclipse.etrice.expressions.detailcode;
+
+import com.google.common.base.Objects;
+import java.util.LinkedList;
+import java.util.List;
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.rules.IWordDetector;
+import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor;
+import org.eclipse.xtext.util.Strings;
+import org.eclipse.xtext.xbase.lib.CollectionLiterals;
+import org.eclipse.xtext.xbase.lib.Exceptions;
+import org.eclipse.xtext.xbase.lib.Functions.Function1;
+import org.eclipse.xtext.xbase.lib.IterableExtensions;
+
+@FinalFieldsConstructor
+@SuppressWarnings("all")
+public class DetailExpressionAssistParser {
+ private final IDocument document;
+
+ private final int invocationOffset;
+
+ private final IDetailExpressionProvider provider;
+
+ private final IWordDetector anyIdScanner = new IWordDetector() {
+ @Override
+ public boolean isWordPart(final char c) {
+ return Character.isJavaIdentifierPart(c);
+ }
+
+ @Override
+ public boolean isWordStart(final char c) {
+ return Character.isJavaIdentifierStart(c);
+ }
+ };
+
+ public String computeIdentifierPrefix(final int offset) throws BadLocationException {
+ int start = (offset - 1);
+ while (((start >= 0) && this.anyIdScanner.isWordPart(this.document.getChar(start)))) {
+ start--;
+ }
+ start++;
+ return this.document.get(start, (offset - start));
+ }
+
+ public IDetailExpressionProvider.ExpressionFeature computeExpressionFeature(final int offset) throws BadLocationException {
+ IDetailExpressionProvider.ExpressionPostfix postfixResult = null;
+ char openingChar = 0;
+ char closingChar = 0;
+ char _char = this.document.getChar((offset - 1));
+ String _string = Character.valueOf(_char).toString();
+ switch (_string) {
+ case ")":
+ postfixResult = IDetailExpressionProvider.ExpressionPostfix.PARENTHESES;
+ openingChar = '(';
+ closingChar = ')';
+ break;
+ case "]":
+ postfixResult = IDetailExpressionProvider.ExpressionPostfix.BRACKETS;
+ openingChar = '[';
+ closingChar = ']';
+ break;
+ default:
+ postfixResult = IDetailExpressionProvider.ExpressionPostfix.NONE;
+ break;
+ }
+ int start = offset;
+ boolean _notEquals = (!Objects.equal(postfixResult, IDetailExpressionProvider.ExpressionPostfix.NONE));
+ if (_notEquals) {
+ start--;
+ int counter = 1;
+ while (((start > 0) && (counter > 0))) {
+ {
+ start--;
+ char _char_1 = this.document.getChar(start);
+ boolean _matched = false;
+ if (Objects.equal(_char_1, openingChar)) {
+ _matched=true;
+ counter--;
+ }
+ if (!_matched) {
+ if (Objects.equal(_char_1, closingChar)) {
+ _matched=true;
+ counter++;
+ }
+ }
+ }
+ }
+ if ((counter > 0)) {
+ postfixResult = null;
+ }
+ }
+ String idResult = null;
+ try {
+ String _computeIdentifierPrefix = this.computeIdentifierPrefix(start);
+ idResult = _computeIdentifierPrefix;
+ } catch (final Throwable _t) {
+ if (_t instanceof BadLocationException) {
+ final BadLocationException e = (BadLocationException)_t;
+ } else {
+ throw Exceptions.sneakyThrow(_t);
+ }
+ }
+ return new IDetailExpressionProvider.ExpressionFeature(idResult, postfixResult);
+ }
+
+ /**
+ * Try to resolve latest complete ExpressionFeature, e.g.:
+ * <ul>
+ * <li>port0.m_ => port0</li>
+ * <li> port0. => port0 </li>
+ * <li>port0 => null</li>
+ * </ul>
+ */
+ public IDetailExpressionProvider.ExpressionFeature resolveLatestCompleted() {
+ int lastSeparatorPos = (this.invocationOffset - 1);
+ try {
+ final String invocationPrefix = this.computeIdentifierPrefix(this.invocationOffset);
+ int _lastSeparatorPos = lastSeparatorPos;
+ int _length = invocationPrefix.length();
+ lastSeparatorPos = (_lastSeparatorPos - _length);
+ } catch (final Throwable _t) {
+ if (_t instanceof BadLocationException) {
+ final BadLocationException e = (BadLocationException)_t;
+ } else {
+ throw Exceptions.sneakyThrow(_t);
+ }
+ }
+ final LinkedList<IDetailExpressionProvider.ExpressionFeature> parsedFeatures = CollectionLiterals.<IDetailExpressionProvider.ExpressionFeature>newLinkedList();
+ try {
+ while ((this.document.getChar(lastSeparatorPos) == IDetailExpressionProvider.SEPARATOR)) {
+ {
+ final IDetailExpressionProvider.ExpressionFeature parseResult = this.computeExpressionFeature(lastSeparatorPos);
+ boolean _isValid = this.isValid(parseResult);
+ boolean _not = (!_isValid);
+ if (_not) {
+ return null;
+ }
+ parsedFeatures.push(parseResult);
+ int _lastSeparatorPos_1 = lastSeparatorPos;
+ String _id = parseResult.getId();
+ int _length_1 = _id.length();
+ int _plus = (_length_1 + 1);
+ lastSeparatorPos = (_lastSeparatorPos_1 - _plus);
+ }
+ }
+ } catch (final Throwable _t_1) {
+ if (_t_1 instanceof BadLocationException) {
+ final BadLocationException e_1 = (BadLocationException)_t_1;
+ } else {
+ throw Exceptions.sneakyThrow(_t_1);
+ }
+ }
+ boolean _isEmpty = parsedFeatures.isEmpty();
+ if (_isEmpty) {
+ return null;
+ }
+ final IDetailExpressionProvider.ExpressionFeature firstParseResult = parsedFeatures.pop();
+ List<IDetailExpressionProvider.ExpressionFeature> _initialFeatures = this.provider.getInitialFeatures();
+ final Function1<IDetailExpressionProvider.ExpressionFeature, Boolean> _function = (IDetailExpressionProvider.ExpressionFeature it) -> {
+ return Boolean.valueOf(this.matches(it, firstParseResult));
+ };
+ IDetailExpressionProvider.ExpressionFeature lastMatch = IterableExtensions.<IDetailExpressionProvider.ExpressionFeature>findFirst(_initialFeatures, _function);
+ while (((!Objects.equal(lastMatch, null)) && (!parsedFeatures.isEmpty()))) {
+ {
+ final IDetailExpressionProvider.ExpressionFeature nextParseResult = parsedFeatures.pop();
+ List<IDetailExpressionProvider.ExpressionFeature> _contextFeatures = this.provider.getContextFeatures(lastMatch);
+ final Function1<IDetailExpressionProvider.ExpressionFeature, Boolean> _function_1 = (IDetailExpressionProvider.ExpressionFeature it) -> {
+ return Boolean.valueOf(this.matches(it, nextParseResult));
+ };
+ IDetailExpressionProvider.ExpressionFeature _findFirst = IterableExtensions.<IDetailExpressionProvider.ExpressionFeature>findFirst(_contextFeatures, _function_1);
+ lastMatch = _findFirst;
+ }
+ }
+ return lastMatch;
+ }
+
+ public boolean isContextExpression() {
+ boolean _xtrycatchfinallyexpression = false;
+ try {
+ _xtrycatchfinallyexpression = ((this.document.getChar((this.invocationOffset - 1)) == IDetailExpressionProvider.SEPARATOR) || this.anyIdScanner.isWordPart(this.document.getChar((this.invocationOffset - 1))));
+ } catch (final Throwable _t) {
+ if (_t instanceof BadLocationException) {
+ final BadLocationException e = (BadLocationException)_t;
+ _xtrycatchfinallyexpression = false;
+ } else {
+ throw Exceptions.sneakyThrow(_t);
+ }
+ }
+ return _xtrycatchfinallyexpression;
+ }
+
+ /**
+ * non-empty id + not-null suffix
+ */
+ private boolean isValid(final IDetailExpressionProvider.ExpressionFeature feature) {
+ return ((!Strings.isEmpty(feature.getId())) && (!Objects.equal(feature.getPostfix(), null)));
+ }
+
+ private boolean matches(final IDetailExpressionProvider.ExpressionFeature f1, final IDetailExpressionProvider.ExpressionFeature f2) {
+ return (Objects.equal(f1.getId(), f2.getId()) && Objects.equal(f1.getPostfix(), f2.getPostfix()));
+ }
+
+ public DetailExpressionAssistParser(final IDocument document, final int invocationOffset, final IDetailExpressionProvider provider) {
+ super();
+ this.document = document;
+ this.invocationOffset = invocationOffset;
+ this.provider = provider;
+ }
+}
diff --git a/plugins/org.eclipse.etrice.ui.behavior/xtend-gen/org/eclipse/etrice/ui/behavior/detailcode/GuardDetailExpressionProvider.java b/plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/detailcode/GuardDetailExpressionProvider.java
index 946c33a9b..e234e3774 100644
--- a/plugins/org.eclipse.etrice.ui.behavior/xtend-gen/org/eclipse/etrice/ui/behavior/detailcode/GuardDetailExpressionProvider.java
+++ b/plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/detailcode/GuardDetailExpressionProvider.java
@@ -8,9 +8,8 @@
* CONTRIBUTORS:
* Juergen Haug (initial contribution)
*/
-package org.eclipse.etrice.ui.behavior.detailcode;
+package org.eclipse.etrice.expressions.detailcode;
-import com.google.common.base.Function;
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.collect.Iterables;
@@ -33,8 +32,7 @@ import org.eclipse.etrice.core.room.SAP;
import org.eclipse.etrice.core.room.StandardOperation;
import org.eclipse.etrice.core.room.VarDecl;
import org.eclipse.etrice.core.room.util.RoomHelpers;
-import org.eclipse.etrice.ui.behavior.fsm.detailcode.IDetailExpressionProvider;
-import org.eclipse.etrice.ui.behavior.support.SupportUtil;
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider;
import org.eclipse.xtend.lib.annotations.AccessorType;
import org.eclipse.xtend.lib.annotations.Accessors;
import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor;
@@ -58,9 +56,9 @@ public class GuardDetailExpressionProvider implements IDetailExpressionProvider
protected final ActorClass actorClass;
@Extension
- protected final RoomHelpers roomHelpers = SupportUtil.getInstance().getRoomHelpers();
+ protected final RoomHelpers roomHelpers = new RoomHelpers();
- protected final Function<EObject, String> nameProvider = SimpleAttributeResolver.NAME_RESOLVER;
+ protected final SimpleAttributeResolver<EObject, String> nameProvider = SimpleAttributeResolver.NAME_RESOLVER;
@Accessors(AccessorType.PUBLIC_SETTER)
protected VarDecl transitionEventData;
diff --git a/plugins/org.eclipse.etrice.ui.behavior.fsm/xtend-gen/org/eclipse/etrice/ui/behavior/fsm/detailcode/IDetailExpressionProvider.java b/plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/detailcode/IDetailExpressionProvider.java
index a9ef19f2b..4d2bed2db 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.fsm/xtend-gen/org/eclipse/etrice/ui/behavior/fsm/detailcode/IDetailExpressionProvider.java
+++ b/plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/detailcode/IDetailExpressionProvider.java
@@ -8,8 +8,9 @@
* CONTRIBUTORS:
* Juergen Haug (initial contribution)
*/
-package org.eclipse.etrice.ui.behavior.fsm.detailcode;
+package org.eclipse.etrice.expressions.detailcode;
+import com.google.common.collect.ImmutableList;
import java.util.List;
import org.eclipse.xtend.lib.annotations.Accessors;
import org.eclipse.xtext.xbase.lib.Pure;
@@ -64,6 +65,20 @@ public interface IDetailExpressionProvider {
BRACKETS;
}
+ public static class EmptyDetailExpressionProvider implements IDetailExpressionProvider {
+ private final List<IDetailExpressionProvider.ExpressionFeature> EMPTY_LIST = ImmutableList.<IDetailExpressionProvider.ExpressionFeature>of();
+
+ @Override
+ public List<IDetailExpressionProvider.ExpressionFeature> getInitialFeatures() {
+ return this.EMPTY_LIST;
+ }
+
+ @Override
+ public List<IDetailExpressionProvider.ExpressionFeature> getContextFeatures(final IDetailExpressionProvider.ExpressionFeature ctx) {
+ return this.EMPTY_LIST;
+ }
+ }
+
public final static char SEPARATOR = '.';
/**
diff --git a/plugins/org.eclipse.etrice.ui.behavior/xtend-gen/org/eclipse/etrice/ui/behavior/detailcode/RuntimeDetailExpressionProvider.java b/plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/detailcode/RuntimeDetailExpressionProvider.java
index 4a9db9e51..8ebc12f91 100644
--- a/plugins/org.eclipse.etrice.ui.behavior/xtend-gen/org/eclipse/etrice/ui/behavior/detailcode/RuntimeDetailExpressionProvider.java
+++ b/plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/detailcode/RuntimeDetailExpressionProvider.java
@@ -1,4 +1,4 @@
-package org.eclipse.etrice.ui.behavior.detailcode;
+package org.eclipse.etrice.expressions.detailcode;
import com.google.common.base.Objects;
import java.util.List;
@@ -7,8 +7,8 @@ import org.eclipse.etrice.core.room.ActorClass;
import org.eclipse.etrice.core.room.InterfaceItem;
import org.eclipse.etrice.core.room.Port;
import org.eclipse.etrice.core.room.SPP;
-import org.eclipse.etrice.ui.behavior.detailcode.DefaultDetailExpressionProvider;
-import org.eclipse.etrice.ui.behavior.fsm.detailcode.IDetailExpressionProvider;
+import org.eclipse.etrice.expressions.detailcode.DefaultDetailExpressionProvider;
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider;
import org.eclipse.xtend.lib.annotations.Accessors;
import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor;
diff --git a/plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/ui/DetailExpressionUIProvider.java b/plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/ui/DetailExpressionUIProvider.java
new file mode 100644
index 000000000..9b2c17f78
--- /dev/null
+++ b/plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/ui/DetailExpressionUIProvider.java
@@ -0,0 +1,324 @@
+/**
+ * Copyright (c) 2015 protos software gmbh (http://www.protos.de).
+ * 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:
+ * Juergen Haug (initial contribution)
+ */
+package org.eclipse.etrice.expressions.ui;
+
+import com.google.common.base.Objects;
+import com.google.common.base.Strings;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import java.util.List;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.etrice.core.room.Attribute;
+import org.eclipse.etrice.core.room.DataType;
+import org.eclipse.etrice.core.room.InterfaceItem;
+import org.eclipse.etrice.core.room.Message;
+import org.eclipse.etrice.core.room.Operation;
+import org.eclipse.etrice.core.room.Port;
+import org.eclipse.etrice.core.room.ProtocolClass;
+import org.eclipse.etrice.core.room.RefableType;
+import org.eclipse.etrice.core.room.SPP;
+import org.eclipse.etrice.core.room.VarDecl;
+import org.eclipse.etrice.core.room.util.RoomHelpers;
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider;
+import org.eclipse.etrice.expressions.detailcode.RuntimeDetailExpressionProvider;
+import org.eclipse.etrice.expressions.ui.HighlightConstants;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.xtext.xbase.lib.Conversions;
+import org.eclipse.xtext.xbase.lib.Functions.Function1;
+import org.eclipse.xtext.xbase.lib.IterableExtensions;
+import org.eclipse.xtext.xbase.lib.ListExtensions;
+import org.eclipse.xtext.xbase.lib.Pair;
+
+@Singleton
+@SuppressWarnings("all")
+public class DetailExpressionUIProvider {
+ private final static String IMAGE_RT_METHOD = "icons/rt_method.png";
+
+ @Inject
+ protected ILabelProvider labelProvider;
+
+ @Inject
+ protected RoomHelpers roomHelpers;
+
+ /**
+ * Return postfix string and its selection (relative start, length)
+ */
+ public Pair<String, Point> getPostfixReplacement(final IDetailExpressionProvider.ExpressionFeature feature) {
+ Pair<String, Point> _xblockexpression = null;
+ {
+ this.assertNotNull(feature);
+ String[] _switchResult = null;
+ IDetailExpressionProvider.ExpressionPostfix _postfix = feature.getPostfix();
+ if (_postfix != null) {
+ switch (_postfix) {
+ case PARENTHESES:
+ _switchResult = new String[] { "(", ")" };
+ break;
+ case BRACKETS:
+ _switchResult = new String[] { "[", "]" };
+ break;
+ default:
+ return Pair.<String, Point>of("", null);
+ }
+ } else {
+ return Pair.<String, Point>of("", null);
+ }
+ String[] brackets = _switchResult;
+ String _switchResult_1 = null;
+ Object _data = feature.getData();
+ final Object data = _data;
+ boolean _matched = false;
+ if (data instanceof Operation) {
+ _matched=true;
+ EList<VarDecl> _arguments = ((Operation)data).getArguments();
+ final Function1<VarDecl, String> _function = (VarDecl it) -> {
+ return it.getName();
+ };
+ List<String> _map = ListExtensions.<VarDecl, String>map(_arguments, _function);
+ _switchResult_1 = IterableExtensions.join(_map, ", ");
+ }
+ if (!_matched) {
+ if (data instanceof Message) {
+ VarDecl _data_1 = ((Message)data).getData();
+ boolean _notEquals = (!Objects.equal(_data_1, null));
+ if (_notEquals) {
+ _matched=true;
+ VarDecl _data_2 = ((Message)data).getData();
+ _switchResult_1 = _data_2.getName();
+ }
+ }
+ }
+ if (!_matched) {
+ if (data instanceof Attribute) {
+ _matched=true;
+ }
+ if (!_matched) {
+ if (data instanceof InterfaceItem) {
+ _matched=true;
+ }
+ }
+ if (_matched) {
+ _switchResult_1 = "0";
+ }
+ }
+ if (!_matched) {
+ _switchResult_1 = "";
+ }
+ String replacement = _switchResult_1;
+ Point _xifexpression = null;
+ boolean _isEmpty = replacement.isEmpty();
+ boolean _not = (!_isEmpty);
+ if (_not) {
+ int _length = replacement.length();
+ _xifexpression = new Point(1, _length);
+ }
+ final Point selection = _xifexpression;
+ final String[] _converted_brackets = (String[])brackets;
+ String _head = IterableExtensions.<String>head(((Iterable<String>)Conversions.doWrapArray(_converted_brackets)));
+ String _plus = (_head + replacement);
+ final String[] _converted_brackets_1 = (String[])brackets;
+ String _last = IterableExtensions.<String>last(((Iterable<String>)Conversions.doWrapArray(_converted_brackets_1)));
+ String _plus_1 = (_plus + _last);
+ _xblockexpression = Pair.<String, Point>of(_plus_1, selection);
+ }
+ return _xblockexpression;
+ }
+
+ /**
+ * Return completion string and its selection (relative start, length)
+ */
+ public Pair<String, Point> getCompletion(final IDetailExpressionProvider.ExpressionFeature feature) {
+ this.assertNotNull(feature);
+ Pair<String, Point> postfix = this.getPostfixReplacement(feature);
+ Point point = postfix.getValue();
+ boolean _notEquals = (!Objects.equal(point, null));
+ if (_notEquals) {
+ int _x = point.x;
+ String _id = feature.getId();
+ int _length = _id.length();
+ point.x = (_x + _length);
+ }
+ String _id_1 = feature.getId();
+ String _key = postfix.getKey();
+ String _plus = (_id_1 + _key);
+ return Pair.<String, Point>of(_plus, point);
+ }
+
+ public String getID(final IDetailExpressionProvider.ExpressionFeature feature) {
+ this.assertNotNull(feature);
+ String _switchResult = null;
+ Object _data = feature.getData();
+ boolean _matched = false;
+ if (_data instanceof InterfaceItem) {
+ _matched=true;
+ _switchResult = HighlightConstants.INTERFACE_ITEM;
+ }
+ if (!_matched) {
+ if (_data instanceof Attribute) {
+ _matched=true;
+ _switchResult = HighlightConstants.ATTRIBUTE;
+ }
+ }
+ if (!_matched) {
+ if (_data instanceof Operation) {
+ _matched=true;
+ _switchResult = HighlightConstants.OPERATION;
+ }
+ }
+ if (!_matched) {
+ if (_data instanceof EObject) {
+ _matched=true;
+ _switchResult = HighlightConstants.SPECIAL_FEATURE;
+ }
+ }
+ if (!_matched) {
+ if (_data instanceof RuntimeDetailExpressionProvider.RuntimeMethodExpressionData) {
+ _matched=true;
+ _switchResult = HighlightConstants.OPERATION;
+ }
+ }
+ return _switchResult;
+ }
+
+ /**
+ * Text format:
+ * {@code completionInfo : typedInfo - classInfo}
+ */
+ public String getDisplayString(final IDetailExpressionProvider.ExpressionFeature feature) {
+ this.assertNotNull(feature);
+ final Object data = feature.getData();
+ String _id = feature.getId();
+ Pair<String, Point> _postfixReplacement = this.getPostfixReplacement(feature);
+ String _key = _postfixReplacement.getKey();
+ String completionInfo = (_id + _key);
+ String typedInfo = "";
+ String _xifexpression = null;
+ if ((data instanceof EObject)) {
+ EClass _eClass = ((EObject)data).eClass();
+ _xifexpression = _eClass.getName();
+ } else {
+ _xifexpression = "";
+ }
+ String classInfo = _xifexpression;
+ boolean _matched = false;
+ if (data instanceof Attribute) {
+ _matched=true;
+ RefableType _type = ((Attribute)data).getType();
+ DataType _type_1 = _type.getType();
+ String _name = _type_1.getName();
+ typedInfo = _name;
+ }
+ if (!_matched) {
+ if (data instanceof InterfaceItem) {
+ _matched=true;
+ ProtocolClass _protocol = this.roomHelpers.getProtocol(((InterfaceItem)data));
+ String _name = _protocol.getName();
+ typedInfo = _name;
+ }
+ }
+ if (!_matched) {
+ if (data instanceof RuntimeDetailExpressionProvider.RuntimeMethodExpressionData) {
+ String _id_1 = feature.getId();
+ boolean _equals = Objects.equal(_id_1, RuntimeDetailExpressionProvider.RT_METHOD_GET_REPLICATION);
+ if (_equals) {
+ _matched=true;
+ typedInfo = "int";
+ }
+ }
+ }
+ if (!_matched) {
+ if (data instanceof VarDecl) {
+ _matched=true;
+ RefableType _refType = ((VarDecl)data).getRefType();
+ DataType _type = _refType.getType();
+ String _name = _type.getName();
+ typedInfo = _name;
+ classInfo = "";
+ }
+ }
+ if (!_matched) {
+ {
+ final String label = this.labelProvider.getText(data);
+ String _commonPrefix = Strings.commonPrefix(label, completionInfo);
+ boolean _isEmpty = _commonPrefix.isEmpty();
+ boolean _not = (!_isEmpty);
+ if (_not) {
+ completionInfo = label;
+ }
+ }
+ }
+ IDetailExpressionProvider.ExpressionPostfix _postfix = feature.getPostfix();
+ boolean _equals = Objects.equal(_postfix, IDetailExpressionProvider.ExpressionPostfix.NONE);
+ if (_equals) {
+ boolean _matched_1 = false;
+ if (data instanceof SPP) {
+ boolean _isEventDriven = ((SPP)data).isEventDriven();
+ if (_isEventDriven) {
+ _matched_1=true;
+ }
+ }
+ if (!_matched_1) {
+ if (data instanceof Port) {
+ if ((((Port)data).isReplicated() && ((Port)data).isEventDriven())) {
+ _matched_1=true;
+ }
+ }
+ }
+ if (_matched_1) {
+ completionInfo = (completionInfo + " (broadcast)");
+ }
+ }
+ boolean _isEmpty = typedInfo.isEmpty();
+ boolean _not = (!_isEmpty);
+ if (_not) {
+ typedInfo = (" : " + typedInfo);
+ }
+ boolean _isEmpty_1 = classInfo.isEmpty();
+ boolean _not_1 = (!_isEmpty_1);
+ if (_not_1) {
+ classInfo = (" - " + classInfo);
+ }
+ return ((completionInfo + typedInfo) + classInfo);
+ }
+
+ public Image getImage(final IDetailExpressionProvider.ExpressionFeature feature) {
+ Image _xblockexpression = null;
+ {
+ this.assertNotNull(feature);
+ Image _switchResult = null;
+ Object _data = feature.getData();
+ boolean _matched = false;
+ if (_data instanceof EObject) {
+ _matched=true;
+ Object _data_1 = feature.getData();
+ _switchResult = this.labelProvider.getImage(_data_1);
+ }
+ _xblockexpression = _switchResult;
+ }
+ return _xblockexpression;
+ }
+
+ protected void assertNotNull(final IDetailExpressionProvider.ExpressionFeature feature) {
+ String _id = feature.getId();
+ boolean _isNullOrEmpty = Strings.isNullOrEmpty(_id);
+ boolean _not = (!_isNullOrEmpty);
+ Assert.isTrue(_not);
+ IDetailExpressionProvider.ExpressionPostfix _postfix = feature.getPostfix();
+ Assert.isNotNull(_postfix);
+ Object _data = feature.getData();
+ Assert.isNotNull(_data);
+ }
+}
diff --git a/plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/ui/HighlightConstants.java b/plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/ui/HighlightConstants.java
new file mode 100644
index 000000000..4a4a89785
--- /dev/null
+++ b/plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/ui/HighlightConstants.java
@@ -0,0 +1,32 @@
+/**
+ * Copyright (c) 2011 protos software gmbh (http://www.protos.de).
+ * 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:
+ * juergen.haug@protos.de (initial contribution)
+ */
+package org.eclipse.etrice.expressions.ui;
+
+import org.eclipse.swt.graphics.RGB;
+
+@SuppressWarnings("all")
+public class HighlightConstants {
+ public final static String INTERFACE_ITEM = "room_InterfaceItem";
+
+ public final static String ATTRIBUTE = "room_Attribute";
+
+ public final static String OPERATION = "room_Operation";
+
+ public final static String SPECIAL_FEATURE = "room_EObject";
+
+ public final static RGB COLOR_TARGET_KEYWORD = new RGB(127, 0, 85);
+
+ public final static RGB COLLOR_COMMENT = new RGB(63, 127, 95);
+
+ public final static RGB COLOR_STRING = new RGB(42, 0, 255);
+
+ public final static RGB COLOR_NUMBER = new RGB(125, 125, 125);
+}
diff --git a/plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/ui/contentassist/RoomExpressionProposals.java b/plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/ui/contentassist/RoomExpressionProposals.java
new file mode 100644
index 000000000..c3a9b0690
--- /dev/null
+++ b/plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/ui/contentassist/RoomExpressionProposals.java
@@ -0,0 +1,153 @@
+/**
+ * Copyright (c) 2011 protos software gmbh (http://www.protos.de).
+ * 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:
+ * Juergen Haug (initial contribution)
+ */
+package org.eclipse.etrice.expressions.ui.contentassist;
+
+import com.google.common.base.Objects;
+import com.google.common.collect.Iterables;
+import com.google.inject.Inject;
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.etrice.expressions.detailcode.DetailExpressionAssistParser;
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider;
+import org.eclipse.etrice.expressions.ui.DetailExpressionUIProvider;
+import org.eclipse.jface.text.Document;
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
+import org.eclipse.jface.viewers.StyledString;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.xtext.ui.editor.contentassist.ConfigurableCompletionProposal;
+import org.eclipse.xtext.ui.editor.contentassist.PrefixMatcher;
+import org.eclipse.xtext.util.Strings;
+import org.eclipse.xtext.xbase.lib.CollectionLiterals;
+import org.eclipse.xtext.xbase.lib.Exceptions;
+import org.eclipse.xtext.xbase.lib.Functions.Function1;
+import org.eclipse.xtext.xbase.lib.IterableExtensions;
+import org.eclipse.xtext.xbase.lib.ObjectExtensions;
+import org.eclipse.xtext.xbase.lib.Pair;
+import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
+
+@SuppressWarnings("all")
+public class RoomExpressionProposals {
+ @Inject
+ private DetailExpressionUIProvider uiExpressionProvider;
+
+ @Inject
+ private PrefixMatcher prefixMatcher;
+
+ public List<ICompletionProposal> createProposals(final IDetailExpressionProvider exprProvider, final String text, final int offset, final int globalOffset) {
+ try {
+ List<ICompletionProposal> _xblockexpression = null;
+ {
+ Document _document = new Document(text);
+ final DetailExpressionAssistParser parser = new DetailExpressionAssistParser(_document, offset, exprProvider);
+ ArrayList<IDetailExpressionProvider.ExpressionFeature> _newArrayList = CollectionLiterals.<IDetailExpressionProvider.ExpressionFeature>newArrayList();
+ final Procedure1<ArrayList<IDetailExpressionProvider.ExpressionFeature>> _function = (ArrayList<IDetailExpressionProvider.ExpressionFeature> it) -> {
+ boolean _isContextExpression = parser.isContextExpression();
+ if (_isContextExpression) {
+ IDetailExpressionProvider.ExpressionFeature _resolveLatestCompleted = null;
+ if (parser!=null) {
+ _resolveLatestCompleted=parser.resolveLatestCompleted();
+ }
+ final IDetailExpressionProvider.ExpressionFeature contextFeature = _resolveLatestCompleted;
+ List<IDetailExpressionProvider.ExpressionFeature> _xifexpression = null;
+ if ((contextFeature != null)) {
+ _xifexpression = exprProvider.getContextFeatures(contextFeature);
+ } else {
+ _xifexpression = exprProvider.getInitialFeatures();
+ }
+ Iterables.<IDetailExpressionProvider.ExpressionFeature>addAll(it, _xifexpression);
+ } else {
+ List<IDetailExpressionProvider.ExpressionFeature> _initialFeatures = exprProvider.getInitialFeatures();
+ Iterables.<IDetailExpressionProvider.ExpressionFeature>addAll(it, _initialFeatures);
+ }
+ };
+ final ArrayList<IDetailExpressionProvider.ExpressionFeature> availableFeatures = ObjectExtensions.<ArrayList<IDetailExpressionProvider.ExpressionFeature>>operator_doubleArrow(_newArrayList, _function);
+ final String prefix = parser.computeIdentifierPrefix(offset);
+ final Function1<IDetailExpressionProvider.ExpressionFeature, Boolean> _function_1 = (IDetailExpressionProvider.ExpressionFeature it) -> {
+ String _id = it.getId();
+ return Boolean.valueOf(_id.startsWith(prefix));
+ };
+ Iterable<IDetailExpressionProvider.ExpressionFeature> _filter = IterableExtensions.<IDetailExpressionProvider.ExpressionFeature>filter(availableFeatures, _function_1);
+ final Function1<IDetailExpressionProvider.ExpressionFeature, ICompletionProposal> _function_2 = (IDetailExpressionProvider.ExpressionFeature feature) -> {
+ String _displayString = this.uiExpressionProvider.getDisplayString(feature);
+ final StyledString displayString = new StyledString(_displayString);
+ final Image image = this.uiExpressionProvider.getImage(feature);
+ String _id = feature.getId();
+ ConfigurableCompletionProposal _doCreateProposal = this.doCreateProposal(_id, displayString, image, prefix, globalOffset);
+ final Procedure1<ConfigurableCompletionProposal> _function_3 = (ConfigurableCompletionProposal it) -> {
+ this.processPostfix(it, feature);
+ };
+ final ConfigurableCompletionProposal prop = ObjectExtensions.<ConfigurableCompletionProposal>operator_doubleArrow(_doCreateProposal, _function_3);
+ return ((ICompletionProposal) prop);
+ };
+ Iterable<ICompletionProposal> _map = IterableExtensions.<IDetailExpressionProvider.ExpressionFeature, ICompletionProposal>map(_filter, _function_2);
+ _xblockexpression = IterableExtensions.<ICompletionProposal>toList(_map);
+ }
+ return _xblockexpression;
+ } catch (Throwable _e) {
+ throw Exceptions.sneakyThrow(_e);
+ }
+ }
+
+ protected ConfigurableCompletionProposal doCreateProposal(final String proposal, final StyledString displayString, final Image image, final String prefix, final int globalOffset) {
+ int _length = prefix.length();
+ int _minus = (globalOffset - _length);
+ int _length_1 = prefix.length();
+ int _length_2 = proposal.length();
+ ConfigurableCompletionProposal _configurableCompletionProposal = new ConfigurableCompletionProposal(proposal, _minus, _length_1, _length_2, image, displayString, null, null);
+ final Procedure1<ConfigurableCompletionProposal> _function = (ConfigurableCompletionProposal it) -> {
+ it.setMatcher(this.prefixMatcher);
+ it.setAutoInsertable(false);
+ int _length_3 = proposal.length();
+ it.setReplaceContextLength(_length_3);
+ };
+ return ObjectExtensions.<ConfigurableCompletionProposal>operator_doubleArrow(_configurableCompletionProposal, _function);
+ }
+
+ protected ConfigurableCompletionProposal processPostfix(final ConfigurableCompletionProposal proposal, final IDetailExpressionProvider.ExpressionFeature feature) {
+ final Procedure1<ConfigurableCompletionProposal> _function = (ConfigurableCompletionProposal it) -> {
+ final Pair<String, Point> postfix = this.uiExpressionProvider.getPostfixReplacement(feature);
+ String _key = postfix.getKey();
+ boolean _isEmpty = Strings.isEmpty(_key);
+ boolean _not = (!_isEmpty);
+ if (_not) {
+ Point _value = postfix.getValue();
+ boolean _notEquals = (!Objects.equal(_value, null));
+ if (_notEquals) {
+ int _replacementOffset = it.getReplacementOffset();
+ String _replacementString = it.getReplacementString();
+ int _length = _replacementString.length();
+ int _plus = (_replacementOffset + _length);
+ Point _value_1 = postfix.getValue();
+ int _plus_1 = (_plus + _value_1.x);
+ it.setSelectionStart(_plus_1);
+ int _cursorPosition = it.getCursorPosition();
+ Point _value_2 = postfix.getValue();
+ int _plus_2 = (_cursorPosition + _value_2.x);
+ it.setCursorPosition(_plus_2);
+ Point _value_3 = postfix.getValue();
+ it.setSelectionLength(_value_3.y);
+ } else {
+ int _cursorPosition_1 = it.getCursorPosition();
+ String _key_1 = postfix.getKey();
+ int _length_1 = _key_1.length();
+ int _plus_3 = (_cursorPosition_1 + _length_1);
+ it.setCursorPosition(_plus_3);
+ }
+ String _replacementString_1 = it.getReplacementString();
+ String _key_2 = postfix.getKey();
+ String _plus_4 = (_replacementString_1 + _key_2);
+ it.setReplacementString(_plus_4);
+ }
+ };
+ return ObjectExtensions.<ConfigurableCompletionProposal>operator_doubleArrow(proposal, _function);
+ }
+}
diff --git a/plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/ui/highlight/RoomExpressionHighlighter.java b/plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/ui/highlight/RoomExpressionHighlighter.java
new file mode 100644
index 000000000..1ac97ddac
--- /dev/null
+++ b/plugins/org.eclipse.etrice.expressions.ui/xtend-gen/org/eclipse/etrice/expressions/ui/highlight/RoomExpressionHighlighter.java
@@ -0,0 +1,65 @@
+/**
+ * Copyright (c) 2011 protos software gmbh (http://www.protos.de).
+ * 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:
+ * Juergen Haug (initial contribution)
+ */
+package org.eclipse.etrice.expressions.ui.highlight;
+
+import com.google.inject.Inject;
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.etrice.expressions.ui.DetailExpressionUIProvider;
+import org.eclipse.xtend.lib.annotations.Accessors;
+import org.eclipse.xtext.xbase.lib.CollectionLiterals;
+import org.eclipse.xtext.xbase.lib.Pure;
+
+@SuppressWarnings("all")
+public class RoomExpressionHighlighter {
+ @Accessors
+ public static class HighlightResult {
+ private final int offset;
+
+ private final int length;
+
+ private final String id;
+
+ public HighlightResult(final int offset, final int length, final String id) {
+ super();
+ this.offset = offset;
+ this.length = length;
+ this.id = id;
+ }
+
+ @Pure
+ public int getOffset() {
+ return this.offset;
+ }
+
+ @Pure
+ public int getLength() {
+ return this.length;
+ }
+
+ @Pure
+ public String getId() {
+ return this.id;
+ }
+ }
+
+ @Inject
+ private DetailExpressionUIProvider expressionProvider;
+
+ public List<RoomExpressionHighlighter.HighlightResult> getHighlighting(final String text, final int offset) {
+ ArrayList<RoomExpressionHighlighter.HighlightResult> _xblockexpression = null;
+ {
+ final ArrayList<RoomExpressionHighlighter.HighlightResult> result = CollectionLiterals.<RoomExpressionHighlighter.HighlightResult>newArrayList();
+ _xblockexpression = result;
+ }
+ return _xblockexpression;
+ }
+}
diff --git a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/META-INF/MANIFEST.MF
index 17ec6596f..7ede8e195 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/META-INF/MANIFEST.MF
@@ -20,7 +20,8 @@ Require-Bundle: org.eclipse.etrice.core.fsm;bundle-version="1.1.1",
com.google.guava;bundle-version="8.0.0",
org.eclipse.xtext.xbase.lib,
org.eclipse.ui.workbench.texteditor,
- org.eclipse.etrice.core.room.ui
+ org.eclipse.etrice.core.room.ui,
+ org.eclipse.etrice.expressions.ui;bundle-version="1.1.1"
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ActivationPolicy: lazy
Export-Package: org.eclipse.etrice.ui.behavior.actioneditor,
diff --git a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/modelaware/ModelAwareActionCodeEditor.java b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/modelaware/ModelAwareActionCodeEditor.java
index 3abaa0ac0..d1549a85f 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/modelaware/ModelAwareActionCodeEditor.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/modelaware/ModelAwareActionCodeEditor.java
@@ -13,9 +13,9 @@
package org.eclipse.etrice.ui.behavior.actioneditor.modelaware;
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider;
import org.eclipse.etrice.ui.behavior.actioneditor.sourceviewer.ActionCodeColorManager;
import org.eclipse.etrice.ui.behavior.actioneditor.sourceviewer.SourceViewerActionCodeEditor;
-import org.eclipse.etrice.ui.behavior.fsm.detailcode.IDetailExpressionProvider;
/**
* An extension of the {@link SourceViewerActionCodeEditor} which configures it
diff --git a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/modelaware/ModelAwareActionCodeEditorConfiguration.java b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/modelaware/ModelAwareActionCodeEditorConfiguration.java
index 2abc64154..3d0a986bc 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/modelaware/ModelAwareActionCodeEditorConfiguration.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/modelaware/ModelAwareActionCodeEditorConfiguration.java
@@ -13,10 +13,10 @@
package org.eclipse.etrice.ui.behavior.actioneditor.modelaware;
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider;
import org.eclipse.etrice.ui.behavior.actioneditor.sourceviewer.ActionCodeAssistProcessor;
import org.eclipse.etrice.ui.behavior.actioneditor.sourceviewer.ActionCodeColorManager;
import org.eclipse.etrice.ui.behavior.actioneditor.sourceviewer.ActionCodeEditorConfiguration;
-import org.eclipse.etrice.ui.behavior.fsm.detailcode.IDetailExpressionProvider;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.TextAttribute;
import org.eclipse.jface.text.contentassist.ContentAssistant;
diff --git a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/modelaware/ModelAwareActionCodeEditorFactory.java b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/modelaware/ModelAwareActionCodeEditorFactory.java
index 4a28cfbe9..7887d9ae1 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/modelaware/ModelAwareActionCodeEditorFactory.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/modelaware/ModelAwareActionCodeEditorFactory.java
@@ -15,11 +15,11 @@ package org.eclipse.etrice.ui.behavior.actioneditor.modelaware;
import java.util.List;
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider;
import org.eclipse.etrice.ui.behavior.actioneditor.sourceviewer.AbstractActionCodeEditor;
import org.eclipse.etrice.ui.behavior.actioneditor.sourceviewer.SourceViewerActionCodeEditor;
import org.eclipse.etrice.ui.behavior.fsm.actioneditor.IActionCodeEditor;
import org.eclipse.etrice.ui.behavior.fsm.actioneditor.IActionCodeEditorFactory;
-import org.eclipse.etrice.ui.behavior.fsm.detailcode.IDetailExpressionProvider;
import org.eclipse.swt.widgets.Composite;
import com.google.common.collect.Lists;
diff --git a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/AbstractActionCodeEditor.java b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/AbstractActionCodeEditor.java
index a09e35674..313b47245 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/AbstractActionCodeEditor.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/AbstractActionCodeEditor.java
@@ -14,6 +14,7 @@
package org.eclipse.etrice.ui.behavior.actioneditor.sourceviewer;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.etrice.core.fsm.fSM.DetailCode;
import org.eclipse.etrice.ui.behavior.fsm.actioneditor.IActionCodeEditor;
import org.eclipse.swt.widgets.Composite;
diff --git a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/ActionCodeAssistProcessor.java b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/ActionCodeAssistProcessor.java
index 6c7c74cad..3402344ef 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/ActionCodeAssistProcessor.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/ActionCodeAssistProcessor.java
@@ -13,11 +13,10 @@
package org.eclipse.etrice.ui.behavior.actioneditor.sourceviewer;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.etrice.ui.behavior.fsm.detailcode.IDetailExpressionProvider;
-import org.eclipse.etrice.ui.behavior.fsm.detailcode.IDetailExpressionProvider.ExpressionFeature;
+import org.eclipse.etrice.core.ui.RoomUiActivator;
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider;
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider.ExpressionFeature;
+import org.eclipse.etrice.expressions.ui.contentassist.RoomExpressionProposals;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.contentassist.CompletionProposal;
@@ -29,6 +28,8 @@ import org.eclipse.swt.graphics.Point;
import org.eclipse.xtext.util.Strings;
import org.eclipse.xtext.xbase.lib.Pair;
+import com.google.inject.Inject;
+
/**
* An Action Editor specific content assist processor. The processor lexically
* analyzes the Action Code using {@link ActionCodeContext} and generates
@@ -42,11 +43,15 @@ public class ActionCodeAssistProcessor implements IContentAssistProcessor {
private ActionCodeEditorConfiguration fConfiguration;
private DetailExpressionUIProvider exprProvider;
-
+
+ @Inject
+ RoomExpressionProposals proposals;
+
public ActionCodeAssistProcessor(ActionCodeEditorConfiguration configuration) {
super();
fConfiguration = configuration;
exprProvider = fConfiguration.getDetailExpressionProvider();
+ RoomUiActivator.getDefault().getInjector(RoomUiActivator.ORG_ECLIPSE_ETRICE_CORE_ROOM).injectMembers(this);
}
/**
@@ -56,62 +61,9 @@ public class ActionCodeAssistProcessor implements IContentAssistProcessor {
*/
@Override
public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int offset) {
- List<ICompletionProposal> proposals = new ArrayList<ICompletionProposal>();
-
- // get last context feature + prefix
- DetailExpressionAssistParser resolver = new DetailExpressionAssistParser(viewer.getDocument(), offset,
- exprProvider);
- ExpressionFeature contextFeature = resolver.resolveLatestCompleted();
- String idPrefix = "";
- try {
- idPrefix = resolver.computeIdentifierPrefix(offset);
- }
- catch (BadLocationException e) {
- }
-
- // cancel, if user expects proposals from context, but contextFeature
- // could not be resolved
- if (contextFeature == null && isExpressionSeparator(viewer, offset))
- return new ICompletionProposal[0];
-
- // create proposals
- Iterable<ExpressionFeature> features = (contextFeature != null) ? exprProvider.getContextFeaturesWithPrefix(
- contextFeature, idPrefix) : exprProvider.getInitialFeaturesWithPrefix(idPrefix);
- for (ExpressionFeature feature : features) {
- try {
- proposals.add(createPrefixCompletionProposal(feature, offset, idPrefix));
- }
- catch (Exception e) {
- }
- }
-
- return proposals.toArray(new ICompletionProposal[proposals.size()]);
- }
-
- private boolean isExpressionSeparator(ITextViewer viewer, int offset) {
- try {
- return viewer.getDocument().getChar(offset - 1) == IDetailExpressionProvider.SEPARATOR;
- }
- catch (BadLocationException e) {
- }
- return false;
+ return proposals.createProposals(exprProvider, viewer.getDocument().get(), offset, offset).toArray(new ICompletionProposal[0]);
}
- private ICompletionProposal createPrefixCompletionProposal(ExpressionFeature feature, int offset, String prefix) {
- Pair<String, Point> completionPair = exprProvider.getCompletion(feature);
- String completion = completionPair.getKey();
- String displayString = exprProvider.getDisplayString(feature);
- if (Strings.isEmpty(displayString))
- displayString = completion;
-
- ICompletionProposal proposal = new CompletionProposal(completion, offset - prefix.length(), prefix.length(),
- completion.length(), exprProvider.getImage(feature), displayString, null, null);
-
- Point selection = completionPair.getValue();
- if (selection != null)
- selection.x += (offset - prefix.length());
- return new CustomCompletionProposal(proposal, selection);
- }
/**
* {@inheritDoc}
diff --git a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/ActionCodeEditorConfiguration.java b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/ActionCodeEditorConfiguration.java
index 8ac522a24..982995e5d 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/ActionCodeEditorConfiguration.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/ActionCodeEditorConfiguration.java
@@ -18,7 +18,8 @@ import java.util.List;
import org.eclipse.core.runtime.Assert;
import org.eclipse.etrice.core.ui.RoomUiModule;
-import org.eclipse.etrice.ui.behavior.fsm.detailcode.IDetailExpressionProvider;
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider;
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider.ExpressionFeature;
import org.eclipse.jface.text.source.SourceViewer;
import org.eclipse.jface.text.source.SourceViewerConfiguration;
diff --git a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/DetailExpressionAssistParser.xtend b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/DetailExpressionAssistParser.xtend
index dd0367f51..c9fe9fcbb 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/DetailExpressionAssistParser.xtend
+++ b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/DetailExpressionAssistParser.xtend
@@ -12,9 +12,9 @@
package org.eclipse.etrice.ui.behavior.actioneditor.sourceviewer
-import org.eclipse.etrice.ui.behavior.fsm.detailcode.IDetailExpressionProvider
-import org.eclipse.etrice.ui.behavior.fsm.detailcode.IDetailExpressionProvider.ExpressionFeature
-import org.eclipse.etrice.ui.behavior.fsm.detailcode.IDetailExpressionProvider.ExpressionPostfix
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider.ExpressionFeature
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider.ExpressionPostfix
import org.eclipse.jface.text.BadLocationException
import org.eclipse.jface.text.IDocument
import org.eclipse.jface.text.rules.IWordDetector
diff --git a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/DetailExpressionNamesScanner.java b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/DetailExpressionNamesScanner.java
index a16731d81..0144f5dc9 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/DetailExpressionNamesScanner.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/DetailExpressionNamesScanner.java
@@ -16,7 +16,7 @@ import java.util.Arrays;
import java.util.List;
import java.util.Map;
-import org.eclipse.etrice.ui.behavior.fsm.detailcode.IDetailExpressionProvider.ExpressionFeature;
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider.ExpressionFeature;
import org.eclipse.jface.text.TextAttribute;
import org.eclipse.jface.text.rules.IRule;
import org.eclipse.jface.text.rules.IToken;
diff --git a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/DetailExpressionUIProvider.xtend b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/DetailExpressionUIProvider.xtend
index 7e29cb155..60d3fccf1 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/DetailExpressionUIProvider.xtend
+++ b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/DetailExpressionUIProvider.xtend
@@ -21,18 +21,18 @@ import org.eclipse.etrice.core.room.Message
import org.eclipse.etrice.core.room.Operation
import org.eclipse.etrice.core.room.Port
import org.eclipse.etrice.core.room.SPP
+import org.eclipse.etrice.core.room.VarDecl
import org.eclipse.etrice.core.room.util.RoomHelpers
-import org.eclipse.etrice.ui.behavior.fsm.detailcode.IDetailExpressionProvider
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider
+import org.eclipse.etrice.expressions.detailcode.RuntimeDetailExpressionProvider
+import org.eclipse.etrice.expressions.detailcode.RuntimeDetailExpressionProvider.RuntimeMethodExpressionData
+import org.eclipse.etrice.ui.behavior.actioneditor.Activator
import org.eclipse.jface.viewers.ILabelProvider
import org.eclipse.swt.graphics.Image
import org.eclipse.swt.graphics.Point
import org.eclipse.swt.graphics.RGB
import org.eclipse.xtend.lib.annotations.Delegate
import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor
-import org.eclipse.etrice.ui.behavior.detailcode.RuntimeDetailExpressionProvider.RuntimeMethodExpressionData
-import org.eclipse.etrice.ui.behavior.actioneditor.Activator
-import org.eclipse.etrice.ui.behavior.detailcode.RuntimeDetailExpressionProvider
-import org.eclipse.etrice.core.room.VarDecl
@FinalFieldsConstructor
class DetailExpressionUIProvider implements IDetailExpressionProvider {
diff --git a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/SourceViewerActionCodeEditor.java b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/SourceViewerActionCodeEditor.java
index a21364ca0..d168a1fab 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/SourceViewerActionCodeEditor.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/SourceViewerActionCodeEditor.java
@@ -22,6 +22,7 @@ import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.etrice.core.fsm.fSM.DetailCode;
import org.eclipse.etrice.ui.behavior.fsm.actioneditor.IActionCodeEditor;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.text.BadLocationException;
diff --git a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/text/TextActionCodeEditor.java b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/text/TextActionCodeEditor.java
index 4105cfa40..fe8f2ae2e 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/text/TextActionCodeEditor.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/text/TextActionCodeEditor.java
@@ -13,6 +13,7 @@
package org.eclipse.etrice.ui.behavior.actioneditor.text;
+import org.eclipse.etrice.core.fsm.fSM.DetailCode;
import org.eclipse.etrice.ui.behavior.actioneditor.sourceviewer.AbstractActionCodeEditor;
import org.eclipse.etrice.ui.behavior.fsm.actioneditor.IActionCodeEditor;
import org.eclipse.jface.text.Document;
diff --git a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/text/TextActionCodeEditorFactory.java b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/text/TextActionCodeEditorFactory.java
index 96f6ae6e7..bf45ecb9f 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/text/TextActionCodeEditorFactory.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/text/TextActionCodeEditorFactory.java
@@ -15,9 +15,9 @@ package org.eclipse.etrice.ui.behavior.actioneditor.text;
import java.util.ArrayList;
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider;
import org.eclipse.etrice.ui.behavior.fsm.actioneditor.IActionCodeEditor;
import org.eclipse.etrice.ui.behavior.fsm.actioneditor.IActionCodeEditorFactory;
-import org.eclipse.etrice.ui.behavior.fsm.detailcode.IDetailExpressionProvider;
import org.eclipse.swt.widgets.Composite;
/**
diff --git a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/xtend-gen/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/DetailExpressionAssistParser.java b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/xtend-gen/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/DetailExpressionAssistParser.java
index be825c235..b617e6821 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/xtend-gen/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/DetailExpressionAssistParser.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/xtend-gen/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/DetailExpressionAssistParser.java
@@ -13,7 +13,7 @@ package org.eclipse.etrice.ui.behavior.actioneditor.sourceviewer;
import com.google.common.base.Objects;
import java.util.LinkedList;
import java.util.List;
-import org.eclipse.etrice.ui.behavior.fsm.detailcode.IDetailExpressionProvider;
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.rules.IWordDetector;
diff --git a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/xtend-gen/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/DetailExpressionUIProvider.java b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/xtend-gen/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/DetailExpressionUIProvider.java
index 33a89173f..a430d9119 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/xtend-gen/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/DetailExpressionUIProvider.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/xtend-gen/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/DetailExpressionUIProvider.java
@@ -29,10 +29,10 @@ import org.eclipse.etrice.core.room.RefableType;
import org.eclipse.etrice.core.room.SPP;
import org.eclipse.etrice.core.room.VarDecl;
import org.eclipse.etrice.core.room.util.RoomHelpers;
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider;
+import org.eclipse.etrice.expressions.detailcode.RuntimeDetailExpressionProvider;
import org.eclipse.etrice.ui.behavior.actioneditor.Activator;
import org.eclipse.etrice.ui.behavior.actioneditor.sourceviewer.ActionCodeColorManager;
-import org.eclipse.etrice.ui.behavior.detailcode.RuntimeDetailExpressionProvider;
-import org.eclipse.etrice.ui.behavior.fsm.detailcode.IDetailExpressionProvider;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
diff --git a/plugins/org.eclipse.etrice.ui.behavior.fsm/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.ui.behavior.fsm/META-INF/MANIFEST.MF
index 50458ca2f..2feac2583 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.fsm/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.ui.behavior.fsm/META-INF/MANIFEST.MF
@@ -17,13 +17,13 @@ Require-Bundle: org.eclipse.etrice.core.common.ui;bundle-version="1.1.1",
org.eclipse.emf.transaction;bundle-version="1.4.0",
org.eclipse.xtext.ui;bundle-version="2.7.0",
org.eclipse.xtend.lib;bundle-version="2.7.0",
- org.eclipse.xtext.ui.shared;bundle-version="2.7.0"
+ org.eclipse.xtext.ui.shared;bundle-version="2.7.0",
+ org.eclipse.etrice.expressions.ui;bundle-version="1.1.1"
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ActivationPolicy: lazy
Export-Package: org.eclipse.etrice.ui.behavior.fsm.actioneditor,
org.eclipse.etrice.ui.behavior.fsm.actioneditor.preferences,
org.eclipse.etrice.ui.behavior.fsm.commands,
- org.eclipse.etrice.ui.behavior.fsm.detailcode,
org.eclipse.etrice.ui.behavior.fsm.dialogs,
org.eclipse.etrice.ui.behavior.fsm.editor,
org.eclipse.etrice.ui.behavior.fsm.provider,
diff --git a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/actioneditor/ActionCodeEditorRegistry.java b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/actioneditor/ActionCodeEditorRegistry.java
index 83dd12cf7..545544707 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/actioneditor/ActionCodeEditorRegistry.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/actioneditor/ActionCodeEditorRegistry.java
@@ -22,8 +22,8 @@ import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.etrice.core.fsm.fSM.DetailCode;
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider;
import org.eclipse.etrice.ui.behavior.fsm.Activator;
-import org.eclipse.etrice.ui.behavior.fsm.detailcode.IDetailExpressionProvider;
import org.eclipse.swt.widgets.Composite;
/**
diff --git a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/actioneditor/IActionCodeEditorFactory.java b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/actioneditor/IActionCodeEditorFactory.java
index 74239e6a1..e0a5882f0 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/actioneditor/IActionCodeEditorFactory.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/actioneditor/IActionCodeEditorFactory.java
@@ -13,7 +13,7 @@
package org.eclipse.etrice.ui.behavior.fsm.actioneditor;
-import org.eclipse.etrice.ui.behavior.fsm.detailcode.IDetailExpressionProvider;
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider;
import org.eclipse.swt.widgets.Composite;
/**
diff --git a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/dialogs/AbstractMemberAwarePropertyDialog.java b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/dialogs/AbstractMemberAwarePropertyDialog.java
index b2f2d5373..90ebde21c 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/dialogs/AbstractMemberAwarePropertyDialog.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/dialogs/AbstractMemberAwarePropertyDialog.java
@@ -23,12 +23,12 @@ import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.etrice.core.fsm.fSM.DetailCode;
import org.eclipse.etrice.core.fsm.fSM.ModelComponent;
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider;
import org.eclipse.etrice.ui.behavior.fsm.Activator;
import org.eclipse.etrice.ui.behavior.fsm.actioneditor.ActionCodeEditorRegistry;
import org.eclipse.etrice.ui.behavior.fsm.actioneditor.ActionCodeEditorRegistry.ActionCodeEditorRegistryEntry;
import org.eclipse.etrice.ui.behavior.fsm.actioneditor.IActionCodeEditor;
import org.eclipse.etrice.ui.behavior.fsm.actioneditor.preferences.PreferenceConstants;
-import org.eclipse.etrice.ui.behavior.fsm.detailcode.IDetailExpressionProvider;
import org.eclipse.etrice.ui.behavior.fsm.support.FSMSupportUtil;
import org.eclipse.etrice.ui.common.base.dialogs.AbstractPropertyDialog;
import org.eclipse.etrice.ui.common.base.dialogs.MultiValidator2;
diff --git a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/editor/AbstractFSMDiagramBehavior.java b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/editor/AbstractFSMDiagramBehavior.java
index bac71ebe4..923170c4e 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/editor/AbstractFSMDiagramBehavior.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/editor/AbstractFSMDiagramBehavior.java
@@ -12,7 +12,6 @@
package org.eclipse.etrice.ui.behavior.fsm.editor;
-import org.eclipse.etrice.ui.behavior.fsm.editor.DiagnosingModelObserver;
import org.eclipse.etrice.ui.common.base.editor.CustomDiagramBehavior;
import org.eclipse.gef.EditPart;
import org.eclipse.graphiti.ui.editor.DefaultRefreshBehavior;
diff --git a/plugins/org.eclipse.etrice.ui.behavior/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.ui.behavior/META-INF/MANIFEST.MF
index ed73ff01f..05c40761e 100644
--- a/plugins/org.eclipse.etrice.ui.behavior/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.ui.behavior/META-INF/MANIFEST.MF
@@ -20,11 +20,11 @@ Require-Bundle: org.eclipse.etrice.core.room.ui;bundle-version="1.1.1",
org.eclipse.xtext.ui;bundle-version="2.6.0",
org.eclipse.xtext.ui.shared;bundle-version="2.6.0",
org.eclipse.etrice.abstractexec.behavior;bundle-version="1.1.1",
- org.eclipse.etrice.core.genmodel;bundle-version="1.1.1"
+ org.eclipse.etrice.core.genmodel;bundle-version="1.1.1",
+ org.eclipse.etrice.expressions.ui;bundle-version="1.1.1"
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-Vendor: Eclipse eTrice
Export-Package: org.eclipse.etrice.ui.behavior,
- org.eclipse.etrice.ui.behavior.detailcode,
org.eclipse.etrice.ui.behavior.editor,
org.eclipse.etrice.ui.behavior.support
diff --git a/plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/DiagramTypeProvider.java b/plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/DiagramTypeProvider.java
index aa35a51ad..1af861f41 100644
--- a/plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/DiagramTypeProvider.java
+++ b/plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/DiagramTypeProvider.java
@@ -12,10 +12,10 @@
package org.eclipse.etrice.ui.behavior;
+import org.eclipse.etrice.ui.behavior.fsm.editor.AbstractFSMDiagramTypeProvider;
import org.eclipse.etrice.ui.behavior.fsm.support.AbstractFSMProviderDispatcher;
import org.eclipse.etrice.ui.behavior.support.ProviderDispatcher;
import org.eclipse.etrice.ui.common.base.support.DiagramAccessBase;
-import org.eclipse.etrice.ui.behavior.fsm.editor.AbstractFSMDiagramTypeProvider;
import org.eclipse.graphiti.tb.IToolBehaviorProvider;
public class DiagramTypeProvider extends AbstractFSMDiagramTypeProvider {
diff --git a/plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/dialogs/StatePropertyDialog.java b/plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/dialogs/StatePropertyDialog.java
index 6fe2c8825..85b1d25df 100644
--- a/plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/dialogs/StatePropertyDialog.java
+++ b/plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/dialogs/StatePropertyDialog.java
@@ -17,8 +17,8 @@ import org.eclipse.etrice.core.fsm.fSM.State;
import org.eclipse.etrice.core.fsm.validation.FSMValidationUtilXtend.Result;
import org.eclipse.etrice.core.room.ActorClass;
import org.eclipse.etrice.core.room.util.RoomHelpers;
+import org.eclipse.etrice.expressions.detailcode.RuntimeDetailExpressionProvider;
import org.eclipse.etrice.ui.behavior.Activator;
-import org.eclipse.etrice.ui.behavior.detailcode.RuntimeDetailExpressionProvider;
import org.eclipse.etrice.ui.behavior.fsm.actioneditor.IActionCodeEditor;
import org.eclipse.etrice.ui.behavior.fsm.dialogs.AbstractMemberAwarePropertyDialog;
import org.eclipse.etrice.ui.behavior.fsm.dialogs.DetailCodeToString;
diff --git a/plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/dialogs/TransitionPropertyDialog.java b/plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/dialogs/TransitionPropertyDialog.java
index 71ea45657..8099be8b6 100644
--- a/plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/dialogs/TransitionPropertyDialog.java
+++ b/plugins/org.eclipse.etrice.ui.behavior/src/org/eclipse/etrice/ui/behavior/dialogs/TransitionPropertyDialog.java
@@ -32,11 +32,11 @@ import org.eclipse.etrice.core.room.InterfaceItem;
import org.eclipse.etrice.core.room.ProtocolClass;
import org.eclipse.etrice.core.room.VarDecl;
import org.eclipse.etrice.core.room.util.RoomHelpers;
+import org.eclipse.etrice.expressions.detailcode.GuardDetailExpressionProvider;
+import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider;
+import org.eclipse.etrice.expressions.detailcode.RuntimeDetailExpressionProvider;
import org.eclipse.etrice.ui.behavior.Activator;
-import org.eclipse.etrice.ui.behavior.detailcode.GuardDetailExpressionProvider;
-import org.eclipse.etrice.ui.behavior.detailcode.RuntimeDetailExpressionProvider;
import org.eclipse.etrice.ui.behavior.fsm.actioneditor.IActionCodeEditor;
-import org.eclipse.etrice.ui.behavior.fsm.detailcode.IDetailExpressionProvider;
import org.eclipse.etrice.ui.behavior.fsm.dialogs.AbstractMemberAwarePropertyDialog;
import org.eclipse.etrice.ui.behavior.fsm.dialogs.DetailCodeToString;
import org.eclipse.etrice.ui.behavior.fsm.dialogs.ITransitionPropertyDialog;

Back to the top