[140003] Adding better handling of event occurrences during load.
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/resource/UML22UMLResourceHandler.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/resource/UML22UMLResourceHandler.java
index aadcd94..9039a7c 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/resource/UML22UMLResourceHandler.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/resource/UML22UMLResourceHandler.java
@@ -8,7 +8,7 @@
* Contributors:
* IBM - initial API and implementation
*
- * $Id: UML22UMLResourceHandler.java,v 1.17 2006/05/10 17:12:14 khussey Exp $
+ * $Id: UML22UMLResourceHandler.java,v 1.18 2006/05/11 00:48:42 khussey Exp $
*/
package org.eclipse.uml2.uml.resource;
@@ -232,10 +232,11 @@
.getEAllStructuralFeatures().iterator(); eAllStructuralFeatures
.hasNext();) {
- EStructuralFeature eStructuralFeature = (EStructuralFeature) eAllStructuralFeatures
+ EStructuralFeature.Internal eStructuralFeature = (EStructuralFeature.Internal) eAllStructuralFeatures
.next();
if (eStructuralFeature.isChangeable()
+ && eStructuralFeature.getEOpposite() == null
&& eObject.eIsSet(eStructuralFeature)) {
try {
@@ -251,11 +252,10 @@
}
}
- for (Iterator nonNavigableInverseReferences = UML2Util
- .getNonNavigableInverseReferences(eObject).iterator(); nonNavigableInverseReferences
- .hasNext();) {
+ for (Iterator inverseReferences = UML2Util.getInverseReferences(
+ eObject).iterator(); inverseReferences.hasNext();) {
- EStructuralFeature.Setting setting = (EStructuralFeature.Setting) nonNavigableInverseReferences
+ EStructuralFeature.Setting setting = (EStructuralFeature.Setting) inverseReferences
.next();
EStructuralFeature eStructuralFeature = setting
.getEStructuralFeature();
@@ -555,8 +555,10 @@
executionOccurrenceSpecification.setEvent(executionEvent);
}
- return super
- .caseExecutionOccurrenceSpecification(executionOccurrenceSpecification);
+ defaultCase(executionOccurrenceSpecification);
+ caseNamedElement(executionOccurrenceSpecification);
+
+ return executionOccurrenceSpecification;
}
public Object caseExtensionEnd(ExtensionEnd extensionEnd) {
@@ -699,6 +701,16 @@
"finishExec", true); //$NON-NLS-1$
}
+ if (values.isEmpty()) {
+ OccurrenceSpecification occurrenceSpecification = (OccurrenceSpecification) reincarnate(
+ messageOccurrenceSpecification,
+ UMLPackage.Literals.OCCURRENCE_SPECIFICATION);
+
+ resource.setID(occurrenceSpecification, id);
+
+ return caseOccurrenceSpecification(occurrenceSpecification);
+ }
+
for (Iterator v = values.iterator(); v.hasNext();) {
Object value = v.next();
@@ -707,6 +719,20 @@
.getEObject((String) value);
if (eObject instanceof ExecutionSpecification) {
+ ExecutionSpecification execution = (ExecutionSpecification) eObject;
+
+ if (execution.getFinish() == messageOccurrenceSpecification) {
+ OccurrenceSpecification start = execution
+ .getStart();
+
+ if (start instanceof MessageOccurrenceSpecification
+ && ((MessageOccurrenceSpecification) start)
+ .getMessage() != null) {
+
+ break;
+ }
+ }
+
ExecutionOccurrenceSpecification executionOccurrenceSpecification = (ExecutionOccurrenceSpecification) reincarnate(
messageOccurrenceSpecification,
UMLPackage.Literals.EXECUTION_OCCURRENCE_SPECIFICATION);
@@ -715,21 +741,13 @@
executionOccurrenceSpecification, id);
executionOccurrenceSpecification
- .setExecution((ExecutionSpecification) eObject);
+ .setExecution(execution);
return caseExecutionOccurrenceSpecification(executionOccurrenceSpecification);
}
}
}
}
-
- OccurrenceSpecification occurrenceSpecification = (OccurrenceSpecification) reincarnate(
- messageOccurrenceSpecification,
- UMLPackage.Literals.OCCURRENCE_SPECIFICATION);
-
- resource.setID(occurrenceSpecification, id);
-
- return caseOccurrenceSpecification(occurrenceSpecification);
} else {
org.eclipse.uml2.uml.Package nearestPackage = messageOccurrenceSpecification
.getNearestPackage();
@@ -942,8 +960,10 @@
}
}
- return super
- .caseMessageOccurrenceSpecification(messageOccurrenceSpecification);
+ defaultCase(messageOccurrenceSpecification);
+ caseNamedElement(messageOccurrenceSpecification);
+
+ return messageOccurrenceSpecification;
}
public Object caseNamespace(Namespace namespace) {
@@ -991,8 +1011,10 @@
}
}
- return super
- .caseOccurrenceSpecification(occurrenceSpecification);
+ defaultCase(occurrenceSpecification);
+ caseNamedElement(occurrenceSpecification);
+
+ return occurrenceSpecification;
}
public Object caseOpaqueAction(OpaqueAction opaqueAction) {