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/highlight/RoomSemanticHighlightingCalculator.java')
-rw-r--r--plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/highlight/RoomSemanticHighlightingCalculator.java71
1 files changed, 45 insertions, 26 deletions
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 c238b7547..1b7fd2f88 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
@@ -17,18 +17,25 @@ 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.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.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.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;
/**
@@ -36,24 +43,19 @@ import com.google.inject.Inject;
*
*/
public class RoomSemanticHighlightingCalculator extends BaseSemanticHighlighter {
+
+ @Inject
+ RoomGrammarAccess grammar;
- @Inject RoomGrammarAccess grammar;
- @Inject RoomValueConverterService converterService;
- @Inject DCUtil detailCodeUtil;
- DCLanguage language = null;
-
- public RoomSemanticHighlightingCalculator() {
- }
+ @Inject
+ RoomValueConverterService converterService;
@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,22 +70,39 @@ public class RoomSemanticHighlightingCalculator extends BaseSemanticHighlighter
acceptor.addPosition(node.getOffset(), node.getLength(), RoomHighlightingConfiguration.HL_ANNOTATION_ID);
}
else if(ruleCall.getRule() == grammar.getCC_STRINGRule()) {
- HighlightingAstVisitor.highlight(node, acceptor, detailCodeUtil);
+ detailCodeHighlight(node, acceptor, expressionCache);
}
}
}
}
-
- 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;
+
+ 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();
}
- else {
- language = DCLanguage.CPP_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());
+ }
}
- detailCodeUtil.setLanguage(language);
+
}
+
}

Back to the top