From eead6b73fbfddd3e7ed7936b91bb0d293ef85d9a Mon Sep 17 00:00:00 2001 From: Henrik Rentz-Reichert Date: Mon, 25 Nov 2019 13:39:00 +0100 Subject: Bug 545524 - [c.gen] Translated enums are generated multi line don't replace enums behind // Change-Id: I8d3e6b912d0c7975afaa2fbafbd4de7dc69c9245 --- .../generator/base/DetailCodeTranslator.java | 46 ++++++++++++++++------ 1 file 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 enumClasses) { + return Arrays.stream(text.split("\n")) // + .map(line -> replaceEnums(line, enumClasses)) // + .collect(Collectors.joining("\n")); + } + + private String replaceEnums(String line, Set 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 args) { -- cgit v1.2.3