Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEd Willink2016-10-29 08:37:02 +0000
committerEd Willink2016-10-29 17:59:23 +0000
commit5ee1077438aebc8560d8f2d421a142aca5ddbac5 (patch)
tree0e7ee2cb043be664042f50566085a778aa2b2b46
parent454a9a2c25dd624b72fc080619499533446800cf (diff)
downloadorg.eclipse.qvtd-5ee1077438aebc8560d8f2d421a142aca5ddbac5.tar.gz
org.eclipse.qvtd-5ee1077438aebc8560d8f2d421a142aca5ddbac5.tar.xz
org.eclipse.qvtd-5ee1077438aebc8560d8f2d421a142aca5ddbac5.zip
[506716] Fixup without obsolete schedule model content
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/BasicMappingRegion.java33
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/ClassDatumAnalysis.java46
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/MappingRegion.java5
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/MergedMappingRegion.java21
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/MicroMappingRegion.java6
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/MultiRegion.java6
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/QVTp2QVTg.java355
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/QVTp2QVTs.java28
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/RootScheduledRegion.java25
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/SchedulerConstants.java27
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/impl/NodeImpl.java2
-rw-r--r--plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvti/RootRegion2Mapping.java2
-rw-r--r--plugins/org.eclipse.qvtd.pivot.schedule/.classpath1
-rw-r--r--plugins/org.eclipse.qvtd.pivot.schedule/emf-gen/org/eclipse/qvtd/pivot/schedule/MappingAction.java4
-rw-r--r--plugins/org.eclipse.qvtd.pivot.schedule/emf-gen/org/eclipse/qvtd/pivot/schedule/impl/MappingActionImpl.java5
15 files changed, 255 insertions, 311 deletions
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/BasicMappingRegion.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/BasicMappingRegion.java
index 0edc60a65..42bd6ec8a 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/BasicMappingRegion.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/BasicMappingRegion.java
@@ -44,25 +44,22 @@ import org.eclipse.qvtd.pivot.qvtcore.Mapping;
import org.eclipse.qvtd.pivot.qvtcore.NavigationAssignment;
import org.eclipse.qvtd.pivot.qvtcore.RealizedVariable;
import org.eclipse.qvtd.pivot.qvtcore.utilities.QVTcoreUtil;
-import org.eclipse.qvtd.pivot.schedule.AbstractAction;
-import org.eclipse.qvtd.pivot.schedule.ClassDatum;
-import org.eclipse.qvtd.pivot.schedule.MappingAction;
/**
* A BasicMappingRegion provides the initial QVTs node-edge graph representation of a QVTp mapping.
*/
public class BasicMappingRegion extends AbstractMappingRegion
{
- public static @NonNull BasicMappingRegion createMappingRegion(@NonNull MultiRegion multiRegion, @NonNull MappingAction mappingAction) {
- BasicMappingRegion mappingRegion = new BasicMappingRegion(multiRegion, mappingAction);
+ public static @NonNull BasicMappingRegion createMappingRegion(@NonNull MultiRegion multiRegion, @NonNull Mapping mapping) {
+ BasicMappingRegion mappingRegion = new BasicMappingRegion(multiRegion, mapping);
mappingRegion.initialize();
return mappingRegion;
}
/**
- * The analyzed action.
+ * The analyzed mapping.
*/
- private final @NonNull MappingAction mappingAction;
+ private final @NonNull Mapping mapping;
/**
* Predicates that are too complex to analyze. i.e. more than a comparison of a bound variable wrt
@@ -97,10 +94,9 @@ public class BasicMappingRegion extends AbstractMappingRegion
*/
private /*@LazyNonNull*/ List<@NonNull Node> dependencyHeadNodes = null;
- private BasicMappingRegion(@NonNull MultiRegion multiRegion, @NonNull MappingAction mappingAction) {
+ private BasicMappingRegion(@NonNull MultiRegion multiRegion, @NonNull Mapping mapping) {
super(multiRegion);
- this.mappingAction = mappingAction;
- Mapping mapping = mappingAction.getMapping();
+ this.mapping = mapping;
assert mapping != null;
//
guardPatterns.add(ClassUtil.nonNull(mapping.getGuardPattern()));
@@ -357,12 +353,12 @@ public class BasicMappingRegion extends AbstractMappingRegion
}
public @NonNull Mapping getMapping() {
- return ClassUtil.nonNullState(mappingAction.getMapping());
+ return mapping;
}
@Override
- public @NonNull Iterable<@NonNull MappingAction> getMappingActions() {
- return Collections.singletonList(mappingAction);
+ public @NonNull Iterable<@NonNull Mapping> getMappings() {
+ return Collections.singletonList(mapping);
}
@Override
@@ -519,10 +515,8 @@ public class BasicMappingRegion extends AbstractMappingRegion
for (@NonNull Node newNode : getNewNodes()) {
ClassDatumAnalysis classDatumAnalysis = newNode.getClassDatumAnalysis();
classDatumAnalysis.addProduction(this, newNode);
- ClassDatum classDatum = classDatumAnalysis.getClassDatum();
- for (@SuppressWarnings("null")@NonNull AbstractAction consumingAction : classDatum.getRequiredBy()) {
- MappingRegion consumingRegion = multiRegion.getMappingRegion(consumingAction);
- assert consumingRegion != null;
+ for (@NonNull Mapping consumingMapping : classDatumAnalysis.getRequiredBy()) {
+ MappingRegion consumingRegion = multiRegion.getMappingRegion(consumingMapping);
for (@NonNull Node consumingNode : consumingRegion.getOldNodes()) {
if (consumingNode.getCompleteClass() == classDatumAnalysis.getCompleteClass()) { // FIXME inheritance
classDatumAnalysis.addConsumption(consumingRegion, consumingNode);
@@ -533,9 +527,8 @@ public class BasicMappingRegion extends AbstractMappingRegion
for (@NonNull Node predicatedNode : getOldNodes()) {
ClassDatumAnalysis classDatumAnalysis = predicatedNode.getClassDatumAnalysis();
classDatumAnalysis.addConsumption(this, predicatedNode);
- ClassDatum classDatum = classDatumAnalysis.getClassDatum();
- for (@SuppressWarnings("null")@NonNull AbstractAction introducingAction : classDatum.getProducedBy()) {
- MappingRegion producingRegion = multiRegion.getMappingRegion(introducingAction);
+ for (@NonNull Mapping producingMapping : classDatumAnalysis.getProducedBy()) {
+ MappingRegion producingRegion = multiRegion.getMappingRegion(producingMapping);
assert producingRegion != null;
for (@NonNull Node newNode : producingRegion.getNewNodes()) {
if (newNode.getCompleteClass() == classDatumAnalysis.getCompleteClass()) { // FIXME inheritance
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/ClassDatumAnalysis.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/ClassDatumAnalysis.java
index 906334b6f..00804d97c 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/ClassDatumAnalysis.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/ClassDatumAnalysis.java
@@ -30,8 +30,10 @@ import org.eclipse.ocl.pivot.utilities.ClassUtil;
import org.eclipse.ocl.pivot.utilities.EnvironmentFactory;
import org.eclipse.ocl.pivot.utilities.FeatureFilter;
import org.eclipse.qvtd.pivot.qvtbase.TypedModel;
+import org.eclipse.qvtd.pivot.qvtcore.Mapping;
import org.eclipse.qvtd.pivot.qvtcore.analysis.DomainUsage;
import org.eclipse.qvtd.pivot.schedule.ClassDatum;
+import org.eclipse.qvtd.pivot.schedule.MappingAction;
import com.google.common.collect.Iterables;
@@ -56,7 +58,6 @@ public class ClassDatumAnalysis
protected final @NonNull SchedulerConstants schedulerConstants;
protected final @NonNull ClassDatum classDatum;
- protected final @NonNull CompleteClass completeClass;
protected final @NonNull DomainUsage domainUsage;
/**
@@ -64,20 +65,17 @@ public class ClassDatumAnalysis
*/
private /* @LazyNonNull*/ List<@NonNull Property> multiOpposites = null;
- // private final @NonNull HeadNodeGroup headNodeGroup;
-
private final @NonNull Map<@NonNull Region, @NonNull List<@NonNull Node>> introducer2assignmentNodes = new HashMap<>();
private final @NonNull Map<@NonNull MappingRegion, @NonNull List<@NonNull Node>> consumer2predicateNodes = new HashMap<>();
private final @NonNull Map<@NonNull Region, @NonNull List<@NonNull Node>> producer2assignmentNodes = new HashMap<>();
private /*@LazyNonNull*/ List<@NonNull ClassDatumAnalysis> superClassDatumAnalyses = null;
+ private /*@LazyNonNull*/ List<@NonNull Mapping> producedBy = null;
+ private /*@LazyNonNull*/ List<@NonNull Mapping> requiredBy = null;
public ClassDatumAnalysis(@NonNull SchedulerConstants schedulerConstants, @NonNull ClassDatum classDatum) {
this.schedulerConstants = schedulerConstants;
this.classDatum = classDatum;
this.domainUsage = schedulerConstants.getDomainUsage(ClassUtil.nonNullState(classDatum.getTypedModel()));
- Type type = classDatum.getType();
- assert type != null;
- this.completeClass = schedulerConstants.getEnvironmentFactory().getCompleteModel().getCompleteClass(type);
}
public void addConsumption(@NonNull MappingRegion consumer, @NonNull Node consumingNode) {
@@ -117,6 +115,8 @@ public class ClassDatumAnalysis
}
public @NonNull CompleteClass getCompleteClass() {
+ CompleteClass completeClass = classDatum.getCompleteClass();
+ assert completeClass != null;
return completeClass;
}
@@ -136,9 +136,8 @@ public class ClassDatumAnalysis
List<@NonNull Property> multiOpposites2 = multiOpposites;
if (multiOpposites2 == null) {
EnvironmentFactory environmentFactory = schedulerConstants.getEnvironmentFactory();
- Type asClass = classDatum.getType();
- assert asClass != null;
- CompleteClass completeClass = environmentFactory.getCompleteModel().getCompleteClass(asClass);
+ CompleteClass completeClass = classDatum.getCompleteClass();
+ assert completeClass != null;
for (@NonNull Property property : completeClass.getProperties((FeatureFilter)null)) {
Property oppositeProperty = property.getOpposite();
if ((oppositeProperty != null) && oppositeProperty.isIsMany() && !oppositeProperty.isIsDerived()) {
@@ -147,7 +146,7 @@ public class ClassDatumAnalysis
Type childType = ((CollectionType)childrenType).getElementType();
assert childType != null;
StandardLibrary standardLibrary = environmentFactory.getStandardLibrary();
- if (asClass.conformsTo(standardLibrary, childType)) { // FIXME bi-conforming types
+ if (completeClass.getPrimaryClass().conformsTo(standardLibrary, childType)) { // FIXME bi-conforming types
if (multiOpposites2 == null) {
multiOpposites = multiOpposites2 = new ArrayList<@NonNull Property>();
}
@@ -163,6 +162,19 @@ public class ClassDatumAnalysis
return multiOpposites2;
}
+ public @NonNull Iterable<@NonNull Mapping> getProducedBy() {
+ List<@NonNull Mapping> producedBy2 = producedBy;
+ if (producedBy2 == null) {
+ producedBy2 = producedBy = new ArrayList<>();
+ for (@NonNull MappingAction producingAction : ClassUtil.nullFree(classDatum.getProducedBy())) {
+ Mapping mapping = producingAction.getMapping();
+ assert mapping != null;
+ producedBy2.add(mapping);
+ }
+ }
+ return producedBy2;
+ }
+
// @SuppressWarnings("null")
// public @NonNull Collection<MappingRegion> getProducers() {
// return producer2assignmentNodes.keySet();
@@ -176,6 +188,19 @@ public class ClassDatumAnalysis
return producer2assignmentNodes.keySet();
}
+ public @NonNull Iterable<@NonNull Mapping> getRequiredBy() {
+ List<@NonNull Mapping> requiredBy2 = requiredBy;
+ if (requiredBy2 == null) {
+ requiredBy2 = requiredBy = new ArrayList<>();
+ for (@NonNull MappingAction consumingAction : ClassUtil.nullFree(classDatum.getRequiredBy())) {
+ Mapping mapping = consumingAction.getMapping();
+ assert mapping != null;
+ requiredBy2.add(mapping);
+ }
+ }
+ return requiredBy2;
+ }
+
public @Nullable Node getSingleProducer() {
Iterator<List<Node>> values = producer2assignmentNodes.values().iterator();
if (!values.hasNext()) {
@@ -189,6 +214,7 @@ public class ClassDatumAnalysis
List<@NonNull ClassDatumAnalysis> superClassDatumAnalyses2 = superClassDatumAnalyses;
if (superClassDatumAnalyses2 == null) {
superClassDatumAnalyses = superClassDatumAnalyses2 = new ArrayList<@NonNull ClassDatumAnalysis>();
+ CompleteClass completeClass = getCompleteClass();
for (@NonNull CompleteClass completeSuperClass : completeClass.getSuperCompleteClasses()) {
superClassDatumAnalyses2.add(schedulerConstants.getClassDatumAnalysis(completeSuperClass.getPrimaryClass(), ClassUtil.nonNullState(domainUsage.getTypedModel(completeClass))));
}
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/MappingRegion.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/MappingRegion.java
index b96c548e2..c2d3d5af7 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/MappingRegion.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/MappingRegion.java
@@ -12,11 +12,12 @@ package org.eclipse.qvtd.compiler.internal.qvtp2qvts;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
-import org.eclipse.qvtd.pivot.schedule.MappingAction;
+import org.eclipse.qvtd.pivot.qvtcore.Mapping;
public interface MappingRegion extends Region
{
// @NonNull Iterable<@NonNull Node> getComputedNodes();
- @NonNull Iterable<@NonNull MappingAction> getMappingActions();
+ @NonNull Iterable<@NonNull Mapping> getMappings();
+ // @NonNull Iterable<@NonNull MappingAction> getMappingActions();
void writeDebugGraphs(@Nullable String context);
} \ No newline at end of file
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/MergedMappingRegion.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/MergedMappingRegion.java
index c05b50b8c..91787d330 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/MergedMappingRegion.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/MergedMappingRegion.java
@@ -15,35 +15,34 @@ import java.util.Collections;
import java.util.List;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.ocl.pivot.utilities.ClassUtil;
-import org.eclipse.qvtd.pivot.schedule.MappingAction;
-
+import org.eclipse.qvtd.pivot.qvtcore.Mapping;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
public class MergedMappingRegion extends AbstractMappingRegion
{
/**
- * The merged analyzed actions.
+ * The merged analyzed mappings.
*/
- private final @NonNull List<@NonNull MappingAction> mappingActions = new ArrayList<>();
+ private final @NonNull List<@NonNull Mapping> mappings = new ArrayList<>();
public MergedMappingRegion(@NonNull MappingRegion primaryRegion, @NonNull MappingRegion secondaryRegion) {
super(primaryRegion.getMultiRegion());
- Iterables.addAll(mappingActions, primaryRegion.getMappingActions());
- Iterables.addAll(mappingActions, secondaryRegion.getMappingActions());
- assert Sets.newHashSet(mappingActions).size() == mappingActions.size();
+ Iterables.addAll(mappings, primaryRegion.getMappings());
+ Iterables.addAll(mappings, secondaryRegion.getMappings());
+ assert Sets.newHashSet(mappings).size() == mappings.size();
}
@Override
- public @NonNull Iterable<@NonNull MappingAction> getMappingActions() {
- return mappingActions;
+ public @NonNull Iterable<@NonNull Mapping> getMappings() {
+ return mappings;
}
@Override
public @NonNull String getName() {
List<@NonNull String> names = new ArrayList<>();
- for (@NonNull MappingAction mappingAction : mappingActions) {
- names.add(ClassUtil.nonNullState(mappingAction.getMapping().getName()));
+ for (@NonNull Mapping mapping : mappings) {
+ names.add(ClassUtil.nonNullState(mapping.getName()));
}
Collections.sort(names);
StringBuilder s = new StringBuilder();
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/MicroMappingRegion.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/MicroMappingRegion.java
index 82f4d1c64..cbf2cf1bd 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/MicroMappingRegion.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/MicroMappingRegion.java
@@ -12,7 +12,7 @@ package org.eclipse.qvtd.compiler.internal.qvtp2qvts;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.qvtd.compiler.internal.utilities.SymbolNameBuilder;
-import org.eclipse.qvtd.pivot.schedule.MappingAction;
+import org.eclipse.qvtd.pivot.qvtcore.Mapping;
/**
* A MicroMappingRegion provides the partitioned QVTs node-edge graph representation of a QVTp mapping.
@@ -39,8 +39,8 @@ public class MicroMappingRegion extends AbstractMappingRegion
}
@Override
- public @NonNull Iterable<@NonNull MappingAction> getMappingActions() {
- return basicMappingRegion.getMappingActions();
+ public @NonNull Iterable<@NonNull Mapping> getMappings() {
+ return basicMappingRegion.getMappings();
}
@Override
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/MultiRegion.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/MultiRegion.java
index 92b019973..3dae321e5 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/MultiRegion.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/MultiRegion.java
@@ -17,7 +17,7 @@ import java.util.List;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.ocl.pivot.OperationCallExp;
import org.eclipse.ocl.pivot.StandardLibrary;
-import org.eclipse.qvtd.pivot.schedule.AbstractAction;
+import org.eclipse.qvtd.pivot.qvtcore.Mapping;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
@@ -65,8 +65,8 @@ public class MultiRegion
return castProperty;
} */
- public @NonNull MappingRegion getMappingRegion(@NonNull AbstractAction action) {
- return qvtp2qvts.getMappingRegion(action);
+ public @NonNull MappingRegion getMappingRegion(@NonNull Mapping mapping) {
+ return qvtp2qvts.getMappingRegion(mapping);
}
public @NonNull Iterable<@NonNull OperationRegion> getOperationRegions() {
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/QVTp2QVTg.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/QVTp2QVTg.java
index 527d11747..2d49dae25 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/QVTp2QVTg.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/QVTp2QVTg.java
@@ -6,16 +6,14 @@
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
- * E.D.Willink - initial API and implementation
+ * Horacio Hoyos - initial migration from Epsilon prototype
+ * E.D.Willink - simplification
*******************************************************************************/
package org.eclipse.qvtd.compiler.internal.qvtp2qvts;
-import java.util.ArrayList;
-import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
-import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -27,6 +25,7 @@ import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.ocl.pivot.CallExp;
import org.eclipse.ocl.pivot.CollectionType;
+import org.eclipse.ocl.pivot.CompleteClass;
import org.eclipse.ocl.pivot.DataType;
import org.eclipse.ocl.pivot.Element;
import org.eclipse.ocl.pivot.ExpressionInOCL;
@@ -44,11 +43,10 @@ import org.eclipse.ocl.pivot.Variable;
import org.eclipse.ocl.pivot.VariableExp;
import org.eclipse.ocl.pivot.utilities.ClassUtil;
import org.eclipse.ocl.pivot.utilities.PivotUtil;
-import org.eclipse.qvtd.pivot.qvtbase.Domain;
import org.eclipse.qvtd.pivot.qvtbase.Rule;
import org.eclipse.qvtd.pivot.qvtbase.Transformation;
import org.eclipse.qvtd.pivot.qvtbase.TypedModel;
-import org.eclipse.qvtd.pivot.qvtcore.CoreDomain;
+import org.eclipse.qvtd.pivot.qvtcore.GuardPattern;
import org.eclipse.qvtd.pivot.qvtcore.Mapping;
import org.eclipse.qvtd.pivot.qvtcore.NavigationAssignment;
import org.eclipse.qvtd.pivot.qvtcore.RealizedVariable;
@@ -56,47 +54,23 @@ import org.eclipse.qvtd.pivot.qvtcore.analysis.DomainUsage;
import org.eclipse.qvtd.pivot.qvtcore.analysis.DomainUsageAnalysis;
import org.eclipse.qvtd.pivot.qvtcore.analysis.RootDomainUsageAnalysis;
import org.eclipse.qvtd.pivot.qvtcore.utilities.QVTcoreUtil;
-import org.eclipse.qvtd.pivot.schedule.AbstractAction;
import org.eclipse.qvtd.pivot.schedule.AbstractDatum;
import org.eclipse.qvtd.pivot.schedule.ClassDatum;
-import org.eclipse.qvtd.pivot.schedule.DataParameter;
import org.eclipse.qvtd.pivot.schedule.MappingAction;
import org.eclipse.qvtd.pivot.schedule.PropertyDatum;
import org.eclipse.qvtd.pivot.schedule.Schedule;
import org.eclipse.qvtd.pivot.schedule.ScheduleFactory;
-import org.eclipse.qvtd.pivot.schedule.utilities.DependencyUtil;
-
-public class QVTp2QVTg {
-
- public static @NonNull Iterable<@NonNull PropertyDatum> getAllPropertyDatums(@NonNull ClassDatum cDatum) {
- return getAllPropertyDatumsInternal(new HashSet<>(), new HashSet<>(), cDatum);
- }
- private static @NonNull Iterable<@NonNull PropertyDatum> getAllPropertyDatumsInternal(@NonNull Set<@NonNull ClassDatum> classDatums, @NonNull Set<@NonNull PropertyDatum> propertyDatums, @NonNull ClassDatum cDatum) {
- if (classDatums.add(cDatum)) {
- propertyDatums.addAll(ClassUtil.nullFree(cDatum.getPropertyDatums()));
- }
- for (AbstractDatum superClassDatum : ClassUtil.nullFree(cDatum.getSuper())) {
- if (superClassDatum instanceof ClassDatum) {
- getAllPropertyDatumsInternal(classDatums, propertyDatums, (ClassDatum) superClassDatum);
- }
- }
- return propertyDatums;
- }
+public class QVTp2QVTg
+{
private final @NonNull RootDomainUsageAnalysis domainUsageAnalysis;
private final @NonNull ClassRelationships classRelationships;
- private final @NonNull Schedule dg= ScheduleFactory.eINSTANCE.createSchedule();
+ private final @NonNull Schedule schedule = ScheduleFactory.eINSTANCE.createSchedule();
// Caches
- private @NonNull Map<@NonNull TypedModel, @NonNull Map<org.eclipse.ocl.pivot.@NonNull Class, @NonNull ClassDatum>> typedModel2class2classDatum = new HashMap<>();
- private @NonNull Map<@NonNull ClassDatum, @NonNull Map<@NonNull Property, @NonNull PropertyDatum>> classDatum2property2propertyDatums = new HashMap<>();
-
- private @NonNull Map<@NonNull Mapping, @NonNull List<@NonNull OperationCallExp>> mapping2opCallExps = new HashMap<>();
- private @NonNull Map<@NonNull Mapping, @NonNull List<@NonNull NavigationAssignment>> mapping2propAssigns = new HashMap<>();
- private @NonNull Map<@NonNull Mapping, @NonNull List<@NonNull NavigationCallExp>> mapping2navCallExps = new HashMap<>();
-
- private /*@LazyNonNull*/ List<@NonNull AbstractAction> orderedActions; // FIXME ??is this ordering still needed??
+ private @NonNull Map<@NonNull TypedModel, @NonNull Map<org.eclipse.ocl.pivot.@NonNull CompleteClass, @NonNull ClassDatum>> typedModel2completeClass2classDatum = new HashMap<>();
+ private @NonNull Map<@NonNull ClassDatum, @NonNull Map<@NonNull Property, @NonNull PropertyDatum>> classDatum2property2propertyDatum = new HashMap<>();
public QVTp2QVTg(@NonNull RootDomainUsageAnalysis domainAnalysis, @NonNull ClassRelationships classRelationships) {
this.domainUsageAnalysis = domainAnalysis;
@@ -126,116 +100,73 @@ public class QVTp2QVTg {
return true;
}
- private void computeInitialCaches(@NonNull Transformation tx) {
- for (Rule rule : tx.getRule()) {
- Mapping mapping = (Mapping) rule;
- TreeIterator<EObject> it = mapping.eAllContents();
- while (it.hasNext()) {
- EObject eObj = it.next();
- if (eObj instanceof OperationCallExp) {
- List<@NonNull OperationCallExp> opCallExps = mapping2opCallExps.get(mapping);
- if (opCallExps == null) {
- opCallExps = new ArrayList<>();
- mapping2opCallExps.put(mapping, opCallExps);
- }
- opCallExps.add((OperationCallExp)eObj);
- } else if (eObj instanceof NavigationAssignment) {
- List<@NonNull NavigationAssignment> propAssigns = mapping2propAssigns.get(mapping);
- if (propAssigns == null) {
- propAssigns = new ArrayList<>();
- mapping2propAssigns.put(mapping, propAssigns);
- }
- propAssigns.add((NavigationAssignment)eObj);
- } else if (eObj instanceof NavigationCallExp) {
- List<@NonNull NavigationCallExp> navCallExps = mapping2navCallExps.get(mapping);
- if (navCallExps == null) {
- navCallExps = new ArrayList<>();
- mapping2navCallExps.put(mapping, navCallExps);
- }
- navCallExps.add((NavigationCallExp)eObj);
- }
- }
- }
-
- }
-
public void analyzeTransformation(@NonNull Transformation pTransformation) {
- computeInitialCaches(pTransformation);
+ List<MappingAction> actions = schedule.getActions();
for (@NonNull Rule pRule : ClassUtil.nullFree(pTransformation.getRule())) {
- createMappingAction((Mapping) pRule);
+ actions.add(analyzeMapping((Mapping) pRule));
}
}
- public @NonNull List<@NonNull AbstractAction> getOrderedActions() {
- List<@NonNull AbstractAction> orderedActions2 = orderedActions;
- if (orderedActions2 == null) {
- DependencyUtil.NaturalOrderer orderer = new DependencyUtil.NaturalOrderer(dg);
- orderedActions2 = orderedActions = orderer.computeOrdering(); // FIXME ??is this ordering still needed??
- if (orderedActions2 == null) {
- throw new IllegalArgumentException(orderer.diagnoseOrderingFailure());
- }
- }
- return orderedActions2;
- }
-
- private MappingAction createMappingAction(@NonNull Mapping mapping) {
-
+ private MappingAction analyzeMapping(@NonNull Mapping mapping) {
MappingAction ma = ScheduleFactory.eINSTANCE.createMappingAction();
-
- ma.setSchedule(dg);
ma.setMapping(mapping);
- for (@NonNull Variable inputVar : getInputVariables(mapping)) {
- TypedModel typedModel = getTypedModel(inputVar);
- ma.getParameters().add(createDataParameter(inputVar));
- ma.getRequisites().add(getClassDatum(typedModel, ClassUtil.nonNullState((org.eclipse.ocl.pivot.Class)inputVar.getType())));
-
- }
-
- for (@NonNull RealizedVariable outputVar : getOutputVariables(mapping)) {
- TypedModel typedModel = getTypedModel(outputVar);
- ma.getResults().add(createDataParameter(outputVar));
- ma.getProductions().add(getClassDatum(typedModel, ClassUtil.nonNullState((org.eclipse.ocl.pivot.Class)outputVar.getType())));
- }
-
- for (@NonNull NavigationCallExp propRead : getPropertyNavigations(mapping)){
- ma.getRequisites().add(getPropertyDatum(propRead));
- }
-
- for (@NonNull NavigationAssignment propWrite : getNavigationAssignments(mapping)){
- ma.getProductions().addAll(getPropertyDatum(propWrite));
-
- }
-
- for (@NonNull OperationCallExp opCall : getOperationCallExps(mapping)) {
- org.eclipse.ocl.pivot.Class context = ClassUtil.nonNullState(getContextType(opCall));
- ma.getRequisites().addAll(getPropertyDatums(opCall, context, new HashMap<>(), new HashMap<>()));
+ List<AbstractDatum> productions = ma.getProductions();
+ List<AbstractDatum> requisites = ma.getRequisites();
+ TreeIterator<EObject> it = mapping.eAllContents();
+ while (it.hasNext()) {
+ EObject eObj = it.next();
+ if (eObj instanceof GuardPattern) {
+ for (@NonNull Variable inputVar : ClassUtil.nullFree(((GuardPattern)eObj).getVariable())) {
+ TypedModel typedModel = getTypedModel(inputVar);
+ requisites.add(getClassDatum(typedModel, ClassUtil.nonNullState((org.eclipse.ocl.pivot.Class)inputVar.getType())));
+ }
+ }
+ if (eObj instanceof RealizedVariable) {
+ RealizedVariable outputVar = (RealizedVariable) eObj;
+ TypedModel typedModel = getTypedModel(outputVar);
+ productions.add(getClassDatum(typedModel, ClassUtil.nonNullState((org.eclipse.ocl.pivot.Class)outputVar.getType())));
+ }
+ else if (eObj instanceof OperationCallExp) {
+ OperationCallExp opCall = (OperationCallExp)eObj;
+ OCLExpression ownedSource = opCall.getOwnedSource();
+ assert ownedSource != null;
+ Type type = ownedSource.getType();
+ assert type != null;
+ org.eclipse.ocl.pivot.Class context = (org.eclipse.ocl.pivot.Class)type;
+ requisites.addAll(getOperationPropertyDatums(opCall, context, new HashMap<>(), new HashMap<>()));
+ }
+ else if (eObj instanceof NavigationAssignment) {
+ productions.addAll(getAssignedPropertyDatums((NavigationAssignment)eObj));
+ }
+ else if (eObj instanceof NavigationCallExp) {
+ NavigationCallExp navigationCallExp = (NavigationCallExp)eObj;
+ OCLExpression source = navigationCallExp.getOwnedSource();
+ assert source != null;
+ TypedModel typedModel = getTypedModel(source);
+ Property property = PivotUtil.getReferredProperty(navigationCallExp);
+ org.eclipse.ocl.pivot.Class context = ClassUtil.nonNullState((org.eclipse.ocl.pivot.Class) source.getType());
+ PropertyDatum propertyDatum = getPropertyDatum(typedModel, context, property);
+ requisites.add(propertyDatum);
+ }
}
-
return ma;
}
- private DataParameter createDataParameter(@NonNull Variable variable) {
- TypedModel typedModel = getTypedModel(variable);
- DataParameter dp = ScheduleFactory.eINSTANCE.createDataParameter();
- dp.setVariable(variable);
- dp.setDatum(getClassDatum(typedModel, ClassUtil.nonNullState((org.eclipse.ocl.pivot.Class)variable.getType())));
- return dp;
- }
-
public @NonNull ClassDatum getClassDatum(@NonNull TypedModel typedModel, org.eclipse.ocl.pivot.@NonNull Class aClass) {
+ CompleteClass completeClass = classRelationships.getEnvironmentFactory().getCompleteModel().getCompleteClass(aClass);
assert assertValidTypedModel(typedModel, aClass);
- Map<org.eclipse.ocl.pivot.@NonNull Class, @NonNull ClassDatum> class2classDatums = typedModel2class2classDatum.get(typedModel);
- if (class2classDatums == null) {
- class2classDatums = new HashMap<>();
- typedModel2class2classDatum.put(typedModel, class2classDatums);
+ Map<org.eclipse.ocl.pivot.@NonNull CompleteClass, @NonNull ClassDatum> completeClass2classDatums = typedModel2completeClass2classDatum.get(typedModel);
+ if (completeClass2classDatums == null) {
+ completeClass2classDatums = new HashMap<>();
+ typedModel2completeClass2classDatum.put(typedModel, completeClass2classDatums);
}
- ClassDatum classDatum = class2classDatums.get(aClass);
+ ClassDatum classDatum = completeClass2classDatums.get(completeClass);
if (classDatum == null) {
assert assertValidTypedModel(typedModel, aClass);
classDatum = ScheduleFactory.eINSTANCE.createClassDatum();
- classDatum.setSchedule(dg);
- classDatum.setType(aClass);
+ classDatum.setSchedule(schedule);
+ classDatum.setCompleteClass(completeClass);
classDatum.setTypedModel(typedModel);
if (!(aClass instanceof DataType)) {
for (@SuppressWarnings("null") org.eclipse.ocl.pivot.@NonNull Class superClass : aClass.getSuperClasses()) {
@@ -243,7 +174,7 @@ public class QVTp2QVTg {
classDatum.getSuper().add(superCDatum);
}
}
- class2classDatums.put(aClass, classDatum);
+ completeClass2classDatums.put(completeClass, classDatum);
}
/**
* Following check is useful for heterogeneous checking. assertValidTypedModel should be better once BUG 485647 is fixed.
@@ -264,10 +195,59 @@ public class QVTp2QVTg {
return classDatum;
}
+ /* public @NonNull Iterable<@NonNull PropertyDatum> getAllPropertyDatums(@NonNull ClassDatum classDatum) {
+ Map<@NonNull Property, @NonNull PropertyDatum> property2propertyDatums = classDatum2property2propertyDatums.get(classDatum);
+ if (property2propertyDatums == null) {
+ property2propertyDatums = new HashMap<>();
+ classDatum2property2propertyDatums.put(classDatum, property2propertyDatums);
+ for (@NonNull PropertyDatum propertyDatum : getAllPropertyDatumsInternal(new HashSet<>(), new HashSet<>(), classDatum)) {
+ Property property = propertyDatum.getProperty();
+ assert property != null;
+ PropertyDatum oldPropertyDatum = property2propertyDatums.put(property, propertyDatum);
+ assert oldPropertyDatum == null;
+ }
+ }
+ return property2propertyDatums.values();
+ } */
+ public @NonNull Iterable<@NonNull PropertyDatum> getAllPropertyDatums(@NonNull ClassDatum cDatum) {
+ return getAllPropertyDatumsInternal(new HashSet<>(), new HashSet<>(), cDatum);
+ }
+ private @NonNull Iterable<@NonNull PropertyDatum> getAllPropertyDatumsInternal(@NonNull Set<@NonNull ClassDatum> classDatums, @NonNull Set<@NonNull PropertyDatum> propertyDatums, @NonNull ClassDatum cDatum) {
+ if (classDatums.add(cDatum)) {
+ propertyDatums.addAll(ClassUtil.nullFree(cDatum.getPropertyDatums()));
+ }
+ for (@NonNull ClassDatum superClassDatum : ClassUtil.nullFree(cDatum.getSuper())) {
+ getAllPropertyDatumsInternal(classDatums, propertyDatums, superClassDatum);
+ }
+ return propertyDatums;
+ }
+
private @NonNull PropertyDatum getPropertyDatum(@NonNull TypedModel typedModel, org.eclipse.ocl.pivot.@NonNull Class context, @NonNull Property property) {
ClassDatum classDatum = getClassDatum(typedModel, context);
- for (PropertyDatum propertyDatum : getAllPropertyDatums(classDatum)) {
+ return getPropertyDatum(classDatum, property);
+ }
+
+ public @NonNull PropertyDatum getPropertyDatum(@NonNull ClassDatum classDatum, @NonNull Property property) {
+ TypedModel typedModel = classDatum.getTypedModel();
+ assert typedModel != null;
+ org.eclipse.ocl.pivot.Class context = classDatum.getCompleteClass().getPrimaryClass();
+ assert context != null;
+ Iterable<@NonNull PropertyDatum> allPropertyDatums = getAllPropertyDatums(classDatum);
+
+ Map<@NonNull Property, @NonNull PropertyDatum> property2propertyDatum = classDatum2property2propertyDatum.get(classDatum);
+ if (property2propertyDatum == null) {
+ property2propertyDatum = new HashMap<>();
+ classDatum2property2propertyDatum.put(classDatum, property2propertyDatum);
+ }
+ PropertyDatum cachedPropertyDatum = property2propertyDatum.get(property);
+ for (PropertyDatum propertyDatum : allPropertyDatums) {
if (propertyDatum.getProperty().equals(property)) {
+ if (cachedPropertyDatum == propertyDatum) {
+ System.out.println("Consistent " + classDatum + " : " + propertyDatum);
+ }
+ else if (cachedPropertyDatum != null) {
+ System.out.println("Inconsistent " + classDatum + " : " + cachedPropertyDatum + " / " + propertyDatum);
+ }
return propertyDatum;
}
}
@@ -283,70 +263,16 @@ public class QVTp2QVTg {
}
}
+ PropertyDatum oldPropertyDatum = property2propertyDatum.put(property, propertyDatum);
+ assert oldPropertyDatum == null;
+ System.out.println("Create " + classDatum + " : " + propertyDatum);
return propertyDatum;
}
- private @NonNull List<@NonNull Variable> getInputVariables(@NonNull Mapping mapping) {
-
- List<@NonNull Variable> mInputVars = new ArrayList<>();
- mInputVars.addAll(ClassUtil.nullFree(mapping.getGuardPattern().getVariable()));
-
- for (Domain domain : mapping.getDomain()) {
- CoreDomain cDomain = (CoreDomain) domain;
- mInputVars.addAll(ClassUtil.nullFree(cDomain.getGuardPattern().getVariable()));
- }
-
- // TODO what about refinements ?
- return mInputVars;
- }
-
- private @NonNull List<@NonNull RealizedVariable> getOutputVariables(@NonNull Mapping mapping) {
- List<@NonNull RealizedVariable> mOutputVars = new ArrayList<>();
- mOutputVars.addAll(ClassUtil.nullFree(mapping.getBottomPattern().getRealizedVariable()));
-
- for (Domain domain : mapping.getDomain()) {
- CoreDomain cDomain = (CoreDomain) domain;
- mOutputVars.addAll(ClassUtil.nullFree(cDomain.getBottomPattern().getRealizedVariable()));
- }
-
- // TODO what about refinements ?
- return mOutputVars;
- }
-
-
// Property datum analysis
- private @NonNull List<@NonNull NavigationCallExp> getPropertyNavigations(@NonNull Mapping mapping) {
- List<@NonNull NavigationCallExp> navCallExps = mapping2navCallExps.get(mapping);
- return navCallExps == null ? Collections.<@NonNull NavigationCallExp>emptyList() : navCallExps;
- }
-
- private @NonNull List<@NonNull NavigationAssignment> getNavigationAssignments(@NonNull Mapping mapping) {
- List<@NonNull NavigationAssignment> propAssigns = mapping2propAssigns.get(mapping);
- return propAssigns == null ? Collections.<@NonNull NavigationAssignment>emptyList() : propAssigns;
- }
-
- private @NonNull List<@NonNull OperationCallExp> getOperationCallExps(@NonNull Mapping mapping) {
- List<@NonNull OperationCallExp> opCallExps = mapping2opCallExps.get(mapping);
- return opCallExps == null ? Collections.<@NonNull OperationCallExp>emptyList() : opCallExps;
- }
-
- private @NonNull PropertyDatum getPropertyDatum(@NonNull NavigationCallExp navCallExp) {
-
- org.eclipse.ocl.pivot.Class context = ClassUtil.nonNullState((org.eclipse.ocl.pivot.Class) navCallExp.getOwnedSource().getType());
- return getPropertyDatum(navCallExp, context );
- }
-
- private @NonNull PropertyDatum getPropertyDatum(@NonNull NavigationCallExp navCallExp, org.eclipse.ocl.pivot.@NonNull Class context) {
- Property property = PivotUtil.getReferredProperty(navCallExp);
- OCLExpression ownedSource = navCallExp.getOwnedSource();
- assert ownedSource != null;
- TypedModel typedModel = getTypedModel(ownedSource);
- return getPropertyDatum(typedModel, context, property);
- }
-
- private @NonNull Set<@NonNull PropertyDatum> getPropertyDatum(@NonNull NavigationAssignment propAssign) {
- Set<@NonNull PropertyDatum> result = new LinkedHashSet<>();
+ private @NonNull Set<@NonNull PropertyDatum> getAssignedPropertyDatums(@NonNull NavigationAssignment propAssign) {
+ Set<@NonNull PropertyDatum> result = new HashSet<>();
Property targetProp = QVTcoreUtil.getTargetProperty(propAssign);
OCLExpression slotExpression = ClassUtil.nonNullState(propAssign.getSlotExpression());
TypedModel typedModel = getTypedModel(slotExpression);
@@ -381,7 +307,7 @@ public class QVTp2QVTg {
return result;
}
- private @NonNull Set<@NonNull PropertyDatum> getPropertyDatums(@NonNull OperationCallExp opCall, org.eclipse.ocl.pivot.@NonNull Class context,
+ private @NonNull Set<@NonNull PropertyDatum> getOperationPropertyDatums(@NonNull OperationCallExp opCall, org.eclipse.ocl.pivot.@NonNull Class context,
@NonNull Map<org.eclipse.ocl.pivot.@NonNull Class, @NonNull Set<@NonNull Operation>> type2VisitedOps,
@NonNull Map<@NonNull Variable, @NonNull Set<org.eclipse.ocl.pivot.@NonNull Class>> variable2BoundContext) {
@@ -391,7 +317,7 @@ public class QVTp2QVTg {
type2VisitedOps.put(context, visitedOps);
}
- Set<@NonNull PropertyDatum> result = new LinkedHashSet<>();
+ Set<@NonNull PropertyDatum> result = new HashSet<>();
Operation op = ClassUtil.nonNullState(opCall.getReferredOperation());
if (!visitedOps.contains(op)) {
@@ -408,21 +334,21 @@ public class QVTp2QVTg {
// }
// }
} else {
- result.addAll(getPropertyDatums(op, context, type2VisitedOps));
+ result.addAll(getOperationPropertyDatums(op, context, type2VisitedOps));
}
}
return result;
}
- private @NonNull Set<@NonNull PropertyDatum> getPropertyDatums(@NonNull Operation op, org.eclipse.ocl.pivot.@NonNull Class context, @NonNull Map<org.eclipse.ocl.pivot.@NonNull Class, @NonNull Set<@NonNull Operation>> type2VisitedOps) {
+ private @NonNull Set<@NonNull PropertyDatum> getOperationPropertyDatums(@NonNull Operation op, org.eclipse.ocl.pivot.@NonNull Class context, @NonNull Map<org.eclipse.ocl.pivot.@NonNull Class, @NonNull Set<@NonNull Operation>> type2VisitedOps) {
- Set<@NonNull PropertyDatum> result = new LinkedHashSet<>();
+ Set<@NonNull PropertyDatum> result = new HashSet<>();
LanguageExpression langExp = op.getBodyExpression();
if (langExp instanceof ExpressionInOCL) {
ExpressionInOCL expInOCL = (ExpressionInOCL) langExp;
if (expInOCL.getOwnedBody() != null) {
Map<@NonNull Variable, @NonNull Set<org.eclipse.ocl.pivot.@NonNull Class>> variable2BoundContext = new HashMap<>();
- Set<org.eclipse.ocl.pivot.@NonNull Class> boundContexts = new LinkedHashSet<>();
+ Set<org.eclipse.ocl.pivot.@NonNull Class> boundContexts = new HashSet<>();
boundContexts.add(context);
Variable ownedContext = expInOCL.getOwnedContext();
if (ownedContext != null) {
@@ -435,13 +361,18 @@ public class QVTp2QVTg {
updateVariableBindings((LetExp) eObject, variable2BoundContext);
} else if (eObject instanceof NavigationCallExp) { // FIXME OppositeCallExp ?
NavigationCallExp navCallExp = (NavigationCallExp)eObject;
+ Property property = PivotUtil.getReferredProperty(navCallExp);
+ OCLExpression ownedSource = navCallExp.getOwnedSource();
+ assert ownedSource != null;
+ TypedModel typedModel = getTypedModel(ownedSource);
for (org.eclipse.ocl.pivot.@NonNull Class newContext : getComputedContexts(navCallExp, variable2BoundContext)) {
- result.add(getPropertyDatum(navCallExp, newContext));
+ PropertyDatum propertyDatum = getPropertyDatum(typedModel, newContext, property);
+ result.add(propertyDatum);
}
} else if (eObject instanceof OperationCallExp) {
OperationCallExp opCallExp = (OperationCallExp) eObject;
for (org.eclipse.ocl.pivot.Class newContext : getComputedContexts(opCallExp, variable2BoundContext)) {
- result.addAll(getPropertyDatums(opCallExp, newContext, type2VisitedOps, variable2BoundContext));
+ result.addAll(getOperationPropertyDatums(opCallExp, newContext, type2VisitedOps, variable2BoundContext));
}
}
}
@@ -495,7 +426,7 @@ public class QVTp2QVTg {
private @NonNull Set<@NonNull PropertyDatum> analyseOclContainerCall(@NonNull TypedModel typedModel, org.eclipse.ocl.pivot.@NonNull Class context) {
- Set<@NonNull PropertyDatum> result = new LinkedHashSet<>();
+ Set<@NonNull PropertyDatum> result = new HashSet<>();
for (org.eclipse.ocl.pivot.@NonNull Class parentClass : getContainingTypes(context)) {
for (Property prop : parentClass.getOwnedProperties()) {
@@ -531,7 +462,7 @@ public class QVTp2QVTg {
// TODO cache
private @NonNull Set<org.eclipse.ocl.pivot.@NonNull Class> computeContexts(@NonNull OCLExpression oclExp, @NonNull Map<@NonNull Variable, @NonNull Set<org.eclipse.ocl.pivot.@NonNull Class>> variable2BoundContext) {
- Set<org.eclipse.ocl.pivot.@NonNull Class> result = new LinkedHashSet<>();
+ Set<org.eclipse.ocl.pivot.@NonNull Class> result = new HashSet<>();
if (oclExp instanceof VariableExp) {
VariableExp varExp = (VariableExp) oclExp;
Set<org.eclipse.ocl.pivot.@NonNull Class> context = variable2BoundContext.get(varExp.getReferredVariable());
@@ -570,42 +501,16 @@ public class QVTp2QVTg {
return classRelationships.getContainerClasses(aClass);
}
- private org.eclipse.ocl.pivot.@Nullable Class getContextType(CallExp callExp) {
- OCLExpression ownedSource = callExp.getOwnedSource();
- if (ownedSource == null) {
- return null;
- }
- Type type = ownedSource.getType();
- if (type == null) {
- return null; // FIXME BUG 487123 type is null for ill-formed this declarations
- }
- return type.isClass();
- }
-
private @NonNull Set<org.eclipse.ocl.pivot.@NonNull Class> getAllSuperClasses(org.eclipse.ocl.pivot.@NonNull Class context) {
return classRelationships.getAllSuperClasses(context);
}
- // private Set<Class> getAllSuperClassesIncludingSelf(Class context) {
- // Set<Class> result = new LinkedHashSet<Class>();
- // result.addAll(getAllSuperClasses(context));
- // result.add(context);
- // return result;
- // }
-
private @NonNull Set<org.eclipse.ocl.pivot.@NonNull Class> getAllSubClasses(org.eclipse.ocl.pivot.@NonNull Class context) {
return classRelationships.getAllSubClasses(context);
}
- // private Set<Class> getAllSubClassesIncludingSelf(Class context) {
- // Set<Class> result = new LinkedHashSet<Class>();
- // result.addAll(getAllSubClasses(context));
- // result.add(context);
- // return result;
- // }
-
private @NonNull Set<org.eclipse.ocl.pivot.@NonNull Class> getAllSuperAndSubClasses(org.eclipse.ocl.pivot.@NonNull Class context) {
- Set<org.eclipse.ocl.pivot.@NonNull Class> result = new LinkedHashSet<>();
+ Set<org.eclipse.ocl.pivot.@NonNull Class> result = new HashSet<>();
result.addAll(getAllSuperClasses(context));
result.addAll(getAllSubClasses(context));
return result;
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/QVTp2QVTs.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/QVTp2QVTs.java
index a71469a32..53704461d 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/QVTp2QVTs.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/QVTp2QVTs.java
@@ -37,9 +37,8 @@ import org.eclipse.qvtd.compiler.CompilerProblem;
import org.eclipse.qvtd.compiler.ProblemHandler;
import org.eclipse.qvtd.compiler.internal.qvts2qvts.Region2Depth;
import org.eclipse.qvtd.pivot.qvtbase.Transformation;
-import org.eclipse.qvtd.pivot.schedule.AbstractAction;
+import org.eclipse.qvtd.pivot.qvtcore.Mapping;
import org.eclipse.qvtd.pivot.schedule.ClassDatum;
-import org.eclipse.qvtd.pivot.schedule.MappingAction;
public class QVTp2QVTs extends SchedulerConstants
{
@@ -62,9 +61,9 @@ public class QVTp2QVTs extends SchedulerConstants
protected final @NonNull ProblemHandler problemHandler;
/**
- * The Region to which each action is allocated.
+ * The Region to which each mapping is allocated.
*/
- private final @NonNull Map<@NonNull AbstractAction, @NonNull BasicMappingRegion> action2mappingRegion = new HashMap<>();
+ private final @NonNull Map<@NonNull Mapping, @NonNull BasicMappingRegion> mapping2mappingRegion = new HashMap<>();
public QVTp2QVTs(@NonNull ProblemHandler problemHandler, @NonNull EnvironmentFactory environmentFactory, @NonNull Transformation asTransformation) {
super(environmentFactory, asTransformation);
@@ -172,8 +171,8 @@ public class QVTp2QVTs extends SchedulerConstants
return outputRegions;
}
- public @NonNull MappingRegion getMappingRegion(@NonNull AbstractAction action) {
- MappingRegion mappingRegion = action2mappingRegion.get(action);
+ public @NonNull MappingRegion getMappingRegion(@NonNull Mapping mapping) {
+ MappingRegion mappingRegion = mapping2mappingRegion.get(mapping);
assert mappingRegion != null;
return mappingRegion;
}
@@ -317,18 +316,15 @@ public class QVTp2QVTs extends SchedulerConstants
public @NonNull MultiRegion transform() throws IOException {
MultiRegion multiRegion = new MultiRegion(this);
- List<@NonNull AbstractAction> orderedActions = getOrderedActions();
+ Iterable<@NonNull Mapping> orderedMappings = getOrderedMappings();
//
// Extract salient characteristics from within each MappingAction.
//
- for (@NonNull AbstractAction abstractAction : orderedActions) {
- if (abstractAction instanceof MappingAction) {
- MappingAction mappingAction = (MappingAction) abstractAction;
- BasicMappingRegion mappingRegion = BasicMappingRegion.createMappingRegion(multiRegion, mappingAction);
- action2mappingRegion.put(abstractAction, mappingRegion);
- }
+ for (@NonNull Mapping mapping : orderedMappings) {
+ BasicMappingRegion mappingRegion = BasicMappingRegion.createMappingRegion(multiRegion, mapping);
+ mapping2mappingRegion.put(mapping, mappingRegion);
}
- List<@NonNull BasicMappingRegion> mappingRegions = new ArrayList<>(action2mappingRegion.values());
+ List<@NonNull BasicMappingRegion> mappingRegions = new ArrayList<>(mapping2mappingRegion.values());
Collections.sort(mappingRegions, NameUtil.NAMEABLE_COMPARATOR); // Stabilize side effect of symbol name disambiguator suffixes
for (@NonNull BasicMappingRegion mappingRegion : mappingRegions) {
mappingRegion.registerConsumptionsAndProductions();
@@ -339,8 +335,8 @@ public class QVTp2QVTs extends SchedulerConstants
}
}
List<@NonNull BasicMappingRegion> orderedRegions = new ArrayList<>();
- for (@NonNull AbstractAction abstractAction : orderedActions) {
- BasicMappingRegion mappingRegion = action2mappingRegion.get(abstractAction);
+ for (@NonNull Mapping mapping : orderedMappings) {
+ BasicMappingRegion mappingRegion = mapping2mappingRegion.get(mapping);
assert mappingRegion != null;
orderedRegions.add(mappingRegion);
// mappingRegion.resolveRecursion();
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/RootScheduledRegion.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/RootScheduledRegion.java
index 2f4a4ebc7..f3aed26e3 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/RootScheduledRegion.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/RootScheduledRegion.java
@@ -39,7 +39,6 @@ import org.eclipse.qvtd.compiler.internal.qvts2qvts.Region2Depth;
import org.eclipse.qvtd.compiler.internal.utilities.SymbolNameBuilder;
import org.eclipse.qvtd.pivot.qvtbase.graphs.GraphStringBuilder;
import org.eclipse.qvtd.pivot.qvtcore.analysis.DomainUsage;
-import org.eclipse.qvtd.pivot.schedule.AbstractDatum;
import org.eclipse.qvtd.pivot.schedule.ClassDatum;
import org.eclipse.qvtd.pivot.schedule.PropertyDatum;
@@ -256,10 +255,8 @@ public class RootScheduledRegion extends AbstractScheduledRegion
}
if (!edges.contains(producedEdge)) {
edges.add(producedEdge);
- for (@NonNull AbstractDatum superAbstractDatum : ClassUtil.nullFree(propertyDatum.getSuper())) {
- if (superAbstractDatum instanceof PropertyDatum) {
- addProducedEdge(producedEdge, (PropertyDatum) superAbstractDatum);
- }
+ for (@NonNull PropertyDatum superAbstractDatum : ClassUtil.nullFree(propertyDatum.getSuper())) {
+ addProducedEdge(producedEdge, superAbstractDatum);
}
}
}
@@ -489,7 +486,7 @@ public class RootScheduledRegion extends AbstractScheduledRegion
for (ClassDatumAnalysis classDatumAnalysis : getSchedulerConstants().getClassDatumAnalyses()) {
DomainUsage domainUsage = classDatumAnalysis.getDomainUsage();
if (domainUsage.isInput() && !domainUsage.isOutput()) {
- Type type = classDatumAnalysis.getClassDatum().getType();
+ Type type = classDatumAnalysis.getClassDatum().getCompleteClass().getPrimaryClass();
org.eclipse.ocl.pivot.Package asPackage = PivotUtil.getContainingPackage(type);
if ((asPackage != null) && !PivotConstants.ORPHANAGE_URI.equals(asPackage.getURI())) {
Model model = PivotUtil.getContainingModel(type);
@@ -1064,7 +1061,11 @@ public class RootScheduledRegion extends AbstractScheduledRegion
Property property = producedEdge.getProperty();
ClassDatumAnalysis classDatumAnalysis = producedEdge.getSource().getClassDatumAnalysis();
ClassDatum forwardClassDatum = classDatumAnalysis.getClassDatum();
- Iterable<@NonNull PropertyDatum> forwardPropertyDatums = QVTp2QVTg.getAllPropertyDatums(forwardClassDatum);
+ // PropertyDatum forwardPropertyDatum = getSchedulerConstants().getPropertyDatum(forwardClassDatum, property);
+ // if (forwardPropertyDatum.getClassDatum() == forwardClassDatum) {
+ // return forwardPropertyDatum;
+ // }
+ Iterable<@NonNull PropertyDatum> forwardPropertyDatums = getSchedulerConstants().getAllPropertyDatums(forwardClassDatum);
for (PropertyDatum propertyDatum : forwardPropertyDatums) {
if ((propertyDatum.getProperty() == property) && (propertyDatum.getClassDatum() == forwardClassDatum)) {
return propertyDatum;
@@ -1078,10 +1079,10 @@ public class RootScheduledRegion extends AbstractScheduledRegion
bestPropertyDatum = propertyDatum;
}
else {
- org.eclipse.ocl.pivot.Class type = propertyDatum.getClassDatum().getType();
+ org.eclipse.ocl.pivot.Class type = propertyDatum.getClassDatum().getCompleteClass().getPrimaryClass();
assert type != null;
Set<@NonNull Class> allSuperClasses = classRelationships.getAllSuperClasses(type);
- if (allSuperClasses.contains(bestPropertyDatum.getClassDatum().getType())) {
+ if (allSuperClasses.contains(bestPropertyDatum.getClassDatum().getCompleteClass().getPrimaryClass())) {
bestPropertyDatum = propertyDatum;
}
}
@@ -1093,7 +1094,7 @@ public class RootScheduledRegion extends AbstractScheduledRegion
property = property.getOpposite();
classDatumAnalysis = producedEdge.getTarget().getClassDatumAnalysis();
ClassDatum reverseClassDatum = classDatumAnalysis.getClassDatum();
- Iterable<@NonNull PropertyDatum> reversePropertyDatums = QVTp2QVTg.getAllPropertyDatums(reverseClassDatum);
+ Iterable<@NonNull PropertyDatum> reversePropertyDatums = getSchedulerConstants().getAllPropertyDatums(reverseClassDatum);
for (PropertyDatum propertyDatum : reversePropertyDatums) {
if ((propertyDatum.getProperty() == property) && (propertyDatum.getClassDatum() == reverseClassDatum)) {
return propertyDatum;
@@ -1105,10 +1106,10 @@ public class RootScheduledRegion extends AbstractScheduledRegion
bestPropertyDatum = propertyDatum;
}
else {
- org.eclipse.ocl.pivot.Class type = propertyDatum.getClassDatum().getType();
+ org.eclipse.ocl.pivot.Class type = propertyDatum.getClassDatum().getCompleteClass().getPrimaryClass();
assert type != null;
Set<@NonNull Class> allSuperClasses = classRelationships.getAllSuperClasses(type);
- if (allSuperClasses.contains(bestPropertyDatum.getClassDatum().getType())) {
+ if (allSuperClasses.contains(bestPropertyDatum.getClassDatum().getCompleteClass().getPrimaryClass())) {
bestPropertyDatum = propertyDatum;
}
}
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/SchedulerConstants.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/SchedulerConstants.java
index 391fde112..3ac825505 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/SchedulerConstants.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/SchedulerConstants.java
@@ -12,6 +12,7 @@ package org.eclipse.qvtd.compiler.internal.qvtp2qvts;
import java.io.IOException;
import java.io.OutputStream;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@@ -40,17 +41,19 @@ import org.eclipse.ocl.pivot.utilities.StringUtil;
import org.eclipse.ocl.pivot.values.Unlimited;
import org.eclipse.qvtd.compiler.internal.utilities.SymbolNameBuilder;
import org.eclipse.qvtd.compiler.internal.utilities.SymbolNameReservation;
+import org.eclipse.qvtd.pivot.qvtbase.Rule;
import org.eclipse.qvtd.pivot.qvtbase.Transformation;
import org.eclipse.qvtd.pivot.qvtbase.TypedModel;
import org.eclipse.qvtd.pivot.qvtbase.graphs.DOTStringBuilder;
import org.eclipse.qvtd.pivot.qvtbase.graphs.GraphMLStringBuilder;
+import org.eclipse.qvtd.pivot.qvtcore.Mapping;
import org.eclipse.qvtd.pivot.qvtcore.analysis.DomainUsage;
import org.eclipse.qvtd.pivot.qvtcore.analysis.DomainUsageAnalysis;
import org.eclipse.qvtd.pivot.qvtcore.analysis.QVTcoreDomainUsageAnalysis;
import org.eclipse.qvtd.pivot.qvtcore.analysis.RootDomainUsageAnalysis;
import org.eclipse.qvtd.pivot.qvtimperative.utilities.QVTimperativeUtil;
-import org.eclipse.qvtd.pivot.schedule.AbstractAction;
import org.eclipse.qvtd.pivot.schedule.ClassDatum;
+import org.eclipse.qvtd.pivot.schedule.PropertyDatum;
public abstract class SchedulerConstants
{
@@ -129,6 +132,8 @@ public abstract class SchedulerConstants
private /*@LazyNonNull */ DependencyAnalyzer dependencyAnalyzer = null;
+ private /*@LazyNonNull*/ List<@NonNull Mapping> orderedMappings; // Only ordered to improve determinacy
+
protected SchedulerConstants(@NonNull EnvironmentFactory environmentFactory, @NonNull Transformation asTransformation) {
this.environmentFactory = environmentFactory;
this.transformation = asTransformation;
@@ -174,6 +179,10 @@ public abstract class SchedulerConstants
protected abstract @NonNull ClassDatumAnalysis createClassDatumAnalysis(@NonNull ClassDatum classDatum);
+ public @NonNull Iterable<@NonNull PropertyDatum> getAllPropertyDatums(@NonNull ClassDatum classDatum) {
+ return qvtp2qvtg.getAllPropertyDatums(classDatum);
+ }
+
public @NonNull Property getArgumentProperty(@NonNull String argumentName) {
Property argumentProperty = name2argumentProperty.get(argumentName);
if (argumentProperty == null) {
@@ -328,8 +337,20 @@ public abstract class SchedulerConstants
return oclVoidClassDatumAnalysis;
}
- protected @NonNull List<@NonNull AbstractAction> getOrderedActions() {
- return qvtp2qvtg.getOrderedActions();
+ protected @NonNull Iterable<@NonNull Mapping> getOrderedMappings() {
+ List<@NonNull Mapping> orderedMappings2 = orderedMappings;
+ if (orderedMappings2 == null) {
+ orderedMappings2 = orderedMappings = new ArrayList<>();
+ for (@NonNull Rule rule : ClassUtil.nullFree(transformation.getRule())) {
+ orderedMappings.add((Mapping)rule);
+ }
+ Collections.sort(orderedMappings2, NameUtil.NAMEABLE_COMPARATOR);
+ }
+ return orderedMappings2;
+ }
+
+ public @NonNull PropertyDatum getPropertyDatum(@NonNull ClassDatum classDatum, @NonNull Property property) {
+ return qvtp2qvtg.getPropertyDatum(classDatum, property);
}
public @NonNull StandardLibrary getStandardLibrary() {
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/impl/NodeImpl.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/impl/NodeImpl.java
index c5f7f7221..0f533ce62 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/impl/NodeImpl.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtp2qvts/impl/NodeImpl.java
@@ -536,7 +536,7 @@ public abstract class NodeImpl implements Node
this.region = region;
this.name = name;
this.classDatumAnalysis = classDatumAnalysis;
- this.isDataType = classDatumAnalysis.getClassDatum().getType() instanceof DataType;;
+ this.isDataType = classDatumAnalysis.getCompleteClass().getPrimaryClass() instanceof DataType;
region.addNode(this);
}
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 98335d0a6..5d161847a 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
@@ -80,7 +80,7 @@ public class RootRegion2Mapping extends AbstractScheduledRegion2Mapping
Set<@NonNull ImperativeTypedModel> checkableTypedModels = new HashSet<>();
for (@NonNull Node node : region.getNodes()) {
ClassDatumAnalysis classDatumAnalysis = node.getClassDatumAnalysis();
- Type type = classDatumAnalysis.getClassDatum().getType();
+ org.eclipse.ocl.pivot.Class type = classDatumAnalysis.getCompleteClass().getPrimaryClass();
if (!(type instanceof DataType) && !(type instanceof AnyType) && !(type instanceof VoidType) && !(type instanceof InvalidType)) {
TypedModel qvtpTypedModel = classDatumAnalysis.getTypedModel();
ImperativeTypedModel qvtiTypedModel = visitor.getQVTiTypedModel(qvtpTypedModel);
diff --git a/plugins/org.eclipse.qvtd.pivot.schedule/.classpath b/plugins/org.eclipse.qvtd.pivot.schedule/.classpath
index ffb0862f7..87f791de6 100644
--- a/plugins/org.eclipse.qvtd.pivot.schedule/.classpath
+++ b/plugins/org.eclipse.qvtd.pivot.schedule/.classpath
@@ -11,5 +11,6 @@
</attributes>
</classpathentry>
<classpathentry kind="src" path="emf-gen"/>
+ <!--classpathentry kind="src" path="src"/-->
<classpathentry kind="output" path="bin"/>
</classpath>
diff --git a/plugins/org.eclipse.qvtd.pivot.schedule/emf-gen/org/eclipse/qvtd/pivot/schedule/MappingAction.java b/plugins/org.eclipse.qvtd.pivot.schedule/emf-gen/org/eclipse/qvtd/pivot/schedule/MappingAction.java
index 6c1d6de16..5583e9110 100644
--- a/plugins/org.eclipse.qvtd.pivot.schedule/emf-gen/org/eclipse/qvtd/pivot/schedule/MappingAction.java
+++ b/plugins/org.eclipse.qvtd.pivot.schedule/emf-gen/org/eclipse/qvtd/pivot/schedule/MappingAction.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2015, 2016 Willink Transformations and others.
+ * Copyright (c) 2015 Willink Transformations and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -18,7 +18,7 @@ import org.eclipse.qvtd.pivot.qvtcore.Mapping;
/**
* <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Mapping Action</b></em>'.
+ * A representation of the model object '<em><b>Abstract Action</b></em>'.
* <!-- end-user-doc -->
*
* <p>
diff --git a/plugins/org.eclipse.qvtd.pivot.schedule/emf-gen/org/eclipse/qvtd/pivot/schedule/impl/MappingActionImpl.java b/plugins/org.eclipse.qvtd.pivot.schedule/emf-gen/org/eclipse/qvtd/pivot/schedule/impl/MappingActionImpl.java
index 3176bbd76..4a0d8fe96 100644
--- a/plugins/org.eclipse.qvtd.pivot.schedule/emf-gen/org/eclipse/qvtd/pivot/schedule/impl/MappingActionImpl.java
+++ b/plugins/org.eclipse.qvtd.pivot.schedule/emf-gen/org/eclipse/qvtd/pivot/schedule/impl/MappingActionImpl.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2015, 2016 Willink Transformations and others.
+ * Copyright (c) 2015 Willink Transformations and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -31,7 +31,7 @@ import org.eclipse.qvtd.pivot.schedule.SchedulePackage;
/**
* <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Mapping Action</b></em>'.
+ * An implementation of the model object '<em><b>Abstract Action</b></em>'.
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
@@ -65,6 +65,7 @@ public class MappingActionImpl extends MinimalEObjectImpl.Container implements M
* @ordered
*/
protected EList<AbstractDatum> productions;
+
/**
* The cached value of the '{@link #getRequisites() <em>Requisites</em>}' reference list.
* <!-- begin-user-doc -->

Back to the top