Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui')
-rw-r--r--plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/contentassist/RoomProposalProvider.java10
-rw-r--r--plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/highlight/HighlightingAstVisitor.xtend91
-rw-r--r--plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/highlight/RoomSemanticHighlightingCalculator.java71
-rw-r--r--plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/hover/RoomHoverProvider.xtend17
-rw-r--r--plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/linking/RoomHyperlinkHelper.java24
5 files changed, 149 insertions, 64 deletions
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 2bb423390..30b9f23df 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
@@ -226,17 +226,21 @@ public class RoomProposalProvider extends AbstractRoomProposalProvider {
@Inject
RoomExpressionProposalProvider expressionProposalAdapter;
+ //@Inject private DCUtil util;
@Override
public void complete_CC_STRING(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
- String text = context.getCurrentNode().getText();
- int localOffset = context.getOffset() - context.getCurrentNode().getOffset();
- int globalOffset = context.getOffset();
if (context.getCurrentNode().getSemanticElement() instanceof DetailCode) {
+ String text = context.getCurrentNode().getText();
+ int localOffset = context.getOffset() - context.getCurrentNode().getOffset();
+ int globalOffset = context.getOffset();
DetailCode detailCode = (DetailCode) context.getCurrentNode().getSemanticElement();
IDetailExpressionProvider exprPovider = UIExpressionUtil.getExpressionProvider(detailCode);
for(ICompletionProposal proposal : expressionProposalAdapter.createProposals(exprPovider, text, localOffset, globalOffset))
acceptor.accept(proposal);
+
+ // new implementation TODO
+ //util.getProposals(context.getCurrentNode(), context.getOffset());
}
super.complete_CC_STRING(model, ruleCall, context, acceptor);
diff --git a/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/highlight/HighlightingAstVisitor.xtend b/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/highlight/HighlightingAstVisitor.xtend
new file mode 100644
index 000000000..f20a4621d
--- /dev/null
+++ b/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/highlight/HighlightingAstVisitor.xtend
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * 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:
+ * Henrik Rentz-Reichert (initial contribution)
+ *
+ *******************************************************************************/
+
+package org.eclipse.etrice.core.ui.highlight
+
+import org.eclipse.etrice.core.room.Attribute
+import org.eclipse.etrice.core.room.InterfaceItem
+import org.eclipse.etrice.core.room.MessageData
+import org.eclipse.etrice.core.room.Operation
+import org.eclipse.etrice.core.room.VarDecl
+import org.eclipse.etrice.dctools.fsm.ast.nodes.DCAstIdentifierNode
+import org.eclipse.etrice.dctools.fsm.ast.nodes.DCAstNode
+import org.eclipse.etrice.dctools.fsm.ast.nodes.DCAstOtherNode
+import org.eclipse.etrice.dctools.fsm.ast.util.IDCAstNodeVisitor
+import org.eclipse.xtext.ide.editor.syntaxcoloring.IHighlightedPositionAcceptor
+import org.eclipse.xtext.nodemodel.INode
+import org.eclipse.etrice.dctools.ast.DCUtil
+import org.eclipse.etrice.dctools.fsm.ast.nodes.DCAstOperationCallNode
+import org.eclipse.etrice.core.room.Message
+
+class HighlightingAstVisitor implements IDCAstNodeVisitor {
+
+ IHighlightedPositionAcceptor acceptor
+ int baseOffset
+
+ static def highlight(INode node, IHighlightedPositionAcceptor acceptor, DCUtil util) {
+ val ast = util.parseAndLink(node)
+ val offset = util.getDelimiterAdjustedOffset(node)
+ val visitor = new HighlightingAstVisitor(acceptor, offset)
+ ast.visit(visitor)
+ }
+
+ private new(IHighlightedPositionAcceptor acceptor, int baseOffset) {
+ this.acceptor = acceptor
+ this.baseOffset = baseOffset
+ }
+
+ override boolean visitBegin(DCAstNode node) {
+ var int begin
+ var int length
+ val highlightId = switch node {
+ DCAstOtherNode: {
+ begin = node.token.begin
+ length = node.token.length
+ switch node.token.token.kind {
+ case COMMENT: RoomHighlightingConfiguration.COMMENT_ID
+ case STRING: RoomHighlightingConfiguration.STRING_ID
+ case NUMBER: RoomHighlightingConfiguration.NUMBER_ID
+ case KEYWORD: RoomHighlightingConfiguration.KEYWORD_ID
+ default: null
+ }
+ }
+ DCAstIdentifierNode: {
+ begin = node.token.begin
+ length = node.token.length
+ switch DCUtil.getLinkedObject(node) {
+ Attribute,
+ MessageData,
+ VarDecl: RoomHighlightingConfiguration.HL_EXPR_ATTRIBUTE_ID
+ InterfaceItem: RoomHighlightingConfiguration.HL_EXPR_INTERFACE_ITEM_ID
+ Operation: RoomHighlightingConfiguration.HL_EXPR_OPERATION_ID
+ default: null
+ }
+ }
+ DCAstOperationCallNode: {
+ begin = node.idNode.token.begin
+ length = node.idNode.token.length
+ switch node.linkedObject {
+ Message: RoomHighlightingConfiguration.HL_EXPR_OPERATION_ID
+ default: null
+ }
+ }
+ }
+ if (highlightId !== null) {
+ acceptor.addPosition(baseOffset + begin, length, highlightId)
+ }
+ return true
+ }
+
+ override void visitEnd(DCAstNode node) {
+ }
+}
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 fff548b74..8c915a7af 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
@@ -15,25 +15,18 @@ package org.eclipse.etrice.core.ui.highlight;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.etrice.core.common.ui.highlight.BaseSemanticHighlighter;
import org.eclipse.etrice.core.converter.RoomValueConverterService;
-import org.eclipse.etrice.core.fsm.fSM.DetailCode;
import org.eclipse.etrice.core.services.RoomGrammarAccess;
-import org.eclipse.etrice.core.ui.util.UIExpressionUtil;
-import org.eclipse.etrice.core.ui.util.UIExpressionUtil.ExpressionCache;
-import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider;
-import org.eclipse.etrice.expressions.ui.highlight.ExpressionRuleFactory;
-import org.eclipse.etrice.expressions.ui.highlight.TargetLanguageRuleFactory;
-import org.eclipse.jface.text.Document;
-import org.eclipse.jface.text.rules.IRule;
-import org.eclipse.jface.text.rules.IToken;
-import org.eclipse.jface.text.rules.RuleBasedScanner;
-import org.eclipse.jface.text.rules.Token;
+import org.eclipse.etrice.dctools.ast.DCUtil;
+import org.eclipse.etrice.dctools.fsm.ast.DCLanguage;
+import org.eclipse.etrice.ui.behavior.fsm.Activator;
+import org.eclipse.etrice.ui.behavior.fsm.actioneditor.preferences.PreferenceConstants;
+import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.xtext.RuleCall;
import org.eclipse.xtext.ide.editor.syntaxcoloring.IHighlightedPositionAcceptor;
import org.eclipse.xtext.nodemodel.INode;
import org.eclipse.xtext.resource.XtextResource;
import org.eclipse.xtext.util.CancelIndicator;
-import com.google.common.collect.Iterables;
import com.google.inject.Inject;
/**
@@ -41,19 +34,24 @@ import com.google.inject.Inject;
*
*/
public class RoomSemanticHighlightingCalculator extends BaseSemanticHighlighter {
-
- @Inject
- RoomGrammarAccess grammar;
- @Inject
- RoomValueConverterService converterService;
+ @Inject RoomGrammarAccess grammar;
+ @Inject RoomValueConverterService converterService;
+ @Inject DCUtil detailCodeUtil;
+ DCLanguage language = null;
+
+ public RoomSemanticHighlightingCalculator() {
+ }
@Override
public void provideHighlightingFor(XtextResource resource, IHighlightedPositionAcceptor acceptor, CancelIndicator cancelIndicator) {
if (resource == null || resource.getParseResult() == null)
return;
+
+ if (language==null) {
+ setLanguage();
+ }
- ExpressionCache expressionCache = new ExpressionCache();
INode root = resource.getParseResult().getRootNode();
for (INode node : root.getAsTreeIterable()) {
if(cancelIndicator.isCanceled())
@@ -68,39 +66,22 @@ public class RoomSemanticHighlightingCalculator extends BaseSemanticHighlighter
acceptor.addPosition(node.getOffset(), node.getLength(), RoomHighlightingConfiguration.HL_ANNOTATION_ID);
}
else if(ruleCall.getRule() == grammar.getCC_STRINGRule()) {
- detailCodeHighlight(node, acceptor, expressionCache);
+ HighlightingAstVisitor.highlight(node, acceptor, detailCodeUtil);
}
}
}
}
-
- protected void detailCodeHighlight(INode node, IHighlightedPositionAcceptor acceptor, ExpressionCache cache) {
- final String text = converterService.getCC_StringConverter().stripDelim(node.getText());
- final int offset = node.getOffset() + converterService.getCC_StringConverter().getDelim().length();
-
- DetailCode dc = null;
- if(node.getParent().getSemanticElement() instanceof DetailCode) {
- dc = (DetailCode) node.getParent().getSemanticElement();
+
+ private void setLanguage() {
+ IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore();
+ String lang = preferenceStore.getString(PreferenceConstants.EDITOR_LANGUAGE);
+ if (lang.equals(PreferenceConstants.JAVA_LANGUAGE)) {
+ language = DCLanguage.JAVA_LANGUAGE;
}
- IDetailExpressionProvider exprProvider = UIExpressionUtil.getExpressionProvider(dc, null, cache);
- XtextHighlightStyles styles = new XtextHighlightStyles();
- RuleBasedScanner scanner = new RuleBasedScanner();
- scanner.setRules(Iterables.toArray(Iterables.concat(
- TargetLanguageRuleFactory.getGeneralLiteralRules(styles),
- ExpressionRuleFactory.getInitialExpressionRules(exprProvider, styles),
- TargetLanguageRuleFactory.getGeneralKeywordRules(styles))
- , IRule.class));
- scanner.setRange(new Document(text), 0, text.length());
-
- IToken lastToken = null;
- while(lastToken != Token.EOF) {
- lastToken = scanner.nextToken();
- if(lastToken != null && lastToken.getData() != null) {
- acceptor.addPosition(offset + scanner.getTokenOffset(), scanner.getTokenLength(), (String) lastToken.getData());
- }
+ else {
+ language = DCLanguage.CPP_LANGUAGE;
}
-
+ detailCodeUtil.setLanguage(language);
}
-
}
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
index 8a0234f4c..1d61abca7 100644
--- 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
@@ -13,11 +13,10 @@
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.services.RoomGrammarAccess
-import org.eclipse.etrice.core.ui.util.UIExpressionUtil
+import org.eclipse.etrice.dctools.ast.DCUtil
import org.eclipse.jface.text.Region
import org.eclipse.xtext.RuleCall
import org.eclipse.xtext.nodemodel.util.NodeModelUtils
@@ -26,8 +25,8 @@ import org.eclipse.xtext.util.Tuples
class RoomHoverProvider extends KeywordEObjectTextHover {
- @Inject
- RoomGrammarAccess grammar
+ @Inject RoomGrammarAccess grammar
+ @Inject DCUtil util
override protected getXtextElementAt(XtextResource resource, int offset) {
// lookup expression
@@ -36,9 +35,13 @@ class RoomHoverProvider extends KeywordEObjectTextHover {
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 exprFeature = UIExpressionUtil.findAtOffset(leafNode, offset)
- if(exprFeature?.data instanceof EObject)
- return Tuples.create(exprFeature.data as EObject, new Region(offset, exprFeature.id.length))
+// println("RoomHoverProvider at offset " + offset + " " + leafNode.offset + " " + leafNode.text.substring(offset - leafNode.offset))
+ val result = util.findAtOffset(leafNode, offset)
+ if (result!==null) {
+// val begin = result.begin
+// println("RoomHoverProvider hit " + (leafNode.offset + result.begin) +" " + result.length + " " + leafNode.text.substring(begin, begin + result.length))
+ return Tuples.create(result.object, new Region(leafNode.offset + result.begin, result.length))
+ }
}
}
}
diff --git a/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/linking/RoomHyperlinkHelper.java b/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/linking/RoomHyperlinkHelper.java
index 6e2c361e3..c04199f13 100644
--- a/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/linking/RoomHyperlinkHelper.java
+++ b/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/linking/RoomHyperlinkHelper.java
@@ -21,8 +21,8 @@ import org.eclipse.etrice.core.room.ActorRef;
import org.eclipse.etrice.core.room.RefSegment;
import org.eclipse.etrice.core.room.util.RoomHelpers;
import org.eclipse.etrice.core.services.RoomGrammarAccess;
-import org.eclipse.etrice.core.ui.util.UIExpressionUtil;
-import org.eclipse.etrice.expressions.detailcode.IDetailExpressionProvider.ExpressionFeature;
+import org.eclipse.etrice.dctools.ast.DCUtil;
+import org.eclipse.etrice.dctools.ast.DCUtil.FindResult;
import org.eclipse.jface.text.Region;
import org.eclipse.xtext.AbstractRule;
import org.eclipse.xtext.RuleCall;
@@ -42,6 +42,7 @@ public class RoomHyperlinkHelper extends ImportAwareHyperlinkHelper {
@Inject private RoomGrammarAccess grammar;
@Inject private RoomHelpers roomHelpers;
+ @Inject private DCUtil util;
@Override
public void createHyperlinksByOffset(XtextResource resource, int offset, IHyperlinkAcceptor acceptor) {
@@ -67,12 +68,16 @@ public class RoomHyperlinkHelper extends ImportAwareHyperlinkHelper {
}
}
- if(leaf.getGrammarElement() instanceof RuleCall) {
- if(((RuleCall) leaf.getGrammarElement()).getRule() == grammar.getCC_STRINGRule() && leaf.getSemanticElement() instanceof DetailCode) {
- ExpressionFeature exprFeature = UIExpressionUtil.findAtOffset(leaf, offset);
- if(exprFeature != null && exprFeature.getData() instanceof EObject) {
- Region region = new Region(leaf.getOffset(), leaf.getLength());
- createHyperlinksTo(resource, region, (EObject) exprFeature.getData(), acceptor);
+ if (leaf.getGrammarElement() instanceof RuleCall) {
+ if (((RuleCall) leaf.getGrammarElement()).getRule() == grammar.getCC_STRINGRule()
+ && leaf.getSemanticElement() instanceof DetailCode) {
+ // System.out.println("RoomHyperlinkHelper at offset " + offset + " " + leaf.getOffset() + " " + leaf.getText().substring(offset - leaf.getOffset()));
+ FindResult result = util.findAtOffset(leaf, offset);
+ if (result != null) {
+ // int begin = result.getBegin();
+ // System.out.println("RoomHyperlinkHelper hit " + (leaf.getOffset() + result.getBegin()) +" " + result.getLength() + " " + leaf.getText().substring(begin, begin + result.getLength()));
+ Region region = new Region(leaf.getOffset() + result.getBegin(), result.getLength());
+ createHyperlinksTo(resource, region, result.getObject(), acceptor);
}
}
}
@@ -85,12 +90,13 @@ public class RoomHyperlinkHelper extends ImportAwareHyperlinkHelper {
ActorContainerClass lastAcContainer = roomHelpers.getParentContainer(aim);
ActorRef lastRef = null;
for (RefSegment ref : aim.getPath().getRefs()) {
- for (ActorRef r : lastAcContainer.getActorRefs())
+ for (ActorRef r : lastAcContainer.getActorRefs()) {
if (r.getName().equals(ref.getRef())) {
lastRef = r;
lastAcContainer = lastRef.getType();
break;
}
+ }
}
return lastRef;

Back to the top