[445071] Maintain allInstances caches for realized variables
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 93b2b7e..cdf4683 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
@@ -16,7 +16,6 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import org.eclipse.emf.ecore.EClassifier;
import org.eclipse.emf.ecore.EPackage;
@@ -46,6 +45,7 @@
import org.eclipse.ocl.pivot.ids.ElementId;
import org.eclipse.ocl.pivot.ids.PropertyId;
import org.eclipse.ocl.pivot.ids.TypeId;
+import org.eclipse.ocl.pivot.internal.manager.MetamodelManager;
import org.eclipse.ocl.pivot.utilities.ClassUtil;
import org.eclipse.ocl.pivot.utilities.NameUtil;
import org.eclipse.ocl.pivot.utilities.ValueUtil;
@@ -89,9 +89,45 @@
*/
public class QVTiCG2JavaVisitor extends CG2JavaVisitor<QVTiCodeGenerator> implements QVTiCGModelVisitor<Boolean>
{
+ protected class MyTransformationAnalysis extends QVTiTransformationAnalysis
+ {
+ protected final @NonNull String classIndex2classIdName;
+ protected final @NonNull String classIndex2allClassIndexesName;
+ protected final @NonNull String classIndex2objectsName;
+ protected final @NonNull String modelObjectsName;
+
+ protected MyTransformationAnalysis(@NonNull MetamodelManager metamodelManager, @NonNull CGTransformation cgTransformation) {
+ super(metamodelManager);
+ @SuppressWarnings("null")@NonNull Transformation transformation = (Transformation) cgTransformation.getAst();
+ analyzeTransformation(transformation);
+ NameManager nameManager = getGlobalContext().getNameManager();
+ classIndex2classIdName = nameManager.getGlobalSymbolName(null, "classIndex2classId");
+ classIndex2allClassIndexesName = nameManager.getGlobalSymbolName(null, "classIndex2allClassIndexes");
+ classIndex2objectsName = "classIndex2objects"; // nameManager.getGlobalSymbolName(null, "classIndex2objects");
+ modelObjectsName = "modelObjects"; // nameManager.getGlobalSymbolName(null, "modelObjects");
+ }
+
+ public @NonNull String getClassIndex2classIdName() {
+ return classIndex2classIdName;
+ }
+
+ public @NonNull String getClassIndex2allClassIndexesName() {
+ return classIndex2allClassIndexesName;
+ }
+
+ public @NonNull String getClassIndex2objectsName() {
+ return classIndex2objectsName;
+ }
+
+ public @NonNull String getModelObjectsName() {
+ return modelObjectsName;
+ }
+ }
+
protected final @NonNull QVTiAnalyzer analyzer;
protected final @NonNull CGPackage cgPackage;
protected final @Nullable List<CGValuedElement> sortedGlobals;
+ private MyTransformationAnalysis transformationAnalysis = null;
public QVTiCG2JavaVisitor(@NonNull QVTiCodeGenerator codeGenerator, @NonNull CGPackage cgPackage,
@Nullable List<CGValuedElement> sortedGlobals) {
@@ -131,26 +167,41 @@
}
CGTypedModel cgTypedModel = cgRealizedVariable.getTypedModel();
//
- js.append("modelObjects[");
+ js.append(transformationAnalysis.getModelObjectsName());
+ js.append("[");
appendModelIndex(cgTypedModel);
js.append("].add(");
js.appendValueName(cgRealizedVariable);
js.append(");\n");
+ if (transformationAnalysis != null) {
+ TypeId typeId = pRealizedVariable.getTypeId();
+ if (typeId instanceof ClassId) {
+ Integer classIndex = transformationAnalysis.getAllInstancesClassIndex((ClassId)typeId);
+ if (classIndex != null) {
+ js.append(transformationAnalysis.getClassIndex2objectsName());
+ js.append("[");
+ js.append(classIndex + "/*" + typeId.getDisplayName() + "*/");
+ js.append("].add(");
+ js.appendValueName(cgRealizedVariable);
+ js.append(");\n");
+ }
+ }
+ }
}
- protected String[] doAllInstances(@NonNull QVTiTransformationAnalysis transformationAnalysis) {
- Set<org.eclipse.ocl.pivot.Class> allInstancesClasses = transformationAnalysis.getAllInstancesClasses();
- if (allInstancesClasses.size() > 0) {
- NameManager nameManager = getGlobalContext().getNameManager();
- Map<org.eclipse.ocl.pivot.Class, List<org.eclipse.ocl.pivot.Class>> instancesClassAnalysis = transformationAnalysis.getInstancesClassAnalysis(allInstancesClasses);
+ protected String[] doAllInstances() {
+// Set<org.eclipse.ocl.pivot.Class> allInstancesClasses = transformationAnalysis.getAllInstancesClasses();
+ Map<ClassId, Integer> allInstancesClassId2classIndex = transformationAnalysis.getAllInstancesClassId2classIndex();
+ if (allInstancesClassId2classIndex.size() > 0) {
+ Map<ClassId, List<ClassId>> instancesClassAnalysis = transformationAnalysis.getInstancesClassAnalysis(transformationAnalysis.getAllInstancesClasses());
//
// Populate a mapping from instancesClass to linear index.
//
- Map<org.eclipse.ocl.pivot.Class, Integer> instancesClass2index = new HashMap<org.eclipse.ocl.pivot.Class, Integer>(instancesClassAnalysis.size());
- List<org.eclipse.ocl.pivot.Class> sortedList = new ArrayList<org.eclipse.ocl.pivot.Class>(instancesClassAnalysis.keySet());
- Collections.sort(sortedList, NameUtil.NameableComparator.INSTANCE);
- for (int i = 0; i < sortedList.size(); i++) {
- instancesClass2index.put(sortedList.get(i), i);
+// Map<org.eclipse.ocl.pivot.Class, Integer> instancesClass2index = new HashMap<org.eclipse.ocl.pivot.Class, Integer>(instancesClassAnalysis.size());
+ ClassId[] classIndex2classId = new ClassId[allInstancesClassId2classIndex.size()];
+// Collections.sort(sortedList, NameUtil.NameableComparator.INSTANCE);
+ for (ClassId classId : allInstancesClassId2classIndex.keySet()) {
+ classIndex2classId[allInstancesClassId2classIndex.get(classId)] = classId;
}
//
// Emit the ClassId array
@@ -158,32 +209,30 @@
js.append("/*\n");
js.append(" * Array of the ClassIds of each class for which allInstances() may be invoked. Array index is the ClassIndex.\n");
js.append(" */\n");
- String classIndex2classIdName = nameManager.getGlobalSymbolName(null, "classIndex2classId");
js.append("private static final ");
js.appendIsRequired(true);
js.append(" ");
js.appendClassReference(ClassId.class);
js.append("[] ");
- js.append(classIndex2classIdName);
+ js.append(transformationAnalysis.getClassIndex2classIdName());
js.append(" = new ");
js.appendClassReference(ClassId.class);
js.append("[]{\n");
js.pushIndentation(null);
- for (int i = 0; i < sortedList.size(); i++) {
- org.eclipse.ocl.pivot.Class instancesClass = sortedList.get(i);
- CGTypeId cgTypeId = getCodeGenerator().getAnalyzer().getTypeId(instancesClass.getTypeId());
+ for (int i = 0; i < classIndex2classId.length; i++) {
+ @SuppressWarnings("null")@NonNull ClassId instancesClassId = classIndex2classId[i];
+ CGTypeId cgTypeId = getCodeGenerator().getAnalyzer().getTypeId(instancesClassId);
js.appendValueName(cgTypeId);
- if ((i+1) < sortedList.size()) {
+ if ((i+1) < classIndex2classId.length) {
js.append(",");
}
- js.append("\t\t// " + i + " => " + instancesClass.getName() + "\n");
+ js.append("\t\t// " + i + " => " + instancesClassId.getDisplayName() + "\n");
}
js.popIndentation();
js.append("};\n");
//
// Emit the classIndex2allClassIndexes array of arrays
//
- String classIndex2allClassIndexes = nameManager.getGlobalSymbolName(null, "classIndex2allClassIndexes");
js.append("/*\n");
js.append(" * Mapping from each ClassIndex to all the ClassIndexes to which an object of the outer index\n");
js.append(" * may contribute results to an allInstances() invocation.\n");
@@ -195,43 +244,43 @@
js.append(" ");
js.appendClassReference(int.class);
js.append("[][] ");
- js.append(classIndex2allClassIndexes);
+ js.append(transformationAnalysis.getClassIndex2allClassIndexesName());
js.append(" = new ");
js.appendClassReference(int.class);
js.append("[][] {\n");
js.pushIndentation(null);
- for (int i = 0; i < sortedList.size(); i++) {
- org.eclipse.ocl.pivot.Class instancesClass = sortedList.get(i);
- List<org.eclipse.ocl.pivot.Class> superInstancesClasses = instancesClassAnalysis.get(instancesClass);
+ for (int i = 0; i < classIndex2classId.length; i++) {
+ ClassId instancesClassId = classIndex2classId[i];
+ List<ClassId> superInstancesClassIds = instancesClassAnalysis.get(instancesClassId);
js.append("{");
boolean isFirst = true;
- for (org.eclipse.ocl.pivot.Class superInstancesClass : superInstancesClasses) {
+ for (ClassId superInstancesClassId : superInstancesClassIds) {
if (!isFirst) {
js.append(",");
}
- js.append("" + instancesClass2index.get(superInstancesClass));
+ js.append("" + allInstancesClassId2classIndex.get(superInstancesClassId));
isFirst = false;
}
js.append("}");
- if ((i+1) < sortedList.size()) {
+ if ((i+1) < classIndex2classId.length) {
js.append(",");
}
js.append("\t\t// " + i + " : ");
- js.append(instancesClass.getName());
+ js.append(instancesClassId.getDisplayName());
js.append(" -> {");
isFirst = true;
- for (org.eclipse.ocl.pivot.Class superInstancesClass : superInstancesClasses) {
+ for (ClassId superInstancesClassId : superInstancesClassIds) {
if (!isFirst) {
js.append(",");
}
- js.append(superInstancesClass.getName());
+ js.append(superInstancesClassId.getDisplayName());
isFirst = false;
}
js.append("}\n");
}
js.popIndentation();
js.append("};\n");
- return new String[]{ classIndex2classIdName, classIndex2allClassIndexes};
+ return new String[]{ transformationAnalysis.getClassIndex2classIdName(), transformationAnalysis.getClassIndex2allClassIndexesName()};
}
return null;
}
@@ -306,7 +355,7 @@
}
}
- protected @Nullable String doOppositeCaches(@NonNull QVTiTransformationAnalysis transformationAnalysis) {
+ protected @Nullable String doOppositeCaches() {
Map<Property, Integer> opposites = transformationAnalysis.getOpposites();
if (opposites.size() <= 0) {
return null;
@@ -982,9 +1031,7 @@
@Override
public @NonNull Boolean visitCGTransformation(@NonNull CGTransformation cgTransformation) {
- QVTiTransformationAnalysis transformationAnalysis = new QVTiTransformationAnalysis(getMetamodelManager());
- @SuppressWarnings("null")@NonNull Transformation transformation = (Transformation) cgTransformation.getAst();
- transformationAnalysis.analyzeTransformation(transformation);
+ transformationAnalysis = new MyTransformationAnalysis(getMetamodelManager(), cgTransformation);
String className = cgTransformation.getName();
js.append("/**\n");
js.append(" * The " + className + " transformation:\n");
@@ -1011,9 +1058,9 @@
}
doMiddleOppositeCaches();
js.append("\n");
- String oppositeName = doOppositeCaches(transformationAnalysis);
+ String oppositeName = doOppositeCaches();
js.append("\n");
- String[] allInstancesNames = doAllInstances(transformationAnalysis);
+ String[] allInstancesNames = doAllInstances();
js.append("\n");
doConstructor(cgTransformation, oppositeName, allInstancesNames);
js.append("\n");
@@ -1028,6 +1075,7 @@
}
js.popIndentation();
js.append("}\n");
+ transformationAnalysis = null;
return true;
}
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtbase/src/org/eclipse/qvtd/pivot/qvtbase/evaluation/AbstractTransformationExecutor.java b/plugins/org.eclipse.qvtd.pivot.qvtbase/src/org/eclipse/qvtd/pivot/qvtbase/evaluation/AbstractTransformationExecutor.java
index be4c259..6419173 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtbase/src/org/eclipse/qvtd/pivot/qvtbase/evaluation/AbstractTransformationExecutor.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtbase/src/org/eclipse/qvtd/pivot/qvtbase/evaluation/AbstractTransformationExecutor.java
@@ -43,6 +43,10 @@
protected final @NonNull IdResolver idResolver;
protected final @NonNull List<EObject>[] modelObjects;
protected final @NonNull Map<String, Integer> modelIndexes = new HashMap<String, Integer>();
+ /**
+ * All possible allInstances() returns indexed by the ClassIndex of the ClassId for which allInstances() may be invoked.
+ */
+ protected final @NonNull Set<EObject>[] classIndex2objects;
/**
* Unchanging configured list PropertyId for which unnavigable opposite navigation may occur indexed by the PropertyIndex for that PropertyId.
@@ -77,10 +81,6 @@
*/
private final @Nullable Map<ClassId, Set<Integer>> classId2classIndexes;
- /**
- * All possible allInstances() returns indexed by the ClassIndex of the ClassId for which allInstances() may be invoked.
- */
- private final @Nullable Set<EObject>[] classIndex2objects;
protected AbstractTransformationExecutor(@NonNull Evaluator evaluator, @NonNull String[] modelNames,
@Nullable PropertyId[] propertyIndex2propertyId, @Nullable ClassId[] classIndex2classId, @Nullable int[][] classIndex2allClassIndexes) {
@@ -142,7 +142,8 @@
else {
this.classId2classIndex = null;
this.classId2classIndexes = null;
- this.classIndex2objects = null;
+ @SuppressWarnings("unchecked")Set<EObject>[] classIndex2objects = (Set<EObject>[]) new HashSet<?>[0];
+ this.classIndex2objects = classIndex2objects;
}
}
@@ -204,7 +205,7 @@
Map<EClass, Set<Integer>> eClass2allClassIndexes = null;
Map<EClass, List<Integer>> eClass2allPropertyIndexes = null;
Map<EReference, Integer> eReference2propertyIndex = null;
- if ((classId2classIndexes != null) && (classIndex2objects != null)) {
+ if (classId2classIndexes != null) {
eClass2allClassIndexes = new HashMap<EClass, Set<Integer>>();
}
if (propertyIndex2propertyId != null) {
@@ -237,7 +238,7 @@
public @NonNull Set<EObject> get(@NonNull org.eclipse.ocl.pivot.Class type) {
Map<ClassId, Integer> classId2classIndex2 = classId2classIndex;
Set<EObject>[] classIndex2objects2 = classIndex2objects;
- if ((classId2classIndex2 == null) || (classIndex2objects2 == null)) {
+ if (classId2classIndex2 == null) {
throw new IllegalArgumentException("No allInstances() support");
}
ClassId classId = IdManager.getClassId(type);
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/META-INF/MANIFEST.MF b/plugins/org.eclipse.qvtd.pivot.qvtimperative/META-INF/MANIFEST.MF
index abeff01..dedfbe3 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtimperative/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/META-INF/MANIFEST.MF
@@ -15,7 +15,8 @@
org.eclipse.qvtd.pivot.qvtimperative.util,
org.eclipse.qvtd.pivot.qvtimperative.utilities
Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
- org.eclipse.qvtd.pivot.qvtcorebase;visibility:=reexport
+ org.eclipse.qvtd.pivot.qvtcorebase;visibility:=reexport,
+ org.eclipse.ocl.pivot
Bundle-ActivationPolicy: lazy
Import-Package: com.google.inject,
org.apache.log4j;version="1.2.15"
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiTransformationAnalysis.java b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiTransformationAnalysis.java
index b7bfa3a..04ec371 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiTransformationAnalysis.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiTransformationAnalysis.java
@@ -11,6 +11,7 @@
package org.eclipse.qvtd.pivot.qvtimperative.evaluation;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -20,6 +21,7 @@
import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.ocl.pivot.CompleteClass;
import org.eclipse.ocl.pivot.OCLExpression;
import org.eclipse.ocl.pivot.Operation;
@@ -27,8 +29,11 @@
import org.eclipse.ocl.pivot.OppositePropertyCallExp;
import org.eclipse.ocl.pivot.Property;
import org.eclipse.ocl.pivot.Type;
+import org.eclipse.ocl.pivot.ids.ClassId;
+import org.eclipse.ocl.pivot.ids.ElementId;
import org.eclipse.ocl.pivot.ids.IdManager;
import org.eclipse.ocl.pivot.ids.OperationId;
+import org.eclipse.ocl.pivot.ids.TypeId;
import org.eclipse.ocl.pivot.internal.manager.MetamodelManager;
import org.eclipse.qvtd.pivot.qvtbase.Transformation;
import org.eclipse.qvtd.pivot.qvtimperative.MiddlePropertyAssignment;
@@ -54,6 +59,11 @@
private @NonNull Set<org.eclipse.ocl.pivot.Class> allInstancesClasses = new HashSet<org.eclipse.ocl.pivot.Class>();
/**
+ * Mapping from all the ClassIds of all types for which allInstnaces() may be invoked to a distinct class-index.
+ */
+ private @Nullable Map<ClassId, Integer> allInstancesClassId2classIndex = null;
+
+ /**
* Map from navigable property to sequential index.
*/
private @NonNull Map<Property, Integer> property2cacheIndex = new HashMap<Property, Integer>();
@@ -130,6 +140,29 @@
return allInstancesClasses;
}
+ public @NonNull Map<ClassId, Integer> getAllInstancesClassId2classIndex() {
+ Map<ClassId, Integer> allInstancesClassId2classIndex2 = allInstancesClassId2classIndex;
+ if (allInstancesClassId2classIndex2 == null) {
+ allInstancesClassId2classIndex = allInstancesClassId2classIndex2 = new HashMap<ClassId, Integer>();
+ List<ClassId> classIds = new ArrayList<ClassId>();
+ for (org.eclipse.ocl.pivot.Class asClass : getAllInstancesClasses()) {
+ TypeId typeId = asClass.getTypeId();
+ if (typeId instanceof ClassId) {
+ classIds.add((ClassId) typeId);
+ }
+ }
+ Collections.sort(classIds, ElementId.ElementIdComparator.INSTANCE);
+ for (int i = 0; i < classIds.size(); i++) {
+ allInstancesClassId2classIndex2.put(classIds.get(i), i);
+ }
+ }
+ return allInstancesClassId2classIndex2;
+ }
+
+ public @Nullable Integer getAllInstancesClassIndex(@NonNull ClassId classId) {
+ return getAllInstancesClassId2classIndex().get(classId);
+ }
+
protected int getCacheIndex(@NonNull Property navigableProperty) {
Integer cacheIndex = property2cacheIndex.get(navigableProperty);
if (cacheIndex == null) {
@@ -146,22 +179,23 @@
/**
* Return a Map from each instanceClasses to the subset of instanceClasses that are transitive superClasses of the particular instanceClass.
*/
- public @NonNull Map<org.eclipse.ocl.pivot.Class, List<org.eclipse.ocl.pivot.Class>> getInstancesClassAnalysis(@NonNull Iterable<org.eclipse.ocl.pivot.Class> instanceClasses) {
- Map<org.eclipse.ocl.pivot.Class, List<org.eclipse.ocl.pivot.Class>> instancesClassAnalysis = new HashMap<org.eclipse.ocl.pivot.Class, List<org.eclipse.ocl.pivot.Class>>();
+ public @NonNull Map<ClassId, List<ClassId>> getInstancesClassAnalysis(@NonNull Iterable<org.eclipse.ocl.pivot.Class> instanceClasses) {
+ Map<ClassId, List<ClassId>> instancesClassAnalysis = new HashMap<ClassId, List<ClassId>>();
for (@SuppressWarnings("null")@NonNull org.eclipse.ocl.pivot.Class instanceClass : instanceClasses) {
CompleteClass completeInstanceClass = metamodelManager.getCompleteClass(instanceClass);
- instancesClassAnalysis.put(completeInstanceClass.getPivotClass(), null);
+ instancesClassAnalysis.put((ClassId) completeInstanceClass.getPivotClass().getTypeId(), null);
}
- for (@SuppressWarnings("null")@NonNull org.eclipse.ocl.pivot.Class instanceClass : instancesClassAnalysis.keySet()) {
- List<org.eclipse.ocl.pivot.Class> superInstanceClasses = new ArrayList<org.eclipse.ocl.pivot.Class>();
- superInstanceClasses.add(instanceClass);
+ for (@SuppressWarnings("null")@NonNull org.eclipse.ocl.pivot.Class instanceClass : instanceClasses) {
+ List<ClassId> superInstanceClassIds = new ArrayList<ClassId>();
+ ClassId instanceClassId = (ClassId)instanceClass.getTypeId();
+ superInstanceClassIds.add(instanceClassId);
CompleteClass completeClass = metamodelManager.getCompleteClass(instanceClass);
for (CompleteClass superCompleteClass : completeClass.getProperSuperCompleteClasses()) {
org.eclipse.ocl.pivot.Class superClass = superCompleteClass.getPivotClass();
if (instancesClassAnalysis.containsKey(superClass)) {
- superInstanceClasses.add(superClass);
+ superInstanceClassIds.add((ClassId) superClass.getTypeId());
}
- instancesClassAnalysis.put(instanceClass, superInstanceClasses);
+ instancesClassAnalysis.put(instanceClassId, superInstanceClassIds);
}
}
return instancesClassAnalysis;
diff --git a/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src-gen/cg/classescs2as.java b/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src-gen/cg/classescs2as.java
index 65e9179..65aa0c7 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src-gen/cg/classescs2as.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src-gen/cg/classescs2as.java
@@ -166,6 +166,7 @@
final /*@Thrown*/ ClassCS2Class c2c_0 = ClassescstracesFactory.eINSTANCE.createClassCS2Class();
assert c2c_0 != null;
modelObjects[2/*middle*/].add(c2c_0);
+ classIndex2objects[2/*ClassCS2Class*/].add(c2c_0);
// assignments
c2c_0.setClassCS(classCS);
OPPOSITE_OF_ClassCS2Class_classCS.put(classCS, c2c_0);
@@ -205,6 +206,7 @@
final /*@Thrown*/ RootCS2Root r2r_0 = ClassescstracesFactory.eINSTANCE.createRootCS2Root();
assert r2r_0 != null;
modelObjects[2/*middle*/].add(r2r_0);
+ classIndex2objects[8/*RootCS2Root*/].add(r2r_0);
// assignments
r2r_0.setRootCS(rootCS);
OPPOSITE_OF_RootCS2Root_rootCS.put(rootCS, r2r_0);
@@ -244,6 +246,7 @@
final /*@Thrown*/ PackageCS2Package p2p_0 = ClassescstracesFactory.eINSTANCE.createPackageCS2Package();
assert p2p_0 != null;
modelObjects[2/*middle*/].add(p2p_0);
+ classIndex2objects[5/*PackageCS2Package*/].add(p2p_0);
// assignments
p2p_0.setPackageCS(packageCS);
OPPOSITE_OF_PackageCS2Package_packageCS.put(packageCS, p2p_0);
@@ -283,6 +286,7 @@
final /*@Thrown*/ classes.Class symbol_3 = ClassesFactory.eINSTANCE.createClass();
assert symbol_3 != null;
modelObjects[1/*rightAS*/].add(symbol_3);
+ classIndex2objects[0/*Class*/].add(symbol_3);
// assignments
c2c.setClass(symbol_3);
// mapping statements
@@ -321,6 +325,7 @@
final /*@Thrown*/ Root root_0 = ClassesFactory.eINSTANCE.createRoot();
assert root_0 != null;
modelObjects[1/*rightAS*/].add(root_0);
+ classIndex2objects[6/*Root*/].add(root_0);
// assignments
r2r.setRoot(root_0);
// mapping statements
@@ -359,6 +364,7 @@
final /*@Thrown*/ Package symbol_3 = ClassesFactory.eINSTANCE.createPackage();
assert symbol_3 != null;
modelObjects[1/*rightAS*/].add(symbol_3);
+ classIndex2objects[3/*Package*/].add(symbol_3);
// assignments
p2p.setPackage(symbol_3);
// mapping statements