Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEd Willink2016-11-12 16:06:49 +0000
committerEd Willink2016-12-20 21:48:39 +0000
commita683d2c73813087c92d40c7cadc377cc017cc3e9 (patch)
tree7bc983219dd5f287d2296be29e593337bad581a2
parent78f79d5593d8bac94ecaa88552443257d16d5c98 (diff)
downloadorg.eclipse.qvtd-a683d2c73813087c92d40c7cadc377cc017cc3e9.tar.gz
org.eclipse.qvtd-a683d2c73813087c92d40c7cadc377cc017cc3e9.tar.xz
org.eclipse.qvtd-a683d2c73813087c92d40c7cadc377cc017cc3e9.zip
[500962] Support remove objects
-rw-r--r--plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiModelsManager.java2
-rw-r--r--plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/TypedModelInstance.java26
-rw-r--r--plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/internal/evaluation/AbstractTransformerInternal.java86
-rw-r--r--plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/library/model/AllObjectsOperation.java8
-rw-r--r--plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/library/model/ModelObjectsOfKindOperation.java2
-rw-r--r--plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/library/model/ModelObjectsOfTypeOperation.java2
-rw-r--r--plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/library/model/RootObjectsOperation.java2
7 files changed, 79 insertions, 49 deletions
diff --git a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiModelsManager.java b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiModelsManager.java
index 9bed9a922..f90d3213a 100644
--- a/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiModelsManager.java
+++ b/plugins/org.eclipse.qvtd.pivot.qvtimperative/src/org/eclipse/qvtd/pivot/qvtimperative/evaluation/QVTiModelsManager.java
@@ -398,7 +398,7 @@ public class QVTiModelsManager
}
@Override
- public @NonNull Set<@NonNull Object> getAllObjects() {
+ public @NonNull Iterable<@NonNull Object> getAllObjects() {
throw new UnsupportedOperationException();
}
diff --git a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/TypedModelInstance.java b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/TypedModelInstance.java
index c65c4e52c..24c503cec 100644
--- a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/TypedModelInstance.java
+++ b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/evaluation/TypedModelInstance.java
@@ -23,9 +23,33 @@ import org.eclipse.jdt.annotation.Nullable;
*/
public interface TypedModelInstance
{
- @NonNull Collection<@NonNull ? extends Object> getAllObjects();
+ /**
+ * This is solely used by the Model::allObjects Operation which is not needed by synthesized QVTr.
+ * @deprecated
+ */
+ @Deprecated
+ @NonNull Iterable<@NonNull ? extends Object> getAllObjects();
+
@Nullable String getName();
+
+ /**
+ * This is solely used by the Model::objectsOfKind Operation which is not needed by synthesized QVTr.
+ * @deprecated
+ */
+ @Deprecated
@NonNull Iterable<@NonNull ? extends Object> getObjectsOfKind(org.eclipse.ocl.pivot.@NonNull Class type);
+
+ /**
+ * This is solely used by the Model::objectsOfType Operation which is not needed by synthesized QVTr.
+ * @deprecated
+ */
+ @Deprecated
@NonNull Collection<@NonNull ? extends Object> getObjectsOfType(org.eclipse.ocl.pivot.@NonNull Class type);
+
+ /**
+ * This is solely used by the Model::rootObjects Operation which is not needed by synthesized QVTr.
+ * @deprecated
+ */
+ @Deprecated
@NonNull Collection<@NonNull ? extends Object> getRootObjects();
}
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 098043d1c..a405199f0 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
@@ -101,17 +101,8 @@ public abstract class AbstractTransformerInternal /*extends AbstractModelManager
}
public void remove(@NonNull EObject eObject) {
- List<@NonNull Object> allEObjects2 = allEObjects;
- // if (allEObjects2 == null) {
- // allEObjects = allEObjects2 = new ArrayList<>();
- // }
- // rootEObjects = null;
- assert allEObjects2 != null;
- assert allEObjects2.contains(eObject);
- allEObjects2.remove(eObject);
- // if ((eClass2allClassIndexes == null) && (classId2classIndexes != null) && (classIndex2objects != null)) {
- // eClass2allClassIndexes = new HashMap<>();
- // }
+ rootObjects.remove(eObject);
+ potentialOrphanObjects.remove(eObject);
unaccumulateEObject(eClass2allClassIndexes, null, null, eObject);
}
@@ -160,8 +151,17 @@ public abstract class AbstractTransformerInternal /*extends AbstractModelManager
protected final @NonNull AbstractTransformerInternal transformer;
protected final @NonNull String name;
- protected @Nullable List<@NonNull Object> allEObjects = null;
- private @Nullable List<@NonNull Object> rootEObjects = null;
+
+ /**
+ * The (input) root objects added explicitly by addRootObjects.
+ */
+ protected final @NonNull List<@NonNull Object> rootObjects = new ArrayList<>();
+
+ /**
+ * The objects added by add filtered as defined by trackObjects.
+ */
+ protected final @NonNull List<@NonNull Object> potentialOrphanObjects = new ArrayList<>();
+
protected final @NonNull Map<@NonNull EClass, @NonNull Set<@NonNull Integer>> eClass2allClassIndexes = new HashMap<>();
/**
@@ -264,13 +264,8 @@ public abstract class AbstractTransformerInternal /*extends AbstractModelManager
}
else {
isNotContainedCount++;
- List<@NonNull Object> allEObjects2 = allEObjects;
- if (allEObjects2 == null) {
- allEObjects = allEObjects2 = new ArrayList<>();
- }
- rootEObjects = null;
- assert !allEObjects2.contains(eObject);
- allEObjects2.add(eObject);
+ assert !potentialOrphanObjects.contains(eObject);
+ potentialOrphanObjects.add(eObject);
EClass eClass = transformer.eClass(eObject);
accumulateEObject1(eObject, eClass);
}
@@ -280,11 +275,6 @@ public abstract class AbstractTransformerInternal /*extends AbstractModelManager
* Add eRootObjects to the modelIndex model.
*/
public void addRootObjects(@NonNull Iterable<@NonNull ? extends Object> eRootObjects) {
- List<@NonNull Object> rootEObjects2 = rootEObjects;
- if (rootEObjects2 == null) {
- rootEObjects = rootEObjects2 = new ArrayList<>();
- }
- allEObjects = null;
Map<@NonNull EClass, @NonNull List<@NonNull Integer>> eClass2allPropertyIndexes = null;
Map<@NonNull EReference, @NonNull Integer> eReference2propertyIndex = null;
if (transformer.propertyIndex2propertyId != null) {
@@ -295,7 +285,7 @@ public abstract class AbstractTransformerInternal /*extends AbstractModelManager
//
// Accumulate the root object in the model extent
//
- rootEObjects2.add(eRootObject);
+ rootObjects.add(eRootObject);
//
// Accumulate the root object and all its child objects in the allInstances() returns
//
@@ -317,9 +307,14 @@ public abstract class AbstractTransformerInternal /*extends AbstractModelManager
}
}
+ /**
+ * This is solely used by the Model::allObjects Operation which is not needed by synthesized QVTr.
+ * @deprecated
+ */
+ @Deprecated
@Override
public @NonNull Collection<@NonNull Object> getAllObjects() {
- List<@NonNull Object> allEObjects2 = allEObjects;
+ /* List<@NonNull Object> allEObjects2 = allEObjects;
if (allEObjects2 == null) {
allEObjects = allEObjects2 = new ArrayList<>();
List<@NonNull Object> rootEObjects2 = rootEObjects;
@@ -336,14 +331,19 @@ public abstract class AbstractTransformerInternal /*extends AbstractModelManager
}
}
}
- }
- return allEObjects2;
+ } */
+ return potentialOrphanObjects;
}
public @NonNull Connection getConnection(int classIndex) {
return classIndex2connection[classIndex];
}
+ /**
+ * This is solely used by the Model::objectsOfKind Operation which is not needed by synthesized QVTr.
+ * @deprecated
+ */
+ @Deprecated
@Override
public @NonNull Iterable<@NonNull Object> getObjectsOfKind(org.eclipse.ocl.pivot.@NonNull Class type) {
TypeId classId = type.getTypeId();
@@ -359,6 +359,11 @@ public abstract class AbstractTransformerInternal /*extends AbstractModelManager
return EMPTY_EOBJECT_LIST;
}
+ /**
+ * This is solely used by the Model::objectsOfType Operation which is not needed by synthesized QVTr.
+ * @deprecated
+ */
+ @Deprecated
@Override
public @NonNull Collection<@NonNull Object> getObjectsOfType(org.eclipse.ocl.pivot.@NonNull Class type) {
throw new UnsupportedOperationException();
@@ -389,29 +394,24 @@ public abstract class AbstractTransformerInternal /*extends AbstractModelManager
@Override
public @NonNull Collection<@NonNull Object> getRootObjects() {
- List<@NonNull Object> rootEObjects2 = rootEObjects;
- if (rootEObjects2 == null) {
- rootEObjects = rootEObjects2 = new ArrayList<>();
- List<@NonNull Object> allEObjects2 = allEObjects;
- if (allEObjects2 != null) {
- for (@NonNull Object eObject : allEObjects2) {
- if (transformer.eContainer(eObject) == null) {
- rootEObjects2.add(eObject);
- }
- }
+ if (rootObjects.size() > 0) { // If we have explicit (input) roots
+ return rootObjects;
+ }
+ List<@NonNull Object> rootObjects2 = new ArrayList<>();
+ for (@NonNull Object eObject : potentialOrphanObjects) {
+ if (transformer.eContainer(eObject) == null) {
+ rootObjects2.add(eObject);
}
}
if (AbstractTransformer.CONTAINMENTS.isActive()) {
AbstractTransformer.CONTAINMENTS.println(name + " " + isContainedCount + "/" + (isContainedCount + isNotContainedCount));
}
- return rootEObjects2;
+ return rootObjects2;
}
@Override
public String toString() {
- List<@NonNull Object> rootEObjects2 = rootEObjects;
- List<@NonNull Object> allEObjects2 = allEObjects;
- return name + " " + (rootEObjects2 != null ? rootEObjects2.size() : "null") + "/" + (allEObjects2 != null ? allEObjects2.size() : "null");
+ return name + " " + rootObjects.size();
}
@Override
diff --git a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/library/model/AllObjectsOperation.java b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/library/model/AllObjectsOperation.java
index 134745110..3d2ec4172 100644
--- a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/library/model/AllObjectsOperation.java
+++ b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/library/model/AllObjectsOperation.java
@@ -10,8 +10,6 @@
*******************************************************************************/
package org.eclipse.qvtd.runtime.library.model;
-import java.util.Collection;
-
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.ocl.pivot.evaluation.Executor;
@@ -25,7 +23,9 @@ import org.eclipse.qvtd.runtime.evaluation.TypedModelInstance;
/**
* AllObjectsOperation realises the Model::allObjects() library operation.
+ * @deprecated This is not needed by synthesized QVTr
*/
+@Deprecated
public class AllObjectsOperation extends AbstractUnaryOperation
{
public static final @NonNull AllObjectsOperation INSTANCE = new AllObjectsOperation();
@@ -36,7 +36,7 @@ public class AllObjectsOperation extends AbstractUnaryOperation
throw new InvalidValueException(PivotMessages.TypedValueRequired, "TypedModelInstance", getTypeName(sourceVal));
}
TypedModelInstance typedModelInstance = (TypedModelInstance)sourceVal;
- Collection<@NonNull ? extends Object> results = typedModelInstance.getAllObjects();
- return createSetValue((CollectionTypeId)returnTypeId, results);
+ Iterable<@NonNull ? extends Object> results = typedModelInstance.getAllObjects();
+ return new IterableAsSetValue<Object>((CollectionTypeId)returnTypeId, results);
}
}
diff --git a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/library/model/ModelObjectsOfKindOperation.java b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/library/model/ModelObjectsOfKindOperation.java
index f3f05a958..8d4a1bd83 100644
--- a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/library/model/ModelObjectsOfKindOperation.java
+++ b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/library/model/ModelObjectsOfKindOperation.java
@@ -25,7 +25,9 @@ import com.google.common.collect.Lists;
/**
* ModelObjectsOfKindOperation realises the Model::objectsOfKind() library operation.
+ * @deprecated This is not needed by synthesized QVTr
*/
+@Deprecated
public class ModelObjectsOfKindOperation extends AbstractBinaryOperation
{
public static final @NonNull ModelObjectsOfKindOperation INSTANCE = new ModelObjectsOfKindOperation();
diff --git a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/library/model/ModelObjectsOfTypeOperation.java b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/library/model/ModelObjectsOfTypeOperation.java
index 1630300ad..6bfaa1dcd 100644
--- a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/library/model/ModelObjectsOfTypeOperation.java
+++ b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/library/model/ModelObjectsOfTypeOperation.java
@@ -25,7 +25,9 @@ import org.eclipse.qvtd.runtime.evaluation.TypedModelInstance;
/**
* ModelObjectsOfTypeOperation realises the Model::objectsOfType() library operation.
+ * @deprecated This is not needed by synthesized QVTr
*/
+@Deprecated
public class ModelObjectsOfTypeOperation extends AbstractBinaryOperation
{
public static final @NonNull ModelObjectsOfTypeOperation INSTANCE = new ModelObjectsOfTypeOperation();
diff --git a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/library/model/RootObjectsOperation.java b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/library/model/RootObjectsOperation.java
index 832e841bd..3a7b23a72 100644
--- a/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/library/model/RootObjectsOperation.java
+++ b/plugins/org.eclipse.qvtd.runtime/src/org/eclipse/qvtd/runtime/library/model/RootObjectsOperation.java
@@ -25,7 +25,9 @@ import org.eclipse.qvtd.runtime.evaluation.TypedModelInstance;
/**
* RootObjectsOperation realises the Model::rootObjects() library operation.
+ * @deprecated This is not needed by synthesized QVTr
*/
+@Deprecated
public class RootObjectsOperation extends AbstractUnaryOperation
{
public static final @NonNull RootObjectsOperation INSTANCE = new RootObjectsOperation();

Back to the top