diff options
author | Ansgar Radermacher | 2013-10-17 14:54:02 +0000 |
---|---|---|
committer | Ansgar Radermacher | 2013-10-17 14:54:58 +0000 |
commit | 97005156ff1ca6f15b36c66621cfb0d06cb9c12b (patch) | |
tree | 99697718fab180573593034cdb07265364edb7f3 | |
parent | 0fa72536e909919d9e2680a3e5dff8657e4ffc07 (diff) | |
download | org.eclipse.papyrus-97005156ff1ca6f15b36c66621cfb0d06cb9c12b.tar.gz org.eclipse.papyrus-97005156ff1ca6f15b36c66621cfb0d06cb9c12b.tar.xz org.eclipse.papyrus-97005156ff1ca6f15b36c66621cfb0d06cb9c12b.zip |
- Fixed bug 418999 - [C++ codegen] TestCDTintegration.uml contains unresolved pathmap
2 files changed, 21 insertions, 2 deletions
diff --git a/extraplugins/codegen/org.eclipse.papyrus.texteditor.cdt/src/org/eclipse/papyrus/texteditor/cdt/sync/SyncCDTtoModel.java b/extraplugins/codegen/org.eclipse.papyrus.texteditor.cdt/src/org/eclipse/papyrus/texteditor/cdt/sync/SyncCDTtoModel.java index 258d2875f9c..5139092ab1d 100644 --- a/extraplugins/codegen/org.eclipse.papyrus.texteditor.cdt/src/org/eclipse/papyrus/texteditor/cdt/sync/SyncCDTtoModel.java +++ b/extraplugins/codegen/org.eclipse.papyrus.texteditor.cdt/src/org/eclipse/papyrus/texteditor/cdt/sync/SyncCDTtoModel.java @@ -53,6 +53,7 @@ import org.eclipse.papyrus.infra.core.Activator; import org.eclipse.papyrus.texteditor.cdt.CommandSupport; import org.eclipse.papyrus.texteditor.cdt.Utils; import org.eclipse.papyrus.texteditor.cdt.listener.ModelListener; +import org.eclipse.papyrus.uml.tools.utils.UMLUtil; import org.eclipse.ui.IEditorInput; import org.eclipse.uml2.uml.Class; import org.eclipse.uml2.uml.Classifier; @@ -278,8 +279,10 @@ public class SyncCDTtoModel implements Runnable { } } - operation.getOwnedParameters().clear(); - ob.getOwnedParameters().clear(); + // a parameters.clear() is not sufficient. Otherwise stereotype applications to unresolved elements remain in the model + UMLUtil.destroyElements(operation.getOwnedParameters()); + UMLUtil.destroyElements(ob.getOwnedParameters()); + for(IASTNode declaratorChild : declarator.getChildren()) { if(declaratorChild instanceof IASTParameterDeclaration) { IASTParameterDeclaration parameter = (IASTParameterDeclaration)declaratorChild; diff --git a/plugins/uml/tools/org.eclipse.papyrus.uml.tools.utils/src/org/eclipse/papyrus/uml/tools/utils/UMLUtil.java b/plugins/uml/tools/org.eclipse.papyrus.uml.tools.utils/src/org/eclipse/papyrus/uml/tools/utils/UMLUtil.java index 0731ffe2c82..c55ee29d47f 100644 --- a/plugins/uml/tools/org.eclipse.papyrus.uml.tools.utils/src/org/eclipse/papyrus/uml/tools/utils/UMLUtil.java +++ b/plugins/uml/tools/org.eclipse.papyrus.uml.tools.utils/src/org/eclipse/papyrus/uml/tools/utils/UMLUtil.java @@ -17,6 +17,8 @@ import java.util.LinkedList; import java.util.List;
import java.util.Set;
+import org.eclipse.emf.common.util.BasicEList;
+import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
@@ -321,4 +323,18 @@ public class UMLUtil { return UMLUtil.getContextClassForMessageOccurrence(referer);
}
+
+ /**
+ * Destroy all elements in a given list
+ *
+ * @param list a list of elements
+ */
+ public static void destroyElements(EList<? extends Element> list) {
+ BasicEList<Element> listCopy = new BasicEList<Element>();
+ // loop on copy in order to avoid iterator exception
+ listCopy.addAll(list);
+ for (Element element : listCopy) {
+ element.destroy();
+ }
+ }
}
|