Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEd Willink2016-11-07 11:39:03 +0000
committerEd Willink2016-12-20 21:48:14 +0000
commit7e2c173621430d6cbfe25237845ac9b5ba5fbc4e (patch)
tree73dd4e2c26e8c4ff9c20930853b499cdecd89d67
parent5a47287676404b75bc33eacb01ec878c61d64587 (diff)
downloadorg.eclipse.qvtd-7e2c173621430d6cbfe25237845ac9b5ba5fbc4e.tar.gz
org.eclipse.qvtd-7e2c173621430d6cbfe25237845ac9b5ba5fbc4e.tar.xz
org.eclipse.qvtd-7e2c173621430d6cbfe25237845ac9b5ba5fbc4e.zip
[500962] Simplify Model accumulation
-rw-r--r--plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/AbstractTransformerInternal.java67
1 files changed, 25 insertions, 42 deletions
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 ee39814a8..1f52493d8 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
@@ -87,7 +87,7 @@ public abstract class AbstractTransformerInternal extends AbstractModelManager i
protected final @NonNull String name;
private @Nullable List<@NonNull Object> allEObjects = null;
private @Nullable List<@NonNull Object> rootEObjects = null;
- private @Nullable Map<@NonNull EClass, @NonNull Set<@NonNull Integer>> eClass2allClassIndexes = null;
+ private final @NonNull Map<@NonNull EClass, @NonNull Set<@NonNull Integer>> eClass2allClassIndexes = new HashMap<>();
/**
* All possible allInstances() returns indexed by the ClassIndex of the ClassId for which allInstances() may be invoked.
@@ -99,7 +99,6 @@ public abstract class AbstractTransformerInternal extends AbstractModelManager i
//
// Prepare the allInstances() fields
//
- assert classIndex2allClassIndexes != null;
int classIds = classIndex2classId.length;
@SuppressWarnings("unchecked")@NonNull List<@NonNull Object> @NonNull [] classIndex2objects = (@NonNull List<@NonNull Object> @NonNull []) new @NonNull ArrayList<?> @NonNull [classIds];
this.classIndex2objects = classIndex2objects;
@@ -109,28 +108,26 @@ public abstract class AbstractTransformerInternal extends AbstractModelManager i
}
/**
- * Add eObject to the caches.
- * <p>
- * If eClass2allClassIndexes is non-null, eObject is added to the allInstances() caches potentially updating eClass2allClassIndexes with
- * the state of a new EClass.
- * <p>
- * If eClass2allPropertyIndexes is non-null, eObject is added to the unnavigable opposites caches potentially updating eClass2allPropertyIndexes with
+ * Add eObject to the the allInstances() caches potentially updating eClass2allClassIndexes with
* the state of a new EClass.
*/
-
- private void accumulateEObject1(@NonNull Object eObject, @NonNull EClass eClass, @NonNull Map<@NonNull EClass, @NonNull Set<@NonNull Integer>> eClass2allClassIndexes) {
+ private void accumulateEObject1(@NonNull Object eObject, @NonNull EClass eClass) {
Set<@NonNull Integer> allClassIndexes = eClass2allClassIndexes.get(eClass);
if (allClassIndexes == null) {
allClassIndexes = getClassIndexes(eClass);
eClass2allClassIndexes.put(eClass, allClassIndexes);
}
- List<@NonNull Object>[] classIndex2objects2 = classIndex2objects;
- assert classIndex2objects2 != null;
for (@NonNull Integer classIndex : allClassIndexes) {
- classIndex2objects2[classIndex].add(eObject);
+ classIndex2objects[classIndex].add(eObject);
}
}
+ /**
+ * Add eObject to the caches.
+ * <p>
+ * If eClass2allPropertyIndexes is non-null, eObject is added to the unnavigable opposites caches potentially updating eClass2allPropertyIndexes with
+ * the state of a new EClass.
+ */
private void accumulateEObject2(@NonNull Object eObject, @NonNull EClass eClass,
@NonNull Map<@NonNull EClass, @NonNull List<@NonNull Integer>> eClass2allPropertyIndexes,
@Nullable Map<@NonNull EReference, @NonNull Integer> eReference2propertyIndex) {
@@ -169,13 +166,8 @@ public abstract class AbstractTransformerInternal extends AbstractModelManager i
rootEObjects = null;
assert !allEObjects2.contains(eObject);
allEObjects2.add(eObject);
- if (eClass2allClassIndexes == null) {
- eClass2allClassIndexes = new HashMap<>();
- }
EClass eClass = eClass(eObject);
- if (eClass2allClassIndexes != null) {
- accumulateEObject1(eObject, eClass, eClass2allClassIndexes);
- }
+ accumulateEObject1(eObject, eClass);
}
/**
@@ -187,15 +179,13 @@ public abstract class AbstractTransformerInternal extends AbstractModelManager i
rootEObjects = rootEObjects2 = new ArrayList<>();
}
allEObjects = null;
- Map<@NonNull EClass, @NonNull Set<@NonNull Integer>> eClass2allClassIndexes = new HashMap<>();
Map<@NonNull EClass, @NonNull List<@NonNull Integer>> eClass2allPropertyIndexes = null;
Map<@NonNull EReference, @NonNull Integer> eReference2propertyIndex = null;
- ;
if (propertyIndex2propertyId != null) {
eClass2allPropertyIndexes = new HashMap<>();
eReference2propertyIndex = new HashMap<>();
}
- for (Object eRootObject : eRootObjects) {
+ for (@NonNull Object eRootObject : eRootObjects) {
//
// Accumulate the root object in the model extent
//
@@ -203,24 +193,18 @@ public abstract class AbstractTransformerInternal extends AbstractModelManager i
//
// Accumulate the root object and all its child objects in the allInstances() returns
//
- if ((eClass2allClassIndexes != null) || (eClass2allPropertyIndexes != null)) {
- EClass eRootClass = eClass(eRootObject);
- if (eClass2allClassIndexes != null) {
- accumulateEObject1(eRootObject, eRootClass, eClass2allClassIndexes);
- }
- if (eClass2allPropertyIndexes != null) {
- accumulateEObject2(eRootObject, eRootClass, eClass2allPropertyIndexes, eReference2propertyIndex);
- }
- for (TreeIterator<? extends Object> tit = eAllContents(eRootObject); tit.hasNext(); ) {
- Object eObject = tit.next();
- if (eObject != null) {
- EClass eClass = eClass(eObject);
- if (eClass2allClassIndexes != null) {
- accumulateEObject1(eObject, eClass, eClass2allClassIndexes);
- }
- if (eClass2allPropertyIndexes != null) {
- accumulateEObject2(eObject, eClass, eClass2allPropertyIndexes, eReference2propertyIndex);
- }
+ EClass eRootClass = eClass(eRootObject);
+ accumulateEObject1(eRootObject, eRootClass);
+ if (eClass2allPropertyIndexes != null) {
+ accumulateEObject2(eRootObject, eRootClass, eClass2allPropertyIndexes, eReference2propertyIndex);
+ }
+ for (TreeIterator<? extends Object> tit = eAllContents(eRootObject); tit.hasNext(); ) {
+ Object eObject = tit.next();
+ if (eObject != null) {
+ EClass eClass = eClass(eObject);
+ accumulateEObject1(eObject, eClass);
+ if (eClass2allPropertyIndexes != null) {
+ accumulateEObject2(eObject, eClass, eClass2allPropertyIndexes, eReference2propertyIndex);
}
}
}
@@ -252,9 +236,8 @@ public abstract class AbstractTransformerInternal extends AbstractModelManager i
@Override
public @NonNull Collection<@NonNull Object> getObjectsOfKind(org.eclipse.ocl.pivot.@NonNull Class type) {
- Map<@NonNull ClassId, @NonNull Integer> classId2classIndex2 = classId2classIndex;
TypeId classId = type.getTypeId();
- Integer classIndex = classId2classIndex2.get(classId);
+ Integer classIndex = classId2classIndex.get(classId);
if (classIndex != null) {
return classIndex2objects[classIndex];
}

Back to the top