Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenrik Rentz-Reichert2019-11-25 12:39:00 +0000
committerHenrik Rentz-Reichert2019-11-25 12:39:00 +0000
commiteead6b73fbfddd3e7ed7936b91bb0d293ef85d9a (patch)
tree4656375223a60b95d34466296ce74a85b1d48cc0
parent575610044f25e682bdac0554831c1ba005fa8fd6 (diff)
downloadorg.eclipse.etrice-eead6b73fbfddd3e7ed7936b91bb0d293ef85d9a.tar.gz
org.eclipse.etrice-eead6b73fbfddd3e7ed7936b91bb0d293ef85d9a.tar.xz
org.eclipse.etrice-eead6b73fbfddd3e7ed7936b91bb0d293ef85d9a.zip
Bug 545524 - [c.gen] Translated enums are generated multi line
don't replace enums behind // Change-Id: I8d3e6b912d0c7975afaa2fbafbd4de7dc69c9245
-rw-r--r--plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/base/DetailCodeTranslator.java46
1 files changed, 33 insertions, 13 deletions
diff --git a/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/base/DetailCodeTranslator.java b/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/base/DetailCodeTranslator.java
index f59a39238..c34a28a35 100644
--- a/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/base/DetailCodeTranslator.java
+++ b/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/base/DetailCodeTranslator.java
@@ -15,9 +15,11 @@
package org.eclipse.etrice.generator.base;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
+import java.util.stream.Collectors;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.etrice.core.fsm.fSM.AbstractInterfaceItem;
@@ -255,7 +257,6 @@ public class DetailCodeTranslator extends FSMDetailCodeTranslator {
return text;
ITranslationProvider prov = (ITranslationProvider) provider;
-
if (prov.translateEnums()) {
RoomCrossReferencer crossReferencer = new RoomCrossReferencer();
@@ -270,22 +271,41 @@ public class DetailCodeTranslator extends FSMDetailCodeTranslator {
else if (container instanceof ProtocolClass)
enumClasses = crossReferencer.getReferencedEnumClasses((ProtocolClass)container);
- if (enumClasses!=null) {
- for (EnumerationType et : enumClasses) {
- for (EnumLiteral lit : et.getLiterals()) {
- String pattern = et.getName()+"."+lit.getName();
- if (text.contains(pattern)) {
- String replacement = prov.getEnumText(lit);
- text = text.replace(pattern, replacement);
- }
- }
- }
- }
- return text;
+ return replaceAllEnums(text, enumClasses);
}
else
return text;
}
+
+ private String replaceAllEnums(String text, Set<EnumerationType> enumClasses) {
+ return Arrays.stream(text.split("\n")) //
+ .map(line -> replaceEnums(line, enumClasses)) //
+ .collect(Collectors.joining("\n"));
+ }
+
+ private String replaceEnums(String line, Set<EnumerationType> enumClasses) {
+ // only do replacements before // (iff)
+ int pos = line.indexOf("//");
+ String input = pos<0 ? line : line.substring(0, pos);
+
+ ITranslationProvider prov = (ITranslationProvider) provider;
+
+ for (EnumerationType et : enumClasses) {
+ for (EnumLiteral lit : et.getLiterals()) {
+ String pattern = et.getName()+"."+lit.getName();
+ if (input.contains(pattern)) {
+ String replacement = prov.getEnumText(lit);
+ input = input.replace(pattern, replacement);
+ }
+ }
+ }
+
+ if (pos>=0) {
+ input += line.substring(pos);
+ }
+
+ return input;
+ }
@Override
protected boolean argsMatching(EObject amsg, ArrayList<String> args) {

Back to the top