[141183] Improving handling of expressions by migrating resource handler.
diff --git a/examples/org.eclipse.uml2.examples.uml.ui/src/org/eclipse/uml2/examples/uml/ui/actions/GenerateUML2StereotypesAction.java b/examples/org.eclipse.uml2.examples.uml.ui/src/org/eclipse/uml2/examples/uml/ui/actions/GenerateUML2StereotypesAction.java
index 8de2f74..cffd2b6 100644
--- a/examples/org.eclipse.uml2.examples.uml.ui/src/org/eclipse/uml2/examples/uml/ui/actions/GenerateUML2StereotypesAction.java
+++ b/examples/org.eclipse.uml2.examples.uml.ui/src/org/eclipse/uml2/examples/uml/ui/actions/GenerateUML2StereotypesAction.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: GenerateUML2StereotypesAction.java,v 1.1 2006/04/25 20:58:28 khussey Exp $
+ * $Id: GenerateUML2StereotypesAction.java,v 1.2 2006/05/11 04:16:43 khussey Exp $
  */
 package org.eclipse.uml2.examples.uml.ui.actions;
 
@@ -76,6 +76,22 @@
 							stringExpressionMetaclass, 0, 1).setAggregation(
 							AggregationKind.COMPOSITE_LITERAL);
 
+						Stereotype expressionStereotype = generateOwnedStereotype(
+							profile, "Expression", false); //$NON-NLS-1$
+						org.eclipse.uml2.uml.Class opaqueExpressionMetaclass = getReferencedUMLMetaclass(
+							profile, UMLPackage.Literals.OPAQUE_EXPRESSION);
+						generateExtension(expressionStereotype,
+							opaqueExpressionMetaclass, false);
+						org.eclipse.uml2.uml.Class valueSpecificationMetaclass = getReferencedUMLMetaclass(
+							profile, UMLPackage.Literals.VALUE_SPECIFICATION);
+						generateOwnedAttribute(expressionStereotype,
+							"operand", //$NON-NLS-1$
+							valueSpecificationMetaclass, 0,
+							LiteralUnlimitedNatural.UNLIMITED).setAggregation(
+							AggregationKind.COMPOSITE_LITERAL);
+						generateOwnedAttribute(expressionStereotype, "symbol", //$NON-NLS-1$
+							stringPrimitiveType, 0, 1);
+
 						Stereotype messageStereotype = generateOwnedStereotype(
 							profile, "Message", false); //$NON-NLS-1$
 						org.eclipse.uml2.uml.Class messageMetaclass = getReferencedUMLMetaclass(
@@ -87,6 +103,24 @@
 						generateOwnedAttribute(messageStereotype, "signature", //$NON-NLS-1$
 							namedElementMetaclass, 0, 1);
 
+						Stereotype opaqueExpressionStereotype = generateOwnedStereotype(
+							profile, "OpaqueExpression", false); //$NON-NLS-1$
+						org.eclipse.uml2.uml.Class expressionMetaclass = getReferencedUMLMetaclass(
+							profile, UMLPackage.Literals.EXPRESSION);
+						generateExtension(opaqueExpressionStereotype,
+							expressionMetaclass, false);
+						org.eclipse.uml2.uml.Class behaviorMetaclass = getReferencedUMLMetaclass(
+							profile, UMLPackage.Literals.BEHAVIOR);
+						generateOwnedAttribute(opaqueExpressionStereotype,
+							"behavior", //$NON-NLS-1$
+							behaviorMetaclass, 0, 1);
+						generateOwnedAttribute(opaqueExpressionStereotype,
+							"body", //$NON-NLS-1$
+							stringPrimitiveType, 0, 1);
+						generateOwnedAttribute(opaqueExpressionStereotype,
+							"language", //$NON-NLS-1$
+							stringPrimitiveType, 0, 1);
+
 						Stereotype templateSignatureStereotype = generateOwnedStereotype(
 							profile, "TemplateSignature", false); //$NON-NLS-1$
 						org.eclipse.uml2.uml.Class templateSignatureMetaclass = getReferencedUMLMetaclass(
diff --git a/plugins/org.eclipse.uml2.uml.resources/profiles/UML2.profile.properties b/plugins/org.eclipse.uml2.uml.resources/profiles/UML2.profile.properties
index a77b5d6..38e2cc3 100644
--- a/plugins/org.eclipse.uml2.uml.resources/profiles/UML2.profile.properties
+++ b/plugins/org.eclipse.uml2.uml.resources/profiles/UML2.profile.properties
@@ -7,7 +7,7 @@
 # Contributors: 
 #   IBM - initial API and implementation
 #
-# $Id: UML2.profile.properties,v 1.1 2006/04/25 20:58:30 khussey Exp $
+# $Id: UML2.profile.properties,v 1.2 2006/05/11 04:16:57 khussey Exp $
 
 # NLS_MESSAGEFORMAT_VAR
 
@@ -16,6 +16,8 @@
 UML2__Comment = comment
 UML2__Message = message
 UML2__TemplateSignature = templateSignature
+UML2__Expression = expression
+UML2__OpaqueExpression = opaqueExpression
 
 _label_UML2 = UML2 Profile
 _label_UML2__Action = UML2 Action
@@ -35,3 +37,12 @@
 _label_UML2__TemplateSignature__base_TemplateSignature = Base Template Signature
 _label_UML2__TemplateSignature__nestedSignature = Nested Signature
 _label_UML2__TemplateSignature__nestingSignature = Nesting Signature
+_label_UML2__Expression = UML2 Expression
+_label_UML2__Expression__base_OpaqueExpression = Base Opaque Expression
+_label_UML2__Expression__operand = Operand
+_label_UML2__Expression__symbol = Symbol
+_label_UML2__OpaqueExpression = UML2 Opaque Expression
+_label_UML2__OpaqueExpression__base_Expression = Base Expression
+_label_UML2__OpaqueExpression__behavior = Behavior
+_label_UML2__OpaqueExpression__body = Body
+_label_UML2__OpaqueExpression__language = Language
diff --git a/plugins/org.eclipse.uml2.uml.resources/profiles/UML2.profile.uml b/plugins/org.eclipse.uml2.uml.resources/profiles/UML2.profile.uml
index fe82f1d..03c5e33 100644
--- a/plugins/org.eclipse.uml2.uml.resources/profiles/UML2.profile.uml
+++ b/plugins/org.eclipse.uml2.uml.resources/profiles/UML2.profile.uml
@@ -54,6 +54,33 @@
             <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/2.0.0/UML#//TemplateSignature"/>
           </eStructuralFeatures>
         </eClassifiers>
+        <eClassifiers xmi:type="ecore:EClass" xmi:id="_3Bb8Z-CPEdqoz4RYXIwjlw" name="Expression">
+          <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_3Bb8aOCPEdqoz4RYXIwjlw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="Expression"/>
+          <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_3Bb8aeCPEdqoz4RYXIwjlw" name="base_OpaqueExpression" ordered="false" lowerBound="1">
+            <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/2.0.0/UML#//OpaqueExpression"/>
+          </eStructuralFeatures>
+          <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_3Bb8auCPEdqoz4RYXIwjlw" name="operand" ordered="false" upperBound="-1" containment="true">
+            <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/2.0.0/UML#//ValueSpecification"/>
+          </eStructuralFeatures>
+          <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_3Bb8a-CPEdqoz4RYXIwjlw" name="symbol" ordered="false">
+            <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+          </eStructuralFeatures>
+        </eClassifiers>
+        <eClassifiers xmi:type="ecore:EClass" xmi:id="_3Bb8bOCPEdqoz4RYXIwjlw" name="OpaqueExpression">
+          <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_3Bb8beCPEdqoz4RYXIwjlw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="OpaqueExpression"/>
+          <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_3Bb8buCPEdqoz4RYXIwjlw" name="base_Expression" ordered="false" lowerBound="1">
+            <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/2.0.0/UML#//Expression"/>
+          </eStructuralFeatures>
+          <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_3Bb8b-CPEdqoz4RYXIwjlw" name="behavior" ordered="false">
+            <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/2.0.0/UML#//Behavior"/>
+          </eStructuralFeatures>
+          <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_3Bb8cOCPEdqoz4RYXIwjlw" name="body" ordered="false">
+            <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+          </eStructuralFeatures>
+          <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_3Bb8ceCPEdqoz4RYXIwjlw" name="language" ordered="false">
+            <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+          </eStructuralFeatures>
+        </eClassifiers>
       </contents>
     </eAnnotations>
     <elementImport xmi:type="uml:ElementImport" xmi:id="_elementImport.0">
@@ -147,7 +174,52 @@
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="TemplateSignature_TemplateSignature-extension_TemplateSignature-_lowerValue"/>
       </ownedEnd>
     </packagedElement>
-    <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_VFz_ANSUEdqN9tnr0j3PAQ">
+    <packagedElement xmi:type="uml:Stereotype" xmi:id="Expression" name="Expression">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="Expression-base_OpaqueExpression" name="base_OpaqueExpression" association="OpaqueExpression_Expression">
+        <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#OpaqueExpression"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="Expression-operand" name="operand" aggregation="composite">
+        <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#ValueSpecification"/>
+        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="Expression-operand-_upperValue" value="*"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="Expression-operand-_lowerValue"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="Expression-symbol" name="symbol">
+        <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="Expression-symbol-_upperValue" value="1"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="Expression-symbol-_lowerValue"/>
+      </ownedAttribute>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Extension" xmi:id="OpaqueExpression_Expression" name="OpaqueExpression_Expression" memberEnd="OpaqueExpression_Expression-extension_Expression Expression-base_OpaqueExpression">
+      <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="OpaqueExpression_Expression-extension_Expression" name="extension_Expression" type="Expression" aggregation="composite" association="OpaqueExpression_Expression">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="OpaqueExpression_Expression-extension_Expression-_lowerValue"/>
+      </ownedEnd>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Stereotype" xmi:id="OpaqueExpression" name="OpaqueExpression">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="OpaqueExpression-base_Expression" name="base_Expression" association="Expression_OpaqueExpression">
+        <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Expression"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="OpaqueExpression-behavior" name="behavior">
+        <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Behavior"/>
+        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="OpaqueExpression-behavior-_upperValue" value="1"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="OpaqueExpression-behavior-_lowerValue"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="OpaqueExpression-body" name="body">
+        <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="OpaqueExpression-body-_upperValue" value="1"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="OpaqueExpression-body-_lowerValue"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="OpaqueExpression-language" name="language">
+        <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="OpaqueExpression-language-_upperValue" value="1"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="OpaqueExpression-language-_lowerValue"/>
+      </ownedAttribute>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Extension" xmi:id="Expression_OpaqueExpression" name="Expression_OpaqueExpression" memberEnd="Expression_OpaqueExpression-extension_OpaqueExpression OpaqueExpression-base_Expression">
+      <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="Expression_OpaqueExpression-extension_OpaqueExpression" name="extension_OpaqueExpression" type="OpaqueExpression" aggregation="composite" association="Expression_OpaqueExpression">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="Expression_OpaqueExpression-extension_OpaqueExpression-_lowerValue"/>
+      </ownedEnd>
+    </packagedElement>
+    <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_profileApplication.0">
       <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_VFz_AdSUEdqN9tnr0j3PAQ" source="http://www.eclipse.org/uml2/2.0.0/UML">
         <references xmi:type="ecore:EPackage" href="pathmap://UML_PROFILES/Ecore.profile.uml#_vy-HUYinEdqtvbnfB2L_5w"/>
       </eAnnotations>
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/operations/ElementOperations.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/operations/ElementOperations.java
index 9eadf35..2adfa6d 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/operations/ElementOperations.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/operations/ElementOperations.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: ElementOperations.java,v 1.39 2006/05/09 17:53:38 khussey Exp $
+ * $Id: ElementOperations.java,v 1.40 2006/05/11 04:16:53 khussey Exp $
  */
 package org.eclipse.uml2.uml.internal.operations;
 
@@ -1008,8 +1008,10 @@
 			boolean resolve) {
 		Element owningElement = null;
 
-		for (Element owner = element; (owningElement = (Element) owner.eGet(
-			UMLPackage.Literals.ELEMENT__OWNER, resolve)) != null
+		for (Element owner = element; ((owningElement = (Element) owner.eGet(
+			UMLPackage.Literals.ELEMENT__OWNER, resolve)) == null
+			? owner = owningElement = getBaseElement(owner.eContainer())
+			: owningElement) != null
 			&& !(eClass.isInstance(owningElement));) {
 
 			owner = owner.getOwner();
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/resource/UML22UMLExtendedMetaData.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/resource/UML22UMLExtendedMetaData.java
index 67cc089..fc76b59 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/resource/UML22UMLExtendedMetaData.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/resource/UML22UMLExtendedMetaData.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  * 
- * $Id: UML22UMLExtendedMetaData.java,v 1.1 2006/04/26 15:48:53 khussey Exp $
+ * $Id: UML22UMLExtendedMetaData.java,v 1.2 2006/05/11 04:16:53 khussey Exp $
  */
 package org.eclipse.uml2.uml.resource;
 
@@ -2336,6 +2336,7 @@
 
 			typeMap = new HashMap();
 			typeMap.put(UMLPackage.Literals.INTERACTION, "uml:EventOccurrence"); //$NON-NLS-1$
+			typeMap.put(UMLPackage.Literals.INTERACTION_OPERAND, "uml:EventOccurrence"); //$NON-NLS-1$
 			featureMap = new HashMap();
 			featureMap.put("fragment", typeMap); //$NON-NLS-1$
 			typeToTypeMap.put("uml:Stop", featureMap); //$NON-NLS-1$
@@ -2375,6 +2376,13 @@
 			featureMap = new HashMap();
 			featureMap.put("packagedElement", typeMap); //$NON-NLS-1$
 			typeToTypeMap.put("uml:Permission", featureMap); //$NON-NLS-1$
+
+			typeMap = new HashMap();
+			typeMap.put(UMLPackage.Literals.NAMED_ELEMENT, "uml:OpaqueExpression"); //$NON-NLS-1$
+			featureMap = new HashMap();
+			featureMap.put("mapping", typeMap); //$NON-NLS-1$
+			featureMap.put("selector", typeMap); //$NON-NLS-1$
+			typeToTypeMap.put("uml:Expression", featureMap); //$NON-NLS-1$
 		}
 		
 		return typeToTypeMap;
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 9039a7c..2468c03 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.18 2006/05/11 00:48:42 khussey Exp $
+ * $Id: UML22UMLResourceHandler.java,v 1.19 2006/05/11 04:16:53 khussey Exp $
  */
 package org.eclipse.uml2.uml.resource;
 
@@ -47,6 +47,7 @@
 import org.eclipse.uml2.common.util.UML2Util;
 import org.eclipse.uml2.uml.Action;
 import org.eclipse.uml2.uml.Activity;
+import org.eclipse.uml2.uml.Behavior;
 import org.eclipse.uml2.uml.BehavioralFeature;
 import org.eclipse.uml2.uml.BehavioredClassifier;
 import org.eclipse.uml2.uml.CallBehaviorAction;
@@ -64,6 +65,7 @@
 import org.eclipse.uml2.uml.ExecutionEvent;
 import org.eclipse.uml2.uml.ExecutionOccurrenceSpecification;
 import org.eclipse.uml2.uml.ExecutionSpecification;
+import org.eclipse.uml2.uml.Expression;
 import org.eclipse.uml2.uml.Extension;
 import org.eclipse.uml2.uml.ExtensionEnd;
 import org.eclipse.uml2.uml.FunctionBehavior;
@@ -123,10 +125,16 @@
 
 	protected static final String STEREOTYPE__COMMENT = "Comment"; //$NON-NLS-1$
 
+	protected static final String STEREOTYPE__EXPRESSION = "Expression"; //$NON-NLS-1$
+
 	protected static final String STEREOTYPE__MESSAGE = "Message"; //$NON-NLS-1$
 
+	protected static final String STEREOTYPE__OPAQUE_EXPRESSION = "OpaqueExpression"; //$NON-NLS-1$
+
 	protected static final String STEREOTYPE__TEMPLATE_SIGNATURE = "TemplateSignature"; //$NON-NLS-1$
 
+	protected static final String TAG_DEFINITION__BEHAVIOR = "behavior"; //$NON-NLS-1$
+
 	protected static final String TAG_DEFINITION__BODY = "body"; //$NON-NLS-1$
 
 	protected static final String TAG_DEFINITION__BODY_EXPRESSION = "bodyExpression"; //$NON-NLS-1$
@@ -139,8 +147,12 @@
 
 	protected static final String TAG_DEFINITION__NESTING_SIGNATURE = "nestingSignature"; //$NON-NLS-1$
 
+	protected static final String TAG_DEFINITION__OPERAND = "operand"; //$NON-NLS-1$
+
 	protected static final String TAG_DEFINITION__SIGNATURE = "signature"; //$NON-NLS-1$
 
+	protected static final String TAG_DEFINITION__SYMBOL = "symbol"; //$NON-NLS-1$
+
 	protected AnyType getExtension(XMLResource resource, EObject eObject) {
 		return (AnyType) resource.getEObjectToExtensionMap().get(eObject);
 	}
@@ -561,6 +573,55 @@
 				return executionOccurrenceSpecification;
 			}
 
+			public Object caseExpression(Expression expression) {
+				AnyType extension = getExtension(resource, expression);
+
+				if (extension != null) {
+					Stereotype stereotype = getUML2Stereotype(expression,
+						STEREOTYPE__OPAQUE_EXPRESSION);
+
+					Object value = getValue(extension.getAnyAttribute(),
+						"behavior", true); //$NON-NLS-1$
+
+					if (value instanceof String) {
+						EObject eObject = resource.getEObject((String) value);
+
+						if (eObject instanceof Behavior) {
+							UMLUtil.setTaggedValue(expression, stereotype,
+								TAG_DEFINITION__BEHAVIOR, eObject);
+						}
+					}
+
+					value = getValue(extension.getAnyAttribute(), "body", true); //$NON-NLS-1$
+
+					if (value instanceof String) {
+						UMLUtil.setTaggedValue(expression, stereotype,
+							TAG_DEFINITION__BODY, value);
+					}
+
+					value = getValue(extension.getMixed(), "body", true); //$NON-NLS-1$
+
+					if (value instanceof AnyType) {
+						value = getValue(((AnyType) value).getMixed(), "text"); //$NON-NLS-1$
+
+						if (value instanceof String) {
+							UMLUtil.setTaggedValue(expression, stereotype,
+								TAG_DEFINITION__BODY, value);
+						}
+					}
+
+					value = getValue(extension.getAnyAttribute(),
+						"language", true); //$NON-NLS-1$
+
+					if (value instanceof String) {
+						UMLUtil.setTaggedValue(expression, stereotype,
+							TAG_DEFINITION__LANGUAGE, value);
+					}
+				}
+
+				return super.caseExpression(expression);
+			}
+
 			public Object caseExtensionEnd(ExtensionEnd extensionEnd) {
 				String name = extensionEnd.getName();
 
@@ -1074,6 +1135,38 @@
 					if (value instanceof String) {
 						opaqueExpression.getBodies().add(value);
 					}
+
+					Stereotype stereotype = getUML2Stereotype(opaqueExpression,
+						STEREOTYPE__EXPRESSION);
+
+					Collection values = getValues(extension.getMixed(),
+						"operand", true); //$NON-NLS-1$
+
+					if (!values.isEmpty()) {
+
+						if (UMLUtil.safeApplyStereotype(opaqueExpression,
+							stereotype) != null) {
+
+							EList operands = (EList) opaqueExpression.getValue(
+								stereotype, TAG_DEFINITION__OPERAND);
+
+							for (Iterator v = values.iterator(); v.hasNext();) {
+								value = v.next();
+
+								if (value instanceof ValueSpecification) {
+									operands.add(value);
+								}
+							}
+						}
+					}
+
+					value = getValue(extension.getAnyAttribute(),
+						"symbol", true); //$NON-NLS-1$
+
+					if (value instanceof String) {
+						UMLUtil.setTaggedValue(opaqueExpression, stereotype,
+							TAG_DEFINITION__SYMBOL, value);
+					}
 				}
 
 				return super.caseOpaqueExpression(opaqueExpression);