[158099] Making converters more tolerant of unresolvable proxies.
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/util/UMLUtil.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/util/UMLUtil.java
index 083fae5..0f148f8 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/util/UMLUtil.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/util/UMLUtil.java
@@ -8,7 +8,7 @@
* Contributors:
* IBM - initial API and implementation
*
- * $Id: UMLUtil.java,v 1.35.2.7 2006/09/14 11:50:16 khussey Exp $
+ * $Id: UMLUtil.java,v 1.35.2.8 2006/09/21 03:55:11 khussey Exp $
*/
package org.eclipse.uml2.uml.util;
@@ -1962,9 +1962,7 @@
public Object caseClass(org.eclipse.uml2.uml.Class class_) {
org.eclipse.uml2.uml.Package package_ = class_.getNearestPackage();
- if (package_ == null) {
- return super.caseClass(class_);
- } else {
+ if (package_ != null) {
EClass eClass = EcoreFactory.eINSTANCE.createEClass();
elementToEModelElementMap.put(class_, eClass);
@@ -1979,6 +1977,8 @@
return eClass;
}
+
+ return super.caseClass(class_);
}
public Object caseComment(Comment comment) {
@@ -2079,9 +2079,7 @@
org.eclipse.uml2.uml.Package package_ = enumeration
.getNearestPackage();
- if (package_ == null) {
- return super.caseEnumeration(enumeration);
- } else {
+ if (package_ != null) {
EEnum eEnum = EcoreFactory.eINSTANCE.createEEnum();
elementToEModelElementMap.put(enumeration, eEnum);
@@ -2094,15 +2092,15 @@
return eEnum;
}
+
+ return super.caseEnumeration(enumeration);
}
public Object caseEnumerationLiteral(
EnumerationLiteral enumerationLiteral) {
Enumeration enumeration = enumerationLiteral.getEnumeration();
- if (enumeration == null) {
- return super.caseEnumerationLiteral(enumerationLiteral);
- } else {
+ if (enumeration != null) {
EEnumLiteral eEnumLiteral = EcoreFactory.eINSTANCE
.createEEnumLiteral();
elementToEModelElementMap.put(enumerationLiteral, eEnumLiteral);
@@ -2124,6 +2122,8 @@
return eEnumLiteral;
}
+
+ return super.caseEnumerationLiteral(enumerationLiteral);
}
public Object caseGeneralization(Generalization generalization) {
@@ -2184,9 +2184,7 @@
org.eclipse.uml2.uml.Package package_ = interface_
.getNearestPackage();
- if (package_ == null) {
- return super.caseInterface(interface_);
- } else {
+ if (package_ != null) {
EClass eClass = EcoreFactory.eINSTANCE.createEClass();
elementToEModelElementMap.put(interface_, eClass);
@@ -2202,6 +2200,8 @@
return eClass;
}
+
+ return super.caseInterface(interface_);
}
public Object caseMultiplicityElement(
@@ -2236,11 +2236,9 @@
public Object caseOperation(Operation operation) {
Namespace namespace = operation.getNamespace();
- if (!(namespace instanceof org.eclipse.uml2.uml.Class)
- && !(namespace instanceof Interface)) {
+ if (namespace instanceof org.eclipse.uml2.uml.Class
+ || namespace instanceof Interface) {
- return super.caseOperation(operation);
- } else {
EOperation eOperation = EcoreFactory.eINSTANCE
.createEOperation();
elementToEModelElementMap.put(operation, eOperation);
@@ -2256,7 +2254,11 @@
.getRaisedExceptions().iterator(); raisedExceptions
.hasNext();) {
- eExceptions.add(getEType((Type) raisedExceptions.next()));
+ EClassifier eType = getEType((Type) raisedExceptions.next());
+
+ if (eType != null) {
+ eExceptions.add(eType);
+ }
}
eOperation.setEType(getEType(operation.getType()));
@@ -2280,6 +2282,8 @@
return eOperation;
}
+
+ return super.caseOperation(operation);
}
public Object casePackage(org.eclipse.uml2.uml.Package package_) {
@@ -2319,11 +2323,9 @@
public Object caseParameter(Parameter parameter) {
Operation operation = parameter.getOperation();
- if (operation == null
- || parameter.getDirection() == ParameterDirectionKind.RETURN_LITERAL) {
+ if (operation != null
+ && parameter.getDirection() != ParameterDirectionKind.RETURN_LITERAL) {
- return super.caseParameter(parameter);
- } else {
EParameter eParameter = EcoreFactory.eINSTANCE
.createEParameter();
elementToEModelElementMap.put(parameter, eParameter);
@@ -2340,15 +2342,15 @@
return eParameter;
}
+
+ return super.caseParameter(parameter);
}
public Object casePrimitiveType(PrimitiveType primitiveType) {
org.eclipse.uml2.uml.Package package_ = primitiveType
.getNearestPackage();
- if (package_ == null) {
- return super.casePrimitiveType(primitiveType);
- } else {
+ if (package_ != null) {
EDataType eDataType = EcoreFactory.eINSTANCE.createEDataType();
elementToEModelElementMap.put(primitiveType, eDataType);
@@ -2363,16 +2365,16 @@
return eDataType;
}
+
+ return super.casePrimitiveType(primitiveType);
}
public Object caseProperty(Property property) {
Namespace namespace = property.getNamespace();
- if (!(namespace instanceof org.eclipse.uml2.uml.Class)
- && !(namespace instanceof Interface)) {
+ if (namespace instanceof org.eclipse.uml2.uml.Class
+ || namespace instanceof Interface) {
- return super.caseProperty(property);
- } else {
EStructuralFeature eStructuralFeature = null;
if (property.getType() instanceof DataType) {
@@ -2407,16 +2409,20 @@
if (opposite != null) {
EReference eOpposite = (EReference) doSwitch(opposite);
- if (property.isDerived() && !eOpposite.isDerived()) {
- eOpposite.setDerived(true);
+ if (eOpposite != null) {
- if (DEBUG) {
- System.out.println("Made opposite " //$NON-NLS-1$
- + getQualifiedText(eOpposite) + " derived"); //$NON-NLS-1$
+ if (property.isDerived() && !eOpposite.isDerived()) {
+ eOpposite.setDerived(true);
+
+ if (DEBUG) {
+ System.out.println("Made opposite " //$NON-NLS-1$
+ + getQualifiedText(eOpposite) + " derived"); //$NON-NLS-1$
+ }
}
- }
- ((EReference) eStructuralFeature).setEOpposite(eOpposite);
+ ((EReference) eStructuralFeature)
+ .setEOpposite(eOpposite);
+ }
}
caseTypedElement(property);
@@ -2426,6 +2432,8 @@
return eStructuralFeature;
}
+
+ return super.caseProperty(property);
}
public Object caseTypedElement(TypedElement typedElement) {
@@ -2437,9 +2445,9 @@
eTypedElement.setEType(getEType(typedElement));
return eTypedElement;
- } else {
- return super.caseTypedElement(typedElement);
}
+
+ return super.caseTypedElement(typedElement);
}
public Object defaultCase(EObject eObject) {
@@ -2454,11 +2462,12 @@
}
public Object doSwitch(EObject eObject) {
- Object eModelElement = elementToEModelElementMap.get(eObject);
- return eModelElement == null
- ? super.doSwitch(eObject)
- : eModelElement;
+ if (!elementToEModelElementMap.containsKey(eObject)) {
+ super.doSwitch(eObject);
+ }
+
+ return elementToEModelElementMap.get(eObject);
}
protected void processEcoreTaggedValue(EModelElement eModelElement,
@@ -4624,119 +4633,146 @@
}
public Object caseEAttribute(EAttribute eAttribute) {
- Property property = UMLFactory.eINSTANCE.createProperty();
- eModelElementToElementMap.put(eAttribute, property);
+ EClass eContainingClass = eAttribute.getEContainingClass();
- Classifier classifier = (Classifier) doSwitch(eAttribute
- .getEContainingClass());
- getOwnedAttributes(classifier).add(property);
+ if (eContainingClass != null) {
+ Property property = UMLFactory.eINSTANCE.createProperty();
+ eModelElementToElementMap.put(eAttribute, property);
- property.setName(eAttribute.getName());
- property.setIsReadOnly(!eAttribute.isChangeable());
- property.setIsDerived(eAttribute.isDerived());
- property.setVisibility(VisibilityKind.PUBLIC_LITERAL);
+ Classifier classifier = (Classifier) doSwitch(eContainingClass);
+ getOwnedAttributes(classifier).add(property);
- caseETypedElement(eAttribute);
+ property.setName(eAttribute.getName());
+ property.setIsReadOnly(!eAttribute.isChangeable());
+ property.setIsDerived(eAttribute.isDerived());
+ property.setVisibility(VisibilityKind.PUBLIC_LITERAL);
- defaultCase(eAttribute);
+ caseETypedElement(eAttribute);
- return property;
+ defaultCase(eAttribute);
+
+ return property;
+ }
+
+ return super.caseEAttribute(eAttribute);
}
public Object caseEClass(EClass eClass) {
- Classifier classifier = eClass.isInterface()
- ? (Classifier) UMLFactory.eINSTANCE.createInterface()
- : (Classifier) UMLFactory.eINSTANCE.createClass();
- eModelElementToElementMap.put(eClass, classifier);
+ EPackage ePackage = eClass.getEPackage();
- org.eclipse.uml2.uml.Package package_ = (org.eclipse.uml2.uml.Package) doSwitch(eClass
- .getEPackage());
- package_.getOwnedTypes().add(classifier);
+ if (ePackage != null) {
+ Classifier classifier = eClass.isInterface()
+ ? (Classifier) UMLFactory.eINSTANCE.createInterface()
+ : (Classifier) UMLFactory.eINSTANCE.createClass();
+ eModelElementToElementMap.put(eClass, classifier);
- classifier.setName(eClass.getName());
+ org.eclipse.uml2.uml.Package package_ = (org.eclipse.uml2.uml.Package) doSwitch(ePackage);
+ package_.getOwnedTypes().add(classifier);
- if (!eClass.isInterface()) {
- ((org.eclipse.uml2.uml.Class) classifier).setIsAbstract(eClass
- .isAbstract());
- }
+ classifier.setName(eClass.getName());
- for (Iterator eSuperTypes = eClass.getESuperTypes().iterator(); eSuperTypes
- .hasNext();) {
+ if (!eClass.isInterface()) {
+ ((org.eclipse.uml2.uml.Class) classifier)
+ .setIsAbstract(eClass.isAbstract());
+ }
- EClass eSuperType = (EClass) eSuperTypes.next();
+ for (Iterator eSuperTypes = eClass.getESuperTypes().iterator(); eSuperTypes
+ .hasNext();) {
- if (eSuperType.isInterface()) {
- ((BehavioredClassifier) classifier)
- .createInterfaceRealization(null,
- (Interface) doSwitch(eSuperType));
- } else {
- Classifier generalClassifier = (Classifier) doSwitch(eSuperType);
+ EClass eSuperType = (EClass) eSuperTypes.next();
- if (generalClassifier != null
- && !classifier.allParents().contains(generalClassifier)) {
+ if (eSuperType.isInterface()) {
+ ((BehavioredClassifier) classifier)
+ .createInterfaceRealization(null,
+ (Interface) doSwitch(eSuperType));
+ } else {
+ Classifier generalClassifier = (Classifier) doSwitch(eSuperType);
- classifier.createGeneralization(generalClassifier);
+ if (!classifier.allParents()
+ .contains(generalClassifier)) {
+
+ classifier.createGeneralization(generalClassifier);
+ }
}
}
+
+ defaultCase(eClass);
+
+ return classifier;
}
- defaultCase(eClass);
-
- return classifier;
+ return super.caseEClass(eClass);
}
public Object caseEDataType(EDataType eDataType) {
- PrimitiveType primitiveType = UMLFactory.eINSTANCE
- .createPrimitiveType();
- eModelElementToElementMap.put(eDataType, primitiveType);
+ EPackage ePackage = eDataType.getEPackage();
- org.eclipse.uml2.uml.Package package_ = (org.eclipse.uml2.uml.Package) doSwitch(eDataType
- .getEPackage());
- package_.getOwnedTypes().add(primitiveType);
+ if (ePackage != null) {
+ PrimitiveType primitiveType = UMLFactory.eINSTANCE
+ .createPrimitiveType();
+ eModelElementToElementMap.put(eDataType, primitiveType);
- primitiveType.setName(eDataType.getName());
+ org.eclipse.uml2.uml.Package package_ = (org.eclipse.uml2.uml.Package) doSwitch(ePackage);
+ package_.getOwnedTypes().add(primitiveType);
- defaultCase(eDataType);
+ primitiveType.setName(eDataType.getName());
- return primitiveType;
+ defaultCase(eDataType);
+
+ return primitiveType;
+ }
+
+ return super.caseEDataType(eDataType);
}
public Object caseEEnum(EEnum eEnum) {
- Enumeration enumeration = UMLFactory.eINSTANCE.createEnumeration();
- eModelElementToElementMap.put(eEnum, enumeration);
+ EPackage ePackage = eEnum.getEPackage();
- org.eclipse.uml2.uml.Package package_ = (org.eclipse.uml2.uml.Package) doSwitch(eEnum
- .getEPackage());
- package_.getOwnedTypes().add(enumeration);
+ if (ePackage != null) {
+ Enumeration enumeration = UMLFactory.eINSTANCE
+ .createEnumeration();
+ eModelElementToElementMap.put(eEnum, enumeration);
- enumeration.setName(eEnum.getName());
+ org.eclipse.uml2.uml.Package package_ = (org.eclipse.uml2.uml.Package) doSwitch(ePackage);
+ package_.getOwnedTypes().add(enumeration);
- defaultCase(eEnum);
+ enumeration.setName(eEnum.getName());
- return enumeration;
+ defaultCase(eEnum);
+
+ return enumeration;
+ }
+
+ return super.caseEEnum(eEnum);
}
public Object caseEEnumLiteral(EEnumLiteral eEnumLiteral) {
- EnumerationLiteral enumerationLiteral = UMLFactory.eINSTANCE
- .createEnumerationLiteral();
- eModelElementToElementMap.put(eEnumLiteral, enumerationLiteral);
-
EEnum eEnum = eEnumLiteral.getEEnum();
- Enumeration enumeration = (Enumeration) doSwitch(eEnum);
- enumeration.getOwnedLiterals().add(enumerationLiteral);
- enumerationLiteral.setName(eEnumLiteral.getName());
+ if (eEnum != null) {
+ EnumerationLiteral enumerationLiteral = UMLFactory.eINSTANCE
+ .createEnumerationLiteral();
+ eModelElementToElementMap.put(eEnumLiteral, enumerationLiteral);
- int value = eEnumLiteral.getValue();
+ Enumeration enumeration = (Enumeration) doSwitch(eEnum);
+ enumeration.getOwnedLiterals().add(enumerationLiteral);
- if (value != eEnum.getELiterals().indexOf(eEnumLiteral)) {
- ((LiteralInteger) enumerationLiteral.createSpecification(null,
- null, UMLPackage.Literals.LITERAL_INTEGER)).setValue(value);
+ enumerationLiteral.setName(eEnumLiteral.getName());
+
+ int value = eEnumLiteral.getValue();
+
+ if (value != eEnum.getELiterals().indexOf(eEnumLiteral)) {
+ ((LiteralInteger) enumerationLiteral.createSpecification(
+ null, null, UMLPackage.Literals.LITERAL_INTEGER))
+ .setValue(value);
+ }
+
+ defaultCase(eEnumLiteral);
+
+ return enumerationLiteral;
}
- defaultCase(eEnumLiteral);
-
- return enumerationLiteral;
+ return super.caseEEnumLiteral(eEnumLiteral);
}
public Object caseEModelElement(EModelElement eModelElement) {
@@ -4744,52 +4780,62 @@
}
public Object caseEOperation(EOperation eOperation) {
- Operation operation = UMLFactory.eINSTANCE.createOperation();
- eModelElementToElementMap.put(eOperation, operation);
+ EClass eContainingClass = eOperation.getEContainingClass();
- Classifier classifier = (Classifier) doSwitch(eOperation
- .getEContainingClass());
- getOwnedOperations(classifier).add(operation);
+ if (eContainingClass != null) {
+ Operation operation = UMLFactory.eINSTANCE.createOperation();
+ eModelElementToElementMap.put(eOperation, operation);
- operation.setName(eOperation.getName());
+ Classifier classifier = (Classifier) doSwitch(eContainingClass);
+ getOwnedOperations(classifier).add(operation);
- EClassifier eType = eOperation.getEType();
+ operation.setName(eOperation.getName());
- if (eType != null) {
- operation.createReturnResult(null, getType(eOperation, eType));
+ EClassifier eType = eOperation.getEType();
+
+ if (eType != null) {
+ operation.createReturnResult(null, getType(eOperation,
+ eType));
+ }
+
+ EList raisedExceptions = operation.getRaisedExceptions();
+
+ for (Iterator eExceptions = eOperation.getEExceptions()
+ .iterator(); eExceptions.hasNext();) {
+
+ Type type = getType(eOperation, (EClassifier) eExceptions
+ .next());
+
+ if (type != null) {
+ raisedExceptions.add(type);
+ }
+ }
+
+ operation.setVisibility(VisibilityKind.PUBLIC_LITERAL);
+
+ int upperBound = eOperation.getUpperBound();
+
+ if (upperBound != ETypedElement.UNSPECIFIED_MULTIPLICITY
+ && upperBound != operation.getUpper()) {
+
+ operation.setUpper(upperBound);
+ }
+
+ int lowerBound = eOperation.getLowerBound();
+
+ if (lowerBound != operation.getLower()) {
+ operation.setLower(lowerBound);
+ }
+
+ operation.setIsOrdered(eOperation.isOrdered());
+ operation.setIsUnique(eOperation.isUnique());
+
+ defaultCase(eOperation);
+
+ return operation;
}
- EList raisedExceptions = operation.getRaisedExceptions();
-
- for (Iterator eExceptions = eOperation.getEExceptions().iterator(); eExceptions
- .hasNext();) {
-
- raisedExceptions.add(getType(eOperation,
- (EClassifier) eExceptions.next()));
- }
-
- operation.setVisibility(VisibilityKind.PUBLIC_LITERAL);
-
- int upperBound = eOperation.getUpperBound();
-
- if (upperBound != ETypedElement.UNSPECIFIED_MULTIPLICITY
- && upperBound != operation.getUpper()) {
-
- operation.setUpper(upperBound);
- }
-
- int lowerBound = eOperation.getLowerBound();
-
- if (lowerBound != operation.getLower()) {
- operation.setLower(lowerBound);
- }
-
- operation.setIsOrdered(eOperation.isOrdered());
- operation.setIsUnique(eOperation.isUnique());
-
- defaultCase(eOperation);
-
- return operation;
+ return super.caseEOperation(eOperation);
}
public Object caseEPackage(EPackage ePackage) {
@@ -4815,87 +4861,98 @@
}
public Object caseEParameter(EParameter eParameter) {
- Parameter parameter = UMLFactory.eINSTANCE.createParameter();
- eModelElementToElementMap.put(eParameter, parameter);
+ EOperation eOperation = eParameter.getEOperation();
- Operation operation = (Operation) doSwitch(eParameter
- .getEOperation());
- operation.getOwnedParameters().add(parameter);
+ if (eOperation != null) {
+ Parameter parameter = UMLFactory.eINSTANCE.createParameter();
+ eModelElementToElementMap.put(eParameter, parameter);
- parameter.setName(eParameter.getName());
+ Operation operation = (Operation) doSwitch(eOperation);
+ operation.getOwnedParameters().add(parameter);
- caseETypedElement(eParameter);
+ parameter.setName(eParameter.getName());
- defaultCase(eParameter);
+ caseETypedElement(eParameter);
- return parameter;
+ defaultCase(eParameter);
+
+ return parameter;
+ }
+
+ return super.caseEParameter(eParameter);
}
public Object caseEReference(EReference eReference) {
- Property property = UMLFactory.eINSTANCE.createProperty();
- eModelElementToElementMap.put(eReference, property);
-
EClass eContainingClass = eReference.getEContainingClass();
- Classifier classifier = (Classifier) doSwitch(eContainingClass);
- getOwnedAttributes(classifier).add(property);
- property.setName(eReference.getName());
- property.setAggregation(eReference.isContainment()
- ? AggregationKind.COMPOSITE_LITERAL
- : AggregationKind.NONE_LITERAL);
- property.setIsDerived(eReference.isDerived());
- property.setIsReadOnly(!eReference.isChangeable());
+ if (eContainingClass != null) {
+ Property property = UMLFactory.eINSTANCE.createProperty();
+ eModelElementToElementMap.put(eReference, property);
- caseETypedElement(eReference);
+ Classifier classifier = (Classifier) doSwitch(eContainingClass);
+ getOwnedAttributes(classifier).add(property);
- EReference eOpposite = eReference.getEOpposite();
+ property.setName(eReference.getName());
+ property.setAggregation(eReference.isContainment()
+ ? AggregationKind.COMPOSITE_LITERAL
+ : AggregationKind.NONE_LITERAL);
+ property.setIsDerived(eReference.isDerived());
+ property.setIsReadOnly(!eReference.isChangeable());
- if (eOpposite == null) {
- Association association = (Association) ((org.eclipse.uml2.uml.Package) doSwitch(eContainingClass
- .getEPackage())).createOwnedType(null,
- UMLPackage.Literals.ASSOCIATION);
+ caseETypedElement(eReference);
- property.setAssociation(association);
+ EReference eOpposite = eReference.getEOpposite();
- association.createOwnedEnd(null, classifier);
- } else {
- Property opposite = (Property) doSwitch(eOpposite);
- Association association = opposite.getAssociation();
+ if (eOpposite == null) {
+ Association association = (Association) ((org.eclipse.uml2.uml.Package) doSwitch(eContainingClass
+ .getEPackage())).createOwnedType(null,
+ UMLPackage.Literals.ASSOCIATION);
- if (association == null) {
-
- if (eReference.isContainer()) {
- opposite
- .setAssociation(association = (Association) ((org.eclipse.uml2.uml.Package) doSwitch(eOpposite
- .getEContainingClass().getEPackage()))
- .createOwnedType(null,
- UMLPackage.Literals.ASSOCIATION));
-
- property.setAssociation(association);
- } else {
- property
- .setAssociation(association = (Association) ((org.eclipse.uml2.uml.Package) doSwitch(eContainingClass
- .getEPackage())).createOwnedType(null,
- UMLPackage.Literals.ASSOCIATION));
-
- opposite.setAssociation(association);
- }
- } else {
property.setAssociation(association);
+
+ association.createOwnedEnd(null, classifier);
+ } else {
+ Property opposite = (Property) doSwitch(eOpposite);
+
+ if (opposite != null) {
+ Association association = opposite.getAssociation();
+
+ if (association == null) {
+
+ if (eReference.isContainer()) {
+ opposite
+ .setAssociation(association = (Association) ((org.eclipse.uml2.uml.Package) doSwitch(eOpposite
+ .getEContainingClass().getEPackage()))
+ .createOwnedType(null,
+ UMLPackage.Literals.ASSOCIATION));
+
+ property.setAssociation(association);
+ } else {
+ property
+ .setAssociation(association = (Association) ((org.eclipse.uml2.uml.Package) doSwitch(eContainingClass
+ .getEPackage())).createOwnedType(null,
+ UMLPackage.Literals.ASSOCIATION));
+
+ opposite.setAssociation(association);
+ }
+ } else {
+ property.setAssociation(association);
+ }
+ }
}
+
+ defaultCase(eReference);
+
+ return property;
}
- defaultCase(eReference);
-
- return property;
+ return super.caseEReference(eReference);
}
public Object caseETypedElement(ETypedElement eTypedElement) {
Object element = eModelElementToElementMap.get(eTypedElement);
- if (element == null) {
- return super.caseETypedElement(eTypedElement);
- } else {
+ if (element != null) {
if (element instanceof TypedElement) {
((TypedElement) element).setType(getType(eTypedElement));
@@ -4924,6 +4981,8 @@
return element;
}
+
+ return super.caseETypedElement(eTypedElement);
}
public Object defaultCase(EObject eObject) {