Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJuergen Haug2017-08-29 14:08:52 +0000
committerJuergen Haug2017-08-29 14:55:38 +0000
commitc72ab314a29234cf980b85d12c18734747ee2176 (patch)
tree0183a601bcc04af0be62a88bbb81813b54e10251
parent965e852cc5dc0a3a6891c5bd8962d596eb122238 (diff)
downloadorg.eclipse.etrice-c72ab314a29234cf980b85d12c18734747ee2176.tar.gz
org.eclipse.etrice-c72ab314a29234cf980b85d12c18734747ee2176.tar.xz
org.eclipse.etrice-c72ab314a29234cf980b85d12c18734747ee2176.zip
[targetLang] improved reusability, switched to new xtext highlight api
-rw-r--r--plugins/org.eclipse.etrice.core.common.ui/src/org/eclipse/etrice/core/common/ui/autoedit/BaseAutoEditStrategyProvider.java12
-rw-r--r--plugins/org.eclipse.etrice.core.common.ui/src/org/eclipse/etrice/core/common/ui/highlight/BaseHighlightingConfig.java11
-rw-r--r--plugins/org.eclipse.etrice.core.common.ui/src/org/eclipse/etrice/core/common/ui/highlight/BaseSemanticHighlighter.java49
-rw-r--r--plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/converter/BaseConverterService.java5
-rw-r--r--plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/converter/CCStringConverter.java69
-rw-r--r--plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/converter/CC_StringConverter.java41
-rw-r--r--plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/formatting2/CCStringReplacer.xtend38
-rw-r--r--plugins/org.eclipse.etrice.core.common/xtend-gen/org/eclipse/etrice/core/common/formatting2/CCStringReplacer.java70
-rw-r--r--plugins/org.eclipse.etrice.core.fsm.ui/xtend-gen/org/eclipse/etrice/core/fsm/ui/quickfix/FSMQuickfixProvider.java42
-rw-r--r--plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/formatting2/FSMFormatter.xtend29
-rw-r--r--plugins/org.eclipse.etrice.core.fsm/xtend-gen/org/eclipse/etrice/core/fsm/formatting2/FSMFormatter.java63
-rw-r--r--plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/RoomUiModule.java2
-rw-r--r--plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/highlight/RoomSemanticHighlightingCalculator.java53
-rw-r--r--plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/formatting/RoomFormatter.java3
-rw-r--r--tests/org.eclipse.etrice.core.common.tests/src/org/eclipse/etrice/core/common/tests/DetailCodeParseTest.xtend (renamed from tests/org.eclipse.etrice.core.common.tests/src-gen/org/eclipse/etrice/core/common/DetailCodeParseTest.xtend)6
-rw-r--r--tests/org.eclipse.etrice.core.common.tests/xtend-gen/org/eclipse/etrice/core/common/tests/DetailCodeParseTest.java (renamed from tests/org.eclipse.etrice.core.common.tests/xtend-gen/org/eclipse/etrice/core/common/DetailCodeParseTest.java)11
16 files changed, 290 insertions, 214 deletions
diff --git a/plugins/org.eclipse.etrice.core.common.ui/src/org/eclipse/etrice/core/common/ui/autoedit/BaseAutoEditStrategyProvider.java b/plugins/org.eclipse.etrice.core.common.ui/src/org/eclipse/etrice/core/common/ui/autoedit/BaseAutoEditStrategyProvider.java
index f57c65754..f8259030a 100644
--- a/plugins/org.eclipse.etrice.core.common.ui/src/org/eclipse/etrice/core/common/ui/autoedit/BaseAutoEditStrategyProvider.java
+++ b/plugins/org.eclipse.etrice.core.common.ui/src/org/eclipse/etrice/core/common/ui/autoedit/BaseAutoEditStrategyProvider.java
@@ -1,3 +1,15 @@
+/*******************************************************************************
+ * 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.common.ui.autoedit;
import org.eclipse.etrice.core.common.ui.editor.model.BaseTokenTypeToPartitionMapper;
diff --git a/plugins/org.eclipse.etrice.core.common.ui/src/org/eclipse/etrice/core/common/ui/highlight/BaseHighlightingConfig.java b/plugins/org.eclipse.etrice.core.common.ui/src/org/eclipse/etrice/core/common/ui/highlight/BaseHighlightingConfig.java
index 1b217b56d..bdbb11c05 100644
--- a/plugins/org.eclipse.etrice.core.common.ui/src/org/eclipse/etrice/core/common/ui/highlight/BaseHighlightingConfig.java
+++ b/plugins/org.eclipse.etrice.core.common.ui/src/org/eclipse/etrice/core/common/ui/highlight/BaseHighlightingConfig.java
@@ -1,3 +1,14 @@
+/*******************************************************************************
+ * 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:
+ *
+ *******************************************************************************/
+
package org.eclipse.etrice.core.common.ui.highlight;
import org.eclipse.swt.graphics.RGB;
diff --git a/plugins/org.eclipse.etrice.core.common.ui/src/org/eclipse/etrice/core/common/ui/highlight/BaseSemanticHighlighter.java b/plugins/org.eclipse.etrice.core.common.ui/src/org/eclipse/etrice/core/common/ui/highlight/BaseSemanticHighlighter.java
index b512b7f6e..f43159c0f 100644
--- a/plugins/org.eclipse.etrice.core.common.ui/src/org/eclipse/etrice/core/common/ui/highlight/BaseSemanticHighlighter.java
+++ b/plugins/org.eclipse.etrice.core.common.ui/src/org/eclipse/etrice/core/common/ui/highlight/BaseSemanticHighlighter.java
@@ -1,17 +1,31 @@
+/*******************************************************************************
+ * 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
+ *
+ *******************************************************************************/
+
package org.eclipse.etrice.core.common.ui.highlight;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
+import org.eclipse.etrice.core.common.converter.BaseConverterService;
+import org.eclipse.etrice.core.common.converter.CCStringConverter;
import org.eclipse.etrice.core.common.converter.CCStringIndentation;
-import org.eclipse.etrice.core.common.converter.CC_StringConverter;
import org.eclipse.etrice.core.common.services.BaseGrammarAccess;
import org.eclipse.xtext.RuleCall;
+import org.eclipse.xtext.ide.editor.syntaxcoloring.IHighlightedPositionAcceptor;
+import org.eclipse.xtext.ide.editor.syntaxcoloring.ISemanticHighlightingCalculator;
import org.eclipse.xtext.nodemodel.INode;
import org.eclipse.xtext.resource.XtextResource;
import org.eclipse.xtext.ui.editor.syntaxcoloring.DefaultHighlightingConfiguration;
-import org.eclipse.xtext.ui.editor.syntaxcoloring.IHighlightedPositionAcceptor;
-import org.eclipse.xtext.ui.editor.syntaxcoloring.ISemanticHighlightingCalculator;
+import org.eclipse.xtext.util.CancelIndicator;
import org.eclipse.xtext.xbase.lib.Pair;
import com.google.inject.Inject;
@@ -21,25 +35,34 @@ public class BaseSemanticHighlighter implements ISemanticHighlightingCalculator
@Inject
BaseGrammarAccess grammar;
+ @Inject
+ BaseConverterService converterService;
+
@Override
- public void provideHighlightingFor(XtextResource resource, IHighlightedPositionAcceptor acceptor) {
+ public void provideHighlightingFor(XtextResource resource, IHighlightedPositionAcceptor acceptor, CancelIndicator cancelIndicator) {
if (resource == null || resource.getParseResult() == null)
return;
INode root = resource.getParseResult().getRootNode();
for (INode node : root.getAsTreeIterable()) {
-
- EObject obj = node.getGrammarElement();
- if (obj instanceof RuleCall) {
- if(((RuleCall) obj).getRule() == grammar.getCC_STRINGRule()) {
- detailCodeStringHighlight(node, acceptor);
- }
+ if(cancelIndicator.isCanceled())
+ break;
+
+ provideHighlightingFor(node, resource, acceptor);
+ }
+ }
+
+ protected void provideHighlightingFor(INode node, XtextResource resource, IHighlightedPositionAcceptor acceptor) {
+ EObject obj = node.getGrammarElement();
+ if (obj instanceof RuleCall) {
+ if(((RuleCall) obj).getRule() == grammar.getCC_STRINGRule()) {
+ ccStringHighlight(node, acceptor, converterService.getCC_StringConverter());
}
}
}
- protected void detailCodeStringHighlight(INode node, IHighlightedPositionAcceptor acceptor) {
- final String delim = CC_StringConverter.DELIM;
+ protected void ccStringHighlight(INode node, IHighlightedPositionAcceptor acceptor, CCStringConverter converter) {
+ final String delim = converter.getDelim();
if (node.getText() == null || node.getText().length() < delim.length() * 2)
return;
@@ -47,7 +70,7 @@ public class BaseSemanticHighlighter implements ISemanticHighlightingCalculator
acceptor.addPosition(node.getEndOffset() - delim.length(), delim.length(), DefaultHighlightingConfiguration.STRING_ID);
int offset = node.getOffset() + delim.length();
- List<Pair<Integer, Integer>> lineStartLength = new CCStringIndentation(CC_StringConverter.stripDelim(node.getText())).highlight();
+ List<Pair<Integer, Integer>> lineStartLength = new CCStringIndentation(converter.stripDelim(node.getText())).highlight();
for (Pair<Integer, Integer> offsetLength : lineStartLength) {
acceptor.addPosition(offset + offsetLength.getKey(), offsetLength.getValue(), BaseHighlightingConfig.HL_CCSTRING);
}
diff --git a/plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/converter/BaseConverterService.java b/plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/converter/BaseConverterService.java
index 2a7778e59..1400f15df 100644
--- a/plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/converter/BaseConverterService.java
+++ b/plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/converter/BaseConverterService.java
@@ -26,7 +26,7 @@ public class BaseConverterService extends DefaultTerminalConverters {
private TimeConverter timeConverter = new TimeConverter();
private LongConverter longConverter = new LongConverter();
private DoubleConverter doubleConverter = new DoubleConverter();
- private CC_StringConverter ccStringConverter = new CC_StringConverter();
+ private CCStringConverter ccStringConverter = new CCStringConverter("'''");
@Inject
private QualifiedNameValueConverter fqnConverter;
@@ -52,7 +52,8 @@ public class BaseConverterService extends DefaultTerminalConverters {
}
@ValueConverter(rule = "CC_STRING")
- public IValueConverter<String> getCC_StringConverter() {
+ public CCStringConverter getCC_StringConverter() {
return ccStringConverter;
}
+
}
diff --git a/plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/converter/CCStringConverter.java b/plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/converter/CCStringConverter.java
new file mode 100644
index 000000000..2a9476e87
--- /dev/null
+++ b/plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/converter/CCStringConverter.java
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * 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.common.converter;
+
+import org.eclipse.xtext.conversion.ValueConverterException;
+import org.eclipse.xtext.conversion.impl.AbstractLexerBasedConverter;
+import org.eclipse.xtext.nodemodel.INode;
+
+public class CCStringConverter extends AbstractLexerBasedConverter<String> {
+
+ static public String addDelim(final String text, String delim) {
+ if(CCStringIndentation.hasLineBreak(text)) {
+ final String lineEnding = CCStringIndentation.getLineEnding(text);
+ return delim + lineEnding + text + delim;
+ }
+ return delim + text + delim;
+ }
+
+ static public String stripDelim(String nodeText, String delim) {
+ if (nodeText.startsWith(delim) && nodeText.endsWith(delim)) {
+ return nodeText.substring(delim.length(), nodeText.length() - delim.length());
+ }
+
+ return nodeText;
+ }
+
+ private final String delim;
+
+ public CCStringConverter(String delim) {
+ this.delim = delim;
+ }
+
+ public String getDelim() {
+ return delim;
+ }
+
+ @Override
+ protected String toEscapedString(String value) {
+ return addDelim(value, delim);
+ }
+
+ public String toValue(String string, INode node) {
+ if (string == null)
+ return null;
+ try {
+ return new CCStringIndentation(stripDelim(string, delim)).removeEditorWhiteSpace();
+ } catch (IllegalArgumentException e) {
+ throw new ValueConverterException(e.getMessage(), node, e);
+ }
+ }
+
+ public String addDelim(String text) {
+ return addDelim(text, delim);
+ }
+
+ public String stripDelim(String text) {
+ return stripDelim(text, delim);
+ }
+}
diff --git a/plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/converter/CC_StringConverter.java b/plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/converter/CC_StringConverter.java
deleted file mode 100644
index 703a6a92d..000000000
--- a/plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/converter/CC_StringConverter.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.eclipse.etrice.core.common.converter;
-
-import org.eclipse.xtext.conversion.ValueConverterException;
-import org.eclipse.xtext.conversion.impl.AbstractLexerBasedConverter;
-import org.eclipse.xtext.nodemodel.INode;
-
-public class CC_StringConverter extends AbstractLexerBasedConverter<String> {
-
- static public String DELIM = "'''";
-
- static public String addDelim(final String text) {
- if(CCStringIndentation.hasLineBreak(text)) {
- final String lineEnding = CCStringIndentation.getLineEnding(text);
- return DELIM + lineEnding + text + DELIM;
- }
- return DELIM + text + DELIM;
- }
-
- static public String stripDelim(String nodeText) {
- if (nodeText.startsWith(DELIM) && nodeText.endsWith(DELIM)) {
- return nodeText.substring(DELIM.length(), nodeText.length() - DELIM.length());
- }
-
- return nodeText;
- }
-
- @Override
- protected String toEscapedString(String value) {
- return addDelim(value);
- }
-
- public String toValue(String string, INode node) {
- if (string == null)
- return null;
- try {
- return new CCStringIndentation(stripDelim(string)).removeEditorWhiteSpace();
- } catch (IllegalArgumentException e) {
- throw new ValueConverterException(e.getMessage(), node, e);
- }
- }
-}
diff --git a/plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/formatting2/CCStringReplacer.xtend b/plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/formatting2/CCStringReplacer.xtend
new file mode 100644
index 000000000..6f2ede0e9
--- /dev/null
+++ b/plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/formatting2/CCStringReplacer.xtend
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * 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.common.formatting2
+
+import org.eclipse.etrice.core.common.converter.CCStringConverter
+import org.eclipse.etrice.core.common.converter.CCStringIndentation
+import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor
+import org.eclipse.xtext.formatting2.ITextReplacerContext
+import org.eclipse.xtext.formatting2.internal.AbstractTextReplacer
+
+@FinalFieldsConstructor
+class CCStringReplacer extends AbstractTextReplacer {
+
+ val CCStringConverter converter
+
+ override createReplacements(ITextReplacerContext context) {
+ if (region.multiline) {
+ val ccIndent = new CCStringIndentation(converter.stripDelim(region.text.trim))
+ val endIndent = if(ccIndent.ignoreLast) context.indentationString else ''
+ val replacement = ccIndent.replaceEditorIndentation(context.getIndentationString(context.indentation + 1)) +
+ endIndent
+ context => [
+ addReplacement(region.replaceWith(converter.delim + replacement + converter.delim))
+ ]
+ }
+ return context
+ }
+}
diff --git a/plugins/org.eclipse.etrice.core.common/xtend-gen/org/eclipse/etrice/core/common/formatting2/CCStringReplacer.java b/plugins/org.eclipse.etrice.core.common/xtend-gen/org/eclipse/etrice/core/common/formatting2/CCStringReplacer.java
new file mode 100644
index 000000000..87dba2255
--- /dev/null
+++ b/plugins/org.eclipse.etrice.core.common/xtend-gen/org/eclipse/etrice/core/common/formatting2/CCStringReplacer.java
@@ -0,0 +1,70 @@
+/**
+ * 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.common.formatting2;
+
+import org.eclipse.etrice.core.common.converter.CCStringConverter;
+import org.eclipse.etrice.core.common.converter.CCStringIndentation;
+import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor;
+import org.eclipse.xtext.formatting2.IFormattableDocument;
+import org.eclipse.xtext.formatting2.ITextReplacerContext;
+import org.eclipse.xtext.formatting2.internal.AbstractTextReplacer;
+import org.eclipse.xtext.formatting2.regionaccess.ITextReplacement;
+import org.eclipse.xtext.formatting2.regionaccess.ITextSegment;
+import org.eclipse.xtext.xbase.lib.ObjectExtensions;
+import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
+
+@FinalFieldsConstructor
+@SuppressWarnings("all")
+public class CCStringReplacer extends AbstractTextReplacer {
+ private final CCStringConverter converter;
+
+ @Override
+ public ITextReplacerContext createReplacements(final ITextReplacerContext context) {
+ ITextSegment _region = this.getRegion();
+ boolean _isMultiline = _region.isMultiline();
+ if (_isMultiline) {
+ ITextSegment _region_1 = this.getRegion();
+ String _text = _region_1.getText();
+ String _trim = _text.trim();
+ String _stripDelim = this.converter.stripDelim(_trim);
+ final CCStringIndentation ccIndent = new CCStringIndentation(_stripDelim);
+ String _xifexpression = null;
+ boolean _isIgnoreLast = ccIndent.isIgnoreLast();
+ if (_isIgnoreLast) {
+ _xifexpression = context.getIndentationString();
+ } else {
+ _xifexpression = "";
+ }
+ final String endIndent = _xifexpression;
+ int _indentation = context.getIndentation();
+ int _plus = (_indentation + 1);
+ String _indentationString = context.getIndentationString(_plus);
+ String _replaceEditorIndentation = ccIndent.replaceEditorIndentation(_indentationString);
+ final String replacement = (_replaceEditorIndentation + endIndent);
+ final Procedure1<ITextReplacerContext> _function = (ITextReplacerContext it) -> {
+ ITextSegment _region_2 = this.getRegion();
+ String _delim = this.converter.getDelim();
+ String _plus_1 = (_delim + replacement);
+ String _delim_1 = this.converter.getDelim();
+ String _plus_2 = (_plus_1 + _delim_1);
+ ITextReplacement _replaceWith = _region_2.replaceWith(_plus_2);
+ it.addReplacement(_replaceWith);
+ };
+ ObjectExtensions.<ITextReplacerContext>operator_doubleArrow(context, _function);
+ }
+ return context;
+ }
+
+ public CCStringReplacer(final IFormattableDocument document, final ITextSegment region, final CCStringConverter converter) {
+ super(document, region);
+ this.converter = converter;
+ }
+}
diff --git a/plugins/org.eclipse.etrice.core.fsm.ui/xtend-gen/org/eclipse/etrice/core/fsm/ui/quickfix/FSMQuickfixProvider.java b/plugins/org.eclipse.etrice.core.fsm.ui/xtend-gen/org/eclipse/etrice/core/fsm/ui/quickfix/FSMQuickfixProvider.java
index d00af4618..9eec1beb4 100644
--- a/plugins/org.eclipse.etrice.core.fsm.ui/xtend-gen/org/eclipse/etrice/core/fsm/ui/quickfix/FSMQuickfixProvider.java
+++ b/plugins/org.eclipse.etrice.core.fsm.ui/xtend-gen/org/eclipse/etrice/core/fsm/ui/quickfix/FSMQuickfixProvider.java
@@ -4,28 +4,12 @@
package org.eclipse.etrice.core.fsm.ui.quickfix;
import com.google.inject.Inject;
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.etrice.core.common.converter.CC_StringConverter;
-import org.eclipse.etrice.core.fsm.fSM.DetailCode;
import org.eclipse.etrice.core.fsm.validation.FSMJavaValidator;
-import org.eclipse.xtext.formatting.ILineSeparatorInformation;
import org.eclipse.xtext.formatting.IWhitespaceInformationProvider;
-import org.eclipse.xtext.nodemodel.ICompositeNode;
-import org.eclipse.xtext.nodemodel.util.NodeModelUtils;
-import org.eclipse.xtext.ui.editor.model.IXtextDocument;
-import org.eclipse.xtext.ui.editor.model.edit.IModificationContext;
-import org.eclipse.xtext.ui.editor.model.edit.ISemanticModification;
import org.eclipse.xtext.ui.editor.quickfix.DefaultQuickfixProvider;
import org.eclipse.xtext.ui.editor.quickfix.Fix;
import org.eclipse.xtext.ui.editor.quickfix.IssueResolutionAcceptor;
import org.eclipse.xtext.validation.Issue;
-import org.eclipse.xtext.xbase.lib.Exceptions;
-import org.eclipse.xtext.xbase.lib.IterableExtensions;
-import org.eclipse.xtext.xbase.lib.ObjectExtensions;
-import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
/**
* Custom quickfixes.
@@ -39,28 +23,8 @@ public class FSMQuickfixProvider extends DefaultQuickfixProvider {
@Fix(FSMJavaValidator.PLAIN_STRING_DETAILCODE)
public void fixMultiLineDetailCode(final Issue issue, final IssueResolutionAcceptor acceptor) {
- final ISemanticModification _function = (EObject element, IModificationContext context) -> {
- final DetailCode dc = ((DetailCode) element);
- EList<String> _lines = dc.getLines();
- Resource _eResource = dc.eResource();
- URI _uRI = _eResource.getURI();
- ILineSeparatorInformation _lineSeparatorInformation = this.whitespaceProvider.getLineSeparatorInformation(_uRI);
- String _lineSeparator = _lineSeparatorInformation.getLineSeparator();
- final String ccString = IterableExtensions.join(_lines, _lineSeparator);
- ICompositeNode _findActualNodeFor = NodeModelUtils.findActualNodeFor(dc);
- final Procedure1<ICompositeNode> _function_1 = (ICompositeNode it) -> {
- try {
- IXtextDocument _xtextDocument = context.getXtextDocument();
- int _offset = it.getOffset();
- int _length = it.getLength();
- String _addDelim = CC_StringConverter.addDelim(ccString);
- _xtextDocument.replace(_offset, _length, _addDelim);
- } catch (Throwable _e) {
- throw Exceptions.sneakyThrow(_e);
- }
- };
- ObjectExtensions.<ICompositeNode>operator_doubleArrow(_findActualNodeFor, _function_1);
- };
- acceptor.accept(issue, "Convert to smart string", "", "correction_change.gif", _function);
+ throw new Error("Unresolved compilation problems:"
+ + "\nThe method or field CC_StringConverter is undefined"
+ + "\naddDelim cannot be resolved");
}
}
diff --git a/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/formatting2/FSMFormatter.xtend b/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/formatting2/FSMFormatter.xtend
index 95b05d019..fde21195a 100644
--- a/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/formatting2/FSMFormatter.xtend
+++ b/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/formatting2/FSMFormatter.xtend
@@ -14,9 +14,9 @@ package org.eclipse.etrice.core.fsm.formatting2
import com.google.inject.Inject
import org.eclipse.emf.ecore.EObject
-import org.eclipse.etrice.core.common.converter.CCStringIndentation
-import org.eclipse.etrice.core.common.converter.CC_StringConverter
+import org.eclipse.etrice.core.common.converter.BaseConverterService
import org.eclipse.etrice.core.common.formatting2.BaseFormatter
+import org.eclipse.etrice.core.common.formatting2.CCStringReplacer
import org.eclipse.etrice.core.fsm.fSM.DetailCode
import org.eclipse.etrice.core.fsm.fSM.ProtocolSemantics
import org.eclipse.etrice.core.fsm.fSM.State
@@ -25,10 +25,7 @@ import org.eclipse.etrice.core.fsm.fSM.Transition
import org.eclipse.etrice.core.fsm.fSM.Trigger
import org.eclipse.etrice.core.fsm.fSM.TriggeredTransition
import org.eclipse.etrice.core.fsm.services.FSMGrammarAccess
-import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor
import org.eclipse.xtext.formatting2.IFormattableDocument
-import org.eclipse.xtext.formatting2.ITextReplacerContext
-import org.eclipse.xtext.formatting2.internal.AbstractTextReplacer
import org.eclipse.xtext.formatting2.regionaccess.ISemanticRegion
class FSMFormatter extends BaseFormatter {
@@ -76,30 +73,14 @@ class FSMFormatter extends BaseFormatter {
rules.forEach[prependDefaultNewLines(document)]
}
- @FinalFieldsConstructor
- static class DetailCodeReplacer extends AbstractTextReplacer {
-
- override createReplacements(ITextReplacerContext context) {
- if (region.multiline) {
- val ccIndent = new CCStringIndentation(CC_StringConverter.stripDelim(region.text.trim))
- val endIndent = if(ccIndent.ignoreLast) context.indentationString else ''
- val replacement = ccIndent.replaceEditorIndentation(context.getIndentationString(context.indentation + 1)) + endIndent
- context => [
- addReplacement(region.replaceWith(CC_StringConverter.DELIM + replacement + CC_StringConverter.DELIM))
- ]
-
- }
-
- context
- }
-
- }
+ @Inject
+ BaseConverterService converterService
def dispatch void format(DetailCode detailcode, extension IFormattableDocument document) {
val ccRegion = detailcode.regionFor.assignment(detailCodeAccess.linesAssignment_0_1)
if(ccRegion !== null) {
detailcode.prepend[oneSpace]
- if(detailcode.multiline) document.addReplacer(new DetailCodeReplacer(document, ccRegion))
+ if(detailcode.multiline) document.addReplacer(new CCStringReplacer(document, ccRegion, converterService.CC_StringConverter))
} else {
detailcode.regionFor.assignments(detailCodeAccess.linesAssignment_1_1).forEach[prepend[newLine]]
}
diff --git a/plugins/org.eclipse.etrice.core.fsm/xtend-gen/org/eclipse/etrice/core/fsm/formatting2/FSMFormatter.java b/plugins/org.eclipse.etrice.core.fsm/xtend-gen/org/eclipse/etrice/core/fsm/formatting2/FSMFormatter.java
index 4e5f4abf4..50c0d6c8b 100644
--- a/plugins/org.eclipse.etrice.core.fsm/xtend-gen/org/eclipse/etrice/core/fsm/formatting2/FSMFormatter.java
+++ b/plugins/org.eclipse.etrice.core.fsm/xtend-gen/org/eclipse/etrice/core/fsm/formatting2/FSMFormatter.java
@@ -20,9 +20,10 @@ import org.eclipse.etrice.core.common.base.Annotation;
import org.eclipse.etrice.core.common.base.AnnotationType;
import org.eclipse.etrice.core.common.base.Documentation;
import org.eclipse.etrice.core.common.base.Import;
-import org.eclipse.etrice.core.common.converter.CCStringIndentation;
-import org.eclipse.etrice.core.common.converter.CC_StringConverter;
+import org.eclipse.etrice.core.common.converter.BaseConverterService;
+import org.eclipse.etrice.core.common.converter.CCStringConverter;
import org.eclipse.etrice.core.common.formatting2.BaseFormatter;
+import org.eclipse.etrice.core.common.formatting2.CCStringReplacer;
import org.eclipse.etrice.core.fsm.fSM.DetailCode;
import org.eclipse.etrice.core.fsm.fSM.ProtocolSemantics;
import org.eclipse.etrice.core.fsm.fSM.SemanticsRule;
@@ -32,70 +33,20 @@ import org.eclipse.etrice.core.fsm.fSM.Transition;
import org.eclipse.etrice.core.fsm.fSM.Trigger;
import org.eclipse.etrice.core.fsm.fSM.TriggeredTransition;
import org.eclipse.etrice.core.fsm.services.FSMGrammarAccess;
-import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor;
import org.eclipse.xtext.Assignment;
import org.eclipse.xtext.formatting2.IFormattableDocument;
import org.eclipse.xtext.formatting2.IHiddenRegionFormatter;
-import org.eclipse.xtext.formatting2.ITextReplacerContext;
-import org.eclipse.xtext.formatting2.internal.AbstractTextReplacer;
import org.eclipse.xtext.formatting2.regionaccess.IHiddenRegion;
import org.eclipse.xtext.formatting2.regionaccess.ISemanticRegion;
import org.eclipse.xtext.formatting2.regionaccess.ISemanticRegionsFinder;
-import org.eclipse.xtext.formatting2.regionaccess.ITextReplacement;
-import org.eclipse.xtext.formatting2.regionaccess.ITextSegment;
import org.eclipse.xtext.resource.XtextResource;
import org.eclipse.xtext.xbase.lib.Extension;
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 FSMFormatter extends BaseFormatter {
- @FinalFieldsConstructor
- public static class DetailCodeReplacer extends AbstractTextReplacer {
- @Override
- public ITextReplacerContext createReplacements(final ITextReplacerContext context) {
- ITextReplacerContext _xblockexpression = null;
- {
- ITextSegment _region = this.getRegion();
- boolean _isMultiline = _region.isMultiline();
- if (_isMultiline) {
- ITextSegment _region_1 = this.getRegion();
- String _text = _region_1.getText();
- String _trim = _text.trim();
- String _stripDelim = CC_StringConverter.stripDelim(_trim);
- final CCStringIndentation ccIndent = new CCStringIndentation(_stripDelim);
- String _xifexpression = null;
- boolean _isIgnoreLast = ccIndent.isIgnoreLast();
- if (_isIgnoreLast) {
- _xifexpression = context.getIndentationString();
- } else {
- _xifexpression = "";
- }
- final String endIndent = _xifexpression;
- int _indentation = context.getIndentation();
- int _plus = (_indentation + 1);
- String _indentationString = context.getIndentationString(_plus);
- String _replaceEditorIndentation = ccIndent.replaceEditorIndentation(_indentationString);
- final String replacement = (_replaceEditorIndentation + endIndent);
- final Procedure1<ITextReplacerContext> _function = (ITextReplacerContext it) -> {
- ITextSegment _region_2 = this.getRegion();
- ITextReplacement _replaceWith = _region_2.replaceWith(((CC_StringConverter.DELIM + replacement) + CC_StringConverter.DELIM));
- it.addReplacement(_replaceWith);
- };
- ObjectExtensions.<ITextReplacerContext>operator_doubleArrow(context, _function);
- }
- _xblockexpression = context;
- }
- return _xblockexpression;
- }
-
- public DetailCodeReplacer(final IFormattableDocument document, final ITextSegment region) {
- super(document, region);
- }
- }
-
@Inject
@Extension
private FSMGrammarAccess _fSMGrammarAccess;
@@ -234,6 +185,9 @@ public class FSMFormatter extends BaseFormatter {
_rules.forEach(_function);
}
+ @Inject
+ private BaseConverterService converterService;
+
protected void _format(final DetailCode detailcode, @Extension final IFormattableDocument document) {
ISemanticRegionsFinder _regionFor = this.textRegionExtensions.regionFor(detailcode);
FSMGrammarAccess.DetailCodeElements _detailCodeAccess = this._fSMGrammarAccess.getDetailCodeAccess();
@@ -246,8 +200,9 @@ public class FSMFormatter extends BaseFormatter {
document.<DetailCode>prepend(detailcode, _function);
boolean _isMultiline = this.textRegionExtensions.isMultiline(detailcode);
if (_isMultiline) {
- FSMFormatter.DetailCodeReplacer _detailCodeReplacer = new FSMFormatter.DetailCodeReplacer(document, ccRegion);
- document.addReplacer(_detailCodeReplacer);
+ CCStringConverter _cC_StringConverter = this.converterService.getCC_StringConverter();
+ CCStringReplacer _cCStringReplacer = new CCStringReplacer(document, ccRegion, _cC_StringConverter);
+ document.addReplacer(_cCStringReplacer);
}
} else {
ISemanticRegionsFinder _regionFor_1 = this.textRegionExtensions.regionFor(detailcode);
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 38348bd93..9c23fcfed 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
@@ -26,13 +26,13 @@ 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.ide.editor.syntaxcoloring.ISemanticHighlightingCalculator;
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.model.ITokenTypeToPartitionTypeMapper;
import org.eclipse.xtext.ui.editor.syntaxcoloring.IHighlightingConfiguration;
-import org.eclipse.xtext.ui.editor.syntaxcoloring.ISemanticHighlightingCalculator;
import com.google.inject.Binder;
import com.google.inject.Injector;
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 1f059031a..28d6f65cf 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
@@ -22,11 +22,10 @@ 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.ide.editor.syntaxcoloring.IHighlightedPositionAcceptor;
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;
/**
@@ -58,38 +57,34 @@ public class RoomSemanticHighlightingCalculator extends BaseSemanticHighlighter
return keywordPattern;
}
- // @Override
- public void provideHighlightingFor(XtextResource resource, IHighlightedPositionAcceptor acceptor) {
- super.provideHighlightingFor(resource, acceptor);
+ @Override
+ protected void provideHighlightingFor(INode node, XtextResource resource, IHighlightedPositionAcceptor acceptor) {
+ super.provideHighlightingFor(node, resource, acceptor);
- if (resource == null || resource.getParseResult() == null)
- return;
-
- INode root = resource.getParseResult().getRootNode();
- for (INode node : root.getAsTreeIterable()) {
- EObject obj = node.getGrammarElement();
- if (obj instanceof RuleCall) {
- RuleCall ruleCall = (RuleCall) obj;
- 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);
- }
+ EObject obj = node.getGrammarElement();
+ if (obj instanceof RuleCall) {
+ RuleCall ruleCall = (RuleCall) obj;
+ 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/src/org/eclipse/etrice/core/formatting/RoomFormatter.java b/plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/formatting/RoomFormatter.java
index 644148cb7..ce6140b6b 100644
--- a/plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/formatting/RoomFormatter.java
+++ b/plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/formatting/RoomFormatter.java
@@ -12,7 +12,6 @@
package org.eclipse.etrice.core.formatting;
-import org.eclipse.etrice.core.common.converter.CC_StringConverter;
import org.eclipse.xtext.Keyword;
import org.eclipse.xtext.formatting.impl.AbstractDeclarativeFormatter;
import org.eclipse.xtext.formatting.impl.FormattingConfig;
@@ -68,7 +67,7 @@ public class RoomFormatter extends AbstractDeclarativeFormatter {
}
for (Keyword k: f.findKeywords("do", "entry", "exit", "action", "cond", "usercode", "usercode1", "usercode2")) {
- c.setSpace(" ").between(k, f.findKeywords(CC_StringConverter.DELIM).get(0));
+ c.setSpace(" ").between(k, f.findKeywords("'''").get(0));
}
c.setLinewrap(2).around(f.getImportRule());
diff --git a/tests/org.eclipse.etrice.core.common.tests/src-gen/org/eclipse/etrice/core/common/DetailCodeParseTest.xtend b/tests/org.eclipse.etrice.core.common.tests/src/org/eclipse/etrice/core/common/tests/DetailCodeParseTest.xtend
index 5446f57c1..11db4fe0f 100644
--- a/tests/org.eclipse.etrice.core.common.tests/src-gen/org/eclipse/etrice/core/common/DetailCodeParseTest.xtend
+++ b/tests/org.eclipse.etrice.core.common.tests/src/org/eclipse/etrice/core/common/tests/DetailCodeParseTest.xtend
@@ -10,11 +10,11 @@
*
*******************************************************************************/
-package org.eclipse.etrice.core.common
+package org.eclipse.etrice.core.common.tests
import com.google.inject.Inject
+import org.eclipse.etrice.core.common.BaseTestInjectorProvider
import org.eclipse.etrice.core.common.converter.BaseConverterService
-import org.eclipse.etrice.core.common.converter.CC_StringConverter
import org.eclipse.xtext.junit4.InjectWith
import org.eclipse.xtext.junit4.XtextRunner
import org.eclipse.xtext.util.Strings
@@ -28,7 +28,7 @@ import static org.junit.Assert.*
class DetailCodeParseTest {
val NL = Strings.newLine
- val DELIM = CC_StringConverter.DELIM
+ val DELIM = "'''"
@Inject
BaseConverterService baseConverterService
diff --git a/tests/org.eclipse.etrice.core.common.tests/xtend-gen/org/eclipse/etrice/core/common/DetailCodeParseTest.java b/tests/org.eclipse.etrice.core.common.tests/xtend-gen/org/eclipse/etrice/core/common/tests/DetailCodeParseTest.java
index c1e083296..ee84db5b1 100644
--- a/tests/org.eclipse.etrice.core.common.tests/xtend-gen/org/eclipse/etrice/core/common/DetailCodeParseTest.java
+++ b/tests/org.eclipse.etrice.core.common.tests/xtend-gen/org/eclipse/etrice/core/common/tests/DetailCodeParseTest.java
@@ -8,14 +8,13 @@
* CONTRIBUTORS:
* Juergen Haug (initial contribution)
*/
-package org.eclipse.etrice.core.common;
+package org.eclipse.etrice.core.common.tests;
import com.google.inject.Inject;
import org.eclipse.etrice.core.common.BaseTestInjectorProvider;
import org.eclipse.etrice.core.common.converter.BaseConverterService;
-import org.eclipse.etrice.core.common.converter.CC_StringConverter;
+import org.eclipse.etrice.core.common.converter.CCStringConverter;
import org.eclipse.xtend2.lib.StringConcatenation;
-import org.eclipse.xtext.conversion.IValueConverter;
import org.eclipse.xtext.junit4.InjectWith;
import org.eclipse.xtext.junit4.XtextRunner;
import org.eclipse.xtext.util.Strings;
@@ -31,16 +30,16 @@ import org.junit.runner.RunWith;
public class DetailCodeParseTest {
private final String NL = Strings.newLine();
- private final String DELIM = CC_StringConverter.DELIM;
+ private final String DELIM = "\'\'\'";
@Inject
private BaseConverterService baseConverterService;
protected String toValue(final String withoutDelim) {
- IValueConverter<String> _cC_StringConverter = this.baseConverterService.getCC_StringConverter();
+ CCStringConverter _cC_StringConverter = this.baseConverterService.getCC_StringConverter();
String _value = _cC_StringConverter.toValue(withoutDelim, null);
final Procedure1<String> _function = (String convertedWithoutDelim) -> {
- IValueConverter<String> _cC_StringConverter_1 = this.baseConverterService.getCC_StringConverter();
+ CCStringConverter _cC_StringConverter_1 = this.baseConverterService.getCC_StringConverter();
final String convertedWithDelim = _cC_StringConverter_1.toValue(((this.DELIM + withoutDelim) + this.DELIM), null);
Assert.assertEquals(convertedWithoutDelim, convertedWithDelim);
};

Back to the top