diff options
author | Ed Willink | 2016-10-25 20:06:00 +0000 |
---|---|---|
committer | Ed Willink | 2016-10-30 11:38:55 +0000 |
commit | d0476b42c725da7c0571b03a137993b6dd0efdf4 (patch) | |
tree | 0947587d5fb0f6befb2e1d6910e73be4ee9dbf82 | |
parent | a0df6f39f412658c038f7fc0b52f8a4880f4d993 (diff) | |
download | org.eclipse.qvtd-d0476b42c725da7c0571b03a137993b6dd0efdf4.tar.gz org.eclipse.qvtd-d0476b42c725da7c0571b03a137993b6dd0efdf4.tar.xz org.eclipse.qvtd-d0476b42c725da7c0571b03a137993b6dd0efdf4.zip |
[500962] Use element rather than collection type for connections
24 files changed, 92 insertions, 99 deletions
diff --git a/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/java/QVTiCG2JavaVisitor.java b/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/java/QVTiCG2JavaVisitor.java index 63b6641b1..7c95484c3 100644 --- a/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/java/QVTiCG2JavaVisitor.java +++ b/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/java/QVTiCG2JavaVisitor.java @@ -1380,13 +1380,8 @@ public class QVTiCG2JavaVisitor extends CG2JavaVisitor<@NonNull QVTiCodeGenerato return false; } final String iteratorName = getSymbolName(null, "iterator"); - // CollectionTypeId abstractCollectionTypeId = (CollectionTypeId)initValue.getASTypeId(); - // assert abstractCollectionTypeId != null; - // TypeId abstractElementTypeId = abstractCollectionTypeId.getElementTypeId(); - // BoxedDescriptor abstractBoxedDescriptor = context.getBoxedDescriptor(abstractElementTypeId); - CollectionTypeId concreteCollectionTypeId = (CollectionTypeId)cgConnectionAssignment.getConnectionVariable().getASTypeId(); - assert concreteCollectionTypeId != null; - TypeId concreteElementTypeId = concreteCollectionTypeId.getElementTypeId(); + TypeId concreteElementTypeId = cgConnectionAssignment.getConnectionVariable().getASTypeId(); + assert concreteElementTypeId != null; BoxedDescriptor concreteBoxedDescriptor = context.getBoxedDescriptor(concreteElementTypeId); BoxedDescriptor abstractBoxedDescriptor = concreteBoxedDescriptor; if (!(initValue.getASTypeId() instanceof CollectionTypeId)) { diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/BasicNodeConnection.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/BasicNodeConnection.java index f2211de73..f9ab1e8de 100644 --- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/BasicNodeConnection.java +++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/BasicNodeConnection.java @@ -17,7 +17,6 @@ import java.util.Set; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.eclipse.ocl.pivot.CollectionType; -import org.eclipse.ocl.pivot.CompleteEnvironment; import org.eclipse.ocl.pivot.Type; import org.eclipse.ocl.pivot.ids.IdResolver; import org.eclipse.qvtd.compiler.internal.utilities.SymbolNameBuilder; @@ -126,11 +125,15 @@ public class BasicNodeConnection extends AbstractConnection<@NonNull Node> imple Type commonType = null; for (@NonNull Node node : getSources()) { Type nodeType = node.getCompleteClass().getPrimaryClass(); - // System.out.println(" nodeType " + nodeType); - CompleteEnvironment environment = idResolver.getEnvironment(); - if (!(nodeType instanceof CollectionType)) { // RealizedVariable accumulated on Connection - nodeType = isOrdered() ? environment.getOrderedSetType(nodeType, true, null, null) : environment.getSetType(nodeType, true, null, null); + if (nodeType instanceof CollectionType) { + nodeType = ((CollectionType)nodeType).getElementType(); // FIXME needed for composed source nodes + assert nodeType != null; } + // System.out.println(" nodeType " + nodeType); + // CompleteEnvironment environment = idResolver.getEnvironment(); + // if (!(nodeType instanceof CollectionType)) { // RealizedVariable accumulated on Connection + // nodeType = isOrdered() ? environment.getOrderedSetType(nodeType, true, null, null) : environment.getSetType(nodeType, true, null, null); + // } if (commonType == null) { commonType = nodeType; } @@ -180,7 +183,7 @@ public class BasicNodeConnection extends AbstractConnection<@NonNull Node> imple /** * Return true if this connections should be ordered since its source could be ordered. - */ + * private boolean isOrdered() { boolean isOrdered = false; for (@NonNull Node sourceNode1 : getSources()) { @@ -195,7 +198,7 @@ public class BasicNodeConnection extends AbstractConnection<@NonNull Node> imple } } return isOrdered; - } + } */ /* @Override public boolean isOutput() { diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvti/CyclicScheduledRegion2Mapping.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvti/CyclicScheduledRegion2Mapping.java index ea2d5c462..b1627d4bf 100644 --- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvti/CyclicScheduledRegion2Mapping.java +++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvti/CyclicScheduledRegion2Mapping.java @@ -121,13 +121,13 @@ public class CyclicScheduledRegion2Mapping extends AbstractScheduledRegion2Mappi // incoming2outgoing.put(incomingConnection, internallyPassedConnection); Type asType = getConnectionSourcesType(incomingConnection); String localName = getSafeName("«local" + (index > 0 ? Integer.toString(index) : "") + "»"); - localVariable = helper.createBufferStatement(localName, asType, true, null); + localVariable = helper.createBufferStatement(localName, true, asType, true, null); mapping.getOwnedStatements().add(localVariable); connection2variable.put(outgoingConnection, localVariable); // if ((asType instanceof CollectionType) && ((CollectionType)asType).isUnique()) { String newName = getSafeName("«new" + (index > 0 ? Integer.toString(index) : "") + "»"); - BufferStatement newVariable2 = newVariable = helper.createBufferStatement(newName, asType, true, null); + BufferStatement newVariable2 = newVariable = helper.createBufferStatement(newName, true, asType, true, null); mapping.getOwnedStatements().add(newVariable2); connection2variable.put(outgoingConnection, newVariable2); } diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvti/RootRegion2Mapping.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvti/RootRegion2Mapping.java index 5296de421..cfd33221c 100644 --- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvti/RootRegion2Mapping.java +++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvti/RootRegion2Mapping.java @@ -123,10 +123,10 @@ public class RootRegion2Mapping extends AbstractScheduledRegion2Mapping return helper.createVariableExp(allInstancesVariable); } - private @NonNull ConnectionVariable createRootConnectionVariable(@NonNull String name, @NonNull Type type, @Nullable OCLExpression initExpression) { + private @NonNull ConnectionVariable createRootConnectionVariable(@NonNull String name, boolean isStrict, @NonNull Type type, @Nullable OCLExpression initExpression) { // Type variableType = visitor.getEnvironmentFactory().getCompleteEnvironment().getSetType(node.getCompleteClass().getPrimaryClass(), true, null, null); // assert variableType != null; - BufferStatement variable = helper.createBufferStatement(getSafeName(name), type, true, initExpression); + BufferStatement variable = helper.createBufferStatement(getSafeName(name), isStrict, type, true, initExpression); mapping.getOwnedStatements().add(variable); // Variable oldVariable = node2variable.put(node, variable); // assert oldVariable == null; @@ -134,7 +134,7 @@ public class RootRegion2Mapping extends AbstractScheduledRegion2Mapping } private void createRootConnectionVariables() { - List<@NonNull NodeConnection> rootConnections = new ArrayList<@NonNull NodeConnection>(region.getRootConnections()); + List<@NonNull NodeConnection> rootConnections = new ArrayList<>(region.getRootConnections()); Collections.sort(rootConnections, NameUtil.NAMEABLE_COMPARATOR); for (@NonNull NodeConnection rootConnection : rootConnections) { Type commonType = getConnectionSourcesType(rootConnection); @@ -149,14 +149,10 @@ public class RootRegion2Mapping extends AbstractScheduledRegion2Mapping case 1: initExpression = getFilteredExpression(initExpression, (NavigableEdge) incomingEdges.get(0)); break; default: assert false; } - connection2variable.put(rootConnection, createRootConnectionVariable(name, commonType, initExpression)); - } - else if (commonType instanceof CollectionType) { - connection2variable.put(rootConnection, createRootConnectionVariable(name, commonType, null)); + connection2variable.put(rootConnection, createRootConnectionVariable(name, false, commonType, initExpression)); } else { - CollectionType setType = visitor.getEnvironmentFactory().getCompleteEnvironment().getSetType(commonType, true, null, null); - connection2variable.put(rootConnection, createRootConnectionVariable(name, setType, null)); + connection2variable.put(rootConnection, createRootConnectionVariable(name, false, commonType, null)); } } } diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/model/QVTimperative.ocl b/plugins/org.eclipse.qvtd.pivot.qvtimperative/model/QVTimperative.ocl index e3d7cb5e7..3ae699d0f 100644 --- a/plugins/org.eclipse.qvtd.pivot.qvtimperative/model/QVTimperative.ocl +++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/model/QVTimperative.ocl @@ -63,9 +63,9 @@ inv NoRealizedVariableNavigations: ownedExpression->closure(oclContents())->sele -- if mapping.isToMiddle then area = mapping else area.oclAsType(CoreDomain).isEnforceable endif context GuardParameterBinding -inv CheckedTypeIsNotConformant: isCheck implies let elementType = value.type.oclAsType(ocl::CollectionType).elementType in not elementType.conformsTo(boundVariable.type) -inv UncheckedTypeIsConformant: not isCheck implies let elementType = value.type.oclAsType(ocl::CollectionType).elementType in elementType.conformsTo(boundVariable.type) -inv CompatibleBinding: let elementType = value.type.oclAsType(ocl::CollectionType).elementType in elementType.conformsTo(boundVariable.type) or boundVariable.type.conformsTo(elementType) +inv CheckedTypeIsNotConformant: isCheck implies not value.type.conformsTo(boundVariable.type) +inv UncheckedTypeIsConformant: not isCheck implies value.type.conformsTo(boundVariable.type) +inv CompatibleBinding: let elementType = value.type in elementType.conformsTo(boundVariable.type) or boundVariable.type.conformsTo(elementType) context SimpleParameterBinding inv CheckedTypeIsNotConformant: isCheck implies not value.type.conformsTo(boundVariable.type) diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiEvaluationVisitor.java b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiEvaluationVisitor.java index 691a5fe23..109b542b4 100644 --- a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiEvaluationVisitor.java +++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiEvaluationVisitor.java @@ -91,6 +91,7 @@ public class QVTiEvaluationVisitor extends BasicEvaluationVisitor implements IQV Object targetValue = ClassUtil.nonNullState(executor.getValueOf(targetVariable)); Connection connectionCollection = (Connection) targetValue; Object values = valueExpression.accept(undecoratedVisitor); + assert values != null; // if (values instanceof Iterable<?>) { // CollectionValue valuesCollection = ValueUtil.asCollectionValue(values); // for (Object value : valuesCollection) { @@ -298,7 +299,7 @@ public class QVTiEvaluationVisitor extends BasicEvaluationVisitor implements IQV assert name != null; if (ownedExpression != null) { Object initValue = ownedExpression.accept(undecoratedVisitor); - connection = interval.createConnection(name, (CollectionTypeId) ownedExpression.getTypeId(), object.isIsStrict()); + connection = interval.createConnection(name, ownedExpression.getTypeId(), object.isIsStrict()); if (initValue != null) { for (Object value : (Iterable<?>)initValue) { assert value != null; @@ -307,7 +308,7 @@ public class QVTiEvaluationVisitor extends BasicEvaluationVisitor implements IQV } } else { - connection = interval.createConnection(name, (CollectionTypeId) object.getTypeId(), object.isIsStrict()); + connection = interval.createConnection(name, object.getTypeId(), object.isIsStrict()); } executor.replace(object, connection, false); return true; diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/QVTimperativeHelper.java b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/QVTimperativeHelper.java index 9bc3175e3..0c78126ff 100644 --- a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/QVTimperativeHelper.java +++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/utilities/QVTimperativeHelper.java @@ -12,7 +12,6 @@ package org.eclipse.qvtd.pivot.qvtimperative.utilities; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; -import org.eclipse.ocl.pivot.CollectionType; import org.eclipse.ocl.pivot.OCLExpression; import org.eclipse.ocl.pivot.Type; import org.eclipse.ocl.pivot.utilities.ClassUtil; @@ -65,11 +64,12 @@ public class QVTimperativeHelper extends QVTbaseHelper return mappingParameterBinding; } - public @NonNull BufferStatement createBufferStatement(@NonNull String name, @NonNull Type asType, boolean isRequired, @Nullable OCLExpression initExpression) { + public @NonNull BufferStatement createBufferStatement(@NonNull String name, boolean isStrict, @NonNull Type asType, boolean isRequired, @Nullable OCLExpression initExpression) { BufferStatement asVariable = QVTimperativeFactory.eINSTANCE.createBufferStatement(); asVariable.setName(name); asVariable.setType(asType); asVariable.setIsRequired(isRequired); + asVariable.setIsStrict(isStrict); asVariable.setOwnedExpression(initExpression); return asVariable; } @@ -103,8 +103,7 @@ public class QVTimperativeHelper extends QVTbaseHelper GuardParameterBinding mappingParameterBinding = QVTimperativeFactory.eINSTANCE.createGuardParameterBinding(); mappingParameterBinding.setBoundVariable(variable); mappingParameterBinding.setValue(value); - CollectionType collectionType = (CollectionType) value.getType(); - Type elementType = collectionType.getElementType(); + Type elementType = value.getType(); Type guardType = ClassUtil.nonNullState(variable.getType()); mappingParameterBinding.setIsCheck(!elementType.conformsTo(standardLibrary, guardType)); return mappingParameterBinding; diff --git a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/AbstractConnection.java b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/AbstractConnection.java index 0a7fce165..cd190bc70 100644 --- a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/AbstractConnection.java +++ b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/AbstractConnection.java @@ -15,14 +15,14 @@ import java.util.List; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; -import org.eclipse.ocl.pivot.ids.CollectionTypeId; +import org.eclipse.ocl.pivot.ids.TypeId; public abstract class AbstractConnection implements Connection { protected final boolean debugAppends = AbstractTransformer.APPENDS.isActive(); protected final @NonNull Interval interval; protected final @NonNull String name; - protected final @NonNull CollectionTypeId typeId; + protected final @NonNull TypeId typeId; /** * The consumers of each appended value. @@ -39,7 +39,7 @@ public abstract class AbstractConnection implements Connection */ private boolean isQueued = false; - protected AbstractConnection(@NonNull Interval interval, @NonNull String name, @NonNull CollectionTypeId typeId) { + protected AbstractConnection(@NonNull Interval interval, @NonNull String name, @NonNull TypeId typeId) { this.interval = interval; this.name = name; this.typeId = typeId; diff --git a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/AbstractInvocation.java b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/AbstractInvocation.java index 411abc355..e391c45a5 100644 --- a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/AbstractInvocation.java +++ b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/AbstractInvocation.java @@ -16,7 +16,7 @@ import java.util.List; import java.util.Set; import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.ocl.pivot.ids.CollectionTypeId; +import org.eclipse.ocl.pivot.ids.TypeId; import org.eclipse.qvtd.runtime.internal.evaluation.AbstractInvocationInternal; /** @@ -68,11 +68,11 @@ public abstract class AbstractInvocation extends AbstractInvocationInternal writeSlot.addSourceInternal(this); } - protected @NonNull Connection createConnection(@NonNull String name, @NonNull CollectionTypeId typeId, boolean isStrict) { + protected @NonNull Connection createConnection(@NonNull String name, @NonNull TypeId typeId, boolean isStrict) { return constructor.getInterval().createConnection(name, typeId, isStrict); } - protected Connection.@NonNull Incremental createIncrementalConnection(@NonNull String name, @NonNull CollectionTypeId typeId, boolean isStrict) { + protected Connection.@NonNull Incremental createIncrementalConnection(@NonNull String name, @NonNull TypeId typeId, boolean isStrict) { return constructor.getInterval().createIncrementalConnection(name, typeId, isStrict); } diff --git a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/Interval.java b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/Interval.java index 7792f5407..57b96cc18 100644 --- a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/Interval.java +++ b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/Interval.java @@ -11,7 +11,7 @@ package org.eclipse.qvtd.runtime.evaluation; import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.ocl.pivot.ids.CollectionTypeId; +import org.eclipse.ocl.pivot.ids.TypeId; import org.eclipse.ocl.pivot.utilities.Nameable; /** @@ -22,9 +22,9 @@ import org.eclipse.ocl.pivot.utilities.Nameable; */ public interface Interval extends ExecutionVisitable, Nameable { - @NonNull Connection createConnection(@NonNull String name, @NonNull CollectionTypeId typeId, boolean isStrict); + @NonNull Connection createConnection(@NonNull String name, @NonNull TypeId typeId, boolean isStrict); - Connection.@NonNull Incremental createIncrementalConnection(@NonNull String name, @NonNull CollectionTypeId typeId, boolean isStrict); + Connection.@NonNull Incremental createIncrementalConnection(@NonNull String name, @NonNull TypeId typeId, boolean isStrict); boolean flush(); diff --git a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/SimpleConnection.java b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/SimpleConnection.java index 962e54793..b53c7744b 100644 --- a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/SimpleConnection.java +++ b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/SimpleConnection.java @@ -11,7 +11,7 @@ package org.eclipse.qvtd.runtime.evaluation; import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.ocl.pivot.ids.CollectionTypeId; +import org.eclipse.ocl.pivot.ids.TypeId; import org.eclipse.qvtd.runtime.internal.evaluation.AbstractConnectionInternal; /** @@ -25,7 +25,7 @@ import org.eclipse.qvtd.runtime.internal.evaluation.AbstractConnectionInternal; */ public class SimpleConnection extends AbstractConnectionInternal { - public SimpleConnection(@NonNull Interval interval, @NonNull String name, @NonNull CollectionTypeId typeId) { + public SimpleConnection(@NonNull Interval interval, @NonNull String name, @NonNull TypeId typeId) { super(interval, name, typeId); } }
\ No newline at end of file diff --git a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/SimpleIncrementalConnection.java b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/SimpleIncrementalConnection.java index aa9196da9..c9bfb20d8 100644 --- a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/SimpleIncrementalConnection.java +++ b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/SimpleIncrementalConnection.java @@ -11,7 +11,7 @@ package org.eclipse.qvtd.runtime.evaluation; import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.ocl.pivot.ids.CollectionTypeId; +import org.eclipse.ocl.pivot.ids.TypeId; import org.eclipse.qvtd.runtime.internal.evaluation.IncrementalConnectionInternal; /** @@ -25,7 +25,7 @@ import org.eclipse.qvtd.runtime.internal.evaluation.IncrementalConnectionInterna */ public class SimpleIncrementalConnection extends IncrementalConnectionInternal { - public SimpleIncrementalConnection(@NonNull Interval interval, @NonNull String name, @NonNull CollectionTypeId typeId) { + public SimpleIncrementalConnection(@NonNull Interval interval, @NonNull String name, @NonNull TypeId typeId) { super(interval, name, typeId); } }
\ No newline at end of file diff --git a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/StrictConnection.java b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/StrictConnection.java index 0b1de4cc4..1a86ae7f0 100644 --- a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/StrictConnection.java +++ b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/StrictConnection.java @@ -11,7 +11,7 @@ package org.eclipse.qvtd.runtime.evaluation; import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.ocl.pivot.ids.CollectionTypeId; +import org.eclipse.ocl.pivot.ids.TypeId; import org.eclipse.qvtd.runtime.internal.evaluation.StrictConnectionInternal; /** @@ -23,7 +23,7 @@ import org.eclipse.qvtd.runtime.internal.evaluation.StrictConnectionInternal; */ public class StrictConnection extends StrictConnectionInternal { - public StrictConnection(@NonNull Interval interval, @NonNull String name, @NonNull CollectionTypeId typeId) { + public StrictConnection(@NonNull Interval interval, @NonNull String name, @NonNull TypeId typeId) { super(interval, name, typeId); } }
\ No newline at end of file diff --git a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/StrictIncrementalConnection.java b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/StrictIncrementalConnection.java index 971b1678e..9b2eafd17 100644 --- a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/StrictIncrementalConnection.java +++ b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/StrictIncrementalConnection.java @@ -11,7 +11,7 @@ package org.eclipse.qvtd.runtime.evaluation; import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.ocl.pivot.ids.CollectionTypeId; +import org.eclipse.ocl.pivot.ids.TypeId; import org.eclipse.qvtd.runtime.internal.evaluation.StrictIncrementalConnectionInternal; /** @@ -25,7 +25,7 @@ import org.eclipse.qvtd.runtime.internal.evaluation.StrictIncrementalConnectionI */ public class StrictIncrementalConnection extends StrictIncrementalConnectionInternal { - public StrictIncrementalConnection(@NonNull Interval interval, @NonNull String name, @NonNull CollectionTypeId typeId) { + public StrictIncrementalConnection(@NonNull Interval interval, @NonNull String name, @NonNull TypeId typeId) { super(interval, name, typeId); } }
\ No newline at end of file diff --git a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/AbstractConnectionInternal.java b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/AbstractConnectionInternal.java index 407e14342..ac67c953c 100644 --- a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/AbstractConnectionInternal.java +++ b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/AbstractConnectionInternal.java @@ -14,7 +14,7 @@ import java.util.ArrayList; import java.util.List; import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.ocl.pivot.ids.CollectionTypeId; +import org.eclipse.ocl.pivot.ids.TypeId; import org.eclipse.ocl.pivot.utilities.LabelUtil; import org.eclipse.qvtd.runtime.evaluation.AbstractConnection; import org.eclipse.qvtd.runtime.evaluation.AbstractTransformer; @@ -33,11 +33,11 @@ import org.eclipse.qvtd.runtime.evaluation.InvocationConstructor; public abstract class AbstractConnectionInternal extends AbstractConnection { /** - * THe values passed by the coonnection.. + * The values passed by the connection.. */ protected final @NonNull List<@NonNull Object> values = new ArrayList<>(); - protected AbstractConnectionInternal(@NonNull Interval interval, @NonNull String name, @NonNull CollectionTypeId typeId) { + protected AbstractConnectionInternal(@NonNull Interval interval, @NonNull String name, @NonNull TypeId typeId) { super(interval, name, typeId); } diff --git a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/AbstractIncrementalConnectionInternal.java b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/AbstractIncrementalConnectionInternal.java index 0afe7171b..f034b519b 100644 --- a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/AbstractIncrementalConnectionInternal.java +++ b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/AbstractIncrementalConnectionInternal.java @@ -17,7 +17,7 @@ import java.util.NoSuchElementException; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; -import org.eclipse.ocl.pivot.ids.CollectionTypeId; +import org.eclipse.ocl.pivot.ids.TypeId; import org.eclipse.ocl.pivot.utilities.LabelUtil; import org.eclipse.qvtd.runtime.evaluation.AbstractConnection; import org.eclipse.qvtd.runtime.evaluation.AbstractTransformer; @@ -55,7 +55,9 @@ public abstract class AbstractIncrementalConnectionInternal extends AbstractConn throw new NoSuchElementException(); } cursor = next(cursor+1); - return (T) valueAndConsumingInvocations.get(VALUE_INDEX); + @SuppressWarnings("unchecked") + T castValue = (T) valueAndConsumingInvocations.get(VALUE_INDEX); + return castValue; } private int next(int i) { @@ -91,7 +93,7 @@ public abstract class AbstractIncrementalConnectionInternal extends AbstractConn */ protected final @NonNull List<@Nullable List<@NonNull Object>> listOfValueAndConsumingInvocations = new ArrayList<>(); - protected AbstractIncrementalConnectionInternal(@NonNull Interval interval, @NonNull String name, @NonNull CollectionTypeId typeId) { + protected AbstractIncrementalConnectionInternal(@NonNull Interval interval, @NonNull String name, @NonNull TypeId typeId) { super(interval, name, typeId); } diff --git a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/AbstractIntervalInternal.java b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/AbstractIntervalInternal.java index 34f3e18ec..b5d3fa760 100644 --- a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/AbstractIntervalInternal.java +++ b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/AbstractIntervalInternal.java @@ -15,20 +15,20 @@ import java.util.List; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; -import org.eclipse.ocl.pivot.ids.CollectionTypeId; +import org.eclipse.ocl.pivot.ids.TypeId; import org.eclipse.qvtd.runtime.evaluation.AbstractConnection; import org.eclipse.qvtd.runtime.evaluation.AbstractTransformer; import org.eclipse.qvtd.runtime.evaluation.Connection; -import org.eclipse.qvtd.runtime.evaluation.StrictIncrementalConnection; import org.eclipse.qvtd.runtime.evaluation.ExecutionVisitor; import org.eclipse.qvtd.runtime.evaluation.Interval; import org.eclipse.qvtd.runtime.evaluation.Invocation; import org.eclipse.qvtd.runtime.evaluation.InvocationFailedException; import org.eclipse.qvtd.runtime.evaluation.InvocationManager; import org.eclipse.qvtd.runtime.evaluation.SimpleConnection; +import org.eclipse.qvtd.runtime.evaluation.SimpleIncrementalConnection; import org.eclipse.qvtd.runtime.evaluation.SlotState; import org.eclipse.qvtd.runtime.evaluation.StrictConnection; -import org.eclipse.qvtd.runtime.evaluation.SimpleIncrementalConnection; +import org.eclipse.qvtd.runtime.evaluation.StrictIncrementalConnection; /** * AbstractIntervalInternal provides the shared implementation of the intrusive blocked/waiting linked list functionality. @@ -100,7 +100,7 @@ public abstract class AbstractIntervalInternal implements Interval } @Override - public @NonNull Connection createConnection(@NonNull String name, @NonNull CollectionTypeId typeId, boolean isStrict) { + public @NonNull Connection createConnection(@NonNull String name, @NonNull TypeId typeId, boolean isStrict) { Connection connection; if (isStrict) { connection = new StrictConnection(this, name, typeId); @@ -113,7 +113,7 @@ public abstract class AbstractIntervalInternal implements Interval } @Override - public Connection.@NonNull Incremental createIncrementalConnection(@NonNull String name, @NonNull CollectionTypeId typeId, boolean isStrict) { + public Connection.@NonNull Incremental createIncrementalConnection(@NonNull String name, @NonNull TypeId typeId, boolean isStrict) { Connection.Incremental connection; if (isStrict) { connection = new StrictIncrementalConnection(this, name, typeId); diff --git a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/AbstractTransformerInternal.java b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/AbstractTransformerInternal.java index ba8d99690..775347860 100644 --- a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/AbstractTransformerInternal.java +++ b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/AbstractTransformerInternal.java @@ -528,7 +528,7 @@ public abstract class AbstractTransformerInternal extends AbstractModelManager i models[modelIndex].addRootObjects(eRootObjects); } - protected @NonNull Connection createConnection(@NonNull String name, @NonNull CollectionTypeId typeId, boolean isStrict) { + protected @NonNull Connection createConnection(@NonNull String name, @NonNull TypeId typeId, boolean isStrict) { return invocationManager.getRootInterval().createConnection(name, typeId, isStrict); } diff --git a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/IncrementalConnectionInternal.java b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/IncrementalConnectionInternal.java index 4a0544b1a..b847fd50f 100644 --- a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/IncrementalConnectionInternal.java +++ b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/IncrementalConnectionInternal.java @@ -14,7 +14,7 @@ import java.util.ArrayList; import java.util.List; import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.ocl.pivot.ids.CollectionTypeId; +import org.eclipse.ocl.pivot.ids.TypeId; import org.eclipse.ocl.pivot.utilities.LabelUtil; import org.eclipse.qvtd.runtime.evaluation.AbstractInvocation; import org.eclipse.qvtd.runtime.evaluation.AbstractTransformer; @@ -32,7 +32,7 @@ import org.eclipse.qvtd.runtime.evaluation.Invocation; */ public class IncrementalConnectionInternal extends AbstractIncrementalConnectionInternal { - protected IncrementalConnectionInternal(@NonNull Interval interval, @NonNull String name, @NonNull CollectionTypeId typeId) { + protected IncrementalConnectionInternal(@NonNull Interval interval, @NonNull String name, @NonNull TypeId typeId) { super(interval, name, typeId); } diff --git a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/StrictConnectionInternal.java b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/StrictConnectionInternal.java index 31e9fca17..131889241 100644 --- a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/StrictConnectionInternal.java +++ b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/StrictConnectionInternal.java @@ -14,7 +14,7 @@ import java.util.HashSet; import java.util.Set; import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.ocl.pivot.ids.CollectionTypeId; +import org.eclipse.ocl.pivot.ids.TypeId; import org.eclipse.ocl.pivot.utilities.LabelUtil; import org.eclipse.qvtd.runtime.evaluation.AbstractTransformer; import org.eclipse.qvtd.runtime.evaluation.Interval; @@ -33,7 +33,7 @@ public abstract class StrictConnectionInternal extends AbstractConnectionInterna */ private /*@LazyNonNull*/ Set<@NonNull Object> uniqueValues = null; - protected StrictConnectionInternal(@NonNull Interval interval, @NonNull String name, @NonNull CollectionTypeId typeId) { + protected StrictConnectionInternal(@NonNull Interval interval, @NonNull String name, @NonNull TypeId typeId) { super(interval, name, typeId); } diff --git a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/StrictIncrementalConnectionInternal.java b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/StrictIncrementalConnectionInternal.java index c46d387ea..9eb2eef62 100644 --- a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/StrictIncrementalConnectionInternal.java +++ b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/StrictIncrementalConnectionInternal.java @@ -16,7 +16,7 @@ import java.util.List; import java.util.Map; import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.ocl.pivot.ids.CollectionTypeId; +import org.eclipse.ocl.pivot.ids.TypeId; import org.eclipse.ocl.pivot.utilities.LabelUtil; import org.eclipse.qvtd.runtime.evaluation.AbstractInvocation; import org.eclipse.qvtd.runtime.evaluation.AbstractTransformer; @@ -37,7 +37,7 @@ public abstract class StrictIncrementalConnectionInternal extends AbstractIncrem */ private final @NonNull Map<@NonNull Object, @NonNull List<@NonNull Object>> uniqueValues2valueAndConsumingInvocations = new HashMap<>(); - protected StrictIncrementalConnectionInternal(@NonNull Interval interval, @NonNull String name, @NonNull CollectionTypeId typeId) { + protected StrictIncrementalConnectionInternal(@NonNull Interval interval, @NonNull String name, @NonNull TypeId typeId) { super(interval, name, typeId); } diff --git a/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/cs2as/QVTimperativeCSPostOrderVisitor.java b/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/cs2as/QVTimperativeCSPostOrderVisitor.java index 7a8e37c43..9d0cbf25e 100644 --- a/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/cs2as/QVTimperativeCSPostOrderVisitor.java +++ b/plugins/org.eclipse.qvtd.xtext.qvtimperative/src/org/eclipse/qvtd/xtext/qvtimperative/cs2as/QVTimperativeCSPostOrderVisitor.java @@ -131,7 +131,17 @@ public class QVTimperativeCSPostOrderVisitor extends AbstractQVTimperativeCSPost OCLExpression target = context.visitLeft2Right(OCLExpression.class, expression); asOutStatement.setOwnedExpression(target); if ((csElement.getOwnedType() == null) && (target != null)) { - context.setType(asOutStatement, target.getType(), target.isIsRequired(), target.getTypeValue()); + Type targetType = target.getType(); + boolean isRequired = target.isIsRequired(); + if (targetType instanceof CollectionType) { + CollectionType collectionType = (CollectionType)targetType; + targetType = collectionType.getElementType(); + isRequired = collectionType.isIsNullFree(); + } + // FIXME else => error + // FIXME !isRequired => error + // FIXME isStrict + context.setType(asOutStatement, targetType, isRequired, target.getTypeValue()); } } } diff --git a/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/KiamaRewrite/KiamaRewrite.qvti b/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/KiamaRewrite/KiamaRewrite.qvti index 5f33d2710..aea399553 100644 --- a/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/KiamaRewrite/KiamaRewrite.qvti +++ b/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/KiamaRewrite/KiamaRewrite.qvti @@ -11,10 +11,9 @@ map __root__ in KiamaRewrite_qvtp_qvtcas { var roots : Set(ocl::OclElement) := leftCS.rootObjects(); var _'«child-NumCS»' : Set(kiamacs::NumCS) := roots->selectByKind(kiamacs::NumCS); - buffer ji_NumCS1 : Set(kiamacs::NumCS) := _'«child-NumCS»'; + buffer ji_NumCS1 : kiamacs::NumCS := _'«child-NumCS»'; var _'«child-PlusCS»' : Set(kiamacs::PlusCS) := roots->selectByKind(kiamacs::PlusCS); - buffer ji_PlusCS1 : Set(kiamacs::PlusCS) := _'«child-PlusCS»'; - buffer ji_PlusCS_31 : Set(kiamacs::PlusCS) := _'«child-PlusCS»'; + buffer ji_PlusCS1 : kiamacs::PlusCS := _'«child-PlusCS»'; var _'«child-TopCS»' : Set(kiamacs::TopCS) := roots->selectByKind(kiamacs::TopCS); var ji_TopCS1 : Set(kiamacs::TopCS) := _'«child-TopCS»'; for loop0 : kiamacs::TopCS in ji_TopCS1 { @@ -26,11 +25,10 @@ map __root__ in KiamaRewrite_qvtp_qvtcas call r_TopCS_node { ji_NumCS appendsTo ji_NumCS1; ji_PlusCS appendsTo ji_PlusCS1; - ji_PlusCS_3 appendsTo ji_PlusCS_31; _'«parent»' iterates loop0; } } - for loop0 : kiamacs::PlusCS in ji_PlusCS_31 { + for loop0 : kiamacs::PlusCS in ji_PlusCS1 { call r__PlusCS { ji_NumCS appendsTo ji_NumCS1; ji_PlusCS appendsTo ji_PlusCS1; @@ -192,8 +190,8 @@ map m_TopCS_ast_node in KiamaRewrite_qvtp_qvtcas map r_PlusCS_left in KiamaRewrite_qvtp_qvtcas { - append ji_PlusCS : Set(kiamacs::PlusCS); - append ji_NumCS : Set(kiamacs::NumCS); + append ji_PlusCS : kiamacs::PlusCS; + append ji_NumCS : kiamacs::NumCS; in:leftCS _'«parent»' : PlusCS; var allChildren : Set(kiamacs::NodeCS) := _'«parent»'.left.oclAsSet(); var _'«child-PlusCS»' : Set(kiamacs::PlusCS) := allChildren->selectByKind(kiamacs::PlusCS); @@ -211,8 +209,8 @@ map r_PlusCS_left in KiamaRewrite_qvtp_qvtcas map r_PlusCS_right in KiamaRewrite_qvtp_qvtcas { - append ji_PlusCS : Set(kiamacs::PlusCS); - append ji_NumCS : Set(kiamacs::NumCS); + append ji_PlusCS : kiamacs::PlusCS; + append ji_NumCS : kiamacs::NumCS; in:leftCS _'«parent»' : PlusCS; var allChildren : Set(kiamacs::NodeCS) := _'«parent»'.right.oclAsSet(); var _'«child-PlusCS»' : Set(kiamacs::PlusCS) := allChildren->selectByKind(kiamacs::PlusCS); @@ -230,9 +228,9 @@ map r_PlusCS_right in KiamaRewrite_qvtp_qvtcas map r_TopCS_node in KiamaRewrite_qvtp_qvtcas { - append ji_PlusCS : Set(kiamacs::PlusCS); - append ji_PlusCS_3 : Set(kiamacs::PlusCS); - append ji_NumCS : Set(kiamacs::NumCS); + append ji_PlusCS : kiamacs::PlusCS; + append ji_PlusCS_3 : kiamacs::PlusCS; + append ji_NumCS : kiamacs::NumCS; guard:leftCS _'«parent»' : TopCS; var allChildren : Set(kiamacs::NodeCS) := _'«parent»'.node.oclAsSet(); var _'«child-PlusCS»' : Set(kiamacs::PlusCS) := allChildren->selectByKind(kiamacs::PlusCS); @@ -244,28 +242,17 @@ map r_TopCS_node in KiamaRewrite_qvtp_qvtcas strict map r__PlusCS in KiamaRewrite_qvtp_qvtcas { - append ji_PlusCS : Set(kiamacs::PlusCS); - append ji_NumCS : Set(kiamacs::NumCS); + append ji_PlusCS : kiamacs::PlusCS; + append ji_NumCS : kiamacs::NumCS; guard:leftCS _'«head»' : PlusCS; - buffer _'«local»' : Set(kiamacs::PlusCS); - buffer _'«new»' : Set(kiamacs::PlusCS); call r_PlusCS_left { ji_NumCS appendsTo ji_NumCS; - ji_PlusCS appendsTo _'«local»'; + ji_PlusCS appendsTo ji_PlusCS; _'«parent»' uses _'«head»'; } call r_PlusCS_right { ji_NumCS appendsTo ji_NumCS; - ji_PlusCS appendsTo _'«local»'; + ji_PlusCS appendsTo ji_PlusCS; _'«parent»' uses _'«head»'; } - add _'«new»' += _'«local»'->excludingAll(ji_PlusCS); - add ji_PlusCS += _'«new»'; - for loop0 : kiamacs::PlusCS in _'«new»' { - call r__PlusCS { - ji_NumCS appendsTo ji_NumCS; - ji_PlusCS appendsTo ji_PlusCS; - _'«head»' iterates loop0; - } - } }
\ No newline at end of file diff --git a/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/Tree2TallTree/Tree2TallTreeInstall.qvti b/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/Tree2TallTree/Tree2TallTreeInstall.qvti index f4e53f6de..e20da977a 100644 --- a/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/Tree2TallTree/Tree2TallTreeInstall.qvti +++ b/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/Tree2TallTree/Tree2TallTreeInstall.qvti @@ -10,7 +10,7 @@ transformation Tree2TallTreeInstall { map __root__ in Tree2TallTreeInstall { buffer nodes := tree.objectsOfKind(Node)->sortedBy(name); - buffer node2tallNodes : Sequence(tree2talltree::Node2TallNode); + buffer node2tallNodes : tree2talltree::Node2TallNode; install Node2MiddleNode { node consumes nodes; node2tallNodes appendsTo node2tallNodes; @@ -25,7 +25,7 @@ map __root__ in Tree2TallTreeInstall { map Node2MiddleNode in Tree2TallTreeInstall { guard:tree node : Node; - append node2tallNodes : Sequence(tree2talltree::Node2TallNode); + append node2tallNodes : tree2talltree::Node2TallNode; new:tree2talltree node2tallNode : Node2TallNode; set node2tallNode.node := node; set node2tallNode.name := node.name; |