[153968] Improving performance of profile element correlation methods.
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/operations/ProfileOperations.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/operations/ProfileOperations.java
index b2714b5..e7b9dc1 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/operations/ProfileOperations.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/operations/ProfileOperations.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: ProfileOperations.java,v 1.28 2006/05/29 21:10:14 khussey Exp $
+ * $Id: ProfileOperations.java,v 1.28.2.1 2006/08/16 18:22:25 khussey Exp $
  */
 package org.eclipse.uml2.uml.internal.operations;
 
@@ -49,7 +49,6 @@
 import org.eclipse.uml2.uml.UMLPlugin;
 import org.eclipse.uml2.uml.VisibilityKind;
 
-import org.eclipse.uml2.uml.util.UMLSwitch;
 import org.eclipse.uml2.uml.util.UMLValidator;
 
 /**
@@ -324,65 +323,51 @@
 		return null;
 	}
 
-	protected static ENamedElement getDefinition(final Profile profile,
-			NamedElement namedElement, final EPackage profileDefinition) {
+	protected static ENamedElement getDefinition(Profile profile,
+			NamedElement namedElement, EPackage profileDefinition) {
 
-		return (ENamedElement) new UMLSwitch() {
+		if (namedElement instanceof Classifier) {
 
-			public Object caseClassifier(Classifier classifier) {
+			if (profileDefinition != null) {
 
-				if (profileDefinition != null) {
+				for (Iterator eClassifiers = profileDefinition
+					.getEClassifiers().iterator(); eClassifiers.hasNext();) {
 
-					for (Iterator eClassifiers = profileDefinition
-						.getEClassifiers().iterator(); eClassifiers.hasNext();) {
+					EClassifier eClassifier = (EClassifier) eClassifiers.next();
+					EAnnotation eAnnotation = eClassifier
+						.getEAnnotation(UMLPackage.eNS_URI);
 
-						EClassifier eClassifier = (EClassifier) eClassifiers
-							.next();
-						EAnnotation eAnnotation = eClassifier
-							.getEAnnotation(UMLPackage.eNS_URI);
+					if (eAnnotation != null
+						&& eAnnotation.getReferences().contains(namedElement)) {
 
-						if (eAnnotation != null
-							&& eAnnotation.getReferences().contains(classifier)) {
-
-							return eClassifier;
-						}
+						return eClassifier;
 					}
 				}
-
-				return null;
 			}
 
-			public Object caseEnumerationLiteral(
-					EnumerationLiteral enumerationLiteral) {
-				Object enumerationDefinition = doSwitch(enumerationLiteral
-					.getEnumeration());
-				return enumerationDefinition instanceof EEnum
-					? ((EEnum) enumerationDefinition)
-						.getEEnumLiteral(enumerationLiteral.getName())
-					: null;
-			}
-
-			public Object caseProperty(Property property) {
-				Object namespaceDefinition = doSwitch(property.getNamespace());
-				return namespaceDefinition instanceof EClass
-					? ((EClass) namespaceDefinition)
-						.getEStructuralFeature(getValidJavaIdentifier(property
-							.getName()))
-					: null;
-			}
-
-			public Object casePackage(org.eclipse.uml2.uml.Package package_) {
-				return package_ == profile
-					? profileDefinition
-					: null;
-			}
-
-			public Object doSwitch(EObject eObject) {
-				return eObject == null
-					? null
-					: super.doSwitch(eObject);
-			}
-		}.doSwitch(namedElement);
+			return null;
+		} else if (namedElement instanceof Property) {
+			ENamedElement namespaceDefinition = getDefinition(profile,
+				namedElement.getNamespace(), profileDefinition);
+			return namespaceDefinition instanceof EClass
+				? ((EClass) namespaceDefinition)
+					.getEStructuralFeature(getValidJavaIdentifier(namedElement
+						.getName()))
+				: null;
+		} else if (namedElement instanceof EnumerationLiteral) {
+			ENamedElement namespaceDefinition = getDefinition(profile,
+				namedElement.getNamespace(), profileDefinition);
+			return namespaceDefinition instanceof EEnum
+				? ((EEnum) namespaceDefinition).getEEnumLiteral(namedElement
+					.getName())
+				: null;
+		} else if (namedElement instanceof org.eclipse.uml2.uml.Package) {
+			return namedElement == profile
+				? profileDefinition
+				: null;
+		} else {
+			return null;
+		}
 	}
 
 	/**
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 62cfd9d..93fb37d 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.3 2006/07/28 21:36:49 khussey Exp $
+ * $Id: UMLUtil.java,v 1.35.2.4 2006/08/16 18:22:25 khussey Exp $
  */
 package org.eclipse.uml2.uml.util;
 
