diff options
author | Henrik Rentz-Reichert | 2019-11-25 14:44:15 +0000 |
---|---|---|
committer | Gerrit Code Review @ Eclipse.org | 2019-11-25 14:44:15 +0000 |
commit | d9c23deb55a485355b1e3f728235e7dffa0bb465 (patch) | |
tree | b0d6630f33a2df95f817b7134cb85efbfdfce9ce /plugins | |
parent | 4d8f6213573792f201e205032469015d72b155d6 (diff) | |
parent | eead6b73fbfddd3e7ed7936b91bb0d293ef85d9a (diff) | |
download | org.eclipse.etrice-d9c23deb55a485355b1e3f728235e7dffa0bb465.tar.gz org.eclipse.etrice-d9c23deb55a485355b1e3f728235e7dffa0bb465.tar.xz org.eclipse.etrice-d9c23deb55a485355b1e3f728235e7dffa0bb465.zip |
Merge "Bug 545524 - [c.gen] Translated enums are generated multi line"
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/base/DetailCodeTranslator.java | 46 |
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) { |