Commit 5ef626b7 authored by Martti Käärik's avatar Martti Käärik
Browse files

Don't re-declare data uses (we use a map, so only one per element) + use...

Don't re-declare data uses (we use a map, so only one per element) + use instance/Variable names for data use variables (informative) + declare member/item data uses in initializer block (because those are reused) + unmapped special value rendering.
parent be9b5196
Loading
Loading
Loading
Loading
+46 −7
Original line number Diff line number Diff line
@@ -6,7 +6,6 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@@ -16,16 +15,15 @@ import java.util.stream.Collectors;

import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.xtext.nodemodel.ICompositeNode;
import org.eclipse.xtext.nodemodel.util.NodeModelUtils;
import org.eclipse.xtext.resource.XtextResource;
import org.eclipse.xtext.serializer.impl.Serializer;
import org.etsi.mts.tdl.Action;
import org.etsi.mts.tdl.ActionBehaviour;
import org.etsi.mts.tdl.ActionReference;
import org.etsi.mts.tdl.AlternativeBehaviour;
import org.etsi.mts.tdl.Annotation;
import org.etsi.mts.tdl.AnyValueOrOmit;
import org.etsi.mts.tdl.Assertion;
import org.etsi.mts.tdl.Assignment;
import org.etsi.mts.tdl.AtomicBehaviour;
@@ -34,6 +32,7 @@ import org.etsi.mts.tdl.Block;
import org.etsi.mts.tdl.BoundedLoopBehaviour;
import org.etsi.mts.tdl.Break;
import org.etsi.mts.tdl.CastDataUse;
import org.etsi.mts.tdl.CollectionDataInstance;
import org.etsi.mts.tdl.CollectionDataType;
import org.etsi.mts.tdl.CombinedBehaviour;
import org.etsi.mts.tdl.ComponentInstance;
@@ -66,6 +65,7 @@ import org.etsi.mts.tdl.MemberAssignment;
import org.etsi.mts.tdl.MemberReference;
import org.etsi.mts.tdl.Message;
import org.etsi.mts.tdl.NamedElement;
import org.etsi.mts.tdl.OmitValue;
import org.etsi.mts.tdl.OptionalBehaviour;
import org.etsi.mts.tdl.Package;
import org.etsi.mts.tdl.PackageableElement;
@@ -1916,16 +1916,38 @@ public class JUnitTestGenerator extends Renderer {
	private void declareDataUse(EObject e, final Map<DataUse, String> dataUseVariables, String prefix) {

		if (e instanceof VariableUse) {
			if (dataUseVariables.containsKey(e))
				return;
			dataUseVariables.put((DataUse) e, getElementName(((VariableUse) e).getVariable()));

		} else if (e instanceof DataUse) {
			DataUse d = (DataUse) e;
			if (dataUseVariables.containsKey(d))
				return;
			
			String varName = getElementName(d);
			if (varName == null)
				varName = "";
			else
				varName += "_";
			varName += prefix + "datause_" + (dataUseVariables.size() + 1);
			
			DataInstance inst = null;
			if (d instanceof DataElementUse) {
				NamedElement de = ((DataElementUse) d).getDataElement();
				if (de instanceof DataInstance) {
					inst = (DataInstance) de;
					varName = getElementName(inst);
				}
			} else if (d instanceof VariableUse) {
				varName = getElementName(((VariableUse)d).getVariable());
			} else if (d instanceof DataInstanceUse) {
				inst = ((DataInstanceUse)d).getDataInstance();
				varName = getElementName(inst);
			} else
				varName += "datause";
			
			varName = prefix + varName + "_" + (dataUseVariables.size() + 1);
			
			DataType type = null;
			if (e instanceof CastDataUse)
				type = d.resolveBaseDataType();
@@ -1990,6 +2012,10 @@ public class JUnitTestGenerator extends Renderer {
			}

			dataUseVariables.put(d, varName);
			
			if (inst instanceof StructuredDataInstance || inst instanceof CollectionDataInstance) {
				declareDataUses(inst, dataUseVariables, varName);
			}
		}

	}
@@ -2015,8 +2041,6 @@ public class JUnitTestGenerator extends Renderer {

		if (d instanceof TimeLabelUse)
			return;
		if (d instanceof SpecialValueUse)
			return;
		if (d instanceof VariableUse)
			return;

@@ -2174,7 +2198,22 @@ public class JUnitTestGenerator extends Renderer {
			}

		} else if (d instanceof SpecialValueUse) {
			String anyKind = "AnyValue";
			anyKind = null; // Defaults to "AnyValue";
			if (d instanceof AnyValueOrOmit)
				anyKind = "AnyValueOrOmit";
			else if (d instanceof OmitValue)
				anyKind = "OmitValue";
			if (isUnmapped()) {
				if (anyKind != null)
					append(ref + " = new " + CORE_PACKAGE + ".ValueImpl(" + CORE_PACKAGE + ".SpecialValue.AnyValue)");
				else
					append("null");
				line(";");
			} else {
				// XXX
				append("null");
			}

		} else if (d instanceof LiteralValueUse) {
			if (isUnmapped())