diff options
author | Ed Willink | 2016-11-12 16:06:49 +0000 |
---|---|---|
committer | Ed Willink | 2016-12-20 21:48:39 +0000 |
commit | a683d2c73813087c92d40c7cadc377cc017cc3e9 (patch) | |
tree | 7bc983219dd5f287d2296be29e593337bad581a2 | |
parent | 78f79d5593d8bac94ecaa88552443257d16d5c98 (diff) | |
download | org.eclipse.qvtd-a683d2c73813087c92d40c7cadc377cc017cc3e9.tar.gz org.eclipse.qvtd-a683d2c73813087c92d40c7cadc377cc017cc3e9.tar.xz org.eclipse.qvtd-a683d2c73813087c92d40c7cadc377cc017cc3e9.zip |
[500962] Support remove objects
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(); |