@@ -5982,70 +5982,55 @@
 
 	protected static NamedElement getNamedElement(ENamedElement definition) {
 
-		return (NamedElement) new EcoreSwitch() {
+		if (definition instanceof EClassifier) {
+			EAnnotation eAnnotation = definition
+				.getEAnnotation(UMLPackage.eNS_URI);
 
-			public Object caseEClassifier(EClassifier eClassifier) {
-				EAnnotation eAnnotation = eClassifier
-					.getEAnnotation(UMLPackage.eNS_URI);
+			if (eAnnotation != null) {
+				EList references = eAnnotation.getReferences();
 
-				if (eAnnotation != null) {
-					EList references = eAnnotation.getReferences();
+				if (!references.isEmpty()) {
+					Object reference = references.get(0);
 
-					if (!references.isEmpty()) {
-						Object reference = references.get(0);
-
-						if (reference instanceof Classifier) {
-							return reference;
-						}
+					if (reference instanceof Classifier) {
+						return (NamedElement) reference;
 					}
 				}
-
-				return null;
 			}
 
-			public Object caseEEnumLiteral(EEnumLiteral eEnumLiteral) {
-				Enumeration enumeration = (Enumeration) doSwitch(eEnumLiteral
-					.getEEnum());
-				return enumeration == null
-					? null
-					: enumeration.getOwnedLiteral(eEnumLiteral.getName());
-			}
+			return null;
+		} else if (definition instanceof EStructuralFeature) {
+			org.eclipse.uml2.uml.Class class_ = (org.eclipse.uml2.uml.Class) getNamedElement(((EStructuralFeature) definition)
+				.getEContainingClass());
 
-			public Object caseEStructuralFeature(
-					EStructuralFeature eStructuralFeature) {
-				org.eclipse.uml2.uml.Class class_ = (org.eclipse.uml2.uml.Class) doSwitch(eStructuralFeature
-					.getEContainingClass());
+			if (class_ != null) {
+				String name = definition.getName();
 
-				if (class_ != null) {
-					String name = eStructuralFeature.getName();
+				for (Iterator ownedAttributes = class_.getOwnedAttributes()
+					.iterator(); ownedAttributes.hasNext();) {
 
-					for (Iterator ownedAttributes = class_.getOwnedAttributes()
-						.iterator(); ownedAttributes.hasNext();) {
+					Property ownedAttribute = (Property) ownedAttributes.next();
 
-						Property ownedAttribute = (Property) ownedAttributes
-							.next();
+					if (safeEquals(getValidJavaIdentifier(ownedAttribute
+						.getName()), name)) {
 
-						if (safeEquals(getValidJavaIdentifier(ownedAttribute
-							.getName()), name)) {
-
-							return ownedAttribute;
-						}
+						return ownedAttribute;
 					}
 				}
-
-				return null;
 			}
 
-			public Object caseEPackage(EPackage ePackage) {
-				return getProfile(ePackage);
-			}
-
-			public Object doSwitch(EObject eObject) {
-				return eObject == null
-					? null
-					: super.doSwitch(eObject);
-			}
-		}.doSwitch(definition);
+			return null;
+		} else if (definition instanceof EEnumLiteral) {
+			Enumeration enumeration = (Enumeration) getNamedElement(((EEnumLiteral) definition)
+				.getEEnum());
+			return enumeration == null
+				? null
+				: enumeration.getOwnedLiteral(definition.getName());
+		} else if (definition instanceof EPackage) {
+			return getProfile((EPackage) definition);
+		} else {
+			return null;
+		}
 	}
 
 	protected static Stereotype getStereotype(EClass definition) {
@@ -6095,21 +6080,25 @@
 	public static void setBaseElement(EObject stereotypeApplication,
 			Element element) {
 
-		if (getStereotype(stereotypeApplication) != null) {
+		if (stereotypeApplication != null) {
+			EClass eClass = stereotypeApplication.eClass();
 
-			for (Iterator eAllStructuralFeatures = stereotypeApplication
-				.eClass().getEAllStructuralFeatures().iterator(); eAllStructuralFeatures
-				.hasNext();) {
+			if (getStereotype(eClass) != null) {
 
-				EStructuralFeature eStructuralFeature = (EStructuralFeature) eAllStructuralFeatures
-					.next();
+				for (Iterator eAllStructuralFeatures = eClass
+					.getEAllStructuralFeatures().iterator(); eAllStructuralFeatures
+					.hasNext();) {
 
-				if (eStructuralFeature.getName().startsWith(
-					Extension.METACLASS_ROLE_PREFIX)
-					&& (element == null || eStructuralFeature.getEType()
-						.isInstance(element))) {
+					EStructuralFeature eStructuralFeature = (EStructuralFeature) eAllStructuralFeatures
+						.next();
 
-					stereotypeApplication.eSet(eStructuralFeature, element);
+					if (eStructuralFeature.getName().startsWith(
+						Extension.METACLASS_ROLE_PREFIX)
+						&& (element == null || eStructuralFeature.getEType()
+							.isInstance(element))) {
+
+						stereotypeApplication.eSet(eStructuralFeature, element);
+					}
 				}
 			}
 		